如何从VS访问Acumatica DAC扩展字段

问题描述 投票:0回答:1

我有一个由第三方开发的定制项目,它扩展了Contact表。我可以访问自定义项目并查看Acumatica自定义项目界面中的DAC定义“ContactExt.UsrField1”。

但是,我在Visual Studio项目中使用“ContactExt”类时遇到问题。我似乎找不到引用它的方法来使用PXCache <>。GetExtension()方法。

acumatica
1个回答
0
投票

Acumatica项目编辑器中添加的自定义DAC字段在运行时而不是静态时间解析,至少达到版本6.1.x.

这样做的副作用是Visual Studio无法确定其静态类型,因此会在静态分析和编译期间将它们加下划线并报告错误。

当IIS编译Acumatica自定义时,它将它们放在运行时代码DLL中。如果将调试器附加到网站IIS实例(w3wp.exe),您可以看到引用的运行时代码DLL:enter image description here

从技术上讲,您可以将此DLL静态链接到项目,VS静态分析器将静态显示DAC类型。这将允许您使用运行时代码DLL作为静态引用来使用VS项目中的其他自定义字段并进行编译而不会出现错误。您也可以在VS项目中动态链接该DLL,但两者都是错误的解决方案,因为它会锁定DLL文件并阻止IIS重新编译它。运行时代码DLL也是临时的,当由IIS重新编译时,它将在其文件名后附加一个不同的UID,使其不适合静态链接,并且不适用于动态链接。

每次IIS重置或在Acumatica'App_RuntimeCode'文件夹中更改源文件代码时,IIS都将重新编译运行时代码DLL。 App_RuntimeCode是Acumatica项目编辑器中显示的源代码所在的文件夹。这是为运行时编译而创建的IIS特殊文件夹。

鉴于这些约束,我建议两种方法在运行时自定义和DLL自定义之间共享数据类型:

  1. 如果可以修改运行时自定义,请创建包含共享数据类型的共享DLL,并在两个自定义项中引用它。
  2. 如果无法修改运行时自定义,则必须将所有引用共享数据类型的代码放在运行时自定义中(使用App_RuntimeCode中的Acumatica项目编辑器)。不引用共享数据类型的代码也可以放在DLL中并添加到相同的自定义项目文件中。这将是一种结合运行时和静态编译代码的混合方法。
© www.soinside.com 2019 - 2024. All rights reserved.