2013-01-16 2 views
6

La mia domanda è un po 'complessa e iam nuova a OpenERP.Aggiunta di ID esterni a Partner in OpenERP con un nuovo modulo

Ho un database esterno e un OpenERP. quello esterno non è PostgreSQL. Il mio lavoro è che ho bisogno di sincronizzare i partner nei due database. Quello esterno è il più importante. Ciò significa che se i dati di una persona esterna cambiano, lo fa anche OpenERp, ma se i dati di OpenERP non cambiano nulla cambia su quello esterno.

  • posso accedere al database esterno, e l'utilizzo di RCP XML devo accesso a OpenERP di pure.

  • Posso importare dati dal database esterno semplicemente con XML RCP ma il problema è la sincronizzazione.

  • Non posso semplicemente INSERIRE il partner modificato ed eliminare quello vecchio
    perché non ho modo di identificare quello vecchio.

  • Ho bisogno di AGGIORNARLO. Ma poi ho bisogno di un ID che dice quale è quale. e ID esterno.

  • A mia conoscenza OpenERP può gestire ID esterni.

Come funziona? e come posso aggiungere un ID esterno al mio res.partner usando questo?

Mi è stato detto che non posso creare un nuovo modulo solo per questo ho bisogno di utilizzare l'ID interno funziona.

risposta

5

Risposta breve: avere uno sguardo al modo in cui il lavoro CSV di importazione e di esportazione guidata - esportare automaticamente un record crea un identificatore esterno in modo da poter reimportare lo stesso CSV e il record sarà aggiornato, piuttosto che ricreato.

Risposta lunga:
OpenERP memorizza gli ID esterni nella tabella ir.model.data, cui è possibile accedere nell'interfaccia utente tramite il menu Impostazioni 1. Questa semplice tabella mappa un "Identificatore esterno" nel modulo module_name.record_identifier in una coppia (model,res_id) che punta alla tabella e alla riga effettive.

Questi ID esterni vengono utilizzati per trovare la riga locale del database che corrisponde a un record creato da una fonte esterna: un modulo (da cui lo spazio dei nomi basato su module) o un file CSV importato, in genere.

Ad esempio l'identificatore esterno base.EUR si associa ai record del database che contiene la valuta EUR nel database ed è di proprietà del modulo base.

A partire dalla versione 6.1, OpenERP crea automaticamente nuovi identificatori esterni per tutti i record che sono OpenERP esportati utilizzando la barra laterale Export guidata: sono esportati in una colonna CSV denominato id.

E se una tale colonna id è presente in un file CSV che è importato tramite la procedura guidataImport, OpenERP sarà anche creare un identificatore esterno per ricordarlo. E quando l'identificatore esterno esiste già, il record viene aggiornato anziché creato.

In teoria, tutto ciò che dovete fare è produrre un file CSV corretta con una colonna in più id2 dal database master (si potrebbe anche usare l'attuale DB ID), e importarlo in OpenERP. Dovresti quindi essere in grado di reimportare le versioni aggiornate di questo file CSV ogni volta che vuoi.

Riferimenti:

  • Il importazione e esportazione maghi fondamentalmente chiamare i metodi API export_data e import_data, in modo da poter script di questo tramite XML-RPC, se necessario.
  • Il modello ir.model.data memorizza gli identificatori esterni (storicamente chiamati ID XML perché corrisponde al campo id di record XML nei file di dati del modulo).

1 In OpenERP 6.1 si trova sotto Impostazioni> Configurazione> Sequenze & identificatori> identificatori esterni, e in OpenERP versione 7 sotto Impostazioni> tecnici> Sequenze & identificatori> identificatori esterni .

2 può essere qualsiasi stringa senza carattere punto "." in esso: verrà memorizzato in uno speciale spazio dei nomi del modulo __export__)

+0

il contenuto della colonna 'id' per riga può essere anche un id di riga esterna? o che id è impostato da OpenERP? – NaGeL182

0

Aggiungere un campo intero nella tabella del partner res per la memorizzazione dell'ID esterno su entrambi i database. Quando i dati vengono recuperati dal server esterno e aggiunti al database openerp, archiviare l'id esterno nel record del partner res nel server locale e anche salvare l'id del record del partner appena creato nel record del partner del server esterno. Quindi la prossima volta che il record del partner esterno viene aggiornato, possiamo cercare l'id esterno nel nostro server locale e aggiornare quel record. Si prega di controllare il modulo openerp base_sincronizzazione e leggere i codici, che saranno utili per voi.

+0

ma l'aggiunta di un campo significa fare un addon, non è vero? Inoltre non posso trovare alcuna base_synchronization in 7.0 ... – NaGeL182

+0

Nevermind. Nuovi ordini da sopra: ho bisogno di crare un modulo OpenERP che si occupa di syncro. grazie per l'aiuto comunque. – NaGeL182

+1

@Anoma: tenere traccia degli identificatori esterni per i record del database è una funzione incorporata del framework OpenERP, non c'è bisogno di colonne aggiuntive o di un modulo per questo. Ad esempio, funziona immediatamente per i dati del modulo o file CSV importati/esportati. – odony

3

contenuto nella colonna 'id' di ogni riga può essere ancora un ID riga esterna? o che id è impostato da OpenERP?

L'ID è impostato da OpenERP se non è presente, altrimenti utilizza qualsiasi ID di riga esterna inserito.

non vedo un ir.model.data a 7,0

ir.model.data è lì in versione 7.0 - come stavi cercando per esso?

né un Esportazione guidata barra laterale.

Alla versione 7, ora è necessario abilitare l'esportazione/importazione.

http://forum.openerp.com/forum/topic35830.html

+0

è fantastico! che se io uso solo il modulo di importazione con CSV e lo automatizzo posso sincronizzare due database diversi! Grazie! – NaGeL182

+0

Ho finalmente trovato ir_model_data, grazie. –

Problemi correlati