2021 R1及以上版本如何为Base.Actions菜单添加自定义操作
2021 R1及之后版本自定义Actions下拉菜单项的适配实现
2021 R1版本对框架的动作菜单模块做了架构重构,旧版非公开的Base.actions(小写命名)属性已完全移除,原有菜单注册能力统一迁移到公开的动作操作入口下,适配无额外复杂依赖,具体实现分两类常见场景:
场景1:自定义方法未提前定义为PXAction委托
直接在重写的Initialize方法中通过公开的Base.Actions(Pascal命名,和旧版小写属性不是同一个对象)完成注册,参考代码:
public override void Initialize() { base.Initialize(); // 初始化动作需要的上下文适配器(无特殊参数需求时可留空) var actionAdapter = new PXAdapter(Base); // 注册自定义菜单项,自动渲染到页面的Actions下拉菜单中 Base.Actions.Add<YourPrimaryDAC>( actionName: "NewMethod", menuCaption: "菜单上显示的自定义功能名称", actionHandler: (sender, e) => ExecuteNewMethod(actionAdapter) ); } // 自定义方法的业务逻辑 protected virtual void ExecuteNewMethod(PXAdapter adapter) { // 原有NewMethod的业务代码 }
场景2:自定义方法已提前在Graph中定义为标准PXAction委托
无需重复编写委托逻辑,直接在初始化阶段将已定义的动作加入公开Actions集合即可:
// Graph中提前定义的标准动作 public PXAction<YourPrimaryDAC> NewMethod; [PXButton(Category = "Actions")] [UIField(DisplayName = "菜单上显示的自定义功能名称")] protected virtual void newMethod() { // 原有NewMethod的业务代码 } // 重写Initialize完成注册 public override void Initialize() { base.Initialize(); // 直接将已定义的动作加入集合,自动出现在下拉菜单中 Base.Actions.Add(this.NewMethod); }
适配注意事项
- 新旧属性核心差异:旧版的
Base.actions是框架内部的私有存储结构,无公开操作权限;新版公开的Base.Actions是对外提供的统一动作操作入口,类型为PXSequence,所有菜单注册、权限配置、渲染逻辑都统一通过该入口完成 - 旧版
AddMenuAction的全量能力(菜单项排序、自定义图标、权限校验、层级嵌套)都可以通过Base.Actions.Add的重载参数实现,无能力缺失 - 不需要额外引入扩展方法或第三方依赖,所有注册逻辑都可以在Graph的生命周期内完成
- 如果需要将菜单项固定渲染在Actions下拉分组中,需要在PXButton特性中指定
Category = "Actions",否则默认会将按钮渲染在页面顶部工具栏的独立位置
内容的提问来源于stack exchange,提问作者pmfith
相关产品推荐
相关产品推荐

