4

我正在尝试通过扩展 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”对象为空。调用“下一次更新(_updateSmmBusRelTable,_updateParty);”时,我也会遇到同样的错误。

文档指出:“这允许在不需要使用事件处理程序的情况下扩展公共和受保护方法的逻辑。当您包装一个方法时,您还可以访问该类的其他公共和受保护方法和变量。”

有任何想法吗?

4

3 回答 3

5

您必须使用 PU9 或更新版本CustTable(重新)编译包。Application Suite

请参阅https://docs.microsoft.com/en-us/dynamics365/unified-operations/dev-itpro/get-started/whats-new-platform-update-9#supported-versions

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

于 2017-09-05T16:15:11.813 回答
2

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

[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
        }
    }
}
于 2018-02-02T12:07:22.140 回答
0

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

它是用 PU13 固定的。

于 2020-02-06T17:31:14.530 回答