В POOrderEntry при создании или удалении POLine мне нужно отправить ссылку обратно на пользовательский ЦАП, который создает линию PO. Например, если строка PO удалена, мой пользовательский ЦАП удалил ссылку в Events.RowDeleted через:
using (PXTransactionScope ts = new PXTransactionScope())
{
Base.Caches[typeof(MyDAC)].SetValueExt<MyDAC.pOType>(row, null);
Base.Caches[typeof(MyDAC)].SetValueExt<MyDAC.pONbr>(row, null);
Base.Caches[typeof(MyDAC)].SetValueExt<MyDAC.pOLineNbr>(row, null);
Base.Caches[typeof(MyDAC)].Update(row);
Base.Caches[typeof(MyDAC)].Persist(PXDBOperation.Update);
ts.Complete(Base);
}
Я пытался разрешить обычному Persist сохранять значения, но это не такесли я не позвоню Persist (последняя строка моего примера выше). Результатом является ошибка через Acuminator «Изменения не могут быть сохранены в базе данных из обработчика событий». Когда я смотрю на это, мне интересно, должно ли это быть в длительной операции, а не в области транзакций, но ошибка Acuminator говорит мне, что я делаю это неправильно. Как правильно вернуться к «MyDAC» для каждой линии PO?
Я также попытался инициализировать экземпляр графа для графа MyDAC, но я получаю предупреждение о создании PXGraph в обработчике событий. поэтому я не могу «легально» вызвать граф, в котором поддерживается MyDAC.
Мой код компилируется и функционирует так, как нужно, но ошибка в Acuminator говорит мне, что для этого должен быть более правильный способ.