在 D365 X++ 上使用 SysOperations 进行验证

Validation with SysOperations on D365 X++

提问人:Fabrizio Mastrone 提问时间:10/19/2023 最后编辑:FH-InwayFabrizio Mastrone 更新时间:10/22/2023 访问量:37

问:

我是 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 语句中。谁能帮我解决这个问题?谢谢

表单 验证 字段 x++ dynamics-365-operations

评论


答:

0赞 FH-Inway 10/22/2023 #1

一种方法是为表的方法创建命令链扩展类。validateFieldInventTable

这允许您添加自定义字段验证。在问题中描述的场景中,这可能如下所示:

[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;
    }
}