Monday 9 March 2015

Table Inheritance in AX 2012



Hi All
In Microsoft Dynamics AX 2012, tables can inherit, or extend, from the tables that are situated above them in a hierarchy. A base table contains fields that are common to all tables that derive from it. A derived table inherits these fields, but also contains fields that are unique to its purpose. Each table contains the Support Inheritance and Extends properties, which can be used to control table inheritance.
First we need understand that when we need to apply this inheritance methodology to tables. First we need to identify the Parent table and its siblings like
DataModel
Here ‘Basic Info’ is the Parent table containing fields that are required for its child table i.e. CompnayTable and EmpTable. And these tables have their own fields as well.Now to design a Inheritance pattern we need to consider following important things:

  • We can only apply inheritance on regular tables not on Temp or Memory tables
  • A type discriminator field must be defined on any table inheritance hierarchy created in the AOT. The field must be defined as an int64 type on the root table, with the name of the field set to InstanceRelationType.
  • The InstanceRelationType field of the root table is read-only and stores the TableIDs of record instances; it is populated automatically by Microsoft Dynamics AX 2012.
  • Also we can only set the table properties for the table inheritance only when there are no fields in the table.
  • If these requirements are not met, a compilation error will occur when the table inheritance hierarchy is compiled.
Let create parent Table ‘BasicInfo’
BasicInfo
Setting its SuppourtInheritance Prpoerty to Yes
SupportInhheritane
When you save and compile,it will give following error
ComipleError
For this we need to create a discriminator; name ‘InstanceRelationType’ and of type Int64.Now I have created a field including discriminator
InstanceRelationTYpe
Finally I have set another table property ‘InstanceRelationType’ to ‘InstanceRelationType’  field
InstanceRelationTYpeProperty.jpg
And when I compiled, the error is gone now.
Now we have to create Two child tables
EmpTable:
First I have set the ‘SupportInheritance Property to Yes.
SupportInheritance
Now for the child table to have the parent we need to set the ‘Extends’ property of child table to parent table value like
ExtendsProperty
And finally added all fields.
EmpTable

CompanyTable:
Same as what already we have done for EmpTable
Now when I compile it still give the two errors i.e.
TwoCompilerErrors
Basically these errors indicates that the automatic relation that have been created in the child table,have the same relation name and so it is showing duplicate so for this I have changed the name See below screen shot
ScreenShot (see below)
 FinalScreenShot
And that’s it we have created Parent-child hierarchy table .
Finally, we need to also set the ‘Abstract’ property of the parent table to ‘Yes’ and for this we need to understand below.
Abstract versus concrete tables:
Tables in a table inheritance hierarchy can be defined as either abstract or concrete, depending on whether the table property Abstract is set to Yes or No. Records can only be created for concrete table types. Any attempt to create a record and insert it in an abstract table will result in a run-time error. The position of the table in the inheritance hierarchy does not restrict its ability to be defined as abstrac

No comments:

Post a Comment