新的算子错误

时间:2019-07-03 20:46:50

标签: acumatica

我加载了最新版本的Acuminator,现在在始终有效的代码上出现警告和错误。

我收到一个PX1094警告,表明图形中某些本地DAC上需要PXHidden或PXCacheName。 现有代码:

[Serializable]
public partial class EDGetOrderFilter : IBqlTable
{
    #region ReviewType
}

[Serializable]
public partial class EDIGetOrder : PX.Data.IBqlTable
{
    #region Selected
    // Fields from Exception table 
    #region ExceptID
    #region intID
    #region ExceptReason
    #region ImportDate
}

DAC当前以Serializable装饰,但是为什么还需要添加PXCacheName属性?我假设我只需要:

[PXCacheName ("EDGetOrderFilter")]
[PXCacheName ("EDIGetOrder")]

新属性对我有什么作用?

在抛出带有文字的异常时,我也遇到了PX1050错误

if (cntr == 0)
    throw new PXException("No active Partner Data entries!");

我点击了文档的链接,并显示了如何设置可本地化的字符串。我从来没有做过,我很犹豫要更改工作代码。有人可以向我解释为什么需要更改吗?
文档中的代码:

[PXLocalizable]
public static class Messages
{
    public const string SpecialText = "Hardcoded String";
    public const string SpecialTextToFormat = "Hardcoded String To Format {0}";
}

public string PXLocalizerAll()
{
    string localizedString;
    object parameter = new object();

    localizedString = PXLocalizer.Localize(Messages.SpecialText);
    localizedString = PXLocalizer.Localize(Messages.SpecialText, typeof(MyMessages).FullName);
    localizedString = PXLocalizer.LocalizeFormat(Messages.SpecialTextToFormat, parameter);

    return localizedString;
}
public class LocalizationExceptions
{
    public void ExceptionsLocalization()
    {
        throw new PXArgumentException(nameof(ExceptionsLocalization), Messages.SpecialText);
    }
}

public class DetailNonLocalizableBypassedException : PXException
{
    public object ItemToBypass { get; }
    public DetailNonLocalizableBypassedException(object itemToBypass)
        : base(Messages.SpecialText)
    {
        ItemToBypass = itemToBypass;
    }
}

我从未使用过本地化逻辑,并且对它不熟悉。我想正确编写代码,但是我需要了解所做的更改。

1 个答案:

答案 0 :(得分:0)

  

我加载了最新版本的Acuminator,现在我得到了   关于始终有效的代码的警告和错误。

Acuminator工具的目的是在使用Acumatica Framework构建解决方案时强制执行一组标准。这并不意味着要验证解决方案是否正常工作,并且该工具的自动化性质意味着它可能偶尔会提出一些看起来不必要或次优的建议。总体而言,这种权衡应该带来更高的代码质量和统一性。

  

有人可以向我解释为什么需要更改吗?

当务之急是更改必须通过Acuminator验证。如果您正在开发ISV解决方案并寻求Acumatica ISV解决方案认证,则需要通过Acuminator验证。

  

DAC当前使用Serializable装饰,但是为什么我需要   还添加PXCacheName属性吗?

元数据多于少。系统中的各种机制将获取Cache名称并将其显示在UI上。也许可以将其用于生成更有意义或更不严重的技术错误消息。将来也可以将其用于更多功能。

  

我点击了文档链接,该链接显示在安装程序中   可本地化的字符串。我从来没有做过,我很犹豫要改变   工作代码。

我认为您也许可以跳过完整的本地化设置。促进者可能正在寻找两件事:

  1. 引发新的PXException(“ Noliteral constants”);

    可以通过将常量放在Message类中来解决此问题:

    引发新的PXException(Messages.NamedConstant);

  2. 应该尽量减少管道,以便用户可以通过配置扩展翻译。使用PXMessages.Localize方法之一将实现以下目的:

    PXMessages.LocalizeNoPrefix(Messages.NamedConstant);

我尚未对其进行测试,但我相信这两个更改(下面的示例)将满足Acuminator的约束,并且不应在您的代码库中产生不良的副作用:

throw new PXException(PXMessages.LocalizeNoPrefix(Messages.NamedConstant));