AX developers always come across a requirement of showing data from different datasources on the same control though these datasources should be related to each other. The solution to this requirement is to define display methods on the table which you choose to be the control datasource. Display methods are very handy for showing data from related tables.
Consider for example the following tables:
If we need to show CustTable.AccountNum, DirPartyTable.Name and BankGroup.Name fields on the same control let’s say a grid control then we need to define the following display methods on CustTable if we have chosen CustTable as the grid’s datasource.
To retrieve DirPartyTable.Name
To retrieve BankGroup.Name
Now on the grid control, add two StringEdit controls to bind them with the display methods just defined above. Make sure to specify CustTable as the grid’s datasource. Also you must be setting DataMethod property of the StringEdit controls to the name of the respective display methods.
The result is awesome. You have one grid control showing data from different datasources!
Often we do not need to generate the next number sequence manually in X++ since creating records by using forms the system automatically handles number sequence generation by invoking Number Sequence Framework.
However, sometimes we need to generate number sequences manually in X++. The following code helps you to do that:
static void numberSequence(Args _args)
numberSeq = NumberSeq::newGetNum(SMAParameters::numRefSMAServiceObjectId());
serviceObjectTable.ServiceObjectId = numberSeq.num();
NumberSeq is the class in action here. Its static method newGetNum() takes NumberSequenceReference as an input parameter. All you need to do is to find the relevant number sequence reference in your case. Usually there are parm methods defined on Tables which give you the number sequence references.
Conditional relations are used to filter records in parent or related table. We can define conditional relations by specifying fields in a table relation as:
- Field Fixed OR
- Related Field Fixed
Consider a scenario of a call center. The operator’s responsibility is to receive calls and get the orders for a shoe store. The operator first has to determine whether the order is of men’s, women’s or kid’s collection. Once the collection is determined then the operator has to determine which particular shoes the customer is ordering. It would be easier for the operator if the system filters shoes records based on the collection type [Men, Women, Kids]. In this situation conditional relations using a Field Fixed method fits the solution.
First, we will be creating two base enums such that CollectionType is like [Men(0), Women(1), Kids(2)]:
Then we will be creating three tables respectively for Men’s, Women’s and Kids’ collection. Note that all the three tables share the same set of fields:
Then we will be creating the final table for storing Orders. Two important fields must be added to the orders table in order to get benefit from conditional relations:
- ArticleCode – To lookup records into three different collection tables
- CollectionTypeId – To distinguish table relations defined for the collection tables
You can see in the picture how three relations have been defined. Each relation contains two fields, one used for determining the collection type and the other mapping to the respective collection’s Article Code field. Once all this is done, then now the system filters records for the user depending on the collection type the user has selected. See below how the system shows records from the men’s collection when CollectionType is set to ‘Men’:
Below is an example of CollectionType set to ‘Women’:
Below is an example of CollectionType set to ‘Kids’: