Решение состоит в том, чтобы один запрос селектора ссылался на другое ключевое поле.
Пример для заказа клиента, который использует два селектора управления 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
в базу данных в качестве уникального поля и украсьте соответствующее поле DA C атрибутом PXDBIdentity
, Сохраните остальные ключи как есть. Поле идентификатора будет автоматически увеличиваться автоматически и гарантировать уникальность на основе одного поля, которое требуется для правильной работы селектора.