[PowerApps Tip's]コンボボックスの初期値を操る、たった2つの方法？

今回は SharePoint Online の選択肢列をデータソースに持つコンボボックスの初期値を設定する方法を紹介します。なお、記事投稿時の仕様で、かつ当方が把握している方法の2つを記載しておきます。
PowerApps のコンボボックスコントロールについては、例えば C# の”SlectedIndex”（初期値はｎ番目の要素で指定する）といった便利なプロパティは存在しません。PowerApps をやる前に他の開発言語をやった経験がある方は、おそらく戸惑うことでしょう。

PowerAppsにおける基本を覚えれば、あとは応用するだけかと思います。なので、基本をしっかり把握してしまえば恐れることは無いかと思います。（※よく、その”基本”を忘れるのでネタにしてる中のヒトなんですけどねｗ）

#前準備
実際のテクニックを紹介するための環境について説明しておきます。

1. SharePoint Online(以降、SPO)のカスタムリスト
データソースとなるカスタムリストを準備します。下イメージのような選択肢列を持つリストからPowerApps アプリを自動生成しておきましょう。
![01.png](https://qiita-image-store.s3.amazonaws.com/0/215892/35203e86-70ba-a5b2-3880-dac4c0173a09.png)

2. 生成された「EditScreen」を確認
この記事では EditScreen（新規投稿・編集）画面のみ利用します。ちなみに、SPOのリストから自動生成した場合、コンボボックスの候補（［Items］プロパティ）が選択肢列へ自動的に設定されています。
![02.png](https://qiita-image-store.s3.amazonaws.com/0/215892/22cb870e-1423-384b-533b-c9f87a75fa8e.png)

3. データカードのロックを解除
フォームの配下にある DataCard の初期状態は操作ミスで事故しないようにロックされており変更ができません。今回はコンボボックスの初期値を操作したいので該当コントロールのロックを解除します。また、1回ロックを解除した後で再度ロックしなおすことは現状できません。
手順は、解除したいコントロールを選択 → ［詳細設定］をクリック → 「プロパティを変更するためにロックを解除します。」をクリック です。
![03.png](https://qiita-image-store.s3.amazonaws.com/0/215892/236cabaf-c5f1-0ebb-dcd4-b18671a70e23.png)

#方法１：Choices 関数を活用
Choices 関数はコンボボックスや、ドロップダウンへデータソースから動的に選択肢（Items プロパティ）を指定する際によく利用されるモノです。SPOのリストから自動生成されたFormでも、この関数が利用されています。

　■参考URL
　[PowerApps の Choices 関数](https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/functions/function-choices)

では、コンボボックスの初期値を思うがままに操りましょう。

1. 数式バーで[DefaultSelectedItems]を選択
関数バーなのか？数式バーなのか？ｗ
![04.png](https://qiita-image-store.s3.amazonaws.com/0/215892/529b1917-1087-568d-3a2a-b70d8e108cf9.png)

2. 初期値を設定する
準備しておいた環境で、例えば先頭から3番目の”選択肢は”を初期値にする場合。ここに数式バーが選択されておるじゃろ？そこに、こうじゃ。

    ```DataCardVlue.DefaultSelectedItems
     Choices(sample02.sentaku,"選択は")
    ```

![05.png](https://qiita-image-store.s3.amazonaws.com/0/215892/96aa9eeb-13ca-ca84-d096-a062f8343c59.png)

###【解説】
**Choices 関数の第2引数**に、Itemsに指定されている選択肢から初期値にしたい値を文字列で指定します。繰り返しますが、下記※の位置に**『初期値にしたい値を文字列で指定』**します。

```
Choices(データソース.要素,"※初期値にしたい値の文字列")
```
なお、初期値にしたい値の文字列が要素に含まれていない場合、選択肢の最初がデフォルト値になります。

#方法２：'@odata.type' を利用
チマタで”おまじない”と言うとか、言わないとか、っていうヤツです。

1. 数式バーで[DefaultSelectedItems]を選択
前述、方法１を参照。

2. 初期値を設定する
準備しておいた環境で、例えば先頭から3番目の”選択肢は”を初期値にする場合。ここに数式バーが選択されておるじゃろ？そこに、こうじゃ。

```DataCardVlue.DefaultSelectedItems
{    
'@odata.type':"#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference"
 ,Value: "選択は"
}
```

![06.png](https://qiita-image-store.s3.amazonaws.com/0/215892/dd20a753-bb4e-5b2c-1c3b-9ddefd43ce47.png)

###【解説】
OData（odata.type）については、公式情報などが殆どそろっておらず、現状では詳細を把握できる情報が発見されていません。ひとまず、下記をコピー＆ペーストして、利用する際には※の位置を**『初期値にしたい値を文字列で指定』**する、というコトだけ把握しておけば何とかなります。このため、おまじない、などと呼ばれております。
当方も細かいトコまで把握できておりませんので、詳細割愛！（汗

```
{    
'@odata.type':"#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference"
 ,Value: "※初期値にしたい値の文字列"
}
```

#まとめ
- PowerApps のコンボボックスは SelectIndex のような番号で指定するプロパティは現状無い
- PowerApps のコンボボックスへ初期値を操作する方法は2つある
    - 方法１：Choices関数を利用する（第2引数がキモ）
    - 方法２：'@odata.type'～ を利用する（おまじない を利用！）

個人的には、方法１が利用できる際は積極的にこちらを利用します。方法２は、どうしても”おまじない”を書かないとダメな場合に利用する、という方針でおります。

なぜか？

方法２については気をつけないといけないポイントがあるため、です。そのため、誤った設定や、ロジックに不備があった場合にデータソースにまで影響する事故になる要因を簡単に作り込めてしまうのです。方法１の Choices 関数を利用するパターンであれば、第2引数が誤っていても Items の先頭が選ばれるだけなので事故を回避できます。さて、その”気をつけるポイント”とは・・・

それは・・・


~~別途、書きます！！（次回ぐらい？？）(;^ω^)~~
書きました。[コンボボックスの初期値を操る際の注意点](https://qiita.com/yamad365/items/3709dc64362776e84db6)をどうぞ！

~~思った以上に長くなってしまったので、記事を分割しますね。~~
それでは、皆さま、素晴らしい Power Platform Life を！