Создание Dialog Lookup MultiSelect from BaseEnum в Dynamics AX 2012
Бывают задачи, когда в Dynamics AX 2012 необходимо на диалоге создать лукап со множественным выбором, построенным на BaseEnum.
Нужна возможность выбора больше чем одного значения:
Например, пользователь хочет выбрать одновременно Запланировано и Выплачено.
Как это реализовать?
Одним из решений является использование temp table + query + SysLookupMultiSelect*.
Вот пример реализации класса для решения этой задачи:
class StackOverflowTestDialog extends RunBase { DialogRunbase dlg; FormBuildStringControl formBuildCtrl; SysLookupMultiSelectCtrl sysLookupMultiSelectCtrl; } static void main(Args _args) { StackOverflowTestDialog testDialog = new StackOverflowTestDialog(); if (testDialog.prompt()) { testDialog.run(); } } public Object dialog() { DialogGroup dlgGrp; FormBuildControl grpCtrl; dlg = super(); dlgGrp = dlg.addGroup(); grpCtrl = dlg.formBuildDesign().control(dlgGrp.formBuildGroup().id()); formBuildCtrl = grpCtrl.addControl(FormControlType::String, identifierstr(ctrlTypes)); formBuildCtrl.label("@SYS329959"); return dlg; } public void dialogPostRun(DialogRunbase _dialog) { CFMEnumLookupTmp lookupTmp; FormRun formRun; Query q; QueryRun qr; QueryBuildDataSource qbds; DictEnum dictEnum; int i; super(dlg); formRun = _dialog.dialogForm().formRun(); if (formRun) { //Fill in temporary table with enum values dictEnum = new DictEnum(enumNum(SubledgerJournalEntryType)); for (i = 0; i < dictEnum.values(); i++) { lookupTmp.EnumValueLabelText = dictEnum.index2Label(i); lookupTmp.insert(); } //Prepare a queryRun to work with the temporary table q = new Query(); qbds = q.addDataSource(tableNum(CFMEnumLookupTmp)); qbds.addSelectionField(fieldNum(CFMEnumLookupTmp, EnumValueLabelText)); qr = new QueryRun(q); qr.setCursor(lookupTmp); //Multi-select control framework class sysLookupMultiSelectCtrl = SysLookupMultiSelectCtrl::constructWithQueryRun( formRun, formRun.design().control(formBuildCtrl.id()), qr, true, [tableNum(CFMEnumLookupTmp), fieldNum(CFMEnumLookupTmp, EnumValueLabelText)] ); } } public boolean getFromDialog() { if (sysLookupMultiSelectCtrl) { info('Result: ' + con2Str(sysLookupMultiSelectCtrl.getSelectedFieldValues())); } return true; }
В результате диалог будет выглядеть следующим образом:
По нажатию «ОК»:
Ссылка на источник: https://stackoverflow.com/questions/50700247/how-to-create-the-dialog-lookup-multiselect-from-baseenum
Comments
So empty here ... leave a comment!