今回は、TalendでSAPと接続する方法についてまとめてみました。
SAPというのはその業界では割と有名なERPパッケージです。
折角Talendには多彩な外部システム接続用のコンポーネントがありますので、今回はSAPを例に、連携してみようと思います。
SAPって?
さくっと、全くSAPを知らない人向けに説明しておきます。
SAPとは、ERPパッケージです!
ERPというのは、企業の数多ある業務種類をまとめて管理するためのプログラム製品です。
財務会計周りは勿論、人事システム、在庫管理システムなどを内包するパッケージです。
(こちらの方のブログがパッと見分かり易かったのでどうぞ⇒今更ながら、SAPとはなんぞや)
SAP連携用の設定を行う
これから使用するTalendのコンポーネントは、sapjcoなどのdllが必要になりますので、その入手/配置が必要になります。
sapjcoの入手
sapjcoは、外部からSAPシステムに接続するために使用するライブラリです。
これがないと、Talendを含めたSAP外のシステムからSAPに連携することはできません。
入手は、SAP公式ヘルプにある通りhttp://service.sap.com/connectorsからダウンロードすることができます。
ただし、アクセスのためにはSAPのユーザ認証が必要です。
無事アクセスできれば、sabjcoのダウンロードができます。
Windows環境であれば、ダウンロードしたファイルを解凍して手に入れられるsapjco3.jar, sapjco3.dllの2つがあればokです。
sapjcoの配置
こちらのTalend公式フォーラムの回答の通り配置すれば問題無く動きます。
一応書いておきますと(Windows環境)、
- sapjco3.dllをC:/Windows/System32/ に配置する
- sapjco.jarを(Talendのインストールディレクトリルート)/lib/java に配置する
- Talendを再起動する
という手順を踏めばokです。
SAPと連携するジョブを作る
それでは、実装に入りましょう。
まずは、SAP接続用のコンポーネント、tSAPConnectionをパレットから探してきてジョブに落っことします。
コンポーネントに対する接続設定を行います。
ここの設定は、SAPを導入している環境によって設定は変わりますので、割愛します。
ちなみに、こうした接続は環境によって変わることが殆どだと思いますので、コンテキスト等に外出ししておくことが望ましいかと。
connectionの設定が終わったら、今度は、tSAPInputというコンポーネントをジョブに落っことします。
tSAPInputがコアなコンポーネントで、SAPの機能を実際に呼び出してくれます。
tSAPConnectionコンポ―ネントから、OnComponentOKで接続します。(OnSubjobOKでもok)
接続が完了したら、コンポーネント設定を行います。
- Use an existing connectionにチェック(先程設定したtSAPConnectionを選択)
- FunNameを設定
- 今回は、RFC_READ_TABLEを使用するので”RFC_READ_TABLE”と記述
- Initialize inputを設定
- SAPの方を見ると、入力パラメータで必須となっているのがQUERY_TABLEだったので、QUERY_TABLEパラメータは確実にセットしておきます。
インポートに定義されているので、単一値をセットすれば良さそう、ということで、パラメータのTypeはinput_singleにします。 - 他のDELIMITER, ROWCOUNTなどはお好みで
- SAPの方を見ると、入力パラメータで必須となっているのがQUERY_TABLEだったので、QUERY_TABLEパラメータは確実にセットしておきます。
- Outputsを設定
- Schemaは、テキトーな名称でokです
- Typeは、SAPの定義を見るとTABLEだったので、table_outputを選択
- TableNameは、SAPから取得するテーブル名を記述します。SAPの定義を見ると、DATAとFIELDSでしたので、その2つを受け取ることにします。
- Mappingの項目も定義します。(後述)
Mapping項目ですが、ここは少し注意が必要です。
項目をクリックすると、専用の編集ウインドウが開きます。
Columnの方は、とりあえずスキーマ名と同じものをセットすれば良いでしょう。
問題は、Schema XPathQuerysです。
いきなりXPathって言われても…XML定義とか無いし…詰んだな、と思っていましたが、こちらの記事を見て解決しました。
(才能の例では、SAPに接続する)(完全なる英語の機械翻訳っぽいページで内容はすごくわかりにくいんですけど…)
各レコードはWAと呼ばれる一意のフィールドを持っています
とありますので、取得データは、XML上”WA”という要素に格納されているらしいので、とりあえず”WA”と記述すれば良いとのこと。参考になりました。
2016/10/21 ———-追記———-
XPathQuerysは、SAPの戻り変数の構造のプロパティ(メンバ?列?)名を渡せば良いようです。
RFC_READ_TABLEであれば、下記の様に判明します。
1. 汎用モジュール参照画面で知りたいモジュール名を検索(今回はRFC_READ_TABLE)
2.そのモジュールの返却する名称を確認(今回は、DATAとFIELDS)⇒ここが「TableName(StructureName)」に入る
3.受け取りたい変数名の「関連する型」を見る
4.受け取りたい変数名の中のプロパティ名がMappingのXPathQuerysに入る名称
という感じで求まります。
———-追記ここまで———-
同様に、FIELD_NAMEの方は、XPathQuerysに”FIELDNAME”をセットすれば良いようです。
同じようにマッピング設定を行っておきます。
以上で設定は完了です。
tSAPInputコンポーネントでWAとFIELD_NAMEを定義しましたので、それぞれの出力を受け取るリンクを張って、ジョブ構築は完了です。
実行してみると、想定通りの値が取得できていることが確認できます。
SAP連携コンポーネントの罠
Talendを日本語化していると、Outputs側のtype選択肢に同じものが現れてしまいます。
この選択肢は、英語表記だと、table_outputとoutput_tableの異なる2種類が存在するのですが…日本語版だと全く同じものになってしまいます。
似ていますが、table_outputとoutput_tableは全く異なる結果になりますので、注意が必要です。
SAP連携時は、外観を英語にしておくのが無難だと思います。
(私は、日本語版でジョブを組んでいて、この部分で2時間は詰まりました…)
おわりに
今回は、SAPとTalendの連携について書いてみました。
正直、情報無さすぎて辛い所はありますが、外部連携用のコンポーネントが存在するのはとてもありがたいですね。
Talend-SAP連携は、海外サイトにはそこそこ記事が散見されたので、海外のものを中心に探してみると良いかもしれません。
今回は以上です!