Sunday, April 2, 2023

Ui Builder example in Dynamics 365 FO

Contract class:

[DataContractAttribute,

SysOperationContractProcessingAttribute(classstr(GITS_UIBuilderFixedAsset))]


class GITS_FixedAssetContract

{

AssetRoomNumber roomNumber;

[

DataMemberAttribute('roomNumber'),

SysOperationLabelAttribute('Room Number'),

SysOperationDisplayOrderAttribute('1')]


public AssetRoomNumber parmAssetRoomNumber(AssetId _roomNumber= roomNumber)

{

roomNumber = _roomNumber;

return roomNumber;

}

}






DP class:

[

    SRSReportQueryAttribute(querystr(GITS_FixedAssetQuery)),

    SRSReportParameterAttribute(classStr(GITS_FixedAssetContract))

]

class GITS_FixedAssetDP extends SRSReportDataProviderBase

{  

    GITS_FixedAssetContract          contract;

    GITS_FixedAssetDetailsTmp        fixedAssetTemp;

    AssetTable                       assetTable;

    AssetBook                        assetBook;

    CompanyInfo                      companyinfo;

    AssetRoomNumber                  roomNumber;


    [SRSReportDataSetAttribute('GITS_FixedAssetDetailsTmp')]

    public GITS_FixedAssetDetailsTmp getLineFixedAssetDetails()

    {

        select * from fixedAssetTemp;

        return fixedAssetTemp;

    }


    [SysEntryPointAttribute(False)]

    public void processReport()

    {

        contract                                    = this.parmDataContract() as GITS_FixedAssetContract;

        roomNumber                                  = contract.parmAssetRoomNumber();

        Query                                 query =       this.parmQuery();

        QueryRun    qr;

        QueryBuildRange  qbr;

        query.dataSourceTable(tableNum(AssetTable)).addRange(fieldNum(AssetTable,Roomnumber)).value(roomNumber);

        companyinfo = CompanyInfo::find();

        qr          = new QueryRun(Query);

        while(qr.next())

        {

            assetTable=qr.get(tableNum(AssetTable));

            assetBook=qr.get(tableNum(AssetBook));

            fixedAssetTemp.clear();

            fixedAssetTemp.CompanyLogo   = FormLetter::companyLogo();

            fixedAssetTemp.CompanyName   = companyinfo.name();               

            fixedAssetTemp.RoomNumber            = assetTable.RoomNumber;

            fixedAssetTemp.AssetcCode            = assetTable.AssetId;

            fixedAssetTemp.AssetDescription      = assetTable.Name;

            fixedAssetTemp.LocationDirectorate   = assetTable.Location;

            fixedAssetTemp.AssetValue            = assetBook.AcquisitionPrice;

            fixedAssetTemp.AssetAcqDate          = assetBook.AcquisitionDate;

            fixedAssetTemp.insert();

        }

    }

}






UI builder class:

class GITS_UIBuilderFixedAsset extends SrsReportDataContractUIBuilder

{   

    DialogField   dialogAssetRoomNumber;

    DialogGroup   dialogGroup;

    boolean       enable;  

    private void roomNumberLookup(FormStringControl roomNumberLookup)

    {

        Query                   query = new Query();

        QueryBuildDataSource    qbds_AssetTable;

        SysTableLookup          sysTableLookup;

        QueryBuildRange         qbr;

        if (roomNumberLookup != null)

        {

            sysTableLookup = SysTableLookup::newParameters(tablenum(AssetTable), roomNumberLookup);

            qbds_AssetTable = query.addDataSource(tableNum(AssetTable));

            sysTableLookup.addLookupfield(fieldnum(AssetTable, RoomNumber), true);

            qbr = qbds_AssetTable.addRange(fieldNum(AssetTable,RoomNumber));

            qbds_AssetTable.addGroupByField(fieldNum(AssetTable,RoomNumber));

            qbr.value('');

            sysTableLookup.parmUseLookupValue(false);

            sysTableLookup.parmQuery(query);

            sysTableLookup.performFormLookup();

        }

    }

    public void build()

    {

        GITS_FixedAssetContract rdpContract =  this.dataContractObject();

        dialogAssetRoomNumber = this.addDialogField(methodstr(GITS_FixedAssetContract,parmAssetRoomNumber),rdpContract);

        dialogAssetRoomNumber.lookupButton(2);

    }

    public void postRun()

    {

        Dialog dialogLocal = this.dialog();

        DialogField dialogField;

        super();

        dialogLocal.dialogForm().formRun().controlMethodOverload(false);

        dialogField = this.bindInfo().getDialogField(this.dataContractObject(), methodstr (GITS_FixedAssetContract, parmAssetRoomNumber));

        dialogField.registerOverrideMethod(methodstr(FormStringControl, lookup), methodstr(GITS_UIBuilderFixedAsset, roomNumberLookup), this);

    }

}