首页 > 解决方案 > Acumatica - 复合主键选择器

问题描述

如何为复合主键创建单独的选择器...像 OrderNbr 和 Revision nbr ...我在从 Order Nbr 选择器中选择值时遇到问题,如果修订 nbr 字段是默认值,它会设置值,否则 Order nbr 选择器无法设置Revision nbr 字段中的值..如何在从任何选择器中选择值时设置这两个字段。

标签: acumaticacomposite-key

解决方案


解决方案是让一个选择器查询引用另一个关键字段。

使用两个选择器控件 OrderType 和 OrderNumber 的销售订单示例:

// User selects the OrderType first
[PXSelector(typeof(Search<SOOrderType.orderType>))]

// OrderNumber Selector reference current OrderType value in selector query
[PXSelector(typeof(Search<SOOrder.orderNbr,
                   Where<SOOrder.orderType, Equal<Current<this.orderType>>>>)]

您还需要将该AutoRefresh属性设置为,True以便选择器在每次重新打开选择器对话框时重新执行查询。这确保它在示例中按订单类型正确过滤。

<px:PXSelector ID="edOrderType" runat="server" DataField="OrderType"
               AutoRefresh="True" CommitChanges="True" DataSourceID="ds">

<px:PXSelector ID="edOrderNbr" runat="server" DataField="OrderNbr" 
               AutoRefresh="True" CommitChanges="True" DataSourceID="ds">

严格不可能让单个选择器对话框选择需要多个字段唯一的记录。在这些特殊情况下,另一种解决方案是添加另一个唯一的字段并根据该字段选择记录。请注意,对于您的用例,最好使用两个选择器控件。

为了实现这个替代解决方案Identity,在数据库中添加一个类型列作为唯一字段,并用PXDBIdentity属性装饰匹配的 DAC 字段。保持其他键不变。身份字段将自动递增,并根据选择器正常运行所需的单个字段保证唯一性。


推荐阅读