【发布时间】:2018-01-02 23:09:13
【问题描述】:
我有一个由第三方开发的自定义项目,用于扩展联系人表。 我可以访问自定义项目并在 Acumatica 的自定义项目界面中查看 DAC 定义“ContactExt.UsrField1”。
但是,我在 Visual Studio 项目中使用“ContactExt”类时遇到问题。为了使用 PXCache.GetExtension() 方法,我似乎找不到引用它的方法。
【问题讨论】:
标签: acumatica
我有一个由第三方开发的自定义项目,用于扩展联系人表。 我可以访问自定义项目并在 Acumatica 的自定义项目界面中查看 DAC 定义“ContactExt.UsrField1”。
但是,我在 Visual Studio 项目中使用“ContactExt”类时遇到问题。为了使用 PXCache.GetExtension() 方法,我似乎找不到引用它的方法。
【问题讨论】:
标签: acumatica
在 Acumatica 项目编辑器中添加的自定义 DAC 字段在运行时而不是静态时解析,至少到版本 6.1.x。
这样做的副作用是 Visual Studio 无法确定它们的静态类型,因此会在静态分析和编译期间将它们加红色下划线并报告错误。
当 IIS 编译 Acumatica 自定义项时,它会将它们放入运行时代码 DLL。如果您将调试器附加到网站 IIS 实例 (w3wp.exe),您可以看到引用的运行时代码 DLL:
从技术上讲,您可以将此 DLL 静态链接到您的项目,并且 DAC 类型将对 VS 静态分析器静态可见。这将允许您通过使用运行时代码 DLL 作为静态引用来使用 VS 项目中的其他自定义字段,并且编译时不会出错。您也可以在 VS 项目中动态链接该 DLL,但两者都是不好的解决方案,因为它会锁定 DLL 文件并阻止 IIS 重新编译它。运行时代码 DLL 也是临时的,当被 IIS 重新编译时,它的文件名会附加一个不同的 UID,使其不适合静态链接,也不适合动态链接。
每次 IIS 重置或更改 Acumatica 'App_RuntimeCode' 文件夹中的源文件代码时,IIS 都会重新编译运行时代码 DLL。 App_RuntimeCode 是 Acumatica 项目编辑器中显示的源代码所在的文件夹。这是一个用于运行时编译的 IIS 特殊文件夹。
鉴于这些限制,我建议使用两种方法在运行时自定义和 DLL 自定义之间共享数据类型:
如果您可以修改运行时自定义,请创建一个包含共享数据类型的共享 DLL 并在两个自定义中引用它。
如果您无法修改运行时自定义,则必须将所有引用共享数据类型的代码放入运行时自定义(使用 App_RuntimeCode 中的 Acumatica 项目编辑器)。不引用共享数据类型的代码也可以放在 DLL 中并添加到相同的自定义项目文件中。这将是一种结合了运行时和静态编译代码的混合方法。
【讨论】: