この記事は、Microsoft Power Apps Advent Calendar 2022 カレンダー1 19日目(2022/12/19 担当分)の記事です。
先日の気ままに勉強会のアフタートークでSharePointリストとPower Appsに関する質問がありました。
質問に対して、集う人々でいろいろやってみた一連の流れに気付きがいろいろあったので、メモを残しておきたいと思います。
主な登場人物
🐼:たな
🧞♂️:石川さん
🦁:Miyakeさん
👻:ようさん
質問は突然に
気ままに勉強会 では、メインセッションが終わったあと、参加者のみなさまとちょっとした雑談をしています。ときどきご質問があるのですが、先日も。。。
🧞♂️:Power Appsで質問があります。Hiroさんのこの記事なんですが。。。
SharePointリストをデータソースにして、Power Apps でアプリを作成した際によくある悩みとして、SharePointリストに直接アクセスさせたくないというものがあるかと思います。
以下のHiroさんの記事にもいくつか方法が記載されていますが、解決策としては様々な方法が考えられます。
実行専用のアクセス許可で直接権限を持たないリスト・ファイルを読み書きする – MoreBeerMorePower (hatenablog.com)
提案 – そのいち
🐼:Hiroさんの記事にあるように、SharePointリストを非表示にする、固有の権限を設定する などなどありますけど、SharePointリストの設定にあるアイテムごとの権限設定を自分が作成したものだけにする方法もありますね。
このあと、SharePointリストの該当の設定箇所を長々説明したのですが、Microsoft 365 Advent Calendar 2022 – Adventar の12/17の記事でHIRANO Ai さんが同じ解説をされていました。
(ひとしきり熱弁したあとに気づきましたが、なんというナイスなタイミング)
この記事では設定方法は割愛します。
SharePoint Technical Notes : Microsoft Lists (SharePointリスト)で自分が追加したアイテムのみを表示・編集させる (lekumo.biz)
なお、この設定をしてもSharePointリストにフルコントロール権限があるユーザーは、ほかの方のアイテムを閲覧、編集が可能です。
提案 – そのに
🧞♂️:リスト自体にアクセスさせないようにするにはどうしたらいいんですかね?
🐼:SharePoint リストを非表示にするのにPowerShell叩くとかだった気がしますね。たしかAiさんの記事にあったような。。。
前述のHiroさんの記事の中でも以下のAiさんの記事が参照されています。
Power Automate を使って SharePoint リスト管理する (非表示設定) (SharePoint Technical Notes)
※ Ai さんのブログはURLが変更されていてちょうど参照したときには見つからなかったですが。現在はリダイレクトできるようになっているようです。
(PowerShellじゃなくて、REST API利用してクラウドフローで非表示する方法の記事でした💦💦)
🐼:JPPC2022のAiさんの「SharePoint リストのための簡易的な管理ツールを作ってみよう!」セッションで紹介されていたアプリだったら簡単にリストを非表示設定できるようになりますよ。そのアプリ作ったらいいかもです。資料だけでも作れますし、 [OT3] SharePoint リストのための簡易的な管理ツールを作ってみよう! – YouTube見てもいいですね。
ちょうどAiさんの資料見ながら、アプリを作っていたので、どんなアプリかをひととおり説明。
JPPC2022のセッションで紹介された「SharePoint リストのための簡易的な管理ツール」を作ったときにハマったこと | たなの覚え書き (tana-techlog.net)
🐼:プレミアムコネクタ利用する方法なんですよね。ParseJSON使えばいいんだと思うけど。試してないです。会社でプレミアムコネクタ利用できます?
🧞♂️:会社は使えなかったかな。
🐼:ParseJSON化ですね。
👻:Microsoft Power Appsのカレンダー | Advent Calendar 2022 – Qiita で「ParseJSON」の記事書きました。公開はまだですが。
🦁:いま修正しよう。教えるよー。
ライブで修正
🦁さんと👻さんが指示して、🐼が指示に従って修正するという流れになりました。
リスト一覧の取得を行うフローでPower Appsに値を返却するのに「応答」アクションを使っていましたので、こちらをプレミアムコネクタ利用しないように修正します。
🦁:先にフロー直しましょう。
🐼:「応答」アクションを無効化したい。。。できないな。
🦁:実行条件の構成でスキップさせたらいいいです。
🐼:なるほど。おー、保存できないー。削除。。。
とすんなりはいかなかったですが、結果、以下のようにフローを修正しました。
「応答」アクションを削除し、「PowerApps または Flowに応答する」アクションを追加しました。
「PowerApps または Flowに応答する」アクションには、直前の「選択」アクションの「出力」を設定して終了です。
🦁:Power Apps側にどんな風に渡るか確認しましょう。フロー呼んでいるところは?
🐼:「更新」ボタンのOnSelectに変数に入れているので、ここかな。
さっそくエラーで、ごにょごにょ。
👻:ぼくの検証したのは、一回Collectionにいれてますね。
🦁:SpListsはCollectionなの?UpdateContextだから変数か。SpListsはどこで参照しているの?左のGallery?
👻:いったん、テキストラベル追加して、そこにParseJSONを。
🐼:(・・・・・とりあえず黙って聞いて言われたことをやる)
🦁:なんで変数に値入ってないんだろう?実行した?
🐼:実行します。。。(・・・・・とりあえず黙って聞いて言われたことをやる)
🦁:フローから返ってきている値をParseJSON()関数で囲んで、点(.)のあとに、value。そこV大文字だけど大丈夫?
🐼:すみません💦(・・・・・とりあえず黙って聞いて言われたことをやる)
🦁:そのあと、Table()関数で囲んで。。。Tableに変換する必要があるから。。。
そんなこんなで、登壇後の疲れ果てている🦁さんと、冷静なツッコミを入れる👻さん、と操作がおぼつかない🐼とで悪戦苦闘。。。
デバック用に追加したテキストラベルに設定したかったのは以下。
そこに至る過程でひとつずつエラーの説明を見ては直しを繰り返し続けていました。
🦁:なんでだ?「.」のあとに「Value」が候補に出ないぞ。
👻:ひょっとして「ParseJSON」オンになっていない?
🐼:ごめんなさい。。。
🦁&👻:それかーーーーー!
というわけで、みなさん、上記設定は、必ず「オン」にしましょう。(怒られます。。。)
🦁:GalleryのItemsのところは、Tableで渡さないとだから。。。。
🦁:あとは、ThisItemのところを直していく。ThisItemのあとにValueを設定して、そのあとにText関数で囲んでください。ParseJSON の大変なところは、ここかな。
🐼:(もくもくと置き換える。置き換え終わったので実行。)
🐼🦁👻:できたー
いっしょに同じことをやっていた人:理屈はわかったら簡単(?)ですね。読み解くのが大変です。エラーが消えない―って。
🦁:簡単でしょ。登壇のとき言ったじゃん。
※ 気ままに勉強会 #32 – connpass「JSON リターンズ」でお話されています。
🐼:ほら、裏でいろいろフォローしたり、しているわけでさ。。。(聞いてなかったいいわけをしつつける)
※ 注意:すべてを修正したわけではありません。アプリの中では3つのフローを呼び出しており、そのうちの2つがプレミアムコネクタ利用しています。そちらのフローも同じように修正が必要です。
また、文字列については、Text関数を利用する必要がありますが、数値であればValue関数といったようにアプリ側にどの型で返却されているかで修正内容が変わりますので、ご注意ください。
さいごに
今回、なぜか、Aiさんがご紹介してくださった「SharePointリストの簡易的な管理アプリ」をプレミアムコネクタ利用しないバージョンに修正することになりました。
「提案 – そのいち」書く必要ないのでは?と思った方もいらっしゃると思います。
なぜ書いたかというと、そもそも発端は「Power Appsのアプリからしか、SharePointリストを触らせたくないけど、どうするのがよいか」という質問からです。
その質問に対して、私は、SharePointの機能だけでもできることはあることをお伝えしました。その場にいらっしゃった方の中にも、「提案 – そのいち」で紹介した機能自体をご存じない方もいらっしゃいました。
Hiroさんの記事にもいくつかの方法が記載されています。またほかにも方法はあります。
今回はSharePointリストを隠したかったわけですが、そのいちのパターンで解決する場合もあると思います。
ひょっとしたら、今回の質問に対して、アプリ側で取得したデータからログインユーザーのデータ以外は表示させないという複雑な処理を組む方もいらっしゃるかなと思います。(大変)
Power AutomateやPower AppsからSharePointやTeamsなど様々なサービスと連携することが多いと思いますが、連携先のサービスについて、何ができるかを知っているのと知らないのでは、使える武器(選択肢)が変わってきます。
今回、フローやアプリ側で頑張らなくても、連携先サービスの設定だけで事足りる場合もあります。連携先サービスの機能も理解が必要だというよい例かなと思いましたので取り上げました。
「提案 – そのに」結果だけでよいのでは?と思った方もいらっしゃると思います。そのとおりだと思います。
今回はたまたまその場で修正という流れになりました。ParseJSONを検証された方がおふたりいる状態でも、エラーに対して、ひとつひとつなぜかを確認し、解消している姿を拝見することになりました。
途中経過のやりとりは、実際の画面を見てない方は、何言っているか分からないと思います。
ただ、出たエラーに対して、ひとつずつ、あーでもない、こーでもないというやりとりが発生していたという雰囲気だけでも伝わればよいのですが。。。
エラーが出たら、エラーメッセージを見て、対処して、その繰り返しをしながら、経ているからこそ、理解できてきます。しかし、理解しているから、エラーなしで作っているわけではなく、きちんとエラーのメッセージを見て、そのメッセージに適切に対処していく。これがレベルアップする最短の近道だな。ということを改めて認識できたよい例かなと思いましたので取り上げました。
結局、ParseJSONはどうすれば使えるのって思った方は、ぜひ、🦁さん、👻さんの記事を見ながら、実際に検証してみてください。
Miyakeさんの記事
Power Apps と Record/Table型変数 と Collection と JSON のまとめ – Qiita
ようさんの記事(※2022/12/20追記)
ParseJSONを検証してみた – 業務ハックLab (hatenablog.com)
コメント