У меня есть пользовательское поле в расширении SOOrder DAC, которое представляет собой сумму некоторых строк в документе (на основе поля в расширении SOLine).Когда я добавляю новую строку, итог обновляется правильно.Однако, когда я загружаю документ в первый раз, на экране отображается 0,00.Я создал расширение SOOrderEntry и поместил код в обработчик событий SOLine_RowSelecting.Когда я загружаю документ, он входит в код и выглядит так, как будто он правильно устанавливает поля, но они не отображаются на экране.Тот же метод вызывается из SOLine_CuryLineAmt_FieldUpdated, и это прекрасно работает.Вот код, который я использую:
public class SOOrderEntryExt : PXGraphExtension<SOOrderEntry>
{
//Used to prevent recursive calls in RowSelecting
bool _isCalculating = false;
protected virtual void SOLine_RowSelecting(PXCache cache, PXRowSelectingEventArgs e)
{
var row = e.Row as SOLine;
if (row == null) return;
using (new PXConnectionScope())
{
if (!_isCalculating)
CalcTotals();
}
}
protected virtual void SOLine_CuryLineAmt_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
{
if (!_isCalculating)
CalcTotals();
}
public void CalcTotals()
{
SOOrder order = Base.CurrentDocument.Select();
if (order == null) return;
_isCalculating = true;
var orderExt = order.GetExtension<SOOrderExt>();
orderExt.UsrMyCustomField = 0m;
//Get totals
foreach (SOLine lineSum in Base.Transactions.Select())
{
var lineSumExt = lineSum.GetExtension<SOLineExt>();
if (lineSumExt.UsrMyCondition)
orderExt.UsrMyCustomField += lineSum.CuryLineAmt;
}
_isCalculating = false;
}
}