overriding - Acumatica 覆盖 ARFinChargesApplyMaint 图的计算操作
问题描述
需要覆盖计算逾期费用 (AR507000) 计算操作。打算尝试覆盖整个CalculateFinancialCharges,但这似乎令人生畏(甚至不确定是否可能)。在我的扩展类中,我只想做一些后期处理:如果在运行基本计算逻辑后在 ARFinChargeRecords 上找到行,则提示用户。如果他们回答是,遍历 ARFinChargeRecords 并更新 FinChargeAmt:当前发票余额 * .02
我对 Acumatica 开发非常陌生,并且已经完成了所有 T 课程。这是我要解决的第一个现实问题,但我运气不佳。看来 Base.calculate 会调用自己?我尝试使用发票发布操作覆盖的示例,但这似乎有所不同。
这是我迄今为止在我的扩展课程中所拥有的,但到目前为止还没有真正起作用。var row1 = row 仅用于断点/调试目的:
public PXAction<ARFinChargesApplyMaint.ARFinChargesApplyParameters> Calculate;
[PXButton]
[PXUIField(DisplayName = "Calculate")]
protected void calculate()
{
Base.calculate.Press();
//int iCachedData = 0;
//foreach (var row in Base.ARFinChargeRecords.Cache.Cached)
//{
// iCachedData++;
// yield return row;
//}
//if (iCachedData > 0)
//{
if (Base.ARSetup.Ask("Apply Special Calculation (Percent Of Open Balance)", MessageButtons.YesNo) == WebDialogResult.Yes)
{
foreach (var row in Base.ARFinChargeRecords.Cache.Cached) {
var row1 = row;
}
// update FinChargeAmount with Balance * .02
// Base.ARFinChargeRecords
// Base.ARInvoices.
}
// }
}
解决方案
Calculate
动作可以被覆盖。以下是开箱即用的Calculate
操作
它应该被如下覆盖(没有任何自定义逻辑):
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
方法(生成显示在网格中的行)
根据上述观察,解决您的要求的可能方法是:
ARFinChargesApplyMaint.ARFinChargesApplyParameters
在调用之前添加确认并在 DAC 的隐藏自定义字段中存储确认值(是/否)与过滤器视图 ( ) 一起使用Base.calculate.Press(adapter)
。- 覆盖虚拟方法
CalculateFinancialCharges
,并为 DAC 添加RowInserted
事件处理程序ARFinChargesApplyMaint.ARFinChargesDetails
以更改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 定制指南
推荐阅读
- html - 如何使用 encoding/xml 在 Go 中忽略 html 属性?
- kotlin - 检查空值后显示空值安全错误
- oracle - 如何从有吸引力的报告中显示下载的 pdf 中的页眉值
- c# - 仅带数字的制表符的文档签名
- python - apriori算法中确定频繁项集生成的最小支持阈值
- c# - 在 C# 中向操作系统语言添加自定义键盘布局
- javascript - lodash orderBy 尝试使其不区分大小写时出现问题
- php - 如何在php中以父子格式从mysql中检索数据?
- partitioning - 加载自定义 u-boot 脚本
- c++ - 具有显式初始化程序的类的内存分配