はじめに
今回はキャンバスアプリを使用する際、アプリ自体の設定項目を管理するリストの作成・使用例についてご紹介します。
開発ではよく開発環境で開発→検証環境で検証→本番環境で運用という感じでアプリを移送して運用します。
こういった場合にその環境ごとに変わる値があります。共通のURLだとか送信用メールアドレスだとかですね。
またメンテナンスモードを切り替えたり、送信用メールアドレスなど運用中に変動する可能性がある値もありますね。
このように変動する値については設定ファイル(JSONやXMLなど)に保持してアプリでは起動時にそれを参照して使用する。
といった実装をします。アプリ自体を編集せずに環境に合わせて設定値を変えることが出来ます。「外出し」というフレーズで言われたりします。
Power Appsではソリューションの環境変数がこれにあたるかと思います。
ソリューションで環境変数を使用する – Power Apps | Microsoft Learn
今回はこれを通常ライセンス範囲で使用できるSPOリストで作るサンプルです。
有償ライセンスをお持ちであればDataverseで同様のことが可能ですし、ソリューション化しているなら環境変数を使用することも可能です。
TIPS以下、アプリで読み込み使用するサンプルですが、Power Automateでも同様に利用が可能です。
アプリ設定リストの作成
リストを作成してアプリの設定リストとして使用しやすい汎用的な列を追加します。
大体はテキスト行で良いと思いますが、メッセージなどに使用したいものがあれば複数行テキストを用意(HTMLも対応可能)しておきます。
1つの値で済めばそれでOKですし、項目により2つ以上値が必要であればその分列を用意しておけばOKです。必要に応じて後で増やしても良いかと。
その他、タイトルや説明があると用途がわかりやすいです。
- アプリ設定リストを作成する
- 汎用的な列を追加する
- 使用する各用途のアイテム(レコード)を追加する
TIPS今回はシンプルに1アプリ用に作っていますが、数種アプリに対応させることも可能です。
その場合はアプリを特定する列を追加して、そのアプリ用の分のみ取ってくるようにすればOKですね。
NOTEこのアプリ設定リストも環境に合わせて作成する前提です。
開発アプリ用のもの、本番アプリ用のものと分けてそれぞれ使用するイメージです。
SPOリストの作成・列を定義
サンプルでは、タイトル、No(数値)、Value1(テキスト)、Value2(テキスト:予備)、Value_multi(複数行)、説明(テキスト)で作成しました。画面上からサクサク作れますので1、2分あれば出来ます。

使用するデータを追加
こちらにサンプルとして以下のデータを追加します。
- アプリリンク用のURL(ベース部分)
- 連絡用の管理者メールアドレス
- メンテナンスモードの情報

アプリのOnStartでコレクションに読み込む
パフォーマンス向上について
アプリ側ではOnStartで読み込みコレクションに保持します。
このように頻繁に変更しないものや常時更新を見なくて良いものについては、
都度の直接アクセスを避け、起動時に一回だけ読み込んで使うことがパフォーマンス的には推奨されます。
例えばマスタ管理リストのデータやログインユーザーの情報などですね。
公式の以下に記載があります。他パフォーマンス向上の記述とともに実践いただくと良いかと思います。
複数読み込みがある場合は「Concurrent関数」を使って平行処理を行うとさらに良いです。

App.OnStartで読み込む
以下のようにデータの追加>アプリ設定リストをデータソースに追加します。
App.OnStartでコレクションに読み込みます。(Set変数でも可)
サンプルでは他に、Office365 Userコネクタを使用してユーザー情報も保持しています。(今回は使用しませんが)
パフォーマンス向上のためConcurrent関数を使ったサンプルとしています。

ひとまず動かす
この段階で一旦App.OnStartを動かしましょう。値があったほうがその後の作業がやりやすいです。
Appの…メニューから「OnStartを実行します」をクリックします。


リストを更新した後はデータを最新の情報に更新する
SPOリストなどデータソースを直接更新した場合、アプリ側にはすぐに反映されません。
直接更新した場合は「最新の情報に更新」をクリックして、アプリに変更を反映させて確認しましょう。

TIPSアプリ作成中はあれ?反映しないけど。ということが結構あったりします。
上記のようにデータソースの更新を行えばOKだったりしますので頭の隅に置いて置きましょう。
フローの場合も同様で、接続を変更したりパラメータ変更したりしたらフローを最新に更新が必要です。
① アプリURLを使用する実装(Copy関数内)
以前の記事でCopy関数にアプリURL+アイテムIDをパラメータに持たせたURLをコピーする機能をご紹介しました。
こちらのURLべた書きの部分を設定リストのURLを使用して書き換えます。
以下では一か所のみの利用なのでLookupでNo指定で書いてます。よく使用する場合はこれだけ別の変数に入れて使ってもいいですね。
TIPSこのようにすればアプリを別環境へインポートする際にアプリ自体を編集して書き換えなくて済みます。
まさに設定ファイルのような使い方ですね。
URLコピー機能の記事は以下です。

