代码之家  ›  专栏  ›  技术社区  ›  ulisses

如何创建对话框lookup multiselect from baseenum?

  •  0
  • ulisses  · 技术社区  · 7 年前

    我需要加上我的 对话字段 多选查找。 显示的值不是来自记录表(如自定义帐户…),而是来自 基数 .

    我要从查找中选择多个值:

    MultiSelectLookup

    例如,用户可以同时选择 计划 帕伊斯 . 我现在的代码是:

    我的班级 extends RunBaseBatch

    public Object dialog()
    {
        DialogRunbase dialog = super();
        ;
        dlgMultiSelect= dialog.addFieldValue(enumStr(SubledgerJournalEntryType),"","Select MULTIPLE VALUES","Select MULTIPLE VALUES");
        return dialog;
    }
    

    如何允许多选查找?

    如果不可能,还有其他方法可以进行多次查找吗?

    提前谢谢

    3 回复  |  直到 7 年前
        1
  •  3
  •   10p    7 年前

    请随意使用本测试课程获得灵感:

    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;
    }
    
        2
  •  3
  •   Alex Kwitny    7 年前

    这里有很多不同的方法,所以你需要从一些搜索/研究开始。

    你可以动态地做一些事情,但是你最好使用一个临时表+查询+ SysLookupMultiSelect* .

    如果您有更多的代码来提供尝试,我们可以回答特定的代码问题。

    查看一些链接:

        3
  •  1
  •   mazzy    7 年前

    首先,多选值的变量不能是枚举:

    1. 枚举只保留基枚举中的一个值。
    2. multiselect从查找返回一个或多个值

    其次,如果要处理枚举的多个元素,则应决定:

    • 正在处理标签或枚举值?
    • 什么是标签?
    • 另一种方法如何向用户显示枚举多值?(文本消息、表单、报告、BI/OLAP和其他)

    我相信你想一想就会改变主意。我是舒尔,你会选择另一种方式。