Axapta D365FO中的命令链(方法包装)导致';对象未设置为对象的实例';

Axapta D365FO中的命令链(方法包装)导致';对象未设置为对象的实例';,axapta,x++,dynamics-ax7,dynamics-365-operations,Axapta,X++,Dynamics Ax7,Dynamics 365 Operations,我试图通过扩展CustTable来使用D365FO中新的“命令链”特性 在将更新方法记录到新表中之前,我们需要检查更新方法上的值是否已更改 [ExtensionOf(tableStr(CustTable))] final class CustTable_Extension { void update(boolean _updateSmmBusRelTable = true, boolean _updateParty = true) {

我试图通过扩展CustTable来使用D365FO中新的“命令链”特性

在将更新方法记录到新表中之前,我们需要检查更新方法上的值是否已更改

[ExtensionOf(tableStr(CustTable))]
final class CustTable_Extension
{
    void update(boolean _updateSmmBusRelTable = true, boolean _updateParty = 
                true)
    {
        CustTable   custTable_Orig = this.orig();
        boolean hasChanged = this.CreditMax != custTable_Orig.CreditMax;

        next update(_updateSmmBusRelTable, _updateParty);

        if(hasChanged)
        {
            //do something
        }
    }
}
然而,当运行此代码时,我们会得到“对象未设置为对象的实例”错误。发生错误的原因是“this”对象为null。调用“下一次更新(_updatesmbusrltable,_updateParty);”时也会出现相同的错误

状态:“这允许扩展公共和受保护方法的逻辑,而无需使用事件处理程序。包装方法时,还可以访问该类的其他公共和受保护方法和变量。”

有什么想法吗

您必须使用PU9或更高版本的
custable
-
应用程序套件(重新)编译包

见:

但是,此功能要求在平台更新9上编译要扩充的类。由于当前版本的Dynamics 365 for Finance and Operations Enterprise editon应用程序已在平台更新8或更早版本上编译,因此您需要在平台更新9或更高版本上重新编译基本包(如应用程序套件),以便包装该包中定义的方法


尝试从包装器方法中删除默认参数值

[ExtensionOf(tableStr(CustTable))]
final class CustTable_Extension
{
    void update(boolean _updateSmmBusRelTable , boolean _updateParty )
    {
        CustTable   custTable_Orig = this.orig();
        boolean hasChanged = this.CreditMax != custTable_Orig.CreditMax;

        next update(_updateSmmBusRelTable, _updateParty);

        if(hasChanged)
        {
            //do something
        }
    }
}

我知道这个问题已经问了很长时间了,但这是低于13的平台更新中的一个bug。如果存在同名的表单,则会触发此错误


它是用PU13修复的。

我在应用PU10后进行了完整构建。我也刚刚完成了另一个完整的构建,只是为了再次检查,仍然得到相同的错误。您是否尝试过在激活“构建依赖的包”复选框的情况下构建您的包?听起来很奇怪,但应该是这样的。