如何在销售订单BLC中获取客户自定义字段Inner Branch ID的值?
销售订单获取客户自定义字段的解决方案
嘿,刚好我在Acumatica开发中处理过类似的自定义字段场景,来帮你理清这两个问题:
1. 销售订单界面能不能获取客户的自定义字段?
当然可以!在Acumatica里,只要你已经在客户实体上创建了Inner Branch ID这个自定义字段,销售订单界面完全能关联显示它。主要有两种实现方式:
- 界面配置法(不用写代码):打开销售订单页面的设计器,找到你想放置这个字段的位置,添加一个新字段。然后在字段属性里,把
DataField设为客户DAC(比如Customer或BAccount)的自定义字段名,再把DataSource指定为当前订单关联的客户数据源(比如Current<SOOrder>.Customer)。这样只要你选中客户,这个字段就会自动从客户记录里拉取Inner Branch ID的值了。 - 代码扩展法:如果需要更灵活的逻辑(比如字段联动、权限控制),可以扩展
SOOrderEntryBLC,在客户选择完成后,自动把Inner Branch ID同步到销售订单的某个字段(可以是销售订单的自定义字段,也可以只是纯显示用)。
2. 如何在销售订单BLC中获取Inner Branch ID?需要用PXSelect吗?
这个得分情况来看,不是必须用PXSelect,要看你的需求:
情况一:获取当前订单关联客户的Inner Branch ID
如果是当前销售订单已经选中了客户,完全不用额外查库!SOOrderEntry BLC里已经内置了客户视图Base.Customer,当你选好客户后,Base.Customer.Current就是对应的客户记录。假设你的自定义字段是扩展在Customer DAC上的(字段名一般是UsrInnerBranchID,Acumatica自定义字段默认带Usr前缀),代码可以这么写:
// 先拿到当前订单的客户ID int? currentCustomerID = Base.Document.Current?.CustomerID; if (currentCustomerID != null) { // 直接从内置的客户视图取当前记录 Customer currentCustomer = Base.Customer.Current; if (currentCustomer != null) { // 获取扩展字段的值 string innerBranchID = currentCustomer.GetExtension<CustomerExt>().UsrInnerBranchID; // 这里就可以用这个值做后续处理啦 } }
情况二:查询任意特定客户的Inner Branch ID
如果你需要查询某个指定客户ID的这个字段值,那确实可以用PXSelect或者更高效的PXSelectReadonly/PXSelectSingle。举个例子:
int targetCustomerID = 1001; // 替换成你要查询的客户ID // 用PXSelectSingle直接取客户记录 Customer targetCustomer = PXSelectSingle<Customer, Where<Customer.bAccountID, Equal<Required<Customer.bAccountID>>>>.Select(Base, targetCustomerID); if (targetCustomer != null) { string innerBranchID = targetCustomer.GetExtension<CustomerExt>().UsrInnerBranchID; }
或者直接查扩展类:
CustomerExt targetCustomerExt = PXSelectReadonly<CustomerExt, Where<Customer.bAccountID, Equal<Required<Customer.bAccountID>>>>.Select(Base, targetCustomerID); if (targetCustomerExt != null) { string innerBranchID = targetCustomerExt.UsrInnerBranchID; }
小提醒
记得确认你的自定义字段是正确扩展在Customer或BAccount DAC上的,扩展类的命名(比如CustomerExt)和字段名要对应上,不然会拿不到值哦!
内容的提问来源于stack exchange,提问作者JackZeng
相关产品推荐
相关产品推荐

