要件定義に基づいて作成しましょう。
進め方は下記の通り
目的
SharePointに構築した「点検簿」リストをベースに、PowerAppsで現場担当者がスマートフォンやタブレットから点検結果を簡単に入力できるフォームを作成する。
前提条件
SharePointリストが以下の定義で作成済み
(DeviceList, Dafult, InspectionLog, ApproverList)
1.アプリとリスト参照
①SharePointリストからアプリ生成
SharePointの「点検簿」リストを開く
上部メニューから「PowerApps」→「アプリを作成」
アプリ名を「InspectionApp」として保存
自動生成されたフォームを確認
②データ同期するSharepointリストをデータに追加
PowerAppsの左ペイン側にある「データ」をクリック
「データの追加」をクリックして表示される「データソースの選択」の検索ボックスに「Sharepoint」と入力
下に表示されたSharepointアイコンをクリック
右ペイン側に表示されたSharepointのサイトページに該当のリストが設置してあるサイトが表示されている場合は該当のサイトをクリック
ない場合は、該当するSharepointのURLで/List/までを表示された詳細情報ボックスに入力し、接続をクリック
該当リストが表示されるので選択して接続をクリック。
ここでは「機器リスト(内部名:DeviceList)」、「承認者リスト(内部名:ApproverList)」、「正常値管理(内部名:Default)」を選択
③ PoweAppsの構成確認
左側のペインで構成を確認
App
└─Host
├─BrowseScreen1(一覧画面)
├─DetailScreen1(詳細閲覧画面)
└─EditScreen1(新規・編集フォーム画面) ← 今回の操作対象
├─階層_DataCard2
├─機器名称_DataCard2
├─タイトル_DataCard2
├─設備異常音_DataCard2
├─電流計_DataCard2
├─電圧計_DataCard2
├─圧力計_DataCard2
├─異常音_DataCard2
2.別リストを参照と連動
階層と機器名称は、DeviceList(機器リスト)に階層ごとに登録のあるもの表示したいのと、選択した機器名称に連動して機器番号を表示したいので下記の表のように設定します。
①コンボボックスに変更→対象:階層_DataCard2 と 機器名称_DataCard2
階層(内部名:Class)/ 機器名称(内部名:DeviceName)
これらは初期状態では TextInput(テキスト入力欄)です。
カードをアンロック
左ペインで「階層_DataCard2」を選択 → 右ペイン上部の「…」→「ロック解除」
同様に「機器名称_DataCard2」も解除。
中のTextInputコントロールを削除
DataCardValue10(11)を選択して「Delete」キー。
コンボボックスを挿入
リボン上部で「挿入」→「入力」→「コンボボックス」
カード内に配置し、削除したTextInputと同じ位置とサイズに調整。
プロパティ設定
階層コンボボックス(名称を変更:ComboBox_Class):
Items = Distinct(機器リスト, Class)
SelectMultiple=false
DefaultSelectedItems
=If(
IsBlank(Parent.Default),
Blank(),
Table({ Value: Parent.Default })
)
※DefaultSelectedItems = 編集時の初期表示
編集モードで既存データをコンボやテキストに「初期表示」する 。
機器名称コンボボックス(名称を変更:ComboBox_Device):
Items = Filter(機器リスト, Class = ComboBox_Class.Selected.Value).DeviceName
SelectMultiple=false
DefaultSelectedItems
=If(
IsBlank(Parent.Default),
Blank(),
Table({ Value: Parent.Default })
)
※DefaultSelectedItems = 編集時の初期表示
編集モードで既存データをコンボやテキストに「初期表示」する 。
フォーム保存時の書き戻し設定
DataCardの Update プロパティを、選択値に変更:
階層_DataCard2:
Update = ComboBox_Class.Selected.Value
機器名称_DataCard2:
Update = ComboBox_Device.Selected.DeviceName
これで、保存時にはテキスト値としてSharePointに格納されます。
つまり、リスト上は文字列(「1」「2」「熱交換器」など)として保存され、
PowerApps側ではコンボボックスで選択操作が可能になります。
※Distinct(対象リスト,対象項目)=指定したデータソースやテーブルの中から重複を取り除いて、一意(ユニーク)な値だけを取り出す 関数です。
※Filter(対象リスト,項目=絞込み条件).対象項目=対象リスト内の、項目に対する絞込み条件でフィルターした、項目内容を表示する関数です。
ComboBox_Class.Selected.Result=ComboBox_Classで選択した結果
②複数条件で参照:タイトル_DataCard2 の DataValue(名称を変更:Text_MCNo)
タイトル_DataCard2のDataValue(Text_MCNo)は、
階層と機器名称で選択した結果を機器リストから取得して自動設定
Text_MCNoのDfaultにComboBox_Class.Selected.ValueかつComboBox_Device.Selected.DeviceNameで参照
Defult=
Coalesce(
Parent.Default,
LookUp(
機器リスト,
Class = ComboBox_Class.Selected.Value &&
DeviceName = ComboBox_Device.Selected.DeviceName,
Title
)
)
※既存データを最優先、無い場合だけLookUpで自動計算
※LookUp関数=対象リスト,絞込み条件,結果を表示する項目)