Calculate
действие может быть отменено. Ниже приведено готовое действие Calculate
Оно должно быть переопределено, как показано ниже (без каких-либо пользовательских логинов c):
public class ARFinChargesApplyMaintPXExt : PXGraphExtension<ARFinChargesApplyMaint>
{
[PXOverride]
public virtual IEnumerable Calculate(PXAdapter adapter)
{
Base.calculate.Press(adapter);
return adapter.Get();
}
}
Готовое действие Calculate
запускает асинхронную операцию (через PXLongOperation.StartOperation
), создает новый экземпляр Graph
для ARFinChargesApplyMaint
и вызывает метод CalculateFinancialCharges
(который генерирует строки, отображаемые в сетка)
С учетом вышеприведенных наблюдений возможный подход для удовлетворения ваших требований:
- Добавить подтверждение и сохранить значение подтверждения (Да / Нет) в скрытом настраиваемом поле DA C работать с представлением фильтра (
ARFinChargesApplyMaint.ARFinChargesApplyParameters
) перед вызовом Base.calculate.Press(adapter)
. - Переопределить виртуальный метод
CalculateFinancialCharges
и добавить RowInserted
обработчик событий для ARFinChargesApplyMaint.ARFinChargesDetails
DA C, чтобы изменить логи c для поля FinChargeAmt
.
Ниже приведен код для справки
using System;
using PX.Data;
using System.Collections;
using PX.Objects.AR;
namespace DemoPkg
{
public class ARFinChargesApplyMaintPXExt : PXGraphExtension<ARFinChargesApplyMaint>
{
[PXOverride]
public virtual IEnumerable Calculate(PXAdapter adapter)
{
WebDialogResult result = adapter.View.Ask(Base.Filter.Current, "Confirmation",
"Apply Special Calculation (Percent Of Open Balance)?",
MessageButtons.YesNo, MessageIcon.Question);
ARFinChargesApplyMaint.ARFinChargesApplyParameters filterData = Base.Filter.Current;
ARFinChargesApplyParametersPXExt filterDataExt = PXCache<ARFinChargesApplyMaint.ARFinChargesApplyParameters>.GetExtension<ARFinChargesApplyParametersPXExt>(filterData);
filterDataExt.UsrReCalcFinChargeAmt = (result == WebDialogResult.Yes);
Base.Filter.Update(filterData);
Base.calculate.Press(adapter);
return adapter.Get();
}
[PXOverride]
public virtual void CalculateFinancialCharges(ARFinChargesApplyMaint.ARFinChargesApplyParameters filter, Action<ARFinChargesApplyMaint.ARFinChargesApplyParameters> BaseInvoke)
{
ARFinChargesApplyParametersPXExt filterDataExt = PXCache<ARFinChargesApplyMaint.ARFinChargesApplyParameters>.GetExtension<ARFinChargesApplyParametersPXExt>(filter);
if (filterDataExt.UsrReCalcFinChargeAmt.GetValueOrDefault(false))
{
Base.RowInserted.AddHandler<ARFinChargesApplyMaint.ARFinChargesDetails>((sender, e) =>
{
ARFinChargesApplyMaint.ARFinChargesDetails data = (ARFinChargesApplyMaint.ARFinChargesDetails)e.Row;
data.FinChargeAmt = 600.00m; // your custom calculated value
});
}
BaseInvoke(filter);
}
}
public sealed class ARFinChargesApplyParametersPXExt : PXCacheExtension<ARFinChargesApplyMaint.ARFinChargesApplyParameters>
{
#region UsrReCalcFinChargeAmt
public abstract class usrReCalcFinChargeAmt : PX.Data.BQL.BqlBool.Field<usrReCalcFinChargeAmt> { }
[PXDBBool]
[PXDefault(false, PersistingCheck = PXPersistingCheck.Nothing)]
[PXUIField(DisplayName = "Recalc Amount", Visibility = PXUIVisibility.Invisible)]
public bool? UsrReCalcFinChargeAmt { get; set; }
#endregion
}
}
Ниже приведены справочные статьи, которые можно найти в Руководстве по настройке Acumatica
Переопределить метод делегата действия
Изменение BL C Виртуальные методы