皆さんこんにちは、マイクロソフトの川端です。
Power Automate for desktop (通称PAD) を使い始める方向けのトレーニングコンテンツを提供しています。
こちらの内容は中級編の応用としての上級編です。まだ中級編を読まれていない方はそちらをまずご参照されることをお勧めいたします。
#1.はじめに
###1-1.今回作成するフローの全体像について
PCの現在日時を取得し、特定のファイルに日時付きのファイル名を書き込みに行くというシンプルなフローを題材に、Power Automate for desktopで *共通モジュール 化を行っていく方法と考え方についてご紹介していきます。
*共通モジュール:ユーザーの判断で最小構成とし、入出力データの受け渡しをインターフェースしたうえで、共通的に部品利用可能なデスクトップフローのこと
共通モジュール化をせずに重厚長大な1つのデスクトップフローを構成してしまうことももちろん可能で、エラーなく動作しているケースでは問題が無いでしょう。しかし、複数の共通モジュールとしてのデスクトップフローを定義しておけば(理論的には)複数人で多くのRPAを保守する場合で、保守性が向上し、組織内でのフローの利活用が進みます。複数のデスクトップフロー間でのデータの受け渡しはクラウドフローを経由して構成すると便利です。
詳細な説明とハンズオンに入る前に、動画で今回構成するフローの全体の動きをまず把握していただくと分かりやすいと思います。
以下の動画でまず動作イメージをご覧ください(音声なし)
###1-2.デスクトップフローを共通モジュール化する際の考え方
上記動画のフローは下図のようなモジュール1~3で構成されています(モジュール毎、モジュール間のインターフェースの内容については後ほど詳細に記載します)。
これらのモジュール1~3の構成は、1つのデスクトップフローの構成で記述することもできるでしょう。
しかし、これらのデスクトップフローを他のクラウドフローと共通して利用する場合、もしくは中長期的にデスクトップフローをメンテナンスし複数人で管理保守することを考えると、可能な限り、デスクトップフローを疎結合、かつ共通部品化して内部的に保持したほうが、一般的に保守性は向上します。
その理由について説明していきます。
以下のようにモジュール1,2,3のどこかで問題(/障害)が実際に起きてしまったと想定しましょう(下図の例ではモジュール3への障害)。
1つのデスクトップフローとして構成していたとしてどういった違いがあるでしょうか?細かく機能単位を分けていれば、複数個あるデスクトップフローの中のうち、どこで障害が起きたのか、モジュールレベルで把握することができ、原因の切り分けと問題個所の修正を素早く行うことができます。
また、下図に示す通り、他のクラウドフロー内で共通モジュールとしての呼び出しがあったとしても、1か所の共通モジュールの修正ですみます。その共通モジュールを参照しているフローでは、一括で修正反映されますので、素早く全体のフローを復旧させることができるでしょう。
以上、やや理論的な話が続きましたが、以降のハンズオンで、この共通モジュール化の流れを実際に体験してみましょう。
#2. 事前準備(環境設定)
- 最新版のPower Automate for Desktopのダウンロード:https://flow.microsoft.com/ja-jp/desktop/
- インストール、初期セットアップ手順: ロボ研@K2_kzyさんがまとめて頂いている内容が分かりやすいです。
#3. クラウドフローから呼び出す複数のデスクトップフローを構成しよう
##3-1.デスクトップフロー側の構成の準備をまずは進めよう。
今回構成するデスクトップフロー(モジュール1~3)は3種類あります。
・モジュール1:現在日時の取得
・モジュール2:サブテキスト(モジュール1から加工)の取得で短い日時の文字列へ変更
・モジュール3:ファイル名の変更
これらの3つのモジュールをまずデスクトップ側(Power Automate for desktop)で構成し、その後クラウドフローで
構成を束ねて実行していきます。以下に細かな手順を示しますが、随時お好みでカスタマイズしてみてください。
##3-2.モジュール1の構成(現在日時の取得)
以下の通り、アクションを構成しましょう。
「モジュール1」などとデスクトップフローの名前を付け、適時内容の保存を行いましょう。
1.[メッセージを表示]のアクション
2.[現在の日時を取得します]のアクション
- 取得:現在の日時
- タイムゾーン:システムタイムゾーン
- 生成された変数:module1outputと名前を付けておきましょう。
3.[メッセージを表示]のアクション
以上で、アクションの構成は完了です。
得られた日時データを入出力変数として定義しましょう。
##3-3.モジュール2の構成
モジュール2ではモジュール1で得られた値「2021/10/21 10:43:59」といった文字列のスラッシュ(/)と時間に関係するところを省き、
「20211021」といった形で文字列を整形する処理を構成していきます。
「モジュール2」などとデスクトップフローの名前を付け、適時内容の保存を行いましょう。
1.[メッセージを表示]のアクション
- メッセージボックスのタイトル:PADからのメッセージ
- 表示するメッセージ:%modfule2input%
- メッセージボックスを常に手前に表示する:トグルオン
2.[サブテキストの取得]のアクション
3.[サブテキストの取得]のアクション
- 元のテキスト:%module2input%
- 開始インデックス:文字の位置
- 文字の位置: 5
- 長さ:文字数
- 文字数:2
- 生成された変数:subtext2
4.[サブテキストの取得]のアクション
- 元のテキスト:%module2input%
- 開始インデックス:文字の位置
- 文字の位置: 8
- 長さ:文字数
- 文字数:2
- 生成された変数:subtext3
5.[テキストの結合]のアクション
- 結合するリストを指定:%subtext1%%subtext2%%subtext3%
- リスト項目を区切る区切り記号:なし
- 生成された変数:module2output
6.[メッセージを表示]のアクション
- メッセージボックスのタイトル:PADからのメッセージ
- 表示するメッセージ:%modfule2output%
- メッセージボックスを常に手前に表示する:トグルオン
以上でモジュール2のアクション構成は完了です。
モジュール1から得られる入力変数を定義していきましょう。
モジュール2で得られたサブテキストを出力する出力変数を定義していきましょう。
以上で、モジュール2の入出力変数の設定は完了です。
##3-4.モジュール3の構成
モジュール3ではモジュール2で得られた値「20211021」といった年日付を用いて、ターゲットのファイル名を変更する処理を構成していきます。
「モジュール3」などとデスクトップフローの名前を付け、適時内容の保存を行いましょう。
1.[メッセージを表示]のアクション
- メッセージボックスのタイトル:PADからのメッセージ
- 表示するメッセージ:モジュール3を開始します
- メッセージボックスを常に手前に表示する:トグルオン
2.[メッセージを表示]のアクション
- メッセージボックスのタイトル:PADからのメッセージ
- 表示するメッセージ:%module3input%
- メッセージボックスを常に手前に表示する:トグルオン
3.[ファイルの名前を変更する]のアクション
以上でモジュール3のアクション構成は完了です。
モジュール2から得られる入力変数を定義しましょう。
以上でモジュール3の入出力変数の設定は完了です。
#4. クラウドフローから作成したデスクトップフローを呼び出そう。
下図のようにクラウドフローを構成していきます。クラウドフローの作成時の詳細な操作については、Power Automateを使ってみよう ー (中級編)クラウドフローの承認フローの内容を受けてPADで請求処理自動実行も合わせて参照してみてください。
「共通モジュールのデスクトップフローを呼び出すクラウドフロー」などとクラウドフローに名前を付けるとよいでしょう。
トリガーとしては下図のように「手動でフローをトリガーします」を設定しておきます。今回は動画にある通り手動実行で共通モジュール化の流れを検証していきます。
下の構成のように、モジュール間の関係性を間違えないように作成しましょう。
構成は以上です。実際に動作させてみてください。正しく動作しましたでしょうか?
もし動かない場合には、1-1.今回作成するフローの全体像についての動画や設定内容を再度確認してみましょう。
#5.まとめ
上級編として、デスクトップフローを最小構成単位でモジュール化し、クラウドフローからのデータの受け渡しのインターフェースを疎結合に構成することで、保守性の高い共通モジュールとしてのデスクトップフローが作成可能になる点について、具体的なクラウドフロー/デスクトップフローのハンズオンを通じて学んでいただきました。共通部品化を効率的に進め、ターゲットアプリケーション、プロセスの変化に頑強なシステムを構成していきましょう。