Acumatica 自定义逻辑在基本操作“之前不会触发”;批准;

Acumatica 自定义逻辑在基本操作“之前不会触发”;批准;,acumatica,Acumatica,当我在“申请中批准”屏幕之前执行自定义逻辑时,逻辑似乎是在之后触发的。我的代码如下 公共行动; [PXUIField(DisplayName=“Actions”)] [按钮] 受保护的虚拟IEnumerable操作(PXAdapter, [PXInt][PXIntList(新的int[]{1,2},新的字符串[]{“批准”,“拒绝”})]int?actionID, [PXBool]bool刷新, [PXString]字符串操作名) { 如果(adapter.Menu==“批准”) { SIApp

当我在“申请中批准”屏幕之前执行自定义逻辑时,逻辑似乎是在之后触发的。我的代码如下

公共行动;
[PXUIField(DisplayName=“Actions”)]
[按钮]
受保护的虚拟IEnumerable操作(PXAdapter,
[PXInt][PXIntList(新的int[]{1,2},新的字符串[]{“批准”,“拒绝”})]int?actionID,
[PXBool]bool刷新,
[PXString]字符串操作名)
{
如果(adapter.Menu==“批准”)
{
SIApprovalInfo.updateNextApprover(this.Base);
}
返回基地。行动。按下(适配器);
}
我尝试了这个动作,但没有调用
返回Base.action.Press(adapter)

示例代码:

公共行动;
[PXUIField(DisplayName=“Actions”)]
[按钮]
受保护的虚拟IEnumerable操作(PXAdapter,
[PXInt][PXIntList(新的int[]{1,2},新的字符串[]{“批准”,“拒绝”})]int?actionID,
[PXBool]bool刷新,
[PXString]字符串操作名)
{
如果(adapter.Menu==“批准”)
{
SIApprovalInfo.updateNextApprover(this.Base);
}
返回适配器Get();
}

但该文件仍在以某种方式获得批准。那么,这一批准究竟是在哪里触发的呢?如何在该操作之前添加自定义逻辑?

我建议一种解决方法,即创建您自己的操作,将其添加到菜单中,并根据您的业务逻辑调用批准。以下是您可以使用的基本代码段:

使用PX.Data;
使用系统集合;
名称空间PX.Objects.RQ
{
公共类RQRequisitionEntry_扩展:pXgrapherExtension
{
公共覆盖无效初始化()
{
Base.action.AddMenuAction(CustomApprove);
CustomApprove.SetEnabled(true);
}
公共行动计划;
[按钮]
[PXUIField(DisplayName=“自定义批准”)]
受保护的虚拟IEnumerable customApprove(PXAdapter)
{
PXCache cache=Base.Caches[typeof(RQRequisition)];
var请购单=Base.Document.Current;
if(基本批准、批准(申请))
{
请购单.已批准=真;
退货基地.单据.更新(请购单);
}
其他的
{
抛出新的PXInvalidOperationException(PXLocalizer.Localize(“批准失败”);
}
}
}
}

我建议一种解决方法,即创建您自己的操作,将其添加到菜单中,并根据您的业务逻辑调用批准。以下是您可以使用的基本代码段:

使用PX.Data;
使用系统集合;
名称空间PX.Objects.RQ
{
公共类RQRequisitionEntry_扩展:pXgrapherExtension
{
公共覆盖无效初始化()
{
Base.action.AddMenuAction(CustomApprove);
CustomApprove.SetEnabled(true);
}
公共行动计划;
[按钮]
[PXUIField(DisplayName=“自定义批准”)]
受保护的虚拟IEnumerable customApprove(PXAdapter)
{
PXCache cache=Base.Caches[typeof(RQRequisition)];
var请购单=Base.Document.Current;
if(基本批准、批准(申请))
{
请购单.已批准=真;
退货基地.单据.更新(请购单);
}
其他的
{
抛出新的PXInvalidOperationException(PXLocalizer.Localize(“批准失败”);
}
}
}
}