我正在尝试使用PowerApps创建一个库存应用,目前每个项目属于主要类别,并且至少有一个子类别。一个小例子是这样的:
Concessions
| Food
| Chips
| Brand 1
| Brand 2
| Brand 3
| Candy
| Chocolate
| Brand 1
| Brand 2
| Hard
| Gum
| Grill
| Drinks
Travel Goods
| TravelGoodsSubCat
这是在google工作表(以及同一本书中另一张工作表中的库存数据)中保存的,如下所示:
CatID CatName ParentCat
1 Concessions 0
2 Travel Goods 0
3 Food 1
4 Chips 3
5 Candy 3
6 TravelGoodsSubCat 2
.... And So on....
所以我想象的是两个画廊,一个横跨屏幕顶部的画廊,只显示属于类别0的孩子的类别。第二个画廊显示当前类别下的每个项目。因此,如果用户在水平库中选择“让步”,则垂直图库应填充分配给类别1,3,4,5等的所有项目。
在我看来,如何实现递归搜索以寻找所有这些可能的子类别?
答案 0 :(得分:1)
这是可以实现的,但为了使性能不会显着降低,您需要首先在集合中缓存类别表。如果您使用Google表格作为数据源,情况尤其如此。
然后你可以创建一个包含两列的集合:CatID和UltimateParentCat,如下所示:
CatID UltimateParentCat
1 1
2 2
3 1
4 1
5 1
6 2
这是您将使用递归的地方,但是对每一步进行编码,因此您需要停留在您期望的最大深度。
因此,您需要将应用程序的OnStart属性或某个按钮的OnSelect属性设置为类似的内容,以便只填充一次。
ClearCollect(CachedCategories, GoogleSheetsTable);
ClearCollect(Step_1,
AddColumns(
ShowColumns(
Filter(CachedCategories, ParentCat=0),
"CatID"
),
"UltimateParentCat", CatID
)
);
Clear(Step_2);
ForAll(Step_1,
Collect(Step_2,
AddColumns(
ShowColumns(
Filter(CachedCategories, ParentCat=Step_1[@CatID]),
"CatID"
),
"UltimateParentCat", Step_1[@UltimateParentCat])
));
Clear(Step_3);
ForAll(Step_2,
Collect(Step_3,
AddColumns(
ShowColumns(
Filter(CachedCategories, ParentCat=Step_2[@CatID]),
"CatID"
),
"UltimateParentCat", Step_2[@UltimateParentCat])
));
ClearCollect(CatsWithUltimate, Step_1, Step_2, Step_3)
完成后,水平图库的Items属性应为
Filter(CachedCategories, ParentCat=0)
然后,垂直图库的Items属性应为
Filter(Products,
ProductCategory in Filter(CatsWithUltimate,
UltimateParentCat=GalleryHorizontal.Selected.CatID).CatID)
请告诉我上面的任何拼写错误,以便我可以解决。
作为旁注,我建议迁移到另一个数据源,如Azure SQL数据库,只是生成CatsWithUltimate作为视图。