皆さん、こんにちは。
他のシステムとファイル連携を行う場合、Cachéでは、Jobコマンドを使った常駐プロセスやタスクを作成し、特定のディレクトリにあるファイルを定期的に監視、データを取り込むといった機能を手作りされていたかと思います。
これにはファイルの監視や、常駐プロセスの監視、プロセスの制御(起動、停止)を行う機能を用意する必要がありましたが、IRISではInteroperability機能が使えますので、そのようなプログラムを省略することが可能です。
今回は、既にファイル読込処理を行うルーチンが存在し、ルーチン呼出時の引数にファイル名があるという前提で、その処理をInteroperability機能を使ってどのように呼び出すかについて説明したいと思います。
手順
作業手順は以下の通りとなります。
- ビジネスサービスクラスの作成
- OnProcessInput()メソッドの実装
- プロダクションの作成
- ビジネスサービスの登録
- プロダクションの起動
ビジネスサービスクラスの作成
スタジオを起動し、ファイル読込処理を行うルーチンが存在するネームスペースに接続します。
「ファイル」「新規作成」メニューをクリックします。
以下のダイアログボックスが表示されますので、「プロダクション」カテゴリをクリックし「ビジネスサービス」アイコンをクリック、「OK」ボタンをクリックします。
以下のウィザードが表示されますので、作成するビジネスサービスのクラス名(パッケージ名、クラス名)を入力、「次へ」をクリックします。
以下のようにアダプターを選択する画面が表示されますので、「EnsLib.File.ImboundAdapter」を選択し、「完了」ボタンをクリックします。
以上でビジネスサービスクラスは作成できました。
OnProcessInput()メソッドの実装
以下のようなテンプレートが作成されますので、OnProcessInput()メソッド部分(赤枠部分)を修正します。
今回は、以下のようにファイルのストリームを表す変数pInputの属性にあるファイル名を取得し、引数として読込ルーチン ImportData^Productsを呼び出しています。
修正したクラスをコンパイルします。
プロダクションの作成
プロダクションはInteroperablity機能を実行するのに必要な設定で、ネームスペースごとに1つだけ実行することが可能です。
プロダクションを作成するにはシステム管理ポータルを起動し、「Interoperability」をクリックすると以下のようなネームスペース一覧が表示されますので、先ほど作成したクラスがあるネームスペースをクリックします。
さらに「構成」メニューの「プロダクション」を選択すると、以下のようなプロダクション構成画面が表示されますので、画面右上の「アクション」タブをクリックし、その下にある「新規」ボタンをクリックします。
以下のダイアログが表示されますので、作成するプロダクションのクラス名を入力し、「OK」ボタンをクリックします。
これでプロダクションが作成できました。
ビジネスサービスの登録
プロダクションが作成できましたので、先ほど作成したビジネスサービスクラスを登録します。
まず、以下のように「サービス」の右にある「+」ボタンをクリックします。
以下の画面が表示されますので、サービスクラス欄に先ほど作成したビジネスサービスクラス名(Test.BS.ImportMaster)を選択し、「有効にする」をチェック、「OK」ボタンをクリックします。
これでビジネスサービスが登録されましたので、プロダクション構成画面にて、作成されたビジネスサービスをクリックし、右側の「設定」タブをクリックします。
設定には「基本の設定」の中に「ファイルパス」と「アーカイブパス」がありますので、以下のように「ファイルパス」には他のシステムにて書き込まれるファイルのディレクトリ、「アーカイブパス」はIRISが読み込んだファイルを保管するディレクトリを指定し、「適用」ボタンをクリックします。ここで指定したディレクトリは必ず作成しておいてください。
プロダクションの起動
設定がおわりましたので、プロダクションを起動し、ファイルを監視する常駐プロセスを起動します。
プロダクション構成画面の上にある「開始する」ボタンをクリックします。
以上で完了です!
ファイルパスで指定されたディレクトリ(今回の例ではc:\import\products\in)に他システムからファイルが出力されると、ImportData^Productsが起動され、引数にファイル名が渡されるようになります。
ぜひ、お試しください
ご意見、ご質問等ございましたら、お気軽に返信いただけるとありがたいです。
よろしくお願いいたします。
IRIS Interoperability機能、良いですね。
実は弊社のお客様が同じ仕組みを構築されようとしています。ただし、CacheもIRISも利用しないサブシステムです。このケースでは、特定のフォルダを監視するツール(フリーウェア)を利用して、指定したフォルダにファイルが作成されたら、設定されたプログラム(この場合はEXEファイル)を起動する、というものです。
以前、私がVisualBasic.netを利用してプログラムを作成しましたが、作り方の問題なのか、一定期間が経過すると不定期に異常終了してしまうという問題が出てしまい、(多分)実績のあるツールの導入となりました。
もし、このケースでIRISが利用できると色々なことに苦しまなくて済むなぁ...とおぼろげながら感じました。
CacheからIRISへと遷移していく中で、IRISの何でもあり状態に驚くばかりです。
Hiroseさん、コメントありがとうございます。
お作法的にはこちらの記事が正統ではあるのですが、ベースとしていくつかのクラスを作成する必要があり、ちょっとした連携をするには敷居が高いのかなと思いまして、この記事を書いてみました。
また機会がありましたら、試してみてください
Minamoto様、コメント頂き有難う御座いました。
今すぐにチャレンジできないのが残念ですが、良い仕組みを教えて頂き感謝しています。
今後も色々とご教授頂ければ有難く存じます。