Acumatica 新渐尖器误差

Acumatica 新渐尖器误差,acumatica,Acumatica,我加载了Acuminator的最新版本,现在我在一直有效的代码上收到警告和错误 我收到一个PX1094警告,在图形中的一些本地DAC上需要一个PXHidden或PXCacheName。 现行守则: [Serializable] public partial class EDGetOrderFilter : IBqlTable { #region ReviewType } [Serializable] public partial class EDIGetOrder : PX.Data.

我加载了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;
    }
}
我从未使用过本地化逻辑,也不熟悉它。我想正确地编写代码,但我需要了解更改的作用

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

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

有人能给我解释一下为什么需要修改吗

最直接的问题是需要更改以通过渐尖器验证。如果您正在开发ISV解决方案并寻求Acumatica ISV解决方案认证,则通过Acuminator验证将适用

DAC当前使用可串行化进行装饰,但为什么我需要 还要添加PXCacheName属性吗

元数据越多越好。系统中的各种机制将获取缓存名称并将其显示在UI上。也许它可以用来生成更有意义或技术性较差的错误消息。将来,它还可以被更多功能使用

我跟随了文档的链接,它显示给安装程序 可本地化字符串。我从来没有这样做过,我犹豫是否要改变 工作代码

我认为您可以跳过完整的本地化设置。Acuminator可能会寻找两件事:

  • 抛出新的PXException(“无文字常量”)

    这可以通过将常量放入消息类中来解决:

    抛出新的PXException(Messages.NamedConstant)

  • 应该有最小的管道,以便用户可以通过配置扩展翻译。使用其中一条PXMessages.Localize方法将完成以下任务:

    PXMessages.LocalizeNoPrefix(Messages.NamedConstant)

  • 我还没有测试过它,但我相信这两个更改(下面的示例)将满足Acuminator约束,并且不会在您的代码库中产生不良的副作用:

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

    谢谢你提供的细节。这个项目目前还没有提交ISV认证,但我想确保我遵循了未来的标准,以防我们想要追求它。首先,使缓存名称与DAC名称相同可以吗?第二,我可以创建一个本地消息类,还是需要将它放在一个特殊的位置?另外,当我想使用String.Format函数在消息中包含变量文本时,如何创建常量?更新-我找到了如何将格式与LocalizeFormatNoPrefix一起使用。我还创建了local类,看起来还不错。在哪里可以找到Localize和LocalizeNoFormat之间差异的详细信息?>在哪里可以找到Localize和LocalizeNoFormat之间差异的详细信息?它们只是为您编写String.Format的包装器。这里有文档:>首先,可以将缓存名称与DAC名称相同吗?第二,我可以创建一个本地消息类,还是需要将它放在一个特殊的位置我看不出有什么不好。