Wednesday, August 13, 2025

create multi select look up on vendor parameter form control using x++ d365fo

[ExtensionOf(formStr(VendParameters))]

final class VendParameters_Extension

{

    public SysLookupMultiSelectCtrl msCtrl;

    public void init()

    {

        FormStringControl formStringControl;

        formStringControl = this.design().controlName(formControlStr(VendParameters, VendParameters_multiselect) );

        this.multiselectLookup(formStringControl);

    }

    public SysLookupMultiSelectCtrl parmMultiselect(SysLookupMultiSelectCtrl _msCtrl = msCtrl)

    {

        msCtrl = _msCtrl;

        return msCtrl;

    }

    public void multiselectLookup(FormStringControl _multiselectControl)

    {

        Query query = new Query();

        QueryBuildDataSource qbds;


        query.allowCrossCompany(true);

        qbds = query.addDataSource(tableNum(JournalName));

        qbds.fields().addField(fieldNum(JournalName, Name));

        qbds.orderMode(OrderMode::GroupBy);

        qbds.addSortField(fieldNum(JournalName, Name));


        msCtrl = SysLookupMultiSelectCtrl::constructWithQuery(this,  _multiselectControl, query );

        this.parmMultiselect(msCtrl);

    }

}

public class VendParametersFormDSEventHandler

{

    [FormDataFieldEventHandler( formDataFieldStr(VendParameters, VendParameters, VendParameters_multiselect),

        FormDataFieldEventType::Modified )]

    public static void VendParameters_multiselect_OnModified(FormDataObject sender, FormDataFieldEventArgs e)

    {

        FormRun formRun = sender.dataSource().formRun();

        SysLookupMultiSelectCtrl msCtrl = formRun.parmMultiselect();

        VendParameters vendParameters = formRun.dataSource(formDataSourceStr(VendParameters, VendParameters)).cursor();

        vendParameters.multiselect = con2Str(msCtrl.getSelectedFieldValues(), ";");

    }

}


Call API using x++ D365FO

 System.Net.HttpWebRequest    request; System.Net.HttpWebResponse   response; System.IO.Stream             dataStream; System.IO.StreamReade...