Показать сообщение отдельно
Старый 07.06.2018, 22:14   #1  
Blog bot is offline
Blog bot
Участник
 
25,475 / 846 (79) +++++++
Регистрация: 28.10.2006
a33ik: Multi-select parameters in dialogs
Источник: http://daxonline.org/1614-multi-sele...n-dialogs.html
==============

Example of RunBaseBatch based job with multi-select parameter (wharehouses) class MultiSelectRunBaseBatch extends RunBaseBatch { container warehouses; SysLookupMultiSelectCtrl warehouseMultiSelect; FormBuildStringControl warehouseCtrl; DialogField warehousesField; #define.CurrentVersion(1) #localMacro.CurrentList warehouses #endmacro } protected Object dialog() { DialogRunbase dialog; DialogGroup dialogGroup; FormBuildControl formBuildControl; dialog = super(); dialog.allowUpdateOnSelectCtrl(true); dialogGroup = dialog.addGroup(); formBuildControl = dialog.formBuildDesign().control(dialogGroup.formBuildGroup().id()); warehouseCtrl = formBuildControl.addControl(FormControlType::String, identifierstr(InventLocationId)); warehouseCtrl.label("@SYS6437"); return dialog; } public void dialogPostRun(DialogRunbase dialog) { FormRun formRun; FormStringControl fsCtrlWarehouse; Query q; QueryBuildDataSource qbds; q = new Query(); qbds = q.addDataSource(tablenum(InventLocation)); qbds.addSelectionField(fieldNum(InventLocation, InventLocationId)); qbds.addSelectionField(fieldNum(InventLocation, Name)); super(dialog); formRun = dialog.dialogForm().formRun(); if (formRun) { fsCtrlWarehouse = formRun.design().control(warehouseCtrl.id()); warehouseMultiSelect = SysLookupMultiSelectCtrl::constructWithQuery(formRun, fsCtrlWarehouse, q); warehouseMultiSelect.set([this.warehouseIdsToRecIds(warehouses), warehouses]); } } public boolean getFromDialog() { boolean ret; ret = super(); warehouses = this.warehouseRecIdsToIDs(warehouseMultiSelect.get()); return ret; } public container pack() { return [#CurrentVersion, #CurrentList]; } public void run() { } public boolean unpack(container packedClass) { Version version = RunBase::getVersion(packedClass); switch (version) { case #CurrentVersion: [version, #CurrentList] = packedClass; break; default: return false; } return true; } public static MultiSelectRunBaseBatch construct() { return new MultiSelectRunBaseBatch(); } client server static ClassDescription description() { return "Multi-select run base batch"; } public static void main(Args _args) { MultiSelectRunBaseBatch batch = MultiSelectRunBaseBatch::construct(); if (batch.prompt()) { batch.run(); } } public container warehouseIdsToRecIds(container _warehouseIds) { InventLocation inventLocation; InventLocationId inventLocationId; container warehouseRecIds; int i; warehouseRecIds = conNull(); for (i = 1; i