You need to enable JavaScript to run this app. 如何在Acumatica自定义项目中创建带2个选项卡的选择器
优惠活动
大模型
产品
解决方案
定价
更多

如何在Acumatica自定义项目中创建带2个选项卡的选择器

Acumatica自定义带多选项卡选择器实现方案

你需要的这种带分栏选项卡的选择器在Acumatica体系中叫多视图选择器(Multi-View Picker),可以通过自定义PXSelector属性搭配多个数据视图实现,完全匹配你提到的PJ304000屏幕的原生实现逻辑,具体操作步骤如下:

步骤1:在业务逻辑图(Graph)中定义两个对应选项卡的BQL视图

两个视图分别对应「全部记录」「项目代码」的过滤规则,示例代码如下:

// 对应「全部记录」选项卡:返回所有已激活的项目数据
public PXSelect<PMProject, Where<PMProject.isActive, Equal<True>>> AllProjects;

// 对应「项目代码」选项卡:返回过滤了内部项目、模板项目的正式业务项目
public PXSelect<PMProject, Where<PMProject.isActive, Equal<True>, 
    And<PMProject.isInternal, Equal<False>, 
    And<PMProject.isTemplate, Equal<False>>>>> BusinessProjects;

步骤2:在目标DAC字段上声明带多视图配置的PXSelector

在你需要挂载选择器的自定义DAC字段上,配置PXSelector的多视图参数,指定选项卡顺序和显示名称:

[PXDBInt()]
[PXUIField(DisplayName = "关联项目")]
[PXSelector(
    typeof(PMProject.contractID),
    SubstituteKey = typeof(PMProject.contractCD),
    DescriptionField = typeof(PMProject.description),
    // 绑定步骤1中定义的两个视图
    Views = new[] { "AllProjects", "BusinessProjects" },
    // 指定两个选项卡的显示名称,顺序和上方Views数组对应
    ViewNames = new[] { "全部记录", "项目代码" },
    Filterable = true
)]
public virtual int? UsrProjectID { get; set; }
public abstract class usrProjectID : PX.Data.BQL.BqlInt.Field<usrProjectID> { }

步骤3:适配自定义业务逻辑

  • 如果需要关联当前屏幕的上下文做过滤,直接在对应视图的BQL语句中加入上下文参数即可,比如关联当前单据的客户ID、生效日期范围等规则
  • 如果需要调整不同选项卡下的展示列,可以在对应视图的CacheAttached特性中单独配置字段可见性,无需修改页面代码

注意事项

该实现方式兼容Acumatica 2021R2及以上所有版本,无需调整Aspx页面代码,所有功能逻辑都在DAC/Graph层完成,和PJ304000屏幕的项目选择器原生实现逻辑完全一致。

内容的提问来源于stack exchange,提问作者eddiedaco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 10:06:03