PowerAppsを触ってみた備忘録

## はじめに
PowerAppsを計30時間程触ってみたので、自分用の備忘録書きます。
30時間の中では、以下のようなサンプルも作成しました。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/PowerApps?src=hash&amp;ref_src=twsrc%5Etfw">#PowerApps</a> で日報サンプルアプリ作成できた！<br>一つの日報に複数の訪問先を登録する方法について悩んでたけど、下記のサイトに救われました。<a href="https://t.co/U8sp7XJ8RE">https://t.co/U8sp7XJ8RE</a> <a href="https://t.co/FKRAODrNGy">pic.twitter.com/FKRAODrNGy</a></p>&mdash; go-kawano (@go_kawano) <a href="https://twitter.com/go_kawano/status/1095235024125812737?ref_src=twsrc%5Etfw">2019年2月12日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/PowerApps?src=hash&amp;ref_src=twsrc%5Etfw">#PowerApps</a> 試したかったことできた！リストの項目をモーダル表示して編集する。 <a href="https://t.co/JX0vC8KKIz">pic.twitter.com/JX0vC8KKIz</a></p>&mdash; go-kawano (@go_kawano) <a href="https://twitter.com/go_kawano/status/1098919255708299264?ref_src=twsrc%5Etfw">2019年2月22日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


## アプリ作成でやること（キャンバスアプリ）
- データの箱を決める(sharepoint,excel,database,etc..)
- データ項目を決める
- レイアウトを大体決める
- データソースと接続する
- 処理、プロパティを書く
- 実行して動作テスト

## 用語
- ```コントロール```：リボンから挿入できるパーツ（テキストフォーム、ラジオボタン、ギャラリー等）
- ```スクリーン```：画面
- ```プロパティ```：各画面、コントロールの設定値
- ```関数```： f(x)で書く処理
- ```コレクション```：PowerAppsのローカル上で保持できるテーブルみたいなもの


## よく使うコントロール
- ```テキスト入力```：テキストの入力フォーム。単一行か複数行かは設定してた方が良い。
- ```コンボボックス```：選択肢は```items```プロパティで設定。```Choise```でデータソースから参照するか```["選択肢1","選択肢2"]```のように記述する
- ```ギャラリー```：接続したデータソースを一覧で表示する。コレクションも可。どの項目を表示させるかはプロパティのフィールド⇒編集から設定できる。
- ```フォーム```：接続したデータソースの入力フォームを自動で作成してくれる。新規モードと編集モードがある。デフォルトが編集モードになっているので注意。
- ```アイコン```：下の方にある図形はよく使う

## よく使うプロパティ項目（自分で手を入れる部分）
- ```default```： デフォルト値　
- ```OnVisible```：画面が表示された時の処理　初期化、変数定義に使うことが多い
- ```OnSelect```：ボタンが押された時の処理
- ```item``` ：コントロールが参照するデータソース、コレクションを設定できる。設定し忘れること結構ある
- ```Visible```：表示、非表示

## よく使う関数
- ```Navigate("スクリーン名","画面遷移のエフェクト")```：画面遷移処理
- ```Submit("フォーム名")```：フォームで入力されたデータを入力フォームが接続しているデータソースにINSETする
- ```Patch("データソース名","データソースの列名と入れる値")```：データソースにデータをインサートする。コレクションでも可
- ```Clear(コレクション名)```：コレクションを初期化する。
- ```Reset("入力フォーム名")```：入力フォームをクリアする
- ```User()```：サインインしているユーザーの情報を取得できる
- ```Now()```：現在日時取得。実際は```Text( Now(), "[$-ja-JP]yyyy/mm/dd" )```みたいにフォーマットして使う
- ```Filter("テーブル名","条件")```:条件にマッチしたレコードを複数返す
- ```LookUp("テーブル名","条件")```：条件にマッチした最初のレコードを返す
- ```Collect("コレクション名",{"列名：値"},{...})```：コレクションを作成する
- ```Set("変数名","値")```：グローバル変数を決める
- ```Select("コントローラー名")```：指定したコントローラー名と同じ処理をさせる<br>⇒ギャラリーの各カードの中のボタンに```Select(Parent)```とすると選択された項目の値がとれるようになる（"ギャラリー名.Selcted"が使える）


## 詰まったポイント
- フォームのレイアウトはプロパティで列数を決定する
- NewForm（新規モード）はSubmitすると表示が消えるので、itemにdefault(テーブル名)をしておく。
- コンボボックスの初期値は```DefaultSelectedItems```に以下のJSONで指定する<br>
```{    
'@odata.type':"#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference"
 ,Value: "初期値を入れる"
}```
- ```"入力フォーム名".LastSubmit.ID```：入力フォームで最後にINSERTされたリストの項目のIDを取得する
⇒複数のリストで１：Nのデータが登録できる。詳しくは[こちら](https://qiita.com/h-nagao/items/7a57d78394bec6e6c4ed)
- ```User().FullName```でとってきた姓名を入れ替える処理<br>```Concatenate(Last(Split(User().FullName," ").Result).Result," ",First(Split(User().FullName," ").Result).Result)```

## 便利
- 右上のアプリチェッカーを押すとエラー一覧が見れる
- 関数には```//```でコメントをつけれる
- 組織全体にアプリを共有するには、配布の検索ボックスに```すべて```もしくは```everyone```と入力する。

## これから試す予定
- 例外処理系
- バリデーションチェック系
- 集計
- コンポーネント
- 承認ワークフロー系