Dynamics 365 Dialog Field MultiSelect Lookup Method

Diğer bir yazımda Dialog Field’ın lookup’ını nasıl Override edebileceğiniz hakkında bir class paylaşmıştım.

Yazıya buradan ulabilirsiniz: https://bayramcetin.com/dynamics-365-dialog-lookup-override

Bu yazıda, Dialog field Lookup'ını nasıl çoklu seçim yapılabilir hale getirebileceğimizi gösteren bir class paylaşmak istiyorum. Umarım faydalı olur. Bir sonraki yazıda görüşmek üzere.

class ETGCeremonyResponsibleAddMultiLine
{
    ETGCeremonyTable record;

    str dialogValue;

    public void lookupPerson(FormStringControl _formControl)
    {
        Query query = new Query();
        QueryBuildDataSource queryBuildDataSource = query.addDataSource(tableNum(HcmWorker));

        queryBuildDataSource.addSelectionField(fieldNum(HcmWorker, Person));

        container Person;

        SysLookupMultiSelectGrid::lookup(query,_formControl,_formControl,_formControl, Person);
    }

    private boolean dialog()
    {
        Dialog dialog = new Dialog("Tören Sorumluluları ekle");
        DialogField field  = dialog.addField(extendedTypeStr(String500), "Tören sorumlusu");

        field.registerOverrideMethod(methodStr(FormStringControl, lookup),
            methodStr(ETGCeremonyResponsibleAddMultiLine, lookupPerson), this);

        if(dialog.run())
        {
            if (!field.value())
                throw warning("Tören sorumluluları seçiniz.");

            dialogValue = field.value();

            return true;
        }

        return false;
    }

    private void run()
    {
        if(this.validate()  && this.dialog())
        {
            ETGCeremonyResponsible etgCeremonyResponsibleNew;
            RecId person;
            List strlist = new List(Types::Int64);

            strlist = strSplit(dialogValue, ";");

            ListIterator it = new ListIterator(strlist);

            ttsbegin;
            while (it.more())
            {
                person = it.value();

                etgCeremonyResponsibleNew.clear();
                etgCeremonyResponsibleNew.CeremonyNumber = record.CeremonyNumber;
                etgCeremonyResponsibleNew.PersonnelHcm = HcmWorker::findByPerson(person).RecId;
                etgCeremonyResponsibleNew.insert();

                it.next();
            }

            ttscommit;
            info(strFmt("Tören sorumluları oluşturuldu."));
        }
    }

    private boolean validate()
    {
        boolean isValid = true;

        return isValid;
    }

    public ETGCeremonyTable parmRecord(ETGCeremonyTable _record = record)
    {
        record = _record;
        return record;
    }

    public void new()
    {

    }

    public static ETGCeremonyResponsibleAddMultiLine construct()
    {
        return new ETGCeremonyResponsibleAddMultiLine();
    }

    public static void main(Args _args)
    {
        if (! _args || ! _args.dataset() || ! _args.record() ||
            _args.record().TableId != tablenum(ETGCeremonyTable))
        {
            throw error(Error::missingRecord(funcname()));
        }

        ETGCeremonyResponsibleAddMultiLine process = ETGCeremonyResponsibleAddMultiLine::construct();
        process.parmRecord(_args.record());
        process.run();
    }

}