Acumatica:为日记账交易(GL301000)网格添加员工选择器
实现日记账交易网格添加员工选择器方案
没问题,咱们把日记账交易(GL301000)网格里的员工选择器完整实现出来。你已经搭好了DAC扩展的架子,接下来咱们补全代码并完成页面配置:
1. 补全GLTran的DAC扩展代码
首先把你的DAC扩展补全,添加员工字段并配置选择器属性,确保能正确关联系统员工数据:
using PX.Common; using PX.Data.ReferentialIntegrity.Attributes; using PX.Data; using PX.Objects.AP; using PX.Objects.CM; using PX.Objects.CR; using PX.Objects.CS; using PX.Objects.EP; using PX.Objects.GL; using PX.Objects.IN; using PX.Objects.PM; using PX.Objects.TX; using PX.Objects; using System; public class GLTranExt : PXCacheExtension<GLTran> { #region UsrEmployeeID [PXDBInt] // 配置员工选择器,关联EP.Employee表,显示编码和名称 [PXSelector( typeof(Search<EP.Employee.bAccountID>), typeof(EP.Employee.acctCD), typeof(EP.Employee.acctName), SubstituteKey = typeof(EP.Employee.acctCD), DescriptionField = typeof(EP.Employee.acctName) )] // 限制只能选择当前分支的员工(可选,根据业务需求开启) // [PXRestrictor(typeof(Where<EP.Employee.branchID, Equal<Current<AccessInfo.branchID>>>), "员工必须属于当前分支")] [PXUIField(DisplayName = "员工")] public virtual int? UsrEmployeeID { get; set; } public abstract class usrEmployeeID : PX.Data.BQL.BqlInt.Field<usrEmployeeID> { } #endregion }
代码说明:
PXSelector:指定选择器关联的员工表,设置显示的字段(员工编码、名称),用编码作为快速输入的替代键,名称作为描述提示PXRestrictor:可选配置,用来限制只能选择当前登录分支下的员工,符合多分支场景的权限控制PXUIField:设置字段在界面上的显示名称
2. 将字段添加到GL301000页面的网格中
你可以通过Acumatica的可视化定制器操作,或者直接修改ASPX代码:
方式一:可视化定制器操作
- 打开GL301000日记账交易页面,点击右上角的定制按钮进入定制模式
- 找到页面中的交易网格(默认名称为
transactionsGrid),右键选择添加列 - 在字段选择器的扩展字段分类下,找到
UsrEmployeeID字段,添加到网格中 - 调整字段的显示顺序、宽度等样式,点击保存完成定制
方式二:直接修改ASPX代码(开发环境)
找到GL301000对应的ASPX文件,在transactionsGrid的<Columns>节点中添加以下代码:
<px:PXGridColumn DataField="UsrEmployeeID" Width="150" />
3. 部署与测试
- 编译并发布你的DAC扩展项目
- 登录Acumatica系统,打开GL301000页面,新建或编辑日记账交易,就能在网格中看到员工选择器,点击即可选择系统中的员工数据
注意事项
- 确保操作的用户角色拥有访问
EP.Employee表的权限,否则选择器无法加载员工数据 - 如果需要在保存日记账时做额外的业务验证,可以在Graph扩展中编写事件处理逻辑(比如
RowPersisting事件) - 若需要该字段在报表或查询中可见,需确保字段的权限设置正确,同时在报表设计中添加该扩展字段
内容的提问来源于stack exchange,提问作者Dane
相关产品推荐
相关产品推荐

