You need to enable JavaScript to run this app. 2021 R1及以上版本如何为Base.Actions菜单添加自定义操作
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 14:15:08