X ++ присваивает значение Enum столбцу таблицы - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь вытащить Enum, выбранный из dialog, и назначить label столбцу таблицы.

Например: Dialog открывается и позволяет вам выбрать:

Поверхность

OutOfSpe c

Другое

Это соответственно 0,1,2.

Пользователь выбирает OutOfSpec (метка для этого Out Of Spe c), я хочу поместить имя этого перечисления или метку в таблицу. Столбец, в который я вставляю, настроен как str.

Вот код, который я пробовал, но безуспешно:

    SysDictEnum dictEnum = new SysDictEnum(enumNum(SDILF_ScrapReasons));

    reason = dialog.addField(enumStr(SDILF_ScrapReasons),"Scrap Reason");
    dialog.run();
    if (!dialog.closedOk())
    {
        info(reason.value());
        return;
    }

    ttsBegin;
    // For now, this will strip off the order ID from the summary fields.
    // No longer removing the Order ID
    batchAttr = PdsBatchAttributes::find(itemId, invDim.inventBatchId, "OrderId");
    orders = SDILF_BreakdownOrders::find(batchAttr.PdsBatchAttribValue, true);
    if (orders)
    {
        orders.BoxProduced -= 1;
        orders.update();
    }
    // Adding a batch attribute that will include the reason for scrapping
    select forUpdate batchAttr;    
    batchAttr.PdsBatchAttribId = "ScrapReason";
    //batchAttr.PdsBatchAttribValue = any2str(dictEnum.index2Value(reason.value()));
    batchAttr.PdsBatchAttribValue = enum2str(reason.value());
    batchAttr.InventBatchId = invDim.inventBatchId;
    batchAttr.ItemId = itemId;
    batchAttr.insert();

Очевидно, что это не весь код, но этого должно быть достаточно, чтобы решить проблему, которую я пытаюсь решить.

Я уверен, что есть способ получить значение int и использовать его для назначения метки, я просто еще не смог понять это.

РЕДАКТИРОВАТЬ

Чтобы добавить больше информации о том, что я пытаюсь выполнить sh. Мы производим нашу готовую продукцию, иногда она выходит из строя c или повреждается, когда это происходит, и нам приходится сдавать готовую продукцию. Когда мы делаем это, мы хотим отследить, почему его удаляют, но мы не хотим просто случайных причин. Я использовал enum, чтобы ограничить причины. Когда оператор нажимает кнопку, чтобы что-то удалить, у него появляется всплывающее диалоговое окно, которое позволяет ему выбрать причину отказа. Затем код, в конце концов, назначит эту назначенную причину атрибутам партии готовых изделий, чтобы мы могли отследить ее позже в отчете и получить список всех готовых товаров, которые были списаны и почему они были списаны.

1 Ответ

4 голосов
/ 20 февраля 2020

Я не совсем уверен в вашем вопросе, но я думаю, что вы просто пропускаете один из вызовов index2[...] или неправильно получаете возвращаемое значение из вашего диалога. Просто создайте нижеследующее как новое задание, запустите его, выберите Open Order и нажмите ОК.

Я не знаю разницы между index2Label и index2Name.

static void Job67(Args _args)
{
    Dialog          dialog      = new dialog();
    SysDictEnum     dictEnum    = new SysDictEnum(enumNum(SalesStatus));
    DialogField     reason;
    SalesStatus     salesStatusUserSelection;
    str             label, name, symbol;
    int             value;

    reason = dialog.addField(enumStr(SalesStatus), "SalesStatus");
    dialog.run();

    if (dialog.closedOk())
    {
        salesStatusUserSelection = reason.value();

        // Label
        label = dictEnum.index2Label(salesStatusUserSelection);

        // Name
        name = dictEnum.index2Name(salesStatusUserSelection);

        // Symbol
        symbol = dictEnum.index2Symbol(salesStatusUserSelection);

        // Value
        value = dictEnum.index2Value(salesStatusUserSelection);

        info(strFmt("Label: %1; Name: %2; Symbol: %3; Value: %4", label, name, symbol, value));
    }
}
...