Acumatica 我如何纠正来自Acuminator的PX1011警告?(它建议密封类,但这会导致错误列表中出现错误)

Acumatica 我如何纠正来自Acuminator的PX1011警告?(它建议密封类,但这会导致错误列表中出现错误),acumatica,Acumatica,我需要向SOOrder添加一个新字段,并更新另一个字段的属性。这两个类都继承PXCacheExtension,并且都给出一个PX1011警告 由于PXCacheExtension不支持多级继承,因此可以将派生类型标记为密封。我最初在Acumatica 2018R1中对其进行了扩展,但将代码从定制项目中移到了我的Visual Studio扩展库中 我从以下几点开始: public class SOOrderExt : PXCacheExtension<PX.Objects.SO.SOOrde

我需要向SOOrder添加一个新字段,并更新另一个字段的属性。这两个类都继承PXCacheExtension,并且都给出一个PX1011警告 由于PXCacheExtension不支持多级继承,因此可以将派生类型标记为密封。我最初在Acumatica 2018R1中对其进行了扩展,但将代码从定制项目中移到了我的Visual Studio扩展库中

我从以下几点开始:

public class SOOrderExt : PXCacheExtension<PX.Objects.SO.SOOrder>
并且got CS1061“SOOrderExt”不包含“UsrMyField”的定义,并且没有可访问的扩展方法“UsrMyField”;无法找到接受类型为“SOOrderExt”的第一个参数

原始的PX1011警告是我应该忽略的,还是有什么特别的需要遵循指南使其密封,或者知道密封类是不合适的

简言之,我如何使这些渐尖警告消失,而不简单地抑制并仍然定义我的字段


我正在使用Visual Studio 2019社区版和Acuminator 1.6.1的2018R2 Build 18.212.0033上。

您需要声明属性,但虚拟关键字似乎没有必要。否则,如果sealed=no virtual和no virtual=no自定义字段,则警告为疏忽

如果没有virtual关键字,此缓存扩展似乎工作正常:

public sealed class SOLineExt : PXCacheExtension<PX.Objects.SO.SOLine>
{
    #region UsrField
    [PXDBString(12)]
    [PXUIField(DisplayName="Field")]

    // Ommit declaring the type as virtual
    public /*virtual*/ string UsrField { get; set; }
    public abstract class usrField : PX.Data.BQL.BqlString.Field<usrField> { }
    #endregion
}

您需要声明属性,但virtual关键字似乎不是必需的。否则,如果sealed=no virtual和no virtual=no自定义字段,则警告为疏忽

如果没有virtual关键字,此缓存扩展似乎工作正常:

public sealed class SOLineExt : PXCacheExtension<PX.Objects.SO.SOLine>
{
    #region UsrField
    [PXDBString(12)]
    [PXUIField(DisplayName="Field")]

    // Ommit declaring the type as virtual
    public /*virtual*/ string UsrField { get; set; }
    public abstract class usrField : PX.Data.BQL.BqlString.Field<usrField> { }
    #endregion
}

它主要起作用。。。我实际上有3个字段。2.看起来很完美。第三个具有基于当前SOOrder客户的选择器。我看到的这个字段和其他两个带选择器的字段之间的唯一区别是使用了Current。也就是说,实际上。。。工作起来很有魅力。在第一次点击此字段的选择器之前,我没有选择客户。将客户分配到销售订单后,我忘记刷新选择器中的列表。解决方案很简单,因此是完美的!从C的角度来看,在密封的类上使用虚拟对象是没有意义的。这将同时声明扩展类的意图和不扩展类的意图。这就是为什么C会阻止它。从针灸的角度来看,可能会有所不同。有一些反射用于检查DAC。如果它检查虚拟字段的存在,可能会产生不良的副作用。我仍然认为删除虚拟没有什么影响,但是针灸方面并没有像C方面那样的绝对保证。它主要起作用。。。我实际上有3个字段。2.看起来很完美。第三个具有基于当前SOOrder客户的选择器。我看到的这个字段和其他两个带选择器的字段之间的唯一区别是使用了Current。也就是说,实际上。。。工作起来很有魅力。在第一次点击此字段的选择器之前,我没有选择客户。将客户分配到销售订单后,我忘记刷新选择器中的列表。解决方案很简单,因此是完美的!从C的角度来看,在密封的类上使用虚拟对象是没有意义的。这将同时声明扩展类的意图和不扩展类的意图。这就是为什么C会阻止它。从针灸的角度来看,可能会有所不同。有一些反射用于检查DAC。如果它检查虚拟字段的存在,可能会产生不良的副作用。我仍然认为删除虚拟版并没有什么影响,但Acumatica方面并没有像C方面那样的绝对保证。
public sealed class SOLineExt : PXCacheExtension<PX.Objects.SO.SOLine>
{
    #region UsrField
    [PXDBString(12)]
    [PXUIField(DisplayName="Field")]

    // Ommit declaring the type as virtual
    public /*virtual*/ string UsrField { get; set; }
    public abstract class usrField : PX.Data.BQL.BqlString.Field<usrField> { }
    #endregion
}