めーたん
めーたん

ログイン情報が変更になるたびにフローの修正するのがたいへん!

そういう定数は外部ファイルに保存しておくといいよ!

こさい
こさい

こんにちは。完全自動化研究所の小佐井です。

この記事では変更に強いフローを作るテクニックについて解説します。

この記事でわかること
変更に強いフローの作り方がわかる
検証バージョン
OS:Windows10
Excel:Microsoft 365 Apps for enterprise v.2207
Power Automate for desktopバージョン:2.22

フローの運用は長い期間行われることが多いので、その間に変更も複数回行われます。そのため、変更に強いフローを最初から設計しておくことは重要です。

運用中に変更の多いのは、URLやログイン情報などのいわゆる「定数」です。

定数をフローの中に直接記述していると、変更のたびにフローデザイナーを起動してフローを改修しなくてはいけません。

なので、外部ファイルに定数を保存しておき、フロー内から読み込んで利用するようにしておきましょう。

変更時は外部ファイル(Excelファイルやテキストファイル)を修正するだけでよく、フローを直接編集する必要がなくなりますよ。

では、実際にフローを作ってみましょう!

外部ファイルを使って変更に強いフローを作ろう

作成するフローの説明

Excelで作成した外部ファイルを読み込んで、データテーブルに格納し、その値を使ってサンプルWebサイトを開き、ユーザーIDの入力ボックスにユーザーIDを入力するフローを作成します。

フローを実行すると、図1の状態で終了します。

【図1】サンプルWebサイトのログイン画面

それでは、準備から始めましょう!

準備しよう

外部ファイルを作成する

外部ファイルとしてExcelファイルを準備しましょう。

3つの項目を作成してください。最初の行は列のタイトルです。

URL: http://marukentokyo.jp/sample_website/

userid: login@kosaikyo.jp

password: password

図2のように作成してください。罫線や背景色は付けても付けなくてもOKです。

【図2】外部ファイル

作成できたら、名前を付けて保存してください。

ドキュメントフォルダーの中に「PAD」フォルダーを作り、その中に「Data」フォルダーを作って、その中に「パラメーター.xlsx」という名前で保存してください。

ドキュメントフォルダー\PAD\Data\パラメーター.xlsx」というパスになります。

ドキュメントフォルダーは環境によって異なります。

サンプルWebサイトを開く

ブラウザーはMicrosoft Edgeを使います。

Microsoft EdgeでサンプルWebサイトを開いてください。

URL: http://marukentokyo.jp/sample_website/

フローを作成しよう

STEP1[外部ファイル利用]というフローを新規作成する

[外部ファイル利用]というフローを新規作成してください(図3)。

【図3】フローデザイナー

STEP2[特別なフォルダーを取得]アクションを追加する

[特別なフォルダーを取得]アクションをメインフローのワークスペースに追加してください。

ダイアログが表示されるので、[特別なフォルダーの名前]のドロップダウンリストから[ドキュメント]を選択してください。[特別なフォルダーのパス]は自動的に入力されますが、環境によって異なります(図4)。

[保存]をクリックしてダイアログを閉じてください。

【図4】[特別なフォルダーを取得]ダイアログ

STEP3[Excelの起動]アクションを追加する

[Excelの起動]アクションを[特別なフォルダーを取得]アクションの後に追加してください。

ダイアログが表示されるので、[Excelの起動]のドロップダウンリストから[次のドキュメントを開く]を選択してください。

[ドキュメントパス]に「%SpecialFolderPath%\PAD\Data\パラメーター.xlsx」と入力してください。

変数[SpecialFolderPath]には[特別なフォルダーを取得]アクションで取得したドキュメントフォルダーのパスが格納されているので、環境の変化に合わせられるようになっています(図5)。

設定が完了したら[保存]をクリックしてダイアログを閉じてください。

【図5】[Excelの起動]ダイアログ

STEP4[Excelワークシートから読み取る]アクションを追加する

[Excelワークシートから読み取る]アクションを[Excelの起動]アクションの後に追加してください。

ダイアログが表示されるので、[取得]のドロップダウンリストから[ワークシートに含まれる利用可能なすべての値]を選択してください。

[詳細]をクリックして、[範囲の最初の行に列名が含まれています]を[有効]にしてください。[パラメーター.xlsx]の最初の行はタイトルなので、[有効]にすることを忘れないようにしてください。

読み取ったデータはデータテーブル型の変数[ExcelData]に格納されます(図6)。

[保存]をクリックしてダイアログを閉じてください。

【図6】[Excelワークシートから読み取る]ダイアログ

STEP5[Excelを閉じる]アクションを追加する

[Excelを閉じる]アクションを[Excelワークシートから読み取る]アクションの後に追加してください。

[Excelを閉じる前]はデフォルトの[ドキュメントを保存しない]のままでOKです(図7)。

[保存]をクリックしてダイアログを閉じてください。

【図7】[Excelを閉じる]ダイアログ

STEP6 ここまでのフローを確認する

4つのアクションを追加して設定しましたね。図8のようにフローが作成されていますか?

【図8】ここまでのフロー

ここまでで、外部ファイル(パラメーター.xlsx)を読み込んで、データテーブルに格納するところが完成しました。

それでは、続いてサンプルWebサイトを操作するフローを作成してください。

STEP7[新しいMicrosoft Edgeを起動]アクションを追加する

[新しいMicrosoft Edgeを起動]アクションを[Excelを閉じる]アクションの後に追加してください。

ダイアログが表示されるので、[起動モード]は[新しいインスタンスを起動する]のままとし、[初期URL]に「%ExcelData[0][‘URL’]%」(「URL」の前後はシングルクォーテーション)と入力してください。「%ExcelData[0][0]%」と入力しても同じ値を入力できます(図9)。

