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:
- Některé typy AOT elementů nemají žádnou odpovídající hodnotu ve výčtu UtilElementType.
- 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 |