2017-09-05 71 views
2

我想通过扩展CustTable来使用D365FO中新的'命令链'功能。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'对象为空。调用“next update(_updateSmmBusRelTable,_updateParty);”时也会出现同样的错误。

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

任何想法?

回答

4

您必须(重新)编译包含CustTable - Application Suite与PU9或更新。

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

但是,此功能需要被类增加要在平台更新9编译因为动力学365财务和运营的当前版本,企业的Editon应用已经编上平台更新8或更早版本,则需要以重新编译基本包(如应用套件)的平台更新9或更新包是在包中定义的方法

+0

我在应用PU10后做了一个完整的构建。我也刚刚做了另一个完整的构建,只是为了仔细检查,仍然得到相同的错误。 – AinsleyJ

+1

您是否尝试使用“构建相关软件包”复选框来激活您的软件包?听起来很奇怪,但它应该以这种方式工作。 –

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 
     } 
    } 
} 
相关问题