AX7 – Tabellen-ID und Feld-ID

Wenn du im neuen Microsoft Dynamics AX entwickelst und auch debuggst, wirst du sicher früher oder später mit der Frage konfrontiert sein, zu welcher Tabelle bzw. welchem Tabellenfeld eine entsprechende Table ID / Field ID gehört. Unter AX 2012 wurden diese Kennziffern in den Properties des AOT-Knotens angezeigt. Gespeichert wurde diese Information in der Model-Datenbank. Das hat sich mit AX7 geändert.

Wenn man andersrum die ID z. B. der Tabelle CustTable oder deren Feld AccountNum wissen möchte, kann man auch X++ verwenden, etwa so

info(strFmt('%1', tableNum(CustTable)));
info(strFmt('%1', fieldNum(CustTable, AccountNum)));

Daran hat sich auch nichts geändert. Es gibt Daten, die solche IDs referenzieren – ein anschauliches Beispiel sind die Dokument-Referenzen (die Anhänge, die überall im System zu finden sind), die eben entsprechend verschiedene Entitäten verknüpfen können. Wenn man gespeicherten Daten auf den Grund gehen möchte, muss man eben den umgekehrten Weg einschlagen. Das geht auch immer noch per X++

info(tableId2Name(10347));
info(fieldId2Name(10347, 1));

Was macht man aber, wenn man nicht in der Lage ist, X++-Code auszuführen oder das auch einfach nicht möchte, weil es auch schneller geht oder man kein Visual Studio zur Hand hat? 🙂
Unter AX 2012 habe ich dafür in der Regel die (virtuelle) Tabelle UtilIdElements verwendet und eine SimpleList-Form vorgehalten, die eben diese als Datenquelle hatte. Die Tabelle gibt es momentan zwar noch, wird aber offenkundig nicht mehr befüllt.
Es gibt jetzt eine sogar noch einfachere Lösung für das Problem. Die Mappings sind jetzt in der AX-Datenbank gespeichert, was enorme Vorteile mit sich bringt. Das ist nämlich einer der Faktoren, die dazu führen, dass man jetzt Datenbank-Sicherungen zwischen Systemen austauschen kann! Falls du das noch nicht wusstest – ja, das geht jetzt (es gibt natürlich ein paar Dinge, die man beachten muss)!

Die neuen Tabellen, die man nach den benötigten Informationen befragen kann, sind
TABLEIDTABLE
TABLEFIELDIDTABLE

Leider kann man diese nicht mit dem Table Browser ansehen, aber SQL Server Management Studio erlaubt den Zugriff. Beispielhaft nachfolgend die Befehle in T-SQL für die Abfrage nach der Tabelle CustTable (ID 10347 in meiner Umgebung) und deren Feld AccountNum (ID 1).

SELECT [ID]
      ,[NAME]
      ,[RECVERSION]
      ,[RECID]
  FROM [AxDBRAIN].[dbo].[TABLEIDTABLE]
  WHERE [ID] = 10347
SELECT [ROOTID]
      ,[TABLEID]
      ,[ID]
      ,[NAME]
      ,[RECVERSION]
      ,[RECID]
  FROM [AxDBRAIN].[dbo].[TABLEFIELDIDTABLE]
  WHERE [TABLEID] = 10347
  AND [ID] = 1

Das Feld ROOTID der Felder-Tabelle steht im Zusammenhang mit Vererbung auf Tabellenebene. Es gibt auch noch ein paar andere Tabellen, deren Namen mit TABLE starten und die helfen könnten, wenn man bestimmte, ähnliche Informationen benötigt.

TABLEIDTABLE

Schreibe einen Kommentar