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

# Common Data Service 第3弾(笑)
最近 CDSばっかり連投していないかって？
それなりに理由がありますが、それはおいおいTwitterにて。

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

# CDSのエンティティ
[#MicrosoftFlow で CommonDataService の 特定レコードを操作する方法](https://qiita.com/rnakamuramartiny/items/a96fe14bae498e414078)
こちらと同じエンティティを使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/2f7866a5-4009-3889-217e-ac0d998101a7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/1997aac2-ade7-5a87-04ff-35446763ce3a.png)

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

## Form
Formオブジェクトを使用したやり方ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/86980f77-fd62-7f66-4e3f-52a9819f97f7.png)

とりあえずこういう風に読み込んでみましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/64a6ecfc-d22e-7dbe-ab83-d10c782e46a3.png)

### なぜか数式エラーが・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/f461a05a-1b28-959e-a7a0-fcdcf62d634f.png)

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

#### Nameの数式エラー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/95522181-7575-5fc6-c32c-fbd1782ff268.png)

MaxLengthプロパティがなんかおかしいよ？って言ってきています。
これには曖昧性除去演算子を使用してデータソースを指定する必要があるようです。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">曖昧性除去演算子ですねー</p>&mdash; Mina (@ma_00336) <a href="https://twitter.com/ma_00336/status/1164374996417781761?ref_src=twsrc%5Etfw">August 22, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Thanks Mina!!

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

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

これで、Nameの数式エラーが消えました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/c0b0b757-a274-3bbe-315f-295889a0fc83.png)

#### ユーザーの数式エラー

これも、調べた結果、曖昧性除算演算子を使うことで対処することができます。
発生している箇所はItemsプロパティですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/c5d29400-6dc4-3984-c4db-e80d68cda6de.png)

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

```
Choices([@cds_relation_updt_tbl].crc70_SystemUser)
```

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/f7de135b-540c-49e5-8de8-e3bcaa49e655.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/6b0960f8-d063-3420-12ad-1953797bd1d3.png)

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

```
Choices([@cds_relation_updt_tbl].crc70_SystemUser)
```

そして、Valueにて、一覧として表示する項目を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/bf2382bf-80c2-7fb1-08d2-7680d7882d2d.png)

### 送信ボタン
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の数式エラーについては、今後改善される可能性があります。
改善されると、上記で記載したことをすることなく、より簡単に利用することができると思いますので、それまでの間は上記の対応にて回避してください。