Новые ошибки Acuminator - PullRequest
1 голос
/ 03 июля 2019

Я загрузил последнюю версию Acuminator, и теперь я получаю предупреждения и ошибки в коде, который всегда работал.

Я получаю предупреждение PX1094, что мне нужно 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
}

ЦАПы в настоящее время украшены 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 голосов
/ 05 июля 2019

Я загрузил последнюю версию Acuminator, и теперь я получаю предупреждения и ошибки в коде, который всегда работал.

Цель инструмента Acuminator - обеспечить соблюдение набора стандартовпри создании решения с использованием Acumatica Framework.Оно не предназначено для проверки работоспособности решения, а автоматизированный характер инструмента означает, что он может иногда предлагать что-то, что выглядит ненужным или неоптимальным.В целом компромисс должен повысить качество и однородность кода.

Может ли кто-нибудь объяснить мне, почему требуются изменения?

Непосредственная проблема заключается в том, что изменения необходимы для прохождения валидации Acuminator.Прохождение проверки Acuminator будет применимо, если вы разрабатываете решение ISV и ищете Acumatica ISV Solution Certification.

В настоящее время ЦАП украшены Serializable, но зачем мне также добавлять атрибут PXCacheName?

Больше метаданных лучше, чем меньше.Различные механизмы в системе извлекают имя кэша и отображают его в пользовательском интерфейсе.Возможно, это может быть использовано для создания более значимых или менее технических сообщений об ошибках.В будущем он также может быть использован другими функциями.

Я перешел по ссылке на документацию, и она показывается для настройки локализуемых строк.Я никогда не делал этого, и я не решаюсь изменить рабочий код.

Я думаю, вы можете пропустить полную настройку локализации.Acuminator, вероятно, ищет две вещи:

  1. throw new PXException ("No literal constants");

    Это можно исправить, поместив константы в класс Message:

    выбросить новое исключение PXException (Messages.NamedConstant);

  2. Должна быть минимальная сантехника, чтобы пользователь мог расширять переводы посредством конфигурации.Использование одного из методов PXMessages.Localize позволит выполнить следующее:

    PXMessages.LocalizeNoPrefix (Messages.NamedConstant);

Я не проверял его, но я считаю, что эти дваизменения (пример ниже) будут соответствовать ограничениям Acuminator и не должны создавать нежелательных побочных эффектов в вашей кодовой базе:

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