You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

D365 X++:如何正确获取EcoResProductParameter扩展字段值完成校验?

问题解决思路及方案

核心问题分析

你遇到的错误根源是DataContract类中未正确获取表单上用户手动修改的MaxPercentage最新值:要么是直接引用了缓存的旧表记录,要么是表单字段未与DataContract的属性正确绑定,导致校验时拿的是修改前的数值,从而触发错误。

具体解决步骤

1. 绑定表单字段到DataContract属性(推荐方案)

不要直接在DataContract中访问表记录,而是将表单上的MaxPercentage字段绑定到DataContract的对应属性,确保校验时使用的是用户提交的最新值:

[DataContractAttribute]
class YourCustomDataContract
{
    SalesPercentMarkup  salesPercentMarkup;
    MaxPercentage       maxPercentage; // 新增与表单字段对应的属性

    // 为SalesPercentMarkup定义数据成员
    [DataMemberAttribute]
    public SalesPercentMarkup parmSalesPercentMarkup(SalesPercentMarkup _salesPercentMarkup = salesPercentMarkup)
    {
        salesPercentMarkup = _salesPercentMarkup;
        return salesPercentMarkup;
    }

    // 为MaxPercentage定义数据成员,让表单可以传递值过来
    [DataMemberAttribute]
    public MaxPercentage parmMaxPercentage(MaxPercentage _maxPercentage = maxPercentage)
    {
        maxPercentage = _maxPercentage;
        return maxPercentage;
    }

    public boolean validate()
    {
        boolean isValid = true;

        // 直接用DataContract属性值做校验,避免表缓存问题
        if (salesPercentMarkup > maxPercentage)
        {
            isValid = checkFailed('The percentage has exceeded the max');
        }

        return isValid;
    }
}

然后在表单的EcoResProductParameter数据源字段中,将DataMember属性设置为maxPercentage,确保表单提交时把用户输入的值传递到DataContract。

2. 强制读取最新表记录(备选方案)

如果必须从表中读取值,需要重新查询当前公司的最新参数记录,避免使用缓存的旧实例:

public boolean validate()
{
    boolean isValid;
    EcoResProductParameter parameterTable;

    // 重新读取当前公司的最新参数记录,跳过缓存
    select firstonly MaxPercentage from parameterTable
        where parameterTable.DataAreaId == curext();

    if(salesPercentMarkup <= parameterTable.MaxPercentage)
    {
        isValid = true;
    }
    else
    {
        isValid = checkFailed('The percentage has exceeded the max');
    }
            
    return isValid;
}

3. 额外检查项

  • 确认表单提交时已保存MaxPercentage的修改:比如表单的保存按钮是否触发了数据源的write()操作,确保修改先写入数据库。
  • 校验字段数据类型一致性:确保SalesPercentMarkup和MaxPercentage是相同数值类型(如Real或Decimal),避免类型转换导致的比较错误。

内容的提问来源于stack exchange,提问作者Fabrizio Mastrone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:27:55