Как изменить метки раскрывающегося списка Тип документа для AP Payment - PullRequest
1 голос
/ 26 июня 2019

Я пытаюсь изменить метки раскрывающегося списка «Тип документа» в форме оплаты AP, аналогично тому, что я делал со счетом AP в предыдущем вопросе: Как изменить внешний вид типов счета AP (Bill, Корректировка кредита и т. Д.)? . Я пытаюсь изменить метки «Дебет и Кредитная корректировка», чтобы они стали «Кредитом и Дебетовыми авизо» для клиента, который более знаком с этой терминологией. При попытке получить ошибку, ссылающуюся на неодинаковую длину используемых мной массивов.

Я также пытаюсь изменить метки в раскрывающемся списке Тип документа для того, чтобы позиция AP Payment делала то же самое. Однако скомпилированный код не вызывает изменения ни одной из раскрывающихся меток.

Я попытался использовать аналогичный код, используемый для изменения меток типа документа счета-фактуры AP, однако я исключил ссылки на режим миграции, поскольку он не отображается в атрибуте для раскрывающегося списка в AP Payment.

CustomAPPaymentType:

    public class CustomAPPaymentType : APPaymentType
    {
        public new static readonly string[] NewLabels = new string[]
        {
          "Check",
          "Credit Memo",
          "Prepayment",
          "Vendor Refund",
          "Voided Refund",
          "Voided Check"
        };

        public new class ListAttribute : PXStringListAttribute
        {
            public ListAttribute() : base(APPaymentType.Values, 
                                               CustomAPPaymentType.NewLabels )
            {
            }
        }

    }

CustomAPPaymentTypeListAttribute:

    public class CustomAPPaymentTypeListAttribute : 
                                            CustomAPPaymentType.ListAttribute
    {

           public override void CacheAttached(PXCache sender)
           {
                this._AllowedValues = new string[]
                {
                      "CHK",
                      "ADR",
                      "PPM",
                      "REF",
                      "VRF",
                      "VCK"
                };
                this._AllowedLabels = new string[]
                {
                      "Check",
                      "Credit Memo",
                      "Prepayment",
                      "Vendor Refund",
                      "Voided Refund",
                      "Voided Check"
                };
                this._NeutralAllowedLabels = new string[]
                {
                      "Check",
                      "Credit Memo",
                      "Prepayment",
                      "Vendor Refund",
                      "Voided Refund",
                      "Voided Check"
                };
                base.CacheAttached(sender);
           }
     }

APPaymentEntry:

     public class APPaymentEntry_Extension : PXGraphExtension<APPaymentEntry>
     {

            #region Event Handlers
            [PXDBString(3, IsKey = true, IsFixed = true)]
            [PXDefault]
            [CustomAPPaymentTypeList]
            [PXUIField(DisplayName = "Type", Visibility = 
                PXUIVisibility.SelectorVisible, Enabled = true, TabOrder = 0)]
            [PXFieldDescription]

        protected virtual void APPayment_DocType_CacheAttached(PXCache sender)
        {
        }

            [PXDBString(3, IsKey = true, IsFixed = true, InputMask = "")]
            [PXDefault(APDocType.Invoice)]
            [PXUIField(DisplayName = "Document Type", 
                        Visibility = PXUIVisibility.Visible)]
            [CustomAPInvoiceType.AdjdList()]
    protected virtual void APAdjust_AdjdDocType_CacheAttached(PXCache sender)
    {
    }

           #endregion
  }

CustomAPInvoiceType: включает атрибут AdjdListAttribute, чтобы изменить раскрывающийся список «Тип документа ADD»

    public class CustomAPInvoiceType : APInvoiceType
    {

        public new static readonly string[] NewLabels = new string[]
        {
            "Bill",
            "Debit Memo",
            "Credit Memo",
            "Prepayment"
        };

        public new class ListAttribute : PXStringListAttribute
        {
            public ListAttribute() : base(APInvoiceType.Values, 
                                                CustomAPInvoiceType.NewLabels)
            {
            }
        }

        public new class AdjdListAttribute : PXStringListAttribute
        {
            public AdjdListAttribute() : base(APInvoiceType.Values, 
                                                CustomAPInvoiceType.NewLabels)
            {
            }
        }
    }

Я хотел бы, чтобы раскрывающиеся списки в форме оплаты AP для Типа документа и Типа Дополнительного документа отражали изменения, которые я пытаюсь изменить, изменив метки «Дебет» и «Корректировка кредита» на «Кредит» и «Дебетовое авизо». Ошибка, которую я получаю при попытке получить доступ к форме оплаты AP:

Ошибка № 0: длина массива значений не равна длине массива меток. Имя параметра: позволено метками.

Я не уверен, как поступить, похоже, у меня слишком много «Ярлыков» или «Ценностей», но неясно, по какому. Я пытался быть максимально точным по отношению к текущим настройкам для текущих типов платежей APP, какой-нибудь совет, где я ошибся?

1 Ответ

2 голосов
/ 26 июня 2019

1) Чтобы изменить метки поля «Тип документа»: «Корректировка дебета / кредита» на «Дебет / кредитовые авизо» вам не нужно писать какую-либо строку кода.

Этого можно добиться с помощью экрана «Словари перевода» (SM200540). https://www.youtube.com/watch?v=AdHnBtRPOd0

Мы настраиваем атрибут в разработке, когда нам нужно добавить или удалить «Тип документа» из списка строк.

2) Другая причина использования перевода заключается в том, что вы сможете изменить его в нескольких местах приложения (например, в сообщениях), местах, о которых вы еще не думали :), например: «Для оплаты можно выбрать только счета-фактуры и корректировки дебета». . "

Вы сделаете это быстрее, чем решение для разработки :) Также вы можете опубликовать изменения в проекте настройки (локали системы).

3) Хорошая практика: для Labels используйте константы внутри класса PXLocalizable, а не буквальные строки. Таким образом, он будет многоязычным, или клиент сможет «редактировать» любые ярлыки, которые могут понадобиться.

...