/ Dynamics

[X++] parameters in SysOperationGroupAttribute LabelType

When it comes to SysOperationFramework (also known as BusinessOperationFramework) dialogs, groups can be defined in the corresponding DataContract class.
(I masked the object names cause the codes comes from my current implementation for a customer, so don't wonder about the names.)
Best Practice is to define the groups in the classDeclaration:

#define.GroupMyFirstGroup('FirstGroup')
#define.GroupMyFirstGroupLabel("@SYS96096")
#define.GroupMyFirstGroupOrderKey('10')
#define.GroupMySecondGroup('SecondGroup')
#define.GroupMySecondGroupLabel("@SYS96096")
#define.GroupMySecondGroupOrderKey('11')
[
    DataContractAttribute,
    SysOperationGroupAttribute(#GroupMyFirstGroup, #GroupMyFirstGroupLabel, #GroupMyFirstGroupOrderKey),
    SysOperationGroupAttribute(#GroupMySecondGroup, #GroupMySecondGroupLabel, #GroupMySecondGroupOrderKey),
    SysOperationContractProcessingAttribute(classStr(MyUIBuilderClass), SysOperationDataContractProcessingMode::CreateSeparateUIBuilderForEachContract)
]
class MyContract
{
    str                                 packedQuery;
    PriceDiscAccountRelation            accountRelation;
    ItemId                              itemId;
    // ...
}

As you can see, I'm using the label @SYS96096 which is "Group %1".
Now we want to add a value to be used as %1. In my case i want to use the current company.
We get the current company with the function curext() but AX throws an error if we want to use it like this:

SysOperationGroupAttribute(#GroupMyFirstGroup, strfmt("@SYS96096", curext()), #GroupMyFirstGroupOrderKey)

It seems there are no function calls are allowed here.

My workaround is to set the caption of my group in the UIBuilder class in method postBuild:

public void postBuild()
{
    #define.FormGroupName('FirstGroup')
    MyContract    contract;
    FormBuildGroupControl   groupFirstGroup;
    
    super();

    // get reference to dialog control
	if (this.dialog().formBuildDesign().control(#FormGroupName) is FormBuildGroupControl)
    {
        groupFirstGroup = this.dialog().formBuildDesign().control(#FormGroupName);
        // set the caption properly
        groupFirstGroup.caption(strFmt("@SYS96096", curext()));
    }
}
[X++] parameters in SysOperationGroupAttribute LabelType
Share this

Subscribe to robsCode