あんこ(@ankoromochi7793)さんからまた検証ネタのリクエストをいただきました。
やってみましょう。
(*'ω'*)
@wataruf01 さん
— 七草あんこ@PowerApps全振り (@ankoromochi7793) January 15, 2023
会社に怒られないよう外部サービス使わず、SharePointの「選択したファイルの場合」トリガーで取得できるURLを短縮URLとして取得する方法ありませんか?
概要
このフローはSharePointの「選択したファイルの場合」トリガーで得られるURLを短くしたうえで取得します。
「選択したファイルの場合」トリガーはSharePointライブラリにある任意をファイルを起点としてフローを開始するトリガーです。
このトリガーから得られる情報には起点となったファイルのURLが含まれています。
このURLが、、とても長いです。(´・ω・`)
例
https://XXXXXX.sharepoint.com/sites/msteams_c7dfa6/_layouts/15/Doc.aspx?sourcedoc=%7B8a0189ec-9821-4e94-a2db-5c99d5d64ef7%7D&action=default&uid=%7B8A0189EC-9821-4E94-A2DB-5C99D5D64EF7%7D&ListItemId=3&ListId=%7B06346B4D-8001-4CE1-B35A-9BDD3A4DE98F%7D&odsp=1&env=prod
このファイルのURLをできる限り短くする、というのが今回の課題です。
調べたところ、このURLのクエリストリングのうちsourcedocパラメータ以外は省略してもURLとしては有効なようです。なので今回作成するフローではsourcedoc以外のパラメータをURLから削除する処理を組みます
とにかく長い。Word、Excel、PowerPointそれぞれでパラメータの種類が若干違いますが、sourcedocパラメータは必ず付いています。sourcedocパラメータ以外は省略可能っぽいので、sourcedocパラメータ以外は消しちゃいます。
https://xxxx.contoso.com/:w:/r/sites/office365/_layouts/15/Doc.aspx?sourcedoc=AAAA...AAAAA
多少は短くなりました。
クエリストリングを操作する手法として、以前このブログで解説した方法を使います。今回のフローの仕組みはこの記事で解説している処理の転用です。そのため、重複する部分については今回は解説を割愛します。
wataruf.hatenablog.com
フロー図
フローの使用イメージ
フローの実行対象とするファイルで「・・・」>「自動化」>「(作成したフローの名前)」を選択します。
「フローの実行」をクリックします。
フローbotによってファイルのURLがチャットで送られています。これがフローによってsourcedoc以外のパラメータが削除されたURLです。これをクリックすると、、
ファイルが開きます。このファイルはこのフローの起点となったファイルです。ちゃんとURLとして正しく動作していることが分かります。
ステップごとの解説
「選択したファイルの場合」トリガー
このトリガーは「SharePoint」>「選択したファイルの場合」です。このアクションは指定したSharePoint上のファイルを対象に手動でフローを実行するためのトリガーです。
このアクションでは、どのサイトのどのライブラリでこのトリガーを使用するかを指定します。
「選択-クエリストリングをKeyとValueの配列にする」アクション
このアクションは「データ操作」>「選択」です。URLのクエリストリングをKey-Value形式の配列に変換します。
式
"from" : "@split(split(triggerBody()?['entity']?['itemUrl'],'.aspx?')[1],'&')",
"select": "@{substring(item(),0,indexOf(item(),'='))}": "@substring(item(),add(indexOf(item(),'='),1))"
このアクションの出力は下図の通りです。
「作成-簡易版JSON Dictionaryを作る」アクション
このアクションは「データ操作」>「作成」です。後続のアクションでKeyをもとにValueを呼び出せるようにするため、簡易版JSON Dictionaryの形式に変換します。
式
"@json(concat('{',replace(replace(replace(replace(string(body('選択-クエリストリングをKeyとValueの配列にする')),'{',''),'}',''),'[',''),']',''),'}'))"
このアクションの出力は下図の通りです。
「簡易版JSON Dictionary」は私が名付けた手法です。別の記事で解説していますので興味あるかたはこちらを参照してください。
wataruf.hatenablog.com
「作成-短縮版URL」アクション
このアクションは「データ操作」>「作成」です。これまでの処理で作成した配列から「soucedoc」のValueだけをとりだして元のURLと文字列結合します。これで目的のURLが取得できました。
式
"@concat(split(triggerBody()?['entity']?['itemUrl'],'.aspx?')[0],'.aspx?sourcedoc=',outputs('作成-簡易版JSON_Dictionaryを作る')?['sourcedoc'])"
「チャットまたはチャネルでメッセージを投稿する」アクション
このアクションは「Microsoft Teams」>「チャットまたはチャネルでメッセージを投稿する」です。このアクションは目的のURLをフローが提示するためにいれたアクションです。このアクションはURL短縮の工程には不要です。
入力
"poster": "Flow bot",
"location": "Chat with Flow bot",
"body/recipient": "@{triggerOutputs()['headers']['x-ms-user-email-encoded']};",
"body/messageBody": "@outputs('作成-短縮版URL')"
さいごに
検証ネタを提供いただいたリプライツリーであんこ(@ankoromochi7793)さんに検証結果をご連絡しました。今回も面白い検証ネタの提供ありがというございました。m(__)m
de-ki-ma-si-ta-!!
— 七草あんこ@PowerApps全振り (@ankoromochi7793) January 16, 2023
thank you!!
今回は以上です。