Power Appsでデータソースによって自動生成できるアプリをアレンジして、飲んだ日本酒を記録するアプリを作るシリーズです。
この記事では、以下のテクニックについて解説しています。
- JSON文字列のコレクション化
- テーブルの結合
- フォームのコントロール変更
フローの追加
前回まででフローを作成していたので、フローを追加します。
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/da1a391485ab76baec2a72fe69c6e096.png)
JSON文字列をコレクションに変換
App.OnStartでJSON文字列をコレクションに変換します。
ParseJSON関数でJSON文字列を変換すると、「型指定されていません。WValue、Text、その他の関数を使用して型指定してください。」というエラーが出ます。
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/eb603865d5bbe51e070bbedc2083e543.png)
データ型がUntypedObject型になっていることが原因であるため、以下のようにText関数やValue関数を用いてデータの型を指定する必要があります。(超めんどくさい)
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/4dc94202b1a0d3864b756f8cde0a0d1f.png)
With(
さけのわ銘柄一覧.Run() As Sakenowa,
Concurrent(
ClearCollect(
ColBrands,
ForAll(
ParseJSON(Sakenowa.brands),
{id:Value(ThisRecord.id), name:Text(ThisRecord.name), breweryId:Value(ThisRecord.breweryId)}
)
),
ClearCollect(
ColAreas,
ForAll(
ParseJSON(Sakenowa.areas),
{id:Value(ThisRecord.id), name:Text(ThisRecord.name)}
)
),
ClearCollect(
ColBreweries,
ForAll(
ParseJSON(Sakenowa.breweries),
{id:Value(ThisRecord.id), name:Text(ThisRecord.name), areaId:Value(ThisRecord.areaId)}
)
),
ClearCollect(
ColRankings,
ForAll(
ParseJSON(Sakenowa.breweries),
{rank:Value(ThisRecord.id), score:Value(ThisRecord.score), brandId:Value(ThisRecord.brandId)}
)
),
ClearCollect(
ColFlavorCharts,
ForAll(
ParseJSON(Sakenowa.'flavor-charts'),
{f1:Value(ThisRecord.f1), f2:Value(ThisRecord.f2), f3:Value(ThisRecord.f3), f4:Value(ThisRecord.f4), f5:Value(ThisRecord.f5), f6:Value(ThisRecord.f6), brandId:Value(ThisRecord.brandId)}
)
),
ClearCollect(
ColFlavorTags,
ForAll(
ParseJSON(Sakenowa.'flavor-tags'),
{id:Value(ThisRecord.id), name:Text(ThisRecord.name)}
)
)
)
);
テーブルの結合
さけのわAPIに登録されていない銘柄をSharePointリストの日本酒マスタに登録していく想定をした時に、アプリ上の日本酒一覧は2つのテーブルを結合して表示する必要があります。
以下の数式で2つのテーブルを結合することが可能です。2つのテーブルに共通している列のみしか表示されないので、RenameColumns関数で列名を変更しています。
Ungroup(
AddColumns(
["API", "SharePoint"],
"Data",
If(
Value = "API",
ColBrands,
RenameColumns([@日本酒マスタ], "ID", "id")
)
),
"Data"
)
2つのテーブルを結合して表示できるようになりました。
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/60f4026966f7224689cbd494fa110f7a.png)
フォームのコントロール変更
フォームのコントロールをコンボボックスに変更して、銘柄の検索とAPIから取得したIDはBrandID列に、SharePointから取得したIDはBrandSPID列に格納されるようにします。
データカード内のコントロールを選択した状態で、挿入→入力よりコンボボックスを選択します。
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/f2dbedc38f390a8e68baff5d25e7d949.png)
データカードのロックを解除します。
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/d07847c2b715b6d14cd775fd645dea00.png)
コンボボックスの位置やサイズを調整したら、以下のプロパティを元々のテキスト入力コントロールからコピペします。
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/8d3f1c63d06f68dc80e4305777691a9e.png)
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/22142ba63bb30a0db17bfa2bc71af02b.png)
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/b93491e4bec816104f29a24e7da2914a.png)
コンボボックスのItemsプロパティを先ほど作成した結合テーブルの数式に変更します。
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/602ce7e8ee39dedfe9cf51f46a6a8413.png)
コンボボックスのフィールドを以下のように変更します。
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/b32d5c1daa897316615e1ab9f5d01a3a.png)
プロパティのコピーと変更が完了したら、元々のテキスト入力コントロールの名前(DataCardValue28)をコピーしてコントロールを削除します。
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/0d93c5d142d76b93ad45a8d2ba763af5.png)
元々のテキスト入力コントロールを削除します。
削除するとエラーが表示されるので、追加したコンボボックスの名前をコピーしたコントロールの名前に変更します。
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/e3a8703b317beb791f8fa4359fe087b7.png)
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/cecf1ac87e2867be17126b796334e87a.png)
Updateプロパティの変更
Updateプロパティが型エラーまたはプロパティエラーとなっているので、型を合わせる必要があります。
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/54673fe65605fda38615eb9b1e6cdcf9.png)
BrandID列には選択した銘柄がAPIのデータである時のみIDを格納したいので、以下の数式を設定します。
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/4c115ae077138c4e1bb3da027287c172.png)
逆にBrandSPID列には選択した銘柄がSharePointのデータである時のみIDを格納したいので、以下の数式を設定します。
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/97be675aed64ef379860a6fe40492866.png)
最後にBrandIDのDisplayNameを銘柄名に、BrandSPIDのカードのVisibleプロパティをfalseに設定して入力画面は完成です。
![](https://powerplatformnikki.com/wp-content/uploads/2023/12/a465bfcd5b96c2f4801f4dce155ae98b.png)
コメント