[保存]をクリックしてダイアログを閉じてください。

【図9】[新しいMicrosoft Edgeを起動]ダイアログ

STEP8[Webページ内のテキストフィールドに入力する]アクションを追加する

[Webページ内のテキストフィールドに入力する]アクションを[新しいMicrosoft Edgeを起動]アクションの後に追加してください。

ダイアログが表示されるので、[UI要素]にサンプルWebサイトの[ユーザーID]の入力ボックスを指定してください(サンプルWebサイトは「準備」で開いています)。

「UI要素」に入力ボックスを指定する方法については、著書「Power Automate for desktop業務自動化最強レシピ」で詳しく解説しています。

[テキスト]に「%ExcelData[0][‘userid’]%」(「userid」の前後はシングルクォーテーション)と入力してください。「%ExcelData[0][1]%」と入力しても同じ値を入力できます(図10)。

[保存]をクリックしてダイアログを閉じてください。

【図10】[Webページ内のテキストフィールドに入力する]ダイアログ

STEP9 ここまでのフローを確認する

図11のようにフローが作成されていますか?

これで外部ファイルを使う変更に強いフローが完成しました。

【図11】完成したフロー

下のソースをフローデザイナーにコピー&ペーストするとフローが復元されます。


Folder.GetSpecialFolder SpecialFolder: Folder.SpecialFolder.Personal SpecialFolderPath=> SpecialFolderPath
Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess Path: $'''%SpecialFolderPath%\\PAD\\Data\\パラメーター.xlsx''' Visible: True ReadOnly: False Instance=> ExcelInstance
Excel.ReadFromExcel.ReadAllCells Instance: ExcelInstance ReadAsText: False FirstLineIsHeader: True RangeValue=> ExcelData
Excel.CloseExcel.Close Instance: ExcelInstance
WebAutomation.LaunchEdge.LaunchEdge Url: ExcelData[0]['URL'] WindowState: WebAutomation.BrowserWindowState.Normal ClearCache: False ClearCookies: False WaitForPageToLoadTimeout: 60 Timeout: 60 BrowserInstance=> Browser
WebAutomation.PopulateTextField.PopulateTextField BrowserInstance: Browser Control: appmask['Recording']['input'] Text: ExcelData[0]['userid'] Mode: WebAutomation.PopulateTextMode.Replace EmulateTyping: True UnfocusAfterPopulate: False WaitForPageToLoadTimeout: 60

# [ControlRepository][PowerAutomateDesktop]

{
  "ControlRepositorySymbols": [
    {
      "Name": "appmask",
      "ImportMetadata": {
        "DisplayName": "Computer",
        "ConnectionString": "",
        "Type": "Local"
      },
      "Repository": "{\r\n  \"Screens\": [\r\n    {\r\n      \"Controls\": [\r\n        {\r\n          \"AutomationProtocol\": null,\r\n          \"ScreenShot\": \"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\",\r\n          \"ElementTypeName\": \"input\",\r\n          \"InstanceId\": \"99f4b972-b410-4345-9567-ac28b56b445c\",\r\n          \"Name\": \"input\",\r\n          \"SelectorCount\": 1,\r\n          \"Selectors\": [\r\n            {\r\n              \"CustomSelector\": \"html > body > div:eq(0) > div:eq(5) > div > div > div > form > table > tbody > tr:eq(0) > td:eq(1) > input\",\r\n              \"Elements\": [],\r\n              \"Ignore\": false,\r\n              \"IsCustom\": true,\r\n              \"IsWindowsInstance\": false,\r\n              \"Order\": 0,\r\n              \"Name\": \"Selector 1\"\r\n            }\r\n          ],\r\n          \"Tag\": \"input\"\r\n        }\r\n      ],\r\n      \"ScreenShot\": null,\r\n      \"ElementTypeName\": \"Web Page\",\r\n      \"InstanceId\": \"b765ee18-c162-4fe1-b2ab-043b53b96866\",\r\n      \"Name\": \"Recording\",\r\n      \"SelectorCount\": 1,\r\n      \"Selectors\": [\r\n        {\r\n          \"CustomSelector\": null,\r\n          \"Elements\": [\r\n            {\r\n              \"Attributes\": [],\r\n              \"CustomValue\": null,\r\n              \"Ignore\": false,\r\n              \"Name\": \"Web Page\",\r\n              \"Tag\": \"domcontainer\"\r\n            }\r\n          ],\r\n          \"Ignore\": false,\r\n          \"IsCustom\": false,\r\n          \"IsWindowsInstance\": false,\r\n          \"Order\": 0,\r\n          \"Name\": \"Selector 1\"\r\n        }\r\n      ],\r\n      \"Tag\": \"domcontainer\"\r\n    }\r\n  ],\r\n  \"Version\": 1\r\n}"
    }
  ],
  "ImageRepositorySymbol": {
    "Name": "imgrepo",
    "ImportMetadata": {},
    "Repository": "{\r\n  \"Folders\": [],\r\n  \"Images\": [],\r\n  \"Version\": 1\r\n}"
  }
}

まとめ

サンプルWebサイトのURLとユーザーIDは[パラメーター.xlsx]の値が使われました。

ユーザーIDとパスワードに変更があった場合は[パラメーター.xlsx]を修正すればいいので、フロー[外部ファイル利用]は修正する必要がありません。

このように外部ファイルを利用してフローを変更に強くするテクニックは、運用を楽にしてくれるので、ぜひ身に付けて活用してください。

関連する記事

本記事で作成したフローは次の記事でも使用しています。合わせてお読みください。

Power Automate for desktopの書籍を出版しています。