如何访问自定义字段,该字段在构造特征包-Acumatica中定义

如何访问自定义字段,该字段在构造特征包-Acumatica中定义,acumatica,Acumatica,通过阅读我的问题,您可能认为这非常简单,但我要求每个人都尝试访问在构造功能包中定义的自定义字段 我想详细访问项目屏幕任务选项卡中的“类型”字段 UsrType是在Construction features包中定义的自定义字段。在该包中,文件已转换为dll。我试图访问该字段,就像我们在定制中通常做的那样 但我犯了个错误 找不到类型或命名空间“PMTaskExt” 我甚至试过这个 我出错了 PMTask中不存在UsrType APTran中的UsrSubcontractNbr字段也存在同样的问

通过阅读我的问题,您可能认为这非常简单,但我要求每个人都尝试访问在构造功能包中定义的自定义字段

我想详细访问项目屏幕任务选项卡中的“类型”字段

UsrType是在Construction features包中定义的自定义字段。在该包中,文件已转换为dll。我试图访问该字段,就像我们在定制中通常做的那样

但我犯了个错误

找不到类型或命名空间“PMTaskExt”

我甚至试过这个

我出错了

PMTask中不存在UsrType

APTran中的UsrSubcontractNbr字段也存在同样的问题。不仅这些字段,还有许多这样的字段需要访问。
我们如何访问这些字段?

通过查看PX.Objects.CN.dll,它将位于
PX.Objects.CN.ProjectAccounting.PM.CacheExtensions
命名空间中,即
PmTaskExt

使用了最新的19R2施工项目“施工特征”19_205_4_1_157

已反编译我搜索的自定义dll(使用DotPeek)PMTask:

复制的文本:

using PX.Data;
using PX.Data.BQL;
using PX.Objects.CN.ProjectAccounting.PM.Descriptor;
using PX.Objects.CS;
using PX.Objects.PM;

namespace PX.Objects.CN.ProjectAccounting.PM.CacheExtensions
{
  public sealed class PmTaskExt : PXCacheExtension<PMTask>
  {
    [PXDBString(30)]
    [PXDefault]
    [PXUIField(DisplayName = "Type", Required = true)]
    [ProjectTaskType.List]
    public string UsrType { get; set; }

    public static bool IsActive()
    {
      return PXAccess.FeatureInstalled<FeaturesSet.construction>();
    }

    public abstract class usrType : BqlType<IBqlString, string>.Field<PmTaskExt.usrType>
    {
    }
  }
}
使用PX.Data;
使用PX.Data.BQL;
使用PX.Objects.CN.ProjectAccounting.PM.Descriptor;
使用PX.Objects.CS;
使用PX.Objects.PM;
命名空间PX.Objects.CN.ProjectAccounting.PM.CacheExtensions
{
公共密封类PmTaskExt:PXCacheExtension
{
[PXDBString(30)]
[默认值]
[PXUIField(DisplayName=“Type”,必需=true)]
[项目任务类型.列表]
公共字符串UsrType{get;set;}
公共静态bool IsActive()
{
返回PXAccess.FeatureInstalled();
}
公共抽象类usrType:BqlType.Field
{
}
}
}
像这样的方法应该会奏效:

var cnExt = PXCache<PX.Objects.PM.PMTask>.GetExtension<PX.Objects.CN.ProjectAccounting.PM.CacheExtensions.PmTaskExt>((PX.Objects.PM.PMTask)e.Row);
var cnExt=PXCache.GetExtension((PX.Objects.PM.PMTask)e.Row);

请注意.Net版本的PX.Objects.CN.dll正在使用4.8,如果您的解决方案是在Acumatica for 19R2的同一版本(4.7.1)上编译的,则可能会导致visual studio中的版本兼容性出现任何问题。您可以使用GetExtension,但需要正确的命名空间。不确定将显示的自定义属性在何处,但如果查看DAC扩展,它可能会指示名称空间。查看构造功能包还可能指示要使用的命名空间。PX.Objects.PM.PMTaskExt ext=PXCache.GetExtension(pmTaskNewEntry);它不起作用,Brendan。我假设这不是名称空间。需要查看PX.Objects.CN.dll才能找到itI使用的“var cnExt=PXCache.GetExtension((PX.Objects.PM.PMTask)e.Row);”但它说“名称空间中不存在ProjectAccounting”。当我在DotPeek中编译dll时,我看不到项目记帐类。我使用DotPeek反编译PmTaskExt类。您使用的是什么版本的构造版?我使用的是Acumatica 2019 R1 Build 19.104.0024构造功能19.104.3199和PX.Object,CN是指。netversion 4.0Hey Brendan。我解决了PX.Object.CN.dll问题。我刚刚从19.205版本中获取了dll,并导入到19.104.0024中。这对我很管用。但我在这里遇到了一个新错误,它是“错误:请求了不正确的扩展类型”。我尝试了两种方法,但都没有成功。我使用的是PX.Objects.CN.ProjectAccounting.PM.CacheExtensions.PmTaskExt cnExt=PXCache.GetExtension(pmTaskNewEntry);PX.Objects.CN.ProjectAccounting.PM.CacheExtensions.PmTaskExt cnExt=projectEntryGraph.Caches[typeof(PMTask)].GetExtension(pmTaskNewEntry);