[Gelöst] Entwickler-Lizenz und wechselnde Unique ID

21. Januar 2009 09:56

Hallo zusammen,

wenn ihr in Dynamics NAV z.B. eine neue Global Variable erstellt, erhält diese im Property "ID" eine Nummer wie z.B. 1116500000.

Jedesmal wenn wir einen neue Entwickler-Lizenz erhalten, ändert sich aber diese Unique ID.
Mit der gestrigen Lizenz werden neue Global Variables mit der Nummer 1116500000 erstellt.
Heute habe ich die neue Lizenz erhalten und nun werden Global Variables mit der Nummer 1117900000 erstellt.
Dabei handelt es sich aber nicht etwas um eine komplett neue Lizenz. Die Lizenz wurde nur erneuert oder um ein paar Granules erweitert.

Das Ganze ist eigentlich nicht weiter tragisch, solange es sich nicht um Global oder Local Textconstants handelt!!!

Alle Übersetzungen sind nämlich an die oben erwähnten Unique IDs gekoppelt. Das heisst, wenn ich eine Übersetzung mit der Unique ID 1116500000 erstelle, die Übersetzung exportiere und in einer anderen Datenbank mit demselben Objektstand einlese, dann werden die Übersetzungen am richtigen Ort platziert. Hat aber die Global Variable die Unique ID 1117900000, verliert man im besten Fall die Übersetzung. Im schlechtesten Fall wird die Übersetzung einer komplett anderen Global Variable zugeteilt.

Diese Problematik tritt meisten bei Versionenwechsel auf, wenn man z.B. Objekte nicht merged (oder mergen kann) und den Code manuell nachführen muss. In diesen Fällen gehen dann wie beschrieben die Übersetzungen verloren oder werden sogar falsch zugeteilt.

Habt ihr diese Probleme auch schon gehabt und wie geht ihr damit um?
Gibt es Lösungen? Ich kann mich schwach erinnern, dass Microsoft eine "Pfahlbauer"-Methode vorschlug, indem man in der Codeunit 1 fix die zu verwendende Unique ID angibt.

Vielen Dank für Eure Hinweise, Beno.
Zuletzt geändert von beno am 18. Februar 2009 17:04, insgesamt 2-mal geändert.

Re: Entwickler-Lizenz und wechselnde Unique ID

21. Januar 2009 10:24

Ihr könnt diesen UID-Offset selber festlegen:

Definiert in der Codeunit 1 eine Funktion GetUidOffset mit der ID 212122, welche euch die UID als Integer zurückgibt, z. B.
Code:
GetUidOffset() : Integer
EXIT(1116500000);

Re: Entwickler-Lizenz und wechselnde Unique ID

21. Januar 2009 10:36

Hallo Timo,

vielen Dank für die Information.

So etwas in dieser Richtung hatte ich noch in Erinnerung.

Darf dies aber nur in der Entwicklungsumgebung realisiert werden oder kann die geänderte Codeunit 1 auch an die Kunden ausgeliefert werden?

Gruss, Beno.

Re: Entwickler-Lizenz und wechselnde Unique ID

21. Januar 2009 10:40

beno hat geschrieben:Darf dies aber nur in der Entwicklungsumgebung realisiert werden oder kann die geänderte Codeunit 1 auch an die Kunden ausgeliefert werden?

Wenn der Kunde selber auch programmiert und nicht in eure IDs verwenden darf/soll, dann müsst ihr entweder die Funktion aus der Codeunit 1 löschen oder besser einen anderen Offset als Rückgabewert eintragen.

Re: Entwickler-Lizenz und wechselnde Unique ID

21. Januar 2009 11:03

In unserem Fall entwickeln die Kunden nicht. Das heisst, unsere UID ist für alle gleich.

Ich habe aber trotzdem noch ein paar Fragen dazu:

1. Wenn der Kunde nicht entwickelt, könnte ich also die angepasste Codeunit 1 auch an die Kunden ausliefern ohne dass dies im produktiven Einsatz Konsequenzen hat?
Mir geht es nur darum, dass es ja gut möglich ist, dass die Codeunit 1 ausgeliefert werden muss, weil Anpassungen nötig waren. Dabei kann sehr gut vergessen gehen, dass man ja die von Dir
erwähnte Anpassung eingebaut hat und diese nicht entfernt. Es wäre also gut, wenn man diese Anpassung drin lassen könnte.
2. Darf irgendeine Unique ID verwendet werden oder muss es die aktuell zugeteilte sein?
3. Was macht man, wenn die Unique ID ändert, respektive wie bringt man die „alten“ Unique IDs auf den neuen Bereich?
4. Gibt es noch „smartere“ Lösungen?

Gruss, Beno.

Re: Entwickler-Lizenz und wechselnde Unique ID

21. Januar 2009 12:31

beno hat geschrieben:1. Wenn der Kunde nicht entwickelt, könnte ich also die angepasste Codeunit 1 auch an die Kunden ausliefern ohne dass dies im produktiven Einsatz Konsequenzen hat?
Mir geht es nur darum, dass es ja gut möglich ist, dass die Codeunit 1 ausgeliefert werden muss, weil Anpassungen nötig waren. Dabei kann sehr gut vergessen gehen, dass man ja die von Dir
erwähnte Anpassung eingebaut hat und diese nicht entfernt. Es wäre also gut, wenn man diese Anpassung drin lassen könnte.
Die Funktion darf getrost in der Codeunit verbleiben und hat keinerlei Auswirkungen auf die restliche Anwendung.

beno hat geschrieben:2. Darf irgendeine Unique ID verwendet werden oder muss es die aktuell zugeteilte sein?
Prinzipiell darfst du jede beliebige ID nehmen.
Wir verwenden in unseren Branchenlösungen z. B. den Objektnummernbereich, welcher der Lösung zugeteilt wurde.
In Kundenprojekten stellen wir dann auf ID 50000 um.

beno hat geschrieben:3. Was macht man, wenn die Unique ID ändert, respektive wie bringt man die „alten“ Unique IDs auf den neuen Bereich?
Die Funktionen und Variablen müssen neu angelegt werden.
Einfacher Trick: In dem jeweiligen Objekt einfach alle Variablen ausschneiden und wieder einfügen (Strg+X, Strg+V).
Das Gleiche für die Textkonstanten.
Ausnahme: Funktionen, hier musst du die vorhandenen Funktionen kopieren, einfügen und die alten löschen, da sonst die alten IDs wiederverwendet werden.

beno hat geschrieben:4. Gibt es noch „smartere“ Lösungen?
Mir ist kein einfacherer Weg bekannt.