できること
・フォルダの監視 (ポーリングします)を行い、ファイルが追加された編集されたなどをトリガーとします
・ファイルのコピー
・Azure Functionsの実行 HTTP トリガーのみ
・タイマー実行
・フォルダ作成
・Blobとの連携
・Sharepointとの連携
・Office製品との連携
などいろいろできます。
AzureなのでWindowsとの相性は良いです。Windowsでファイルの移動やバックアップを取ったりするのに昔ならバッチプログラムをVBScriptでつくってタスクスケジューラに登録したりってのが多かったかなと思います。
今回のLogic Appsの基本を押さえることで世の中で言われるRPAやローコード、ノーコードを理解するきっかけになればと思います。
実装
Blob Containerに一時間に一回アクセスしてCSVファイルをsharepointにコピーする。
タイマー実装としたのは、フォルダの監視の場合、もちろんフォルダを指定する必要があり、今回、動的に日付フォルダが作成されるため作成時にフォルダを指定する方法がわからなかったため。
タイマー
特に困ることはないと思います
変数の設定
変数の設定(初期化)は最初に行う必要があります。
try-catch-finally
エラーが起きた時に実行ログにエラーと残ってもよい場合は実装する必要はないですが、想定内のエラーは成功としてログに残したいときはtry-catch-finallyを実装します。
制御のスコープを使います
catchスコープの実行をtryスコープが失敗したときに設定します
catchの次のアクションの実行は、catchがスキップしたときに設定します。
if
if文で処理を分岐します。
上記 try-catch-finallyと組み合わせた場合、tryスコープでエラーが起きてcatchスコープで変数にfalseを設定します。
条件分岐でtrueパートにアクションを追加し、falseパートに何も書かなければそこで処理終了となります
BLOB一覧を取得
BLOBのフォルダ以下のファイルを取得する場合、メタ情報だけを取得し、ループさせながら一つ一つ処理する必要があります。
まずは、一覧を取得します。
フォルダが動的に作成されるため、concatと変数を利用しました。
メタ情報をループ
valueがループされた情報になります。if文などで、valueの情報を取得できるようになります。以下はNameを取得
ファイルがcsvのものだけコピー対象とします。
ファイルコンテンツ取得
ここまででファイルのメタ情報を利用していたためファイルのコンテンツは取得していません。ここでコンテンツを取得します。
メタ情報のパスを利用してコンテンツを取得
sharepointにファイルを作成
取得したコンテンツをsharepointにファイルを配置。
感覚的にはコピー&ペーストなんだけど、おそらく、sharepointとblobのAPIを使ってやっているので、ファイルを作成することに注意する
ファイルが存在するときはエラーとなるのでtry-catchでエラーがログに残らないようにする
今回は同名ファイルを作成できないことをエラー処理とした。ファイル存在チェックを入れてもいいかも。
独り言
正直プログラムが書けるならプログラム書いた方が簡単だと思う。
だけど、プログラムの保守メンテナンスの担当にはなりたくない。
なので、こういったローコード、ノーコードを使うのが後々の自分のためになると思う。
非エンジニアがこれをメンテナンスしてくれるとは思えないけど。