如何在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
相关产品推荐
相关产品推荐

