我有一个由第三方开发的定制项目,它扩展了Contact表。我可以访问自定义项目并查看Acumatica自定义项目界面中的DAC定义“ContactExt.UsrField1”。
但是,我在Visual Studio项目中使用“ContactExt”类时遇到问题。我似乎找不到引用它的方法来使用PXCache <>。GetExtension()方法。
Acumatica项目编辑器中添加的自定义DAC字段在运行时而不是静态时间解析,至少达到版本6.1.x.
这样做的副作用是Visual Studio无法确定其静态类型,因此会在静态分析和编译期间将它们加下划线并报告错误。
当IIS编译Acumatica自定义时,它将它们放在运行时代码DLL中。如果将调试器附加到网站IIS实例(w3wp.exe),您可以看到引用的运行时代码DLL:
从技术上讲,您可以将此DLL静态链接到项目,VS静态分析器将静态显示DAC类型。这将允许您使用运行时代码DLL作为静态引用来使用VS项目中的其他自定义字段并进行编译而不会出现错误。您也可以在VS项目中动态链接该DLL,但两者都是错误的解决方案,因为它会锁定DLL文件并阻止IIS重新编译它。运行时代码DLL也是临时的,当由IIS重新编译时,它将在其文件名后附加一个不同的UID,使其不适合静态链接,并且不适用于动态链接。
每次IIS重置或在Acumatica'App_RuntimeCode'文件夹中更改源文件代码时,IIS都将重新编译运行时代码DLL。 App_RuntimeCode是Acumatica项目编辑器中显示的源代码所在的文件夹。这是为运行时编译而创建的IIS特殊文件夹。
鉴于这些约束,我建议两种方法在运行时自定义和DLL自定义之间共享数据类型: