PowerApps で進捗管理：進捗管理ボード（WIPボード）をつくるときのTips

## はじめに
PowerAppsとSharepointListをつかって、さまざまなチームのさまざまなタスクの進捗管理を行っています。WIPボードを何度も作る中で学んだ、よく使うTipsをカレンダーの裏（笑）に書いていたのですが、Tipsが増えて持ち歩くのに重くなってきたので電子化しようと思います。とても個人的な記事です。急ぎメモの転記を行い、おいおい読みやすい体裁に整えていこうとおもいます。

## About me：わたしについて
ただの管理職でITの専門家ではありません。PowerAppsは、Udemy や Copilot に助けられてヒーヒー言いながら身につけているところです。PowerPlatform は、ただのITツールではなく管理技術だとおもって取組んでいます

## WIPボードとは
別途記載します。だいたいこんなイメージのものです。デイリーや週次で進捗を管理します
![002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886913/06550814-ddff-4e8b-896f-bedd1870f992.jpeg)


## WIPボードの作り方
手順は以下の通り
　１．タスクを格納する場所をつくる（Sharepointリスト）
　２．タスクを入力する画面をつくる（PowerApps）
　３．タスクを一覧できる画面をつくる（PowerApps）
　
２と３はおなじPowerApps上の別スクリーンとして実装します。３がいわゆる進捗管理ボードです。通しでの作り方については別で記事にします。

## おすすめ学習コンテンツ
１．＜Microsoft Learn＞ Power Appsでキャンバスアプリをカスタマイズする
　　　https://learn.microsoft.com/ja-jp/training/modules/customize-apps-in-powerapps/
２．＜Udemy＞【2023年版】Microsoft PowerApps 基礎マスターコース(ヒョウノ モトハル)
３．＜Udemy＞【2024年版】 Microsoft PowerApps 実践講座：座席管理アプリ(KATO講師)

## PowerAppsのデータソースについて
SharepointList：最初に慣れる必要があるデータソース
Excel
Dataverse：アプリに組み込む最善の方法
SQL

## Sharepoint List 設定 Tips
### ステータスの選択肢
        Inbox：確認待ち
         Todo：着手待ち
        Doing：進行中
         Done：完了
      Pending：保留中
         Stop：中断
      Waiting：待ち状態
進捗管理の場合、タスクにつけるステータスは、この７つがあれば まずは充分かと思います。トラブル対応の進捗管理の場合は、以下の選択肢を使っています

    inbox：第１報
    Step1：調査中（事実確認中）
    Step2：対策検討中
    Step3：対策中（応急策）
    Step4：対策中（恒久策 または 横展開中）
     Goal：完了

### SharePointをデータソースとして使用する場合の設計ポイント
列タイプを単純にする。使うのは
テキスト、数値、日付、はい/いいえ　くらいにする。
必須は設定しない。必須にしたい場合はPowerApps側で設定する

## Power Apps 設定 Tips
### PowerAppsにSharepoint Listを読み込む方法
データ　＞　＋データの追加　＞　コネクタ　＞　Sharepoint　＞　**Sharepointリスト名**

### WIPボードの付箋にあたるものは「カード」
入れ子構造になっている
コンテナ　＞　ギャラリー　＞　カード

### （余談）おすすめのフリー画像サイト
pixabay（ピクサベイ）

### ソフトを軽くする知恵：コレクション化
あらかじめ起動時にローディング画面で必要な情報をとっておくこと。ソフトが軽くなる

### コレクションの作成と使用例
”コレクション”という形でPowerAppsにSharepointListを取り込めば、毎回SharepointListにアクセスしなくなるためパフォーマンスがUPする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886913/a7c95d50-08c4-42db-b63c-529a453ad94b.png)

### 関数・変数いろいろ（Set関数、コンテキスト変数）
Set関数は、グローバル変数を作成する関数
コンテキスト変数はその画面だけで参照できる変数

### Appのプロパティ設定
#### 既定の色を決めて、どのスクリーンからでも使えるようにする方法
Appを選択（赤枠部分）
![003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886913/eb63b447-f1cf-4793-bfa9-78192d38fe07.jpeg)
Fomulasプロパティに色を入力
例：nfBrandingLight = RGBA(3,131,135,1);
例：nfBrandingDark = ColorValue("#334A5F");
これを各ボタンなどのFillプロパティに入力

#### アプリの初期化
Appを選択（赤枠部分）
OnStartプロパティに起動時の設定を書く

#### バージョン管理
~~~App の OnVisibleプロパティ.
Set( appVersion, "1.0");
~~~

#### ユーザのメアド取得
~~~App の OnVisibleプロパティ.
Set( userEmail, User().Email);
~~~

### 変数3種類
- グローバル変数
- コンテキスト変数
- コレクション

### Form三態
Formのモードには３つある
- DefaultMode.New （新規）
- DefaultMode.Edit（編集）
- DefaultMode.View（閲覧）

### フォームのモードを制御
DefaultModeプロパティ　FormMode.View または FormMode.New または FormMode.Edit

### 新規入力ボタンの設定
まっさらなフォームが表示された状態にする
    Newform（**フォーム名** ）

### ボタンをおしたら画面遷移
OnSelectプロパティにNavigate関数を書く

### 元の画面に戻る
OnSelectプロパティ　Back()

### PowerAppsでファイルをダイレクトに開く方法
PowerApps画面に添付したファイルを開こうとすると一旦ダウンロードする仕様になっています。これが煩わしいのでダイレクトにファイルを開く方法です

　１．ギャラリーを設定
　２．itemsプロパティ ThisItem.添付ファイル
　３．Titleライブラリ Textプロパティ　ThisItem.DisplayName
　４．Titleライブラリ Onselectプロパティ　Launch(ThisItem.AbsoluteUri&"?web=1")

### 新規タスクに通し番号をつける
Last( **Sharepointリスト** ) . **列名** + 1

### デフォルトで選択
Choices( **Sharepointリスト** . **列名** , "**項目**" )

### いまPowerAppsを開いているユーザの名前を表示
userName

### ギャラリーで選択したアイテムの詳細をフォームに表示する
Formのなかのitemプロパティ　**Gallery名** . Selected

### 「〇件中〇件」のつくりかた
こういうやつ
![001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886913/87125872-de3a-499c-aedd-29d6f1531565.jpeg)

#### ①のつくりかた（タスクの総数の数え方）
Textプロパティ　CountRows( **Sharepoint List名**) & "件中"
#### ②のつくりかた（指定の項目の数え方）
例えばリストの中のStatusという項目が「Done：完了」のタスクだけを数えたい場合
Textプロパティ　CountRows ( Filter( **Sharepoint List名** , Status.Value = "Done：完了" ) )

### 日付が空欄だったら本日の日付を、データがあればその日付を表示する
DefaultDateプロパティ
If(IsBlank(ThisItem.**タスク作成日**), DateTimeValue(Today()),ThisItem.**タスク作成日**)

### 新規の場合自動採番、編集の場合は読取りする場合
タスクIDなど、各レコードを通し番号で管理する場合に使う方法。
Newformという、１なら新規、0なら既存というフラグ変数を使う場合
Defaultプロパティ
If(Newform=1, Last(**リスト名**).**列名**+1, ThisItem.**列名**)

Formモードを使う場合
If(**フォーム名**.Mode=New, Last(**リスト名**).**列名**+1, **DataCardValue名**.Text)

### 入力済データを編集するときにクリックするアイコンの設定方法
編集用アイコンのOnselectプロパティ
EditForm( **フォーム名** );
Navigate( **スクリーン名** , ScreenTransition.Fade, { Galleryname: **ギャラリー名** . Selected} )

編集用フォーム側のItemプロパティ
Galleryname

### 選択されたときだけフォントの太さを変える
If( ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal )

### 添付ファイルをそのまま開けるようにする
PowerApps七不思議のひとつ、添付ファイルをクリックするとダウンロードが走ってしまう、を回避する方法。
1. ギャラリーの中にTitleを挿入する
2. TitleのOnselectプロパティ
    Launch(ThisItem.AbsoluteUri & "?web=1")
3. Overflowプロパティ
    Overflow.Scroll
4. Textプロパティ
    ThisItem.DisplayName

### 文字と数式を繋げるのは＆
LabelのTextプロパティに
"営業担当者：　" & ThisItem.営業担当
と入力すると
営業担当者：　田中
などと表示される。Labelを２つ用意する必要はない

### ドロップダウンボックスの選択肢を設定
Itemプロパティに ["未" , "済"]　などと入力する

### 条件によって表示・非表示を決める
Visibleプロパティ　If ( EditForm1.Mode = New , false , true )

### 選択したときだけ表示したい
Visibleプロパティ　ThisItem.IsSelected

### And関数は条件を満たすとTrue
例： And(Parent.Required , Parent.DisplayMode = Edit)

### Formで最も重要なプロパティ２つ
DataSaurce
Item

### 価格を記号付きで表示したい場合
Textプロパティ　Text( Value( ThisItem. **価格** ),"￥##")

### ステータスに応じて色を変える
例えばステータスによってタスクの色を変える場合
Fillプロパティ
If(ThisItem.Status ="Inbox：確認待ち", Yellow, if( **ifの入れ子** ))

### アプリを閉じる
Exit()


## PowerApps不具合対応
### Formにリストの選択肢がでてこないとき
Sharepointリストで設定したはずのリストが出てこないとき

Itemsプロパティ
Chices('**リスト名**'.'**列名**')
日本語のときはシングルクォーテーションが要る