Управление поиском приложений на основе модели PowerApp PreSearch и addCustomFilter
Я разрабатываю PowerApp на основе модели. У меня есть в основной сущности поле списка опций, в котором пользователю нужно выбрать регион. На основе этого выбора я хотел бы, чтобы он отфильтровал параметры в поле поиска, в котором пользователь выбрал бы соответствующую службу. Цель фильтрации - отфильтровать только услуги, доступные для этого региона.
Я обнаружил, что могу создать веб-ресурс java-скрипта и использовать addCustomFilter и PreSearch и запустить его с помощью события onchange в поле региона для фильтрации столбца поиска https://docs.microsoft.com/en-us/powerapps/ разработчик / модели-приложения / clientapi / ссылка / элементы управления / addcustomfilter
Я разработал приведенный ниже код. Это не вызывает никаких ошибок, но и не фильтрует данные в поле поиска. Я протестировал, чтобы убедиться, что он вытягивает поле региона, добавляя код для установки значения текстового поля в поле региона, и это работает, поэтому я не понимаю, почему оно не фильтруется и что я делаю неправильно.
// A namespace defined for SDK sample code
// You should define a unique namespace for your libraries
var Sdk = window.Sdk || {};
// set 'Sdk.setServiceFilter' in the Case form onchange event handler region field
Sdk.setServiceFilter = function (executionContext) {
// get the form context
formContext = executionContext.getFormContext();
//get region field value
var region=formContext.getAttribute("cssp_region").getText();
if (region != 'global') {
//Prepare Condition for the filter
Sdk.filterServices = function () {
// Only show services where region is like selected region
var ServicesFilter = "<filter type='and'><condition attribute='cssp_regiontext' operator='like' value='%" + region + "%' /></filter>";
formContext.getControl("cssp_service").addCustomFilter(ServicesFilter, "cssp_service");
}
//Apply filter to the lookup field
formContext.getControl("cssp_service").addPreSearch(Sdk.filterServices);
}
}
Хорошо, я смог настроить свой скрипт на следующее и начал с нового поля поиска (т.е. удалил существующее поле поиска, которое у меня было, и добавил новое в форму)
SetLookupField = function(executionContext) {
formContext = executionContext.getFormContext();
formContext.getControl("cssp_service").addPreSearch(FilterService);
}
FilterService = function() {
var Region = formContext.getAttribute("cssp_region").getText();
var ServiceFilter = "<filter type = 'and'><condition attribute = 'cssp_regiontext' operator = 'like' value = '%"+Region+"%'/></filter>"
formContext.getControl("cssp_service").addCustomFilter(ServiceFilter);
}
Этот скрипт работает с нуля и начинает фильтровать данные после того, как я нажимаю "Все записи". Он не фильтрует недавно использованные элементы. Я попытался отключить недавно использованные элементы на элементе управления, но затем фильтр больше не работает должным образом. Это похоже на неправильное обновление (или применение фильтра), если я не перейду от недавно использованных элементов к представлению "Все записи". Вместо этого он просто не показывает никаких предметов. Есть идеи?