#PowerApps キャンパスアプリでリレーションシップ付エンティティを操作する


Common Data Service 第3弾(笑)

最近 CDSばっかり連投していないかって?
それなりに理由がありますが、それはおいおいTwitterにて。

さて今回は

PowerAppsでリレーションシップ付エンティティを操作する方法です。
リレーションシップが付いたエンティティは、モデル駆動型だと
それはそれはものすごーく楽勝に使えるので
ホントめちゃくちゃリレーションはりまくりになるのですが
キャンパスアプリだと、ちょーっと癖がありますので
以下に纏めます。

CDSのエンティティ

#MicrosoftFlow で CommonDataService の 特定レコードを操作する方法
こちらと同じエンティティを使用します。

PowerAppsでのデータ更新方法には二通りあります

Form

Formオブジェクトを使用したやり方ですね。

とりあえずこういう風に読み込んでみましょう

なぜか数式エラーが・・・

これですね。
どうもCDSを読込ませると、こんな風に数式エラーが出てしまいます。

Nameの数式エラー

MaxLengthプロパティがなんかおかしいよ?って言ってきています。
これには曖昧性除去演算子を使用してデータソースを指定する必要があるようです。

Thanks Mina!!

なので、このように書き換えます。

DataSourceInfo([@cds_relation_updt_tbl], DataSourceInfo.MaxLength, "crc70_name")

これで、Nameの数式エラーが消えました。

ユーザーの数式エラー

これも、調べた結果、曖昧性除算演算子を使うことで対処することができます。
発生している箇所はItemsプロパティですね。

このように書き換えます。

Choices([@cds_relation_updt_tbl].crc70_SystemUser)

あとは、表示させたいフィールドを適宜選択することで
選択項目を自由に設定することができるようになります。

Patch関数

もう一つは、Patch関数を指定するやり方です。
こちらは、自分で好きなようにフォームをカスタマイズしたいときに重宝します。

ドロップダウンボックス

ドロップダウンボックスのItemsには、Formの時と同様のパラメータを指定します。

Choices([@cds_relation_updt_tbl].crc70_SystemUser)

そして、Valueにて、一覧として表示する項目を指定します。

送信ボタン

OnSelectにPatch関数を使用します。
以下のように記述すると良いでしょう。

Patch(
    cds_relation_updt_tbl,
    Defaults(
        cds_relation_updt_tbl
    ),
    {
        Name:TextInput1.Text,
        crc70_SystemUser:Dropdown1.SelectedText
    }
)

※Patch関数の詳しい使い方は以下のリファレンスをご確認ください。
https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/functions/function-patch

最後に

Formの数式エラーについては、今後改善される可能性があります。
改善されると、上記で記載したことをすることなく、より簡単に利用することができると思いますので、それまでの間は上記の対応にて回避してください。