我试图在UnionDeductions视图中为PRCalculationEngine.cs视图提供一个数据视图委托
我注意到,这个视图在基本图中没有定义的数据视图委托,声明有点“不同”,因为它使用了BQL Fluent类。
如果可以,是否可以在扩展中引入数据视图委托,是否有不同的方法来声明委托?
业务案例是,客户端需要根据某些员工属性(服务期限等)修改工会扣减的金额,并需要动态修改金额。
由于GetBenefits和CalculateRegularBenefitNominalAmount方法的私有和受保护的访问权限,我看到这样做的唯一方法是在计算福利/扣减金额之前过载数据视图委托并更改扣减/福利金额.
公共部分类PRCalculationEngine : PXGraph
{.
公共UnionDeductionQuery UnionDeductions;
...
当我试图在扩展中为这个视图定义一个dataview委托时,我不能让dataview委托‘开火’,也就是说,代码总是在基本视图上运行.Select,而不是执行委托。
这是扩展代码公共类PRCalculationEngine_Ext1ESP : PXGraphExtension的核心。
{公共静态bool IsActive() {返回IsActive}
#region Select Overrides
public PRCE.UnionDeductionQuery UnionDeductions;
protected System.Collections.IEnumerable unionDeductions()
{
foreach (PXResult<PREarningDetail, PRDeductionAndBenefitUnionPackage, PRDeductCode, EPEarningType> result in
UnionDeductions.Select())
{
//修改这里的包裹数量..。
收益回报结果;
}
}
#endregion
}
这就是如何在基图中调用视图
(IGrouping> resultGroup in UnionDeductions.Select(deductionCode.CodeID) .Select(x => (PXResult)x) .GroupBy(x => (PREarningDetail)x).RecordID){
如有任何建议或意见,将不胜感激。
发布于 2022-03-14 07:28:26
如果要求覆盖也引用其他受保护方法的基本数据视图委托的逻辑,请尝试这样做是否有帮助:
首先,使用PXProtectedAccess属性和要重写的方法创建基类的扩展,如下所示:
[PXProtectedAccess]
public abstract class PRCalculationEngine_FirstExt : PXGraphExtension<PRCalculationEngine>
{
[PXProtectedAccess]
public abstract DedBenAmount CalculateRegularBenefitNominalAmount(
PRDeductCode deductCode,
PREmployeeDeduct employeeDeduct,
PRPaymentDeduct paymentDeduct);
}
然后从基类和上面创建的第一个扩展创建第二个扩展(实际的图扩展)。
public class PRCalculationEngine_Extension : PXGraphExtension<PRCalculationEngine_FirstExt, PRCalculationEngine>
{
// Here declare the view, write the PXOverride method, and access the protected methods of the base graph by referencing those as Base1.CalculateRegularBenefitNominalAmount()
}
请注意,上面的代码段只是为了给出一个指示。我并没有真正在PRCalculationEngine上工作,也没有测试过该代码,但是在不同的图上做了类似的更改来覆盖dataview委托。如果有帮助请告诉我。谢谢。
https://stackoverflow.com/questions/71389848
复制相似问题