Как создать Dialog Lookup MultiSelect из BaseEnum? - PullRequest
0 голосов
/ 05 июня 2018

Мне нужно добавить в мой DialogField MultiSelect Lookup.Показанные значения не из таблицы записей (как пользовательская учетная запись ...), а из BaseEnum .

. Я хочу выбрать из поиска более одного значения:

MultiSelectLookup

Например, пользователь может одновременно выбрать Запланированный и Паис .Мой текущий код такой:

Мой класс extends RunBaseBatch, в

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

Как можно разрешить поиск Multi Select?

Если это невозможно, есть другиеспособ множественного поиска?

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Прежде всего, переменная для значения множественного выбора НЕ должна быть перечислением:

  1. перечисление сохраняет только ОДНО значение из базового перечисления.
  2. множественный выбор возвращает одно или БОЛЬШЕ значений из поиска

Во-вторых, если вы хотите обработать несколько элементов перечисления, вы должны решить:

  • обработка для метки или enumValue?
  • что такое langaugeдля метки?
  • как другие методы показывают многозначное перечисление пользователю?(текстовые сообщения, формы, отчеты, BI / OLAP и другие)

Я уверен, что вы передумаете, если немного подумаете об этом.Я уверен, что вы выберете другой путь.

0 голосов
/ 06 июня 2018

Не стесняйтесь использовать этот тестовый класс для вдохновения:

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;
}
0 голосов
/ 05 июня 2018

Это довольно широко охватывается многими различными методами, поэтому вам нужно начать с поиска / исследования.

Вы можете делать некоторые вещи динамически, но лучше всего использовать временную таблицу+ query + SysLookupMultiSelect*.

Если у вас есть больше кода для предоставления попыток, мы можем ответить на конкретные вопросы кода.

См. некоторые ссылки:

...