Dieser Beitrag bezieht sich auf die Version:
Dynamics AX 2012
Dynamics AX 2012
Sehr guter Post! Danke! Als Anfänger fehlte mir noch der Hinweis, dass beim Index die Eigenschaft "AllowDuplicates" auf No gesetzt werden muss. Ansonsten kann man "AlternateKey" nicht auf Yes setzen. Und in der From unter Grid die "DataSource" auf DmoCarModel |
|
|
|
|
|
|
Mit dem Release von Dynamics AX 2012 konfrontiert Microsoft den erfahrenen AX-Entwickler mit zahlreichen Neuerungen. Einige davon betreffen das Herstellen von Beziehungen (Relations) zwischen Tabellen.
Hatte man in AX 2009 noch die Möglichkeit, die Relations auf einem Extended Datatyp (EDT) festzulegen, so muss dies nun direkt auf den Tabellen erfolgen. Ausserdem sind die Tabellen nun meist so aufgebaut, daß Relations über die sogenannten Surrogate Foreign Keys erfolgen.
Als Surrogate Foreign Key bezeichnet man ein einzelnes Feld, über das sich ein Datensatz eindeutig identifizieren lässt. In vielen Datenbanksystemen ist dies eine vom System generierte Nummer die in der jeweiligen Benutzeroberfläche oft gar nicht angezeigt wird, in AX wäre dies beispielsweise die RecId. Schon in früheren Versionen von Dynamics AX wurde dieses Feld dazu verwendet, Beziehungen zwischen Tabellen herzustellen, mit Dynamics AX 2012 sollen sämtliche Relations über die RecId abgebildet werden.
Neben den Surrogate Foreign Keys gibt es die Natural Foreign Keys, über die sich ein Datensatz ebenfalls eindeutig identifizieren lässt, allerdings in einer auch für den Benutzer lesbaren Form. Ausserdem kann ein Natural Foreign Key mehrere Felder beinhalten.
Da sowohl der SurrogateForeign Key als auch der Natural Foreign Key einen Datensatz eindeutig identifizieren, können beide als Primary Key verwendet werden. Die neue Eigenschaft ReplacementKey von Tabellen steuert die Anzeige im AX-Client, unabhängig vom tatsächlichen Primary Key.
Um die Verwendung dieser Keys zu verdeutlichen, möchte ich in Dynamics AX 2012 beispielsweise zwei Tabellen erstellen, in welchen Autohersteller und deren Modelle gespeichert werden sollen.
Die erste Tabelle DmoCarManufacturer enthält nur zwei Felder:
Wenn man sich die Eigenschaften der Tabelle nach der Erstellung ansieht, erkennt man daß AX die Eigenschaft CreateRecIdIndex auf YES gesetzt und als Primary Key und Clustered Index den Wert SurrogateKey eingetragen hat.
Nun erstellt man einen neuen eindeutigen Index über das Feld ManufacturerId und legt diesen über die gleichnamige Eigenschaft als AlternateKey fest.
Danach ist dieser Key auf Tabellenebene als ReplacementKey einzustellen wodurch dieses Feld automatisch der FieldGroup AutoIdentification hinzugefügt wird.
Zusätzlich habe ich noch die Felder ManufacturerId und Name als TitleFields der Tabelle definiert, dies hat aber für die Relaton selbst keine Auswirkung, lediglich das spätere Lookup-Formular wird dadurch benutzerfreundlicher.
Der nächste Schritt ist die Erstellung der zweiten Tabelle DmoCarModel.
Um nun eine Beziehung zur Tabelle DmoCarManufacturer zu erstellen wählt man im Kontextmenü des Knoten Relations Neue Relation und trägt als Tabelle die DmoCarManufacturer ein. Nun kann man über das Kontextmenü dieser neuen Relation Neu > ForeignKey > PrimaryKey-basiert auswählen. Dadurch erstellt AX ein neues Feld mit dem Namen DmoCarManufacturer, abgeleitet vom EDT RefRecId.
Das zweite Feld ModelId lege ich manuell an und soll später die Modellbezeichnung eines Autos beinhalten.
Um nun die Auswirkung dieser Einstellungen darzustellen, erstelle ich auf Basis der Formular-Vorlage Simple List ein Formular für die Tabelle DmoCarModel und ziehe per Drag & Drop das Feld DmoCarManufacturer in ein Grid des Designs. Dadurch wird innerhalb des Grids eine sogenannte ReferenceGroup erstellt. Auch das zweite Feld der Tabelle ModelId ziehe ich per Drag & Drop ins Grid.
Öffne ich nun dieses Formular und erstelle ich einen neuen Datensatz, sieht man daß im Lookup des Feldes DmoCarManufacturer nicht die RecId - welche ja in der Datenbank gespeichert wird - angezeigt wird, sondern die sprechenden Felder Hersteller und Name.
Öffnet man hingegen die Tabelle DmoCarModel über den TableBrowser, wird der Lookup das Feldes DmoCarManufacturer insoferne etwas anders dargestellt, als daß man hier auch die RecId sieht.
Informationen dazu sind natürlich in der MSDN (http://msdn.microsoft.com/en-us/library/aa556809.aspx) zu finden.