X++ 将枚举值分配给 table 列
X++ assign Enum Value to a table column
我正在尝试从 dialog
中提取 Enum
并将 label
分配给 table 的列。
例如:Dialog
打开并允许您选择:
Surface
OutOfSpec
Other
分别是0,1,2。
用户选择OutOfSpec
(这个标签是Out Of Spec),我想把这个枚举的名字,或者标签,放到一个table。我要插入的列设置为 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
值并使用它来分配标签,我只是还没弄明白。
编辑
添加一些关于我正在努力完成的事情的更多信息。我们制造成品,有时它们不符合规格或损坏,当发生这种情况时,我们必须报废成品。当我们这样做时,我们想跟踪它被废弃的原因,但我们不想要一堆随机的原因。我用了一个 enum
来限制原因。当操作员单击按钮报废某些内容时,他们将看到一个对话框弹出窗口,允许他们 select 报废的原因。然后,代码最终会将分配的原因放在成品批次属性上,以便我们稍后可以在报告中对其进行跟踪,并列出所有报废的成品及其报废原因。
我不完全确定你的问题,但我认为你只是错过了一个 index2[...]
调用,或者你没有从对话框中正确获取 return 值。只需将下面的内容创建为新作业,运行 它,选择 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));
}
}
我正在尝试从 dialog
中提取 Enum
并将 label
分配给 table 的列。
例如:Dialog
打开并允许您选择:
Surface
OutOfSpec
Other
分别是0,1,2。
用户选择OutOfSpec
(这个标签是Out Of Spec),我想把这个枚举的名字,或者标签,放到一个table。我要插入的列设置为 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
值并使用它来分配标签,我只是还没弄明白。
编辑
添加一些关于我正在努力完成的事情的更多信息。我们制造成品,有时它们不符合规格或损坏,当发生这种情况时,我们必须报废成品。当我们这样做时,我们想跟踪它被废弃的原因,但我们不想要一堆随机的原因。我用了一个 enum
来限制原因。当操作员单击按钮报废某些内容时,他们将看到一个对话框弹出窗口,允许他们 select 报废的原因。然后,代码最终会将分配的原因放在成品批次属性上,以便我们稍后可以在报告中对其进行跟踪,并列出所有报废的成品及其报废原因。
我不完全确定你的问题,但我认为你只是错过了一个 index2[...]
调用,或者你没有从对话框中正确获取 return 值。只需将下面的内容创建为新作业,运行 它,选择 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));
}
}