Добрый день
Подскажите, как сделать следующее:
Если поле ЗИ.Активность заполнено, то можно было бы выбрать номер того Обращения , который подвязан к этому Запросу на Изменение (ЗИ).
Нравится
Откомпилировалось без ошибок, но по-прежнему при определенном номере ЗИ выдает полный список номеров Обращений.
Page.IncidentEdit.PrepareLookupFilter += delegate (object sender, LookupEditEventArgs e) {
if (!Page.ChangeRequestEdit.Value.Equals(Guid.Empty)) {
var filters = e.Filters;
filters.Add(new Dictionary {
{"comparisonType", FilterComparisonType.Equal},
{"leftExpressionColumnPath", "ChangeRequest.Id"},
{"useDisplayValue", false},
{"rightExpressionParameterValues", new object[] {(Guid)Page.ChangeRequestEdit.Value}}});
}
};
В примере по ссылке написано правильно. В обработчике Init, неважно, до или после. Попробуйте отладиться, происходит ли заход в функцию при нажатии на лукап.
так тоже опубликовывает, но не фильтрует:
Page.IncidentEdit.PrepareLookupFilter += delegate (object sender, LookupEditEventArgs e) {
if (!Page.ChangeRequestEdit.Value.Equals(Guid.Empty)) {
var filters = e.Filters;
filters.Add(new Dictionary {
{"comparisonType", FilterComparisonType.Equal},
{"leftExpressionColumnPath", "[ServiceRequestInChangeRequest:Incident].ChangeRequest.Id"},
{"useDisplayValue", false},
{"rightExpressionParameterValues", new object[] {(Guid)Page.ChangeRequestEdit.Value}}});
Посмотрите, как сделано наложение фильтров в других карточках и сделайте аналогично.
Возможно, у Вас другая структура связей между этими таблицами.
Если поле Активность.ЗИ заполнено, в поле Активность.Инцидент нужно поставить фильтр, чтобы при нажатии на лупу выводило список всех номеров Инцидентов, у которых поле Инцидент.ЗИ равен Активность.ЗИ.
Есть связь м/д объектами Запрос на изменение и Инцидент и запрос на обслуживание: ChangeRequestInServiceRequest.
Пишу в ChildInitAfterParentScript на странице карточки задачи:
Page.IncidentEdit.PrepareLookupFilter += delegate (object sender, LookupEditEventArgs e) {
var changerequestId = (Guid)Page.ChangeRequestEdit.Value;
if (changerequestId !=Guid.Empty) {
Collection> filters = e.Filters;
filters.Add(new Dictionary {
{"comparisonType", FilterComparisonType.Equal},
{"leftExpressionColumnPath", "[ChangeRequestInServiceRequest:ServiceRequest].ChangeRequest.Id"},
{"useDisplayValue", false},
{"rightExpressionParameterValues", new object[] {(Guid)Page.ChangeRequestEdit.Value}}});
Опубликовывает без ошибок, но не фильтрует поле Активность.Инцидент - выдает полный список всех имеющихся. Не пойму, что не так, подскажите, пожалуйста.
Татьяна, попробуйте запустить профайлер и посмотрите, что за запросы идут.
Неужели так сложно сделать наложение фильтра?
См. также обсуждение тут и другие обсуждения по фильтрам.
Если у Вас просто отфильтровать по значению поля — то как в первом Вашем фрагменте. Если через развязку многих ко многим — то как во втором.
Если нужно отобрать записи только одного типа и не выводить другого — то фильтруйте тип по равенству с константой.
Если Вы написали код и он не работает — то либо фильтр не накладывается, либо накладывается, но не тот. Вы можете запустить профайлер и посмотреть, какой уходит запрос, затем его запустить в Management Studio и посмотреть, пускает ли фильтр то, что нужно и если нет, то почему.