Typy AOT elementů v AX2012

Jak asi víte, Dynamics AX 2012 ukládá data o aplikačních objektech do databáze, namísto .aod souborů používaných dříve. Také přidala pár elementů do AOT – formulářové části, projekty Visual Studia a podobně.

Ve starších verzích jste mohli vidět a dotazovat se na informace o objektech v AOT v tabulce UtilElements (a pár souvisejících tabulkách). V AX2012 je k dispozici nová sada tabulek, s tabulkou SysModelElement zhruba odpovídající tabulce UtilElements. Nicméně tabulka UtilElements nebyla odstraněna.

Takže, v čem je rozdíl?

Ve skutečnosti není ani SysModelElement, ani UtilElements skutečná tabulka – obě jsou pouze pohledy (views) definované v databázi AX. SysModelElement jednoduše zobrazuje data z tabulky ModelElement, zatímco pohled UtilElements je mnohem komplikovanější a krom ModelElement používá několik dalších tabulek (to je důvod, proč je tak pomalý). Tento pohled pouze simuluje to, jak tabulka UtilElements vypadala v předchozích verzích. Zajímají-li vás detaily, podívejte se na design onoho pohledu v databázi.

Můžete si všimnout rozdílu mezi UtilElements a SysModelElement v tom, jak reprezentují typ elementu. UtilElements obsahuje pole recordType, jehož typem je výčet UtilElementType. Naopak pole ElementType v SysModelElement je relace na tabulku SysModelElementType, což je ve skutečnosti opět pohled. Pole ElementType z tabulky ElementTypes je při vytváření pohledu mapováno na SysModelElementType.RecId, takže reference v AX vypadá jako obvyklý umělý klíč (surrogate key).

Pro všechna ID z výčtu UtilElementType existuje odpovídající záznam v tabulce SysModelElementType – například UtilElementType::Class má ID 45 a v SysModelElementType existuje záznam s RecId 45 and jménem “Class”. Ale pokud se na to podíváte podrobněji, zjistíte, že SysModelElementType obsahuje více hodnot než UtilElementType, což znamená dvě důležité věci:

  1. Některé typy AOT elementů nemají žádnou odpovídající hodnotu ve výčtu UtilElementType.
  2. Tabulka UtilElements neobsahuje všechny typy elementů.

Většinou se tím nemusítwe příliš trápit. Ale nemůžete čekat, že najdete v UtilElements informace například o událostech (events). Nebo můžete při práci s některými instancemi TreeNode dostat chyby jako “Method ‘UtilElement’ is not supported for treenode (Path: …)”, protože pro ně neexistuje platné mapování do UtilElementType.

Pro úplnost, zde je seznam všech typů v tabulce SysModelElementType, které chybí ve výčtu UtilElementType:

6 WorkflowProcess
8 SysXal
10 LegacyMenu
39 LegacyFeatureKey
52 WebReport
77 CompositeQueryNode
80 SecurityTask
83 PartReference
96 Event
97 EventHandler
100 CueReference
104 VisualStudioProjectFolder
105 VisualStudioProjectFile
106 InfoPartLayout
107 InfoPartGroup
108 InfoPartField
109 InfoPartAction
110 MenuItem
111 MenuSeparator
112 MenuReference
114 VisualStudioProjectType
116 EventHandlerMethod
120 FormMethod
121 VisualStudioProjectLink
122 SubMenu
123 SubWebMenu
124 SubWebModule
125 FormDesign
126 FormControl
143 FormDataSources
144 SecurityPermissionSet