2013-01-16 24 views
6

Moje pytanie jest nieco skomplikowane i jest nowością w odniesieniu do OpenERP.Dodawanie zewnętrznych identyfikatorów do partnerów w OpenERP przy użyciu nowego modułu

Mam zewnętrzną bazę danych i OpenERP. zewnętrzny nie jest PostgreSQL. Moja praca polega na tym, że muszę zsynchronizować partnerów w dwóch bazach danych. Zewnętrzna jest ważniejsza. Oznacza to, że jeśli dane zewnętrzne ulegną zmianie, to robi to OpenERp, ale jeśli dane OpenERP nic nie zmieniają, to zmienia się on na zewnętrznym.

  • mogę uzyskać dostęp do zewnętrznej bazy danych, a przy użyciu XML RCP mam Acces do OpenERP, jak również.

  • Mogę importować dane z zewnętrznej bazy danych po prostu za pomocą XML RCP, ale problemem jest synchronizacja.

  • Nie mogę wstawić zmodyfikowany partnera i usunąć stary
    ponieważ nie mam możliwości, aby zidentyfikować starą.

  • Muszę ZAKTUALIZOWAĆ to. Ale wtedy potrzebuję identyfikatora, który mówi, który jest który. i zewnętrzny identyfikator.

  • Zgodnie z moją wiedzą OpenERP może obsługiwać zewnętrzne identyfikatory.

Jak to działa? i jak mogę dodać zewnętrzny identyfikator do mojego res.partner, używając tego?

Powiedziano mi, że nie mogę utworzyć nowego modułu do tego samego Potrzebuję użyć wewnętrznego identyfikatora.

Odpowiedz

5

Krótka odpowiedź: spojrzeć na sposób pracy CSV Import i kreatora Export - automatycznie wywozu rekord tworzy identyfikator numer zewnętrzny więc można ponownie zaimportować ten sam CSV i rekord zostanie zaktualizowany zamiast ponownie utworzone.

Długa odpowiedź:
OpenERP przechowuje identyfikatory zewnętrznych w tabeli ir.model.data, dzięki którym można uzyskać dostęp do interfejsu użytkownika za pośrednictwem menu Ustawienia 1. Ta prosta tabela mapuje "Zewnętrzny identyfikator" w postaci module_name.record_identifier na parę (model,res_id), która wskazuje na rzeczywistą tabelę i wiersz.

Te zewnętrzne identyfikatory służą do odszukiwania lokalnego wiersza bazy danych, który odpowiada rekordowi utworzonemu przez niektóre zewnętrzne źródła: moduł (a więc przestrzeń nazw module) lub zwykle zaimportowany plik CSV.

Na przykład zewnętrzny identyfikator base.EUR mapuje do rekordów bazy danych, które przechowuje walutę EUR w bazie danych i jest własnością modułu base.

Począwszy od wersji 6.1, OpenERP automatycznie tworzy nowe identyfikatory zewnętrznych dla wszystkich rekordów OpenERP które eksportowane pomocą paska Export kreatora: są one eksportowane CSV w kolumnie o nazwie id.

A jeśli taka kolumna id jest obecny w pliku CSV, który jest importowanypoprzez importu kreatora OpenERP będzie również tworzyć zewnętrzny identyfikator, aby go zapamiętać. A gdy zewnętrzny identyfikator już istnieje, rekord jest aktualizowany, a nie tworzony.

W teorii, wszystko co musisz zrobić, to stworzyć odpowiedni plik CSV z dodatkowym id kolumnie 2 od swojej głównej bazy danych (można nawet użyć rzeczywisty identyfikator DB) i importować je w OpenERP. Powinieneś wtedy móc ponownie zaimportować zaktualizowane wersje tego pliku CSV, kiedy tylko chcesz.

Referencje:

  • importu i Export czarodzieje zasadzie wywołać metody API export_data i import_data, więc można ten skrypt poprzez XML-RPC w razie potrzeby.
  • Modelprzechowuje identyfikatory zewnętrzne (historycznie nazywane identyfikatorami XML, ponieważ odpowiada polu id rekordów XML w plikach danych modułu).

1 W OpenERP 6.1 to znajduje się pod Ustawienia> Konfiguracja> Sekwencje & Identyfikatory> Identyfikatory zewnętrzne, aw OpenERP wersji 7 pod Ustawienia> Techniczne> Sekwencje & Identifiers> zewnętrzne identyfikatory .

2 może być dowolnym ciągiem bez kropki znaku w nim „.”: będzie on przechowywany w specjalnej przestrzeni nazw modułu __export__)

+0

zawartość kolumny "id" w wierszu może być nawet identyfikatorem z zewnętrznego wiersza? czy ten identyfikator jest ustawiony przez OpenERP? – NaGeL182

0

Dodaj pole liczby całkowitej w tabeli partnera res do przechowywania zewnętrznego identyfikatora w obu bazach danych. Gdy dane są pobierane z serwera zewnętrznego i dodawane do bazy danych openerp, przechowuj zewnętrzny identyfikator w rekordzie partnera res na serwerze lokalnym, a także zapisz identyfikator nowo utworzonego rekordu partnera w rekordzie partnera zewnętrznego. Następnym razem, gdy rekord partnera zewnętrznego zostanie zaktualizowany, możemy przeszukać zewnętrzny identyfikator na naszym lokalnym serwerze i zaktualizować ten rekord. Proszę sprawdzić moduł base_synchronization i zapoznać się z kodami, które będą dla Ciebie pomocne.

+0

ale dodanie pola oznacza złożenie dodatek, prawda? Również nie mogę znaleźć żadnej bazy_synchronizacji w 7.0 ... – NaGeL182

+0

Nieważne. Nowe zamówienia z góry: muszę utworzyć moduł OpenERP, który zajmuje się synchronizacją. dziękuję ci za pomoc. – NaGeL182

+1

@Anoma: śledzenie zewnętrznych identyfikatorów dla rekordów bazy danych jest wbudowaną funkcją środowiska OpenERP, nie ma potrzeby stosowania dodatkowych kolumn ani modułu do tego. Działa na zasadzie "out-of-the-box" dla danych modułu lub importowanych/eksportowanych plików CSV na przykład. – odony

3

Content „id” kolumny w rzędzie może być nawet zewnętrzny identyfikator rzędu? czy ten identyfikator jest ustawiony przez OpenERP?

Identyfikator jest konfigurowany przez OpenERP, jeśli nie jest obecny, w przeciwnym razie używa dowolnego identyfikatora zewnętrznego rzędu, który tam wstawiłeś.

ja nie widzę ir.model.data w 7,0

ir.model.data istnieje w wersji 7.0 - jak ty szukają dla niego?

ani kreatora eksportu paska bocznego.

W wersji 7 należy włączyć eksportowanie/importowanie.

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

+0

To jest niesamowite! niż gdybym po prostu użył modułu importu z CSV i zautomatyzowałem to mogę zsynchronizować dwie różne bazy danych! Dziękuję Ci! – NaGeL182

+0

W końcu znalazłem ir_model_data, dzięki. –