Non-Stock Items屏幕子账户选择器用户字段配置咨询
配置和标准SubAccount字段逻辑一致的自定义子账户选择器
我来帮你理清Acumatica里SubAccount属性的工作机制,以及怎么快速配置出和Non-Stock Items屏幕标准字段完全一致的自定义子账户选择器。
先搞懂SubAccount属性的核心作用
你之前用PXSelector配置Account字段没问题,但子账户和主账户是强关联的,Acumatica专门提供了SubAccount这个专用属性——它封装了标准子账户选择器的所有内置逻辑:自动关联当前主账户、匹配公司分支、过滤用户有权限访问的子账户、验证子账户有效性,甚至连选择器的显示格式(子账户ID+描述)都帮你搞定了,比手动写PXSelector省超多代码。
一步步配置自定义子账户字段
1. 在DAC扩展中定义字段
假设你是在InventoryItem的扩展DAC里加自定义字段,直接用SubAccount属性即可,核心是要指定关联的主账户字段(也就是Non-Stock Items里标准Account字段对应的InventoryItem.accountID):
public class InventoryItemExtension : PXCacheExtension<PX.Objects.IN.InventoryItem> { #region UsrCustomSubAccountID // 第一个参数绑定主账户字段,自动过滤关联的子账户 [SubAccount(typeof(InventoryItem.accountID), DisplayName = "自定义子账户", DescriptionField = typeof(SubAccount.description))] public virtual int? UsrCustomSubAccountID { get; set; } public abstract class usrCustomSubAccountID : PX.Data.BQL.BqlInt.Field<usrCustomSubAccountID> { } #endregion }
2. 在ASPX页面添加选择器控件
不需要额外复杂配置,直接绑定到自定义字段就行,SubAccount属性已经内置了选择器的所有行为:
<px:PXLayoutRule runat="server" StartRow="True" /> <px:PXSelector ID="edUsrCustomSubAccountID" runat="server" DataField="UsrCustomSubAccountID" />
和你之前的Account字段配置对比
你用PXSelector配置Account字段是正确的,因为Account本身是独立的主数据;但子账户必须依赖主账户,SubAccount属性帮你自动处理了:
- 当主账户切换时,子账户选择器自动过滤出仅关联该主账户的子账户
- 自动匹配当前登录的公司分支,只显示该分支下的子账户
- 自动应用用户的子账户权限,看不到无权访问的子账户
- 验证子账户是否有效(比如是否被停用)
如果用普通PXSelector手动实现这些逻辑,你需要写大量的Where条件、权限检查代码,而SubAccount属性一行就搞定了。
注意事项
- 确保你的扩展DAC正确引用了
InventoryItem的accountID字段,这样选择器才能正确关联主账户 - 如果你的自定义字段需要绑定其他主账户(比如不是InventoryItem的accountID),只需要修改
SubAccount属性的第一个参数即可 - 测试时可以切换不同的主账户,看看子账户选择器是否自动过滤,这是验证逻辑是否和标准字段一致的关键
内容的提问来源于stack exchange,提问作者pmfith
相关产品推荐
相关产品推荐

