Monday, April 4, 2022

How to resolve reference with a form control value

If you need not just to maintain lookup for a refence group but also to validate a manually input value, you need to implement resolveReference method for the field of the form data source. Say, we want to validate a custom financial dimension value.

You can check resolveReference* methods in EcoResCategory table as a good example.

The most interesting detail for me is the way how the related form control value is found inside of the given reference group.

            /// <summary>
            /// Resolve reference
            /// </summary>
            /// <param name = "_formReferenceControl"></param>
            /// <returns></returns>
            public Common resolveReference(FormReferenceControl _formReferenceControl)
                Common ret;
                ret = EOGAssignedBankAccountDimension.dimensionResolveReference(_formReferenceControl);
                return ret;

    public Common dimensionResolveReference(FormReferenceControl _formReferenceControl)
        DimensionAttribute                          dimensionAttribute;
        DimensionAttributeDirCategory               dimAttributeDirCategory;
        DimensionFinancialTag                       dimensionFinancialTag;
        EOGFinancialDimensionValueFinancialTagView  view;
        EOGAssignedBankAccountDimension             eogAssignedBankAccountDimension;
        DimensionDisplayValue                       dimensionDisplayValue;

        if (!_formReferenceControl || _formReferenceControl.handle() != classNum(FormReferenceGroupControl) )
            throw(error(strFmt("@SYS137393", Error::wrongUseOfFunction(funcName())) ));

        dimensionDisplayValue = _formReferenceControl.filterValue(AbsoluteFieldBinding::construct(fieldStr(DimensionFinancialTag, Value), tableStr(DimensionFinancialTag))).value();
        dimensionDisplayValue = strLRTrim(dimensionDisplayValue);
        <..  implement your logic with the display value ...>

No comments: