Применить сортировку к набору данных в компоненте 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
еще не задокументировано.