[gelöst] Primärschlüssel ändern / ValidateTableRelation

15. November 2008 16:34

Hallo liebe Navision-Gemeinde,

für ein Projekt an der Uni müssen wir in Navision einige Tabellen und Formulare erstellen, die unter anderem auch in Beziehung stehen.
Nachdem wir schon zich Probleme gelöst haben, stehen wir erneut vor einem scheinbar unüberwindbarem Problem und sind dieses mal echt ratlos.

Wir haben in Navision zwei Tabellen angelegt, von denen die Primärschlüsselspalten der ersten Tabelle im Fremd- und Primärschlüssel der zweiten Tabelle vorkommt. Dazu haben wir in der zweiten Tabelle bei den Fremdschlüsselspalten die Eigenschaft TableRelation verwendet. ValidateTableRelation steht auf Yes.

Insgesamt haben wir einen fünfteiligen Schlüssel in der ersten Tabelle (5 Integer Werte) und einen sechsteiligen Schlüssel in der zweiten Tabelle (die 5 Primärschlüssel aus Tabelle 1 plus einen weiteren Primärschlüssel aus Tabelle x, somit ensteht eine m:n-Beziehung zwischen Tablle 1 und Tabelle x).

Alles funktioniert wunderbar, außer:
1. Wenn wir in Tabelle 1 einen neuen Datensatz z.B. mit den Schlüsselwerten <10000, 0, 0, 0, 0> eintragen und diesen nun in z.B. <10000,20000,0,0,0> umbenennen möchten, kommt eine Fehlermeldung:
"You cannot rename a record because the old value of the field below is '0',
Field: g2
Table: Table1"
Oder zu Deutsch: "Sie können einen Datensatz nicht umbenennen, da der alte Wert des folgenden Feldes '0' beträgt."
2. Wenn wir in Tabelle 1 einen neuen Datensatz z.B. mit den Schlüsselwerten <20,30,0,0,0> eintragen und diesen nun z.B. in <20,0,0,0,0> umbenennen möchten, kommt eine analoge Fehlermeldung:
"Sie können einen Datensatz nicht umbenennen, da der neue Wert des folgenden Feldes '0' beträgt." bzw "You cannot rename a record because the new value of the field below is '0'".

Das erstmalige Eintragen der Datensätze klappt. Auch das Ändern eines Datensatzes mit Schlüssel <20,30,0,0,0> in <20,100,0,0,0> oder eines Datensatzes mit Schlüssel <50,0,0,0,0> in <60,0,0,0,0> klappt problemlos.

Bei den anderen Primärschlüsselspalten haben wir das gleiche Problem, dass sich der Schlüssel von 0 nicht in eine Zahl>0 und von einer Zahl>0 nicht in 0 ändern lässt.

Das Problem konnten wir eingrenzen: Wenn wir ValidateTableRelation in der Tabelle 2 auf No setzen, funktioniert das Umbenennen. Natürlich ändert er aber dann die Datensatze in der Detailtabelle nicht entsprechend um.

Jemand 'ne Idee?

Gruß,
Christoph
Zuletzt geändert von Cepe am 25. November 2008 15:40, insgesamt 1-mal geändert.

Re: Primärschlüssel ändern / ValidateTableRelation

15. November 2008 17:10

Cepe hat geschrieben:Wir haben in Navision zwei Tabellen angelegt, von denen die Primärschlüsselspalten der ersten Tabelle im Fremd- und Primärschlüssel der zweiten Tabelle vorkommt. Dazu haben wir in der zweiten Tabelle bei den Fremdschlüsselspalten die Eigenschaft TableRelation verwendet. ValidateTableRelation steht auf Yes.


Hier ist der Knackpunkt:
TableRelation besagt (normalerweise): Du hast ein Feld in Tabelle 2, welches auf ein Feld in einer Tabelle 1 verweist. Mehr nicht. Ändert sich das Feld in Tabelle 1, wird die Änderung auf Tabelle 2 übertragen.

Eine TableRelation kann aber nicht dafür verwendet werden, auf einen mehrteiligen Primärschlüssel zu verweisen (Ausnahme: alle anderen Felder erhalten konstante Werte).
Die TableRelation denkt nur ein-Feld-weise.
Oder anders ausgedrückt: Eine TableRelation kannst du nur dann für ein Feld verwenden, wenn der Primärschlüssel in Tabelle 1 aus nur einem Feld besteht!

Das heißt: Raus mit der TableRelation in Tabelle 2 und die Fremdschlüsselbeziehung händisch nachbauen, indem ihr die Tabellentrigger in Tabelle 1 und 2 entsprechend ausprogrammiert.

PS
Einfaches Beispiel zur Funktionsweise von TableRelations:
In der der Artikelpostentabelle hat das Feld "Item No." eine TableRelation auf die Tabelle Item.
Durch diese TableRelation (und die gefüllte LookupFormID in der Artikeltabelle) hat das Feld automatisch einen Lookup. Wenn ich diesen betätige, lande ich in der Artikelübersicht automatisch auf dem gleichen Artikel, der auch in meinem Artikelposten steht.
Nun zurück zu eurem Tabellekonstrukt: Wenn ihr in eurer Tabelle 2 auf einem beliebigen der ersten fünf Primärschlüsselfelder steht und den Lookup auführt - wo landet ihr dann?? Woher soll NAV wissen, wo ihr landen möchtet?
Die TableRelation des einen Primärschlüsselfeldes weiß von den anderen TableRelations der anderen Primärschlüsselfeldern nichts.

Re: Primärschlüssel ändern / ValidateTableRelation

25. November 2008 15:40

Hi Natalie,

hat auf Anhieb geklappt! Vielen Dank!!!