はじめに 今回は以前もQiitaの方でご紹介したCopy関数を使ったURLコピー機能と非対応時の対応サンプルです。サンプルとして前回ご紹介したParam関数を使ったレコードを指定したURLを使います。 Param関数の記事はこちらCopy関数について Copy関数は今年2023年...

② メンテナンスモードの実装
メンテナンスモードの切り替えを実装したサンプルです。
主な手順は以下です。
- メンテナンスモード用画面を作る
- 画面内にアプリ設定リストからのタイトルやメッセージを表示させる
- アプリ終了ボタンを作る
- App.StartScreenでメンテナンスモードの値によって画面を切り替える
まず、メンテナンスモード中に表示する画面を作成します。
サンプルではメイン画面のヘッダーを流用して中身をメッセージタイトル、メッセージ詳細を表示しています。
今回はURLリンクなど書けるように複数行テキストをHTMLにしたサンプルとなっています。(この辺りはお好みで)
そしてこの場合はアプリを閉じる以外はさせたくないので、アプリを終了するボタン(Exit関数)を追加しています。

アプリを閉じるボタンにはExit関数を実装


次にApp.StartScreenに以下を記載します。
この部分ですが、StartScreenではコレクションや変数を使用できないので直接リストを参照します。
※最初にローカルにキャッシュするという部分と違って違和感ありますが、しゃーないですね。

アプリを公開・再生しましょう。まずは普通に開いてアプリが開くことを確認。
アプリ設定リストのメンテナンスモードの値を1に更新して、アプリを再起動してみましょう。
以下のようにメンテナンス画面に遷移すればOKです。
普通に起動

アプリ設定リストでメンテナンスモードのValue1を「1」に更新

アプリを開きなおす(リロードなどで) →メンテナンスモードが表示されればOK

「アプリを閉じる」ボタンでアプリが閉じることを確認すればあとはOKですね。
TIPSアプリ外から変更できるようにしておけば、都度メッセージも変更できますし便利です。
変更の反映はアプリ起動時のみとなります。常に判定させたい場合はローカルにキャッシュではなく都度アクセスしての判定が必要ですね。
TIPS管理者のみが操作する前提なのでわざわざアプリ化する必要はないかと思いますが、
必要に応じて自動生成アプリなどで管理者用アプリを作成してもいいかもですね。
★重要:設定リストの権限のユーザー権限は閲覧のみにする
最後にこれが重要なのですが、ユーザーがこのリストを触って編集できてしまってはいけません。
SPOではサイトやリストの権限(アクセス許可レベル)を設定できます。
今回のアプリ設定リストやその他マスタ系リストなど、管理者のみが操作するリストについてはしっかり権限設定をしておきましょう。
簡単にはユーザーにはリストに対して閲覧者のアクセス許可を指定しておけば編集は不可となります。
以下はざっくりとした一例です。SPOのアクセス制御については色々参考となる記事がありますので、そちらをご参考ください。
リストの設定画面からリストの権限を開く

権限の継承を中止する(サイトと同じ権限となっているのを解除)


以下のように固有権限が設定されましたとなります。

対象のSPグループ(この場合メンバー)を選択してユーザー権限の編集をクリック

設定画面で編集を外して閲覧にチェックしてOKで保存する

メンバーグループがこのリストに対しては閲覧のアクセス許可レベルとなる

この状態であればメンバーグループの人たちも閲覧しかできず、管理者のグループの人たちは編集以上の操作が可能となります。(フルコントロール)
念のためメンバーのユーザーでリストの編集が出来なくなっているか確認しておきましょう。
リストの複製
リストの複製は同じテナントであれば作成時に「既存のリストから」で元のリストを選択すればコピー作成が可能です。データはコピーされませんが、リスト定義が同じリストが作成できます。
開発、本番で分ける場合は、サイトごと分けて同じリスト名で作成すれば、アプリをコピーして接続を変更すればそのまま使用できます。(リスト名が変わるとアプリ内で使用している部分を置換しないといけないので同じ名前がベターです)

おわりに
今回は設定ファイルをSPOリストで作成するサンプルのご紹介でした。
設定ファイル的なものは別環境へインポートする際や、1環境の場合でも管理用の項目の更新を
アプリ上で編集しなくて済むので活用できると思います。メンテナンスモードの対応もある程度需要はあるかなと。
プレミアムライセンスがあればSPOリストでなくDataverseでも可能ですし、環境変数を使用されているのであればそちらでよいですね。
サンプルを参考に活用いただければと思います。それでは。
この記事は役に立ちましたか?
もし参考になりましたら、下記のボタンで教えてください。
コメント