Lotus1-2-365 blog

遅れてきたNotesエンジニアがクラウド活用について思いを巡らすブログ

統合サーバーへのCSVアップロードを自動化する -後編-

前回は、WinSCPを使って統合サーバーにFTP接続するまでをみてきました。それでは、接続と転送処理の部分を自動化していきましょう。

 

ただし自動化、といってもそれほどたいしたことを実装していくわけではありません。

要は、WinSCP経由でファイルをFTP転送する操作をバッチファイル化できればいいという考え方です。そうすれば、そのバッチファイルをWindowsのタスクスケジューラや、Notesのエージェントから定期的にキックすれば自動的にファイルを転送することが可能になります。

 

なお、本当の意味で自動化するには、この前段として、Dominoディレクトリや人事システムからユーザー情報を受け取り、統合サーバーが読み取れる形式でCSVファイル化し、FTP接続用のマシン上に配置する処理が必要になります。この方法は皆さんの環境によってさまざまでしょうから、割愛します。

 

注意点としては、CSVのファイル名です。毎回同じファイル名ではだめで、シーケンス番号を更新していかなければいけません。エージェントの中でUNIX日付をファイル名に付与するか、カウンター文書などを駆使して連番で出力されるようにするか、このあたりはプログラム開発に詳しい方の方でがんばって作成してください。

 

また、ハイブリッド環境の場合、クラウド側のプロビジョニングの前に、オンプレミス環境でのユーザー登録(Domino AdministratorやDJX管理ツールを使った従来の登録)が先に行われている前提となりますので、こちらも注意してください。

 

 

バッチファイルでWinSCPを操作する

コマンドベースでの使い方の詳細はWinSCPのサイトに記載されていますが、まず以下のような内容のバッチファイルを作成しました。

 

<バッチファイル「FTPScript.bat」内容>

C:

cd C:\WinSCP-5.9.3-Portable

winscp.exe /console /script=C:\LLIS\FTPSend.txt

move C:\LLIS\csv\*.csv C:\LLIS\csv\old

 

 

まずポータブル版WinSCPの配置先にカレントディレクトリを移動し、winscp.exeを引数付きで実行します。この時、引数で指定したテキストファイル「C:\LLIS\FTPSend.txt」の方にもう少し細かく転送処理を書きます。これについては後ほど見ていきます。

最後に転送済のCSVファイルをOLDフォルダに移動させて終了です。

 

なぜCSVファイルをサブフォルダに移すかというと、統合サーバーのCSVファイル名の命名規則に関係してきます。先ほども触れたように、ファイル名は連番で変えていかないといけないので、FTP転送スクリプトの中でファイル名を固定で指定するわけにはいきません。

 

しょうがないので、FTP転送スクリプト上は「*.csv」というように、ワイルドカード指定してファイルを転送します。このため、転送済のファイルは別のフォルダに移しておかないと毎回転送することになってしまいます。なので、最後にMoveコマンドを入れているのです。

 

参考までに、検証で使った環境でのファイル配置イメージは以下の通りです。

 

f:id:gotus456:20170210161809j:plain

 

 

C:\LLIS直下にスクリプトファイルを置き、その中にCSVフォルダを置きます。

CSVフォルダの中は以下のような感じです。

 

f:id:gotus456:20170210161903j:plain

 

未実行のCSVファイルが直下に、実行済みのファイルが「old」フォルダに入っているというわけです。なので、CSVファイルを作成・配置するエージェントはここに、毎回違うファイル名でCSVファイルを配置してくる、という前提になります。

 

 

WinSCPスクリプトの内容

次に、先ほどのバッチファイルで引数に指定したファイルの中身を見ていきましょう。

 

スクリプトファイル「FTPSend.txt」内容>

option batch on

option confirm off

open collabserv

cd /

put C:\LLIS\csv\*.csv

close

exit

 

最初の2行は、バッチ処理用のおまじないです。3行目は、前回の記事で作成したプロファイルをもとに、統合サーバーとFTP接続を行う記述です。

その後、サーバー上で「/」ルートディレクトリに移動し、putコマンドでCSVファイルを配置します。先ほども書いた通り、CSVファイル名が毎回変わるため、「*.csv」の形式でファイル転送を行っています。

最後にセッションを切断して終了です。

 

いかがでしょうか、思ったよりシンプルかと思います。

では、試しに実行してみます。

 

f:id:gotus456:20170210161944j:plain

 

このようなウィンドウが立ち上がり、数秒で処理が終了します。

試しにWinSCPで統合サーバーに接続してみます。統合サーバー側(右側)に、転送したファイルがあります。

 

f:id:gotus456:20170210162159j:plain

 

この状態で15分程度待つと、自動的にファイルがサーバー側で処理されます。

前回も書いた通り、配置したCSVファイルは、エラーになると「_error」に、うまくいくと「_processed」に移動します。「_report」には処理結果の入ったテキストが入ります。

 

今回転送したCSVファイルは、前回の記事に内容を書いたもので、1名ユーザーを新規でプロビジョニングするものでした。では、Connections Cloudの管理画面から、新規ユーザーが登録されたか見てみましょう。

 

f:id:gotus456:20170210162046j:plain

 

無事登録されています。ちなみに、この環境はハイブリッド環境なので、オンプレミスのDominoディレクトリにもこのユーザーが存在する前提となりますが、そのユーザーのホームメールサーバーの設定もこの時点で書き換わります。

 

 

以上、手軽に統合サーバーへの転送を自動化する方法について見てきました。実際の運用では、ログファイルをgetしてきて中身をみるとかもできると思いますが、まずはこのぐらいで勘弁していただければと思います。

 

次回は、SCNotes環境で二次アドレス帳を使う方法について見ていきます。