如何在Acumatica活动屏幕(CR306010)判断点击的按钮类型
区分Acumatica活动屏幕(CR306010)的Save、Save & Close、Complete按钮点击
嘿,我来帮你搞定在Acumatica活动屏幕里区分这三个按钮点击的问题!我们可以通过重写对应按钮的处理逻辑,结合PXContext.Session.SetString来标记当前点击的按钮类型,之后在需要的地方读取这个标记即可。下面分按钮逐一说明:
1. 处理Complete按钮
你已经找对了方向——重写markAsCompleted方法是捕捉Complete按钮点击的正确方式,下面是完整的代码示例:
public class CRActivityMaintExt : PXGraphExtension<CRActivityMaint> { public delegate void markAsCompletedDelegate(); [PXOverride] public void markAsCompleted(markAsCompletedDelegate baseMethod) { // 标记当前点击的是Complete按钮 PXContext.Session.SetString("ClickedButton", "Complete"); // 执行原方法的默认逻辑 baseMethod(); } }
2. 处理Save和Save & Close按钮
这两个按钮最终都会触发数据持久化,但我们可以直接给对应的按钮Action添加前置逻辑来区分:
public override void Initialize() { base.Initialize(); // 为Save按钮添加点击标记 Base.SaveButtonPressed.AddHandler((sender, e) => { PXContext.Session.SetString("ClickedButton", "Save"); }); // 为Save & Close按钮添加点击标记 Base.SaveAndClose.AddHandler((sender, e) => { PXContext.Session.SetString("ClickedButton", "SaveAndClose"); }); }
3. 读取按钮标记(在需要的逻辑中使用)
在你需要判断按钮类型的代码位置,读取Session中存储的标记即可:
string clickedButton = PXContext.Session.GetString("ClickedButton"); switch(clickedButton) { case "Save": // 执行Save按钮对应的自定义逻辑 break; case "SaveAndClose": // 执行Save & Close按钮对应的自定义逻辑 break; case "Complete": // 执行Complete按钮对应的自定义逻辑 break; }
小提醒
记得在使用完标记后,最好清除Session中的值,避免后续逻辑被旧标记干扰:PXContext.Session.SetString("ClickedButton", null);
内容的提问来源于stack exchange,提问作者Taras
相关产品推荐
相关产品推荐

