#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. «