PowerAppsの技術ポイントをまとめ

# Notifyの改行問題

```
スマホ実機の検証結果により、結論として「Char(10)」で改行の実装をしましょう。
・Char(10)：iOSなら改行する、Androidなら改行する
・Char(13)：iOSなら改行する、Androidなら改行しない
※PCのブラウザだと、どちらも改行しない（　2023/03/06　時点　）
```

# 【2023/07/12追記】<br>　多重LookUpの呼ぶ処理を避ける

```
検索条件を変わると、多重LookUpで最新の検索結果を表示されるまで時間かかるため、パフォーマンス低下。
解決策：段階的に分ける処理で改善を期待できる
```

# 【2023/10/10追記】<br>　空判定まとめ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509696/eb2d9479-9a54-0840-7c8f-2d25c7fe19f7.png)


# 【2023/10/10追記】<br>　Powerapps画面作成時に複雑さをなるべく控える
```
解決策として、特に表示制御がたくさん付けたい場合、画面分けるほうが良い
```

# 【2023/10/10追記】<br>　Powerappsにボタン処理複雑な処理をなるべく控える
```
解決策として、LowCode観点と保守観点（エラー時の調査、再現する方法も明白になるため）ともにより、
変数をシンプルに、Json形式にしてFlowに渡してFlowで処理させる
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509696/5c98b7c6-9cc2-1686-6af5-0c5612b3bcd0.png)

# 【2023/10/10追記】<br>　コンポーネント ライブラリで共通部品の作成

```
★　共通部品１　⇒　メッセージ表示
処理パターンについて、下記のほうがやりやすいかと。
-2：エラー、-1：警告、0：正常完了、1：確認メッセージ（はい、いいえ）

★　共通部品２　⇒　ローディング
下記の例図を参照して簡単に作れる。

※※※ローディングを利用する場合、下記の実装順によるPowerappsの動作してくれない場合あり※※※
例１：この場合、検索処理を書いてあるが、動作してくれない

UpdateContext({showLoading:true});
・・・中略・・・
LetUsSearchOneTime();//前置き：動作しない
UpdateContext({showLoading:false});
・・・END・・・

例２：この場合、検索処理を書いてあるが、動作してくれる

UpdateContext({showLoading:true});
・・・中略・・・
UpdateContext({showLoading:false});
LetUsSearchOneTime();//後置き：動作する
・・・END・・・

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509696/a8ab66ae-a55a-6b0c-d6ed-e46291acdc9b.png)


``` .項目「imgLoading」のImage属性は以下のように値設定しておく.
"data:image/svg+xml,"& 
EncodeUrl(
"<svg width='"& Self.Width & "' height='" & Self.Height & "' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='xMidYMid' class='uil-default' version='1.1'>
<rect x='0' y='0' width='"& Self.Width & "' height='" & Self.Height & "' fill='none' class='bk'></rect><rect  x='46.5' y='40' width='7' height='20' rx='5' ry='5' fill='"& cmpCommonLoading.LoadingHexColor & "' transform='rotate(0 50 50) translate(0 -30)'>  <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0s' repeatCount='indefinite'/></rect><rect  x='46.5' y='40' width='7' height='20' rx='5' ry='5' fill='"& cmpCommonLoading.LoadingHexColor & "' transform='rotate(30 50 50) translate(0 -30)'>  <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.08333333333333333s' repeatCount='indefinite'/></rect><rect  x='46.5' y='40' width='7' height='20' rx='5' ry='5' fill='"& cmpCommonLoading.LoadingHexColor & "' transform='rotate(60 50 50) translate(0 -30)'>  <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.16666666666666666s' repeatCount='indefinite'/></rect><rect  x='46.5' y='40' width='7' height='20' rx='5' ry='5' fill='"& cmpCommonLoading.LoadingHexColor & "' transform='rotate(90 50 50) translate(0 -30)'>  <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.25s' repeatCount='indefinite'/></rect><rect  x='46.5' y='40' width='7' height='20' rx='5' ry='5' fill='"& cmpCommonLoading.LoadingHexColor & "' transform='rotate(120 50 50) translate(0 -30)'>  <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.3333333333333333s' repeatCount='indefinite'/></rect><rect  x='46.5' y='40' width='7' height='20' rx='5' ry='5' fill='"& cmpCommonLoading.LoadingHexColor & "' transform='rotate(150 50 50) translate(0 -30)'>  <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.4166666666666667s' repeatCount='indefinite'/></rect><rect  x='46.5' y='40' width='7' height='20' rx='5' ry='5' fill='"& cmpCommonLoading.LoadingHexColor & "' transform='rotate(180 50 50) translate(0 -30)'>  <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.5s' repeatCount='indefinite'/></rect><rect  x='46.5' y='40' width='7' height='20' rx='5' ry='5' fill='"& cmpCommonLoading.LoadingHexColor & "' transform='rotate(210 50 50) translate(0 -30)'>  <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.5833333333333334s' repeatCount='indefinite'/></rect><rect  x='46.5' y='40' width='7' height='20' rx='5' ry='5' fill='"& cmpCommonLoading.LoadingHexColor & "' transform='rotate(240 50 50) translate(0 -30)'>  <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.6666666666666666s' repeatCount='indefinite'/></rect><rect  x='46.5' y='40' width='7' height='20' rx='5' ry='5' fill='"& cmpCommonLoading.LoadingHexColor & "' transform='rotate(270 50 50) translate(0 -30)'>  <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.75s' repeatCount='indefinite'/></rect><rect  x='46.5' y='40' width='7' height='20' rx='5' ry='5' fill='"& cmpCommonLoading.LoadingHexColor & "' transform='rotate(300 50 50) translate(0 -30)'>  <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.8333333333333334s' repeatCount='indefinite'/></rect><rect  x='46.5' y='40' width='7' height='20' rx='5' ry='5' fill='"& cmpCommonLoading.LoadingHexColor & "' transform='rotate(330 50 50) translate(0 -30)'>  <animate attributeName='opacity' from='1' to='0' dur='1s' begin='0.9166666666666666s' repeatCount='indefinite'/></rect>
</svg>"
)
```