实现命令链
命令链 (CoC) 是类扩展的功能。 您可以使用 CoC 围绕在基类中定义的方法包装 X++ 代码。 CoC 允许您在不使用事件处理程序的情况下自定义标准类。 本功能允许您添加将在标准代码运行之前和/或之后运行的自定义逻辑。 您只能扩展 public 和 protected 方法的逻辑。 在包装方法时,您还可以访问基类的 protected 方法、public 方法和变量。 了解本概念非常重要,因为无法在 Dynamics 365 财务和运营应用开发中更改基本代码。
要使用 CoC,您需要创建一个新类,该类使用与您要扩展的类相同的名称,并将 _Extension 添加到名称作为后缀。 类声明还需要使用 final 关键字以指示无法从中进一步继承。
最后,在声明该类时,必须使用 ExtensionOf 属性。 然后,您可以从扩展类中的基类重用相同的方法声明。 在扩展方法内,您可以添加自定义代码。 系统要求您使用 next 关键字创建 CoC。 下一个命令将调用命令链中的 next 方法。 当链中没有更多方法时,将调用原始方法(换言之,扩展方法)。
示例
以下代码示例显示必须如何声明类才能使用 CoC。 当调用 ExampleClass.doSomething() 方法时,代码将首先运行 next 关键字之前的所有代码。 然后,ExampleClass.doSomething() 方法中的原始代码将运行。 最后,next 关键字之后的所有代码都将运行。
[ExtensionOf(classStr(ExampleClass))]
final class ExampleClass_Extension
{
str doSomething(int arg)
{
// Custom logic before standard code.
var s = next doSomething(arg);
// Custom logic after standard code.
return s;
}
}
无法使用 CoC 包装某些方法。 如果方法使用设置为 false 的可挂钩属性 [Hookable(false)] 或设置为 false 的可包装属性 [Wrappable(false)],则无法包装该方法。
使用 final 关键字的方法不能在扩展类中包装。 Private 方法也从可扩展性中排除。