对 PowerApps 组件 (PCF) 中的数据集应用排序

Apply a sort to a dataset in a PowerApps component (PCF)

我正在尝试创建一个新的数据集类型 Powerapps 组件 (PCF)。目前,我正在使用它来显示 Microsoft Dynamics CRM 中实体中可用的记录视图。

我希望在单击网格列 header 时让视图自行排序(与默认 CRM 网格视图的方式类似)。我正在尝试弄清楚如何对数据集应用排序,以便我可以按照 dataset.refresh() 函数的文档所示刷新它:

Refreshes the dataset based on filters, sorting, linking, new column. New data will be pushed to control in another 'updateView' cycle.

数据集object确实有一个“排序”属性,但是改变它的值然后刷新数据集似乎没有任何效果。刷新后,排序 属性 恢复到我更改之前的值。

简而言之,网格 header 的点击处理程序执行类似于以下代码的操作。刷新完成,我的 updateView() 函数按预期被调用,但未应用排序。

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

任何有关使数据集排序正常工作的帮助都将不胜感激。

这里的文档非常糟糕,但这是我将一些不同的信息放在一起的最佳猜测。

TLDR:我认为需要在 .sorting 属性 上调用某种额外的方法,但我找不到出它的名字。也许是这样的:

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

我认为您将不得不尝试一堆可能的方法名称,看看哪些有效。

背景和链接:

唯一reference I could find to dataset.sorting was from here:

In this preview for canvas apps, only a limited set of filtering and sortStatus methods are supported. Filter and sort can be applied to dataset on primary type columns except for the GUID. Filter and sorting can be applied in the same way as in model-driven apps.To retrieve the dataset with filtering and sorting information, call the methods in context.parameters.[dataset_property_name].filtering and context.parameters.[dataset_property_name].sorting, then invoke the context.parameters.[dataset_property_name].refresh().

所以看起来.filtering.sorting属性的处理方式类似,并且有一些附加方法,只有一些被支持。这几乎是他们所能做到的最模糊的...

I did find an example of how .filtering is used:

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

有一个简短的reference to .setFilter() in the docs, as well as FilterExpression

有一个SortStatus reference,但它没有显式调用任何对应的方法。这可能在 public 预览中还不是受支持的功能,或者缺少文档并且您需要在 .sorting 上调用的方法的名称和语法尚未记录。

我最近对 ​​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 });

我还没有真正弄清楚这种行为的原因。排序数组可以在后台实现为某种形式的 可观察集合

我希望这会指导您找到一个有效的解决方案。