Управление поиском приложений на основе модели 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);

}

Этот скрипт работает с нуля и начинает фильтровать данные после того, как я нажимаю "Все записи". Он не фильтрует недавно использованные элементы. Я попытался отключить недавно использованные элементы на элементе управления, но затем фильтр больше не работает должным образом. Это похоже на неправильное обновление (или применение фильтра), если я не перейду от недавно использованных элементов к представлению "Все записи". Вместо этого он просто не показывает никаких предметов. Есть идеи?

0 ответов

Другие вопросы по тегам