Wednesday, October 28, 2020

SysLookupMultiSelectCtrl in RunBaseBatch class

  class JOBTestMultiSelect extends RunBaseBatch

{

    container       stores; 

    SysLookupMultiSelectCtrl    msCtrl;

    FormBuildStringControl  fbsCtrlMultiSelect;


    // Dialog fields


    #define.CurrentVersion(1)

    #localmacro.CurrentList

            stores

    #endmacro


    public Object dialog()

    {

        DialogRunbase       dialog = super();

        FormBuildControl    setupGroupControl;

        

        DialogGroup         dialogGrp;

        dialogGrp = dialog.addGroup('Stores');

        dialog.allowUpdateOnSelectCtrl(true);


        setupGroupControl = dialog.formBuildDesign().control(dialogGrp.formBuildGroup().id());


        fbsCtrlMultiSelect = setupGroupControl.addControl(FormControlType::String, identifierstr(RetailStoreId));

        

        return dialog;

    }


    public container IdsToRecIds(container _stores)

    {

        RetailStoreTable      storeTbl;

        RetailStoreId    storeId;

        container           storeRecIds;

        int                 i;

 

        storeRecIds = conNull();

 

        for (i = 1; i <= conLen(_stores); i++)

        {

            storeId = conPeek(_stores, i);

 

            select firstOnly RecId from storeTbl

        where storeTbl.StoreNumber == storeId;

 

            storeRecIds += [storeTbl.RecId];

        }

 

        return storeRecIds;

    }


    public container RecIdsToIds(container _stores)

    {

        RetailStoreTable      storeTbl;

        RetailStoreId    storeId;

        RefRecId            storeRecId;

        container           storeIds;

        int                 i;

 

        storeIds = conNull();

 

        for (i = 1; i <= conLen(_stores); i++)

        {

            storeRecId = conPeek(_stores, i);

 

            select firstOnly StoreNumber, RecId from storeTbl

                where storeTbl.RecId == storeRecId;

 

            storeIds += [storeTbl.StoreNumber];

        }

 

        return storeIds;

    }


    public void dialogPostRun(DialogRunbase _dialog)

    {

        FormRun formRun;

        FormStringControl       fsCtrlMultiSelect;


        super(_dialog);


        formRun = _dialog.dialogForm().formRun();


        if (formRun)

        {

            fsCtrlMultiSelect1 = formRun.design().control(fbsCtrlMultiSelect1.id());

            //

            Query query = new Query();


            QueryBuildDataSource qbds = query.addDataSource(tableNum(RetailStoreTable));

            qbds.addSelectionField(fieldNum(RetailStoreTable, StoreRecId));

            qbds.addSelectionField(fieldNum(RetailStoreTable, StoreNumber));

            qbds.addSelectionField(fieldNum(RetailStoreTable, Name));


            qbds.addRange(fieldNum(RetailStoreTable, inventLocationDataAreaId)).value(queryValue(curExt()));

            //

            msCtrl = SysLookupMultiSelectCtrl::constructWithQuery(formRun, fsCtrlMultiSelect, query, true, stores);

            msCtrl1.set([this.IdsToRecIds(stores), stores]);


        }

    }


    public boolean getFromDialog()

    {

    ;

        stores = this.RecIdsToIds(msCtrl1.get());

        return super();

    }


    public boolean init()

    {

        return true;

    }


    protected void new()

    {

        super();

    }


    public container pack()

    {

        return [#CurrentVersion,#CurrentList];

    }


    /// <summary>

    ///    Contains the code that does the actual job of the class.

    /// </summary>

    public void run()

    {

        #OCCRetryCount

        if (! this.validate())

            throw error("");


        try

        {

            ttsbegin;


            str storeConStr = con2Str(stores);

            Info(strFmt('Selected store(s): %1', storeConStr));

            //storeSet = new Set(Types::Int64);

            //for (ctrI=1; ctrI<=conLen(stores); ctrI++)

            //{

            //    storeSet.add(conPeek(stores, ctrI));

            //}

            //SetEnumerator setEnum = storeSet.getEnumerator();

            //while (setEnum.moveNext())

            //{

            //    info (strFmt('%1', setEnum.current()));

            //}


            ttscommit;

        }

        catch (Exception::Deadlock)

        {

            retry;

        }

        catch (Exception::UpdateConflict)

        {

            if (appl.ttsLevel() == 0)

            {

                if (xSession::currentRetryCount() >= #RetryNum)

                {

                    throw Exception::UpdateConflictNotRecovered;

                }

                else

                {

                    retry;

                }

            }

            else

            {

                throw Exception::UpdateConflict;

            }

        }

    }


    public boolean runsImpersonated()

    {

        return true;

    }


    public boolean unpack(container packedClass)

    {

        Version version = RunBase::getVersion(packedClass);

    ;

        switch (version)

        {

            case #CurrentVersion:

                [version,#CurrentList] = packedClass;

                break;

            default:

                return false;

        }


        return true;

    }


    public boolean validate(Object _calledFrom = null)

    {

        if (false)

            return checkFailed("");


        return true;

    }


    static JOBTestMultiSelect construct()

    {

        return new JOBTestMultiSelect ();

    }


    // Here goes a description of the class

    static ClassDescription description()

    {

        return "@SYS70984";

    }


    static void main(Args args)

    {

        JOBTestMultiSelect tutorial_RunBase;

    ;

        tutorial_RunBase = JOBTestMultiSelect ::construct();


        if (tutorial_RunBase.prompt())

            tutorial_RunBase.runOperation();

    }


    protected boolean canRunInNewSession()

    {

        return false;

    }


}