Применить сортировку к набору данных в компоненте PowerApps (PCF)

Я пытаюсь создать новый тип набора данных Powerapps Component (PCF). В настоящий момент я использую его для отображения записей, доступных в сущности в Microsoft Dynamics CRM.

Я хочу выполнить сортировку самого представления, когда я нажимаю заголовки столбцов сетки (аналогично тому, как это делается в представлении сетки CRM по умолчанию). Я пытаюсь понять, как применить сортировку к набору данных, чтобы я мог обновить его, как указано в документации для функции dataset.refresh():

Обновляет набор данных на основе фильтров, сортировки, связывания, нового столбца. Новые данные будут переданы в управление в другом цикле updateView.

У объекта набора данных есть свойство "сортировки", но изменение его значения и последующее обновление набора данных не имеет никакого эффекта. После обновления свойство сортировки возвращается к значению, которое было до того, как я его изменил.

Короче говоря, обработчик щелчка для заголовка сетки делает что-то вроде следующего фрагмента кода. Обновление выполнено, и моя функция updateView() вызывается, как ожидалось, но сортировка не применялась.

dataset.sorting = [{name: 'createdon', sortDirection: 1}];
dataset.refresh();

Любая помощь по настройке сортировки набора данных будет принята с благодарностью.

2 ответа

Решение

Недавно я немного поэкспериментировал с PowerApps Component Framework и могу подтвердить, что следующий код не будет работать:

dataSet.sorting = [ { name: "columnName", sortDirection: 0 } ];

Однако мне удалось заставить это работать для меня:

dataSet.sorting.pop(); // you may want to clean up the whole collection
dataSet.sorting.push({ name: "columnName", sortDirection: 0 });

Я так и не понял причину такого поведения. Массив сортировки может быть реализован как некоторая форма наблюдаемой коллекции в фоновом режиме.

Я надеюсь, что это поможет вам найти работающее решение.

Документация здесь довольно ужасна, но вот мое лучшее предположение, объединяющее несколько разных частей информации.

TL; DR: я думаю, что есть какой-то дополнительный метод, который нужно вызвать в.sortingсобственность, но я не могу узнать, как она называется. Может быть что-то вроде:

dataset.sorting.setSorting({name: 'createdon', sortDirection: 1});

Я думаю, вам придется попробовать несколько вероятных имен методов и посмотреть, что работает.

Справочная информация и ссылки:

Единственная ссылка, которую я смог найтиdataset.sorting был отсюда:

В этой предварительной версии для приложений холста поддерживается только ограниченный набор методов фильтрации и sortStatus. Фильтр и сортировку можно применить к набору данных по столбцам основного типа, за исключением GUID. Фильтр и сортировку можно применять так же, как и в приложениях на основе модели. Чтобы получить набор данных с информацией для фильтрации и сортировки, вызовите методы вcontext.parameters.[dataset_property_name].filtering а также context.parameters.[dataset_property_name].sorting, затем вызовите context.parameters.[dataset_property_name].refresh().

Так кажется, что .filtering а также .sortingсвойства обрабатываются аналогично, и что к ним привязаны некоторые методы, и только некоторые из них поддерживаются. Это настолько расплывчато, насколько они могли это сделать...

Я нашел пример того, как .filtering используется:

    _context.parameters.sampleDataset.filtering.setFilter({
      conditions: conditionArray,
      filterOperator: 1, // Or
    });

Есть краткая ссылка на.setFilter()в документации, а также FilterExpression

E сть SortStatusссылка, но у нее нет явно вызванных соответствующих методов. Возможно, эта функция еще не поддерживается в общедоступной предварительной версии или отсутствует документация, а также имя и синтаксис метода, который необходимо вызвать..sorting еще не задокументировано.

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