提问人:Fabrizio Mastrone 提问时间:10/19/2023 最后编辑:FH-InwayFabrizio Mastrone 更新时间:10/22/2023 访问量:37
在 D365 X++ 上使用 SysOperations 进行验证
Validation with SysOperations on D365 X++
问:
我是 x++ 和 D365 的新手,所以我经常被非常简单的任务卡住。在本例中,我在扩展表 EcoResProductParameter 中创建了一个名为 MaxPercentage 的新字段,并将其放入 EcoResProductParameter 扩展表单中,我需要检查此值是否大于我在 InventTable 中选择的 SalesPercentMarkup。如果是这样,百分比将更新,否则我将收到错误。我试图在 DataContract 类中做这样的事情:
public boolean validate()
{
boolean isValid;
if(salesPercentMarkup <= parameterTable.MaxPercentage)
{
isValid = true;
}
else
{
isValid = checkFailed('The percentage has exceeded the max');
}
return isValid;
}
但它不断返回错误,因为我不知道如何正确访问用户手动插入 MaxPercentage 字段的值,所以我想问题出在我的 if 语句中。谁能帮我解决这个问题?谢谢
答:
0赞
FH-Inway
10/22/2023
#1
一种方法是为表的方法创建命令链扩展类。validateField
InventTable
这允许您添加自定义字段验证。在问题中描述的场景中,这可能如下所示:
[ExtensionOf(tableStr(InventTable))]
final class InventTable_Extension
{
public boolean validateField(FieldId _fieldIdToCheck)
{
// execute the standard validateField logic
boolean ret = next validateField(_fieldIdToCheck);
// add custom validation
if (_fieldIdToCheck == fieldNum(InventTable, SalesPercentMarkup))
{
EcoResProductParameters ecoResProductParameters = EcoResProductParameters::find();
if (this.SalesPercentMarkup > ecoResProductParameters.MaxPercentage)
{
// note that the message should be a label and put in double quotes
ret = checkFailed('The percentage has exceeded the max');
}
}
return ret;
}
}
评论