На экране счетов и корректировки мне нужно установить, чтобы проект и задача были включены условно

#acumatica

#acumatica

Вопрос:

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

Чтобы сделать это, я использовал переопределенное событие RowSelected, но, похоже, это не работает. Дополнительный контекст здесь заключается в том, что вступают в действие настройки карты утверждения.

Вот код для переопределения события RowSelected, которое, как я думал, сработает, но не работает:

     protected void APInvoice_RowSelected(PXCache cache, PXRowSelectedEventArgs e, PXRowSelected InvokeBaseHandler)
    {
        if (InvokeBaseHandler != null)
            InvokeBaseHandler(cache, e);

        var apinv = (APInvoice)e.Row;

        if (apinv != null)
        {

            APRegister apreg = PXSelect<APRegister, Where<APRegister.refNbr, Equal<Required<APRegister.refNbr>>>>.Select(Base, apinv.RefNbr);

            if (apreg.Released != true)
            {

                PXUIFieldAttribute.SetEnabled<APTran.projectID>(Base.Transactions.Cache, null, true);
                PXUIFieldAttribute.SetEnabled<APTran.taskID>(Base.Transactions.Cache, null, true);
            }
        }
    }
  

Может кто-нибудь объяснить, почему это не позволяет включить эти поля? Есть ли другой способ сделать это (за исключением полной репликации события RowSelected в исходном коде)?

Большое спасибо…

Ответ №1:

Не уверен, что кэш, на который вы ссылаетесь, находится в том же «состоянии» (за неимением лучшего слова). попробуйте заменить Base.tran …. с помощью PXCache, который вы получаете «cache»

  protected void APInvoice_RowSelected(PXCache cache, PXRowSelectedEventArgs e, PXRowSelected InvokeBaseHandler)
    {
        try
           {
                if (InvokeBaseHandler != null)
                InvokeBaseHandler(cache, e);
                PXUIFieldAttribute.SetEnabled<APTran.projectID>(cache, null, true);
                PXUIFieldAttribute.SetEnabled<APTran.taskID>(cache, null, true);
           }
    catch(System.Exception) {}
    }
  

Комментарии:

1. Нет, это не помогает. Я пробовал это раньше. Тем не менее, спасибо…

2. Я предполагаю, что этот код будет работать только после создания apreg. Я обновил свой ответ

3. К сожалению, это переопределяет базовое событие, и все в конечном итоге включается. Что я хочу сделать, так это запустить базовое событие (которое отключает все те функции, которые необходимо отключить на этом экране, например, VendID), но затем после этого включить только эти конкретные поля. Если я добавлю ‘InvokeBaseHandler’, то пользовательский код для включения этих полей, похоже, не работает…

4. верно, добавляя это обратно. Обычно я расширяю свои функции, а не перезаписываю.

5. Нет — по-прежнему не включает поля Проекта и Задачи. Они остаются отключенными.

Ответ №2:

Для поддержки Acumatica:

«Я тестировал это на 20R102 и 20R109. Это сработало только позже, что означает, что это, скорее всего, ошибка.

Я проверю это с помощью engineering, но мне известно о некоторых ошибках APInvoice, которые были устранены начиная с 20R104. «