Acumatica — состояние дел Comboxbox

#acumatica

#acumatica

Вопрос:

мы добавили некоторые дополнительные параметры статуса в поле статуса на экране обращений, используя шаги автоматизации, и это работает так, как ожидалось. Теперь наше требование — отображать параметры статуса в алфавитном порядке, отсортированном по возрастанию. Может кто-нибудь, пожалуйста, подсказать нам, как этого добиться.

Мы находимся в Acumatica 2019 R2

  public class SelectableDataTypes : PXStringListAttribute
    {
        public string[] AllowedLabels = new string[]
        {
            "A","B","C"
        };

        public string[] AllowedValues = new string[]
        {
            "ValueA","ValueB","ValueC"            
        };
    }

    protected virtual void CRCase_RowSelected(PXCache sender, PXRowSelectedEventArgs e, PXRowSelected BaseEvent)
        {
            BaseEvent?.Invoke(sender, e);

            CRCase doc = e.Row as CRCase;

            if (doc == null)
                return;

            PXStringListAttribute.SetList<CRCase.status>(Base.Case.Cache, null, new SelectableDataTypes().AllowedValues, new SelectableDataTypes().AllowedLabels);
        }
  

Ответ №1:

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

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

Создайте класс, который наследует от PXStringListAttribute, и определите массив строк для AllowedLabels и один для AllowedValues . Включите нужные параметры, отсортированные в нужном порядке. Для этого примера мы предположим, что это определено в классе с именем MySelectableData .

 public class SelectableDataTypes : PXStringListAttribute
{

    public string[] AllowedLabels = new string[]
    {
            Messages.FieldLabelA,
            Messages.FieldLabelB,
            Messages.FieldLabelC,
            Messages.FieldLabelD,
            Messages.FieldLabelE,
            Messages.FieldLabelF,
    };

    public string[] AllowedValues = new string[]
    {
            DataValues.ValueA,
            DataValues.ValueB,
            DataValues.ValueC,
            DataValues.ValueD,
            DataValues.ValueE,
            DataValues.ValueF,
    };
}
  

Опять же, поскольку ваша цель — отсортировать выбранные элементы, обязательно перечислите их в отсортированном порядке.

Если список динамический, поместите следующее (с логикой для переключения между списками) в событие RowSelected. Если он статичен для страницы (что более вероятно в описанном вами случае), поместите его в метод инициализации для страницы.

 PXStringListAttribute.SetList<MyDAC.myField>(
    MyView.Cache,
    null,
    new MySelectableData.SelectableDataTypes().AllowedValues,
    new MySelectableData.SelectableDataTypes().AllowedLabels
);
  

SetList в PXStringListAttribute позволит вам переопределить список, как показано здесь, заменив ваши пользовательские параметры на ранее определенные параметры.