ああああ

フレームワーク「ReFramework」でシナリオを作る[2]

フレームワーク「ReFramework」でシナリオを作る[2]

前回はReFrameworkについて簡単に記載しましたので、

今回は、実際にReFrameworkを使ってシナリオを作成してみたいと思います。

前回の記事はこちら

 

【デモ用業務】

社員名、退職日が書かれたエクセルがある。

エクセル中の退職日の日付をチェックし、本日より昔の社員のステータスを「済」にする。

その処理を、作業ファイルというエクセルがあるので、そこに記載されているファイル分処理を行う。

終わったら作業ファイルを処理結果フォルダにコピーする。

このようなエクセル(東京チェック.xlsx)があり(以下、チェックファイル)

 

作業ファイル.xlsxに記載されているファイル分行う。(以下、作業ファイル)

 

初期処理をInitAllApplications.xamlに設定する

ここには、シナリオ内の初期処理を設置します。

例えば、アウトプットファイルを格納するフォルダを作成したり、テンプレートファイルをコピーしたり…そんな処理です。

今回は、処理結果フォルダの作成をこちらで行います。また、処理スタートのメールを送る必要があるときはそれもここで行うといいでしょう。

 

ということで、「パスの有無を確認(PathExists)」でフォルダがあるか確認をし、「条件分岐(If)」で、ない場合に作成という処理を行います。

 

(ここでは、「パスの有無を確認(PathExists)」の結果を folderExist という変数に格納しています。)

※パスなど、シナリオ内で使用する値はConfig.xlsxに記載し、ディクショナリー型の引数in_Configから引っ張って使用しています。値を外出しすることで運用が楽になります。

 

GetTransaction.xamlで処理対象データを取得する

作業ファイルをトランザクションデータとして読み込み、トランザクションアイテムに渡すという処理を行います。また、フレームワークはOrchestratorのキューありきなので、ここでフレームワークのキューの部分を変更しましょう。

 

Orchestratorのキュー部分を変更する

 

Main.xamlの引数「OrchestratorQueueName」は使用しないので削除

すると初期処理にエラーマークがつきますので、初期処理の「Save job arguments Configシーケンス」を削除

 

Main.xamlの変数「TransactionItem」の型がQueueItemになっているので「System.Data.DataRow」に変更

するとやはりエラーがでます。

└トランザクションデータの取得:GetTransactionData.xamlの、「GetTransactionQueueItem」アクティビティーを削除&引数「out_TransactionItem」の型をDataRow型に変更して保存。

Main.xamlに戻って、「Invoke GetTransactionData workflow」の引数をインポートし、out_TransactionItemにTransactionItemをセット。型を合わせます。

※代入(End Process)にエラーが出ている場合は同じものをもう一度作ってあげるとエラーが消えます。

└トランザクションの処理:Process.xamlの引数「in_TransactionItem」の型をDataRowに変更して保存。Main.xamlに戻って、「Invoke Process workflow」の引数をインポートし、out_TransactionItemにTransactionItemをセット。型を合わせます。

更に、Finallyにある「Set the Transaction Status and go to next Transaction」のTryを開き、「Invoke SetTransactionStatus workflow」のCollectionの「in_TransactionItem」の値を削除してOK。

 

これでエラーは消えたと思うので、GetTransaction.xamlの処理に戻ります。

 

処理対象のデータをio_TransactionDataという引数に渡す

今回は、作業ファイルに記載されているファイル分処理を行う ということで、この作業ファイルがそのままトランザクションデータになります。

ですので、「範囲を読み込み(ReadRange)」で作業ファイルを読み込み、読込んだデータを io_TransactionData という引数に格納するのですが、

 

トランザクションデータがない時にトランザクションデータを取得する

 

という処理を行いたいため、ここに「条件分岐(If)」を入れます。

こちら。(最初からあったアノテーションは削除しています。)

そして、Thenに「範囲を読み込み(ReadRange)」で作業ファイルを読込みます。

「範囲を読み込み(ReadRange)」では読み込むファイル名を記載します。

ここでは、フォルダ名とファイル名をConfin.xlsxに記載し、Path.Combineで結合してフルパスを生成しています。

 

▼Path.Combineの使い方

Path.Combine(フォルダパス, ファイル名)

 

結果:フォルダパス\ファイル名  というように、フォルダパスとファイル名の間に「\」が入るのでとても便利です。

※今回はわかりやすいように、トランザクションデータをエクセルから読み込んだものにしましたが、Webから一覧をスクレイピングしたものや、フォルダから取得したファイル名の一覧をトランザクションデータにすることももちろん可能です。

 

io_TransactionDataから、一つのアイテムをRow型のout_TransactionItemにセットする

次に、

トランザクションナンバー(=今回が何個目の処理か)が全体の処理対象の個数より小さい場合は、トランザクションアイテムをセットする

という処理を行いたいので、もう一つ「条件分岐(if)」をセットします。

 

Thenには、トランザクションデータの一つをトランザクションアイテム(Row型)にセットする「代入(Assign)」を。

 

「代入(Assign)」

out_TransactionItem = io_TransactionData.Rows(in_transactionNumber – 1)

 

今回だと、処理対象のファイル数は3つあるので、トランザクションナンバーが3まではThenに行き、4回目でElseに行きます。

 

トランザクションフィールドの設定

その下の「If a new Item is fetched Grab it’s significant data for logging」では、out_TransactionID、out_TransactionField1、out_TransactionField2に、どの処理を行っているかがわかる固有値(IDや名前など)をセットするところになります。

 

ここでセットしたout_TransactionID、out_TransactionField1、out_TransactionField2は、Orchestratorのログ詳細に記載されるので、例えばエラーなどが起こった時に、どのアイテムの処理を行っていたかがわかります。

 

以上、トランザクションデータを取得するところまで行いました。

次は、実際に処理を行うProcess.xamlについて~