【Talend】SAPに接続しRFC_READ_TABLEでデータを取得する

今回は、TalendでSAPと接続する方法についてまとめてみました。
SAPというのはその業界では割と有名なERPパッケージです。

折角Talendには多彩な外部システム接続用のコンポーネントがありますので、今回はSAPを例に、連携してみようと思います。

Youtubeでもレブル250/グラディウス400/GN125の情報を発信してます! (登録してもらえると超喜びます!!)

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環境)、

  1. sapjco3.dllをC:/Windows/System32/ に配置する
  2. sapjco.jarを(Talendのインストールディレクトリルート)/lib/java に配置する
  3. Talendを再起動する

という手順を踏めばokです。

SAPと連携するジョブを作る

それでは、実装に入りましょう。

まずは、SAP接続用のコンポーネント、tSAPConnectionをパレットから探してきてジョブに落っことします。

talend_sap_01

コンポーネントに対する接続設定を行います。
ここの設定は、SAPを導入している環境によって設定は変わりますので、割愛します。

ちなみに、こうした接続は環境によって変わることが殆どだと思いますので、コンテキスト等に外出ししておくことが望ましいかと。

talend_sap_02
SAP接続先情報をcontextで管理

 

connectionの設定が終わったら、今度は、tSAPInputというコンポーネントをジョブに落っことします。
tSAPInputがコアなコンポーネントで、SAPの機能を実際に呼び出してくれます。

talend_sap_03

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にします。

      • talend_sap_sap1
        SAPのRFC_READ_TABLE
    • 他のDELIMITER, ROWCOUNTなどはお好みで
  • Outputsを設定
    • Schemaは、テキトーな名称でokです
    • Typeは、SAPの定義を見るとTABLEだったので、table_outputを選択
    • TableNameは、SAPから取得するテーブル名を記述します。SAPの定義を見ると、DATAとFIELDSでしたので、その2つを受け取ることにします。
    • Mappingの項目も定義します。(後述)
talend_sap_04
tSAPInputのパラメータ編集

Mapping項目ですが、ここは少し注意が必要です。
項目をクリックすると、専用の編集ウインドウが開きます。

talend_sap_05

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)」に入る

talend_sap_sap3

3.受け取りたい変数名の「関連する型」を見る
4.受け取りたい変数名の中のプロパティ名がMappingのXPathQuerysに入る名称
talend_sap_sap4

という感じで求まります。

———-追記ここまで———-

 

同様に、FIELD_NAMEの方は、XPathQuerysに”FIELDNAME”をセットすれば良いようです。
同じようにマッピング設定を行っておきます。

talend_sap_06

以上で設定は完了です。
tSAPInputコンポーネントでWAとFIELD_NAMEを定義しましたので、それぞれの出力を受け取るリンクを張って、ジョブ構築は完了です。

talend_sap_07

 

実行してみると、想定通りの値が取得できていることが確認できます。

talend_sap_08

SAP連携コンポーネントの罠

Talendを日本語化していると、Outputs側のtype選択肢に同じものが現れてしまいます。

talend_add

この選択肢は、英語表記だと、table_outputとoutput_tableの異なる2種類が存在するのですが…日本語版だと全く同じものになってしまいます。

似ていますが、table_outputとoutput_tableは全く異なる結果になりますので、注意が必要です。
SAP連携時は、外観を英語にしておくのが無難だと思います。
(私は、日本語版でジョブを組んでいて、この部分で2時間は詰まりました…)

おわりに

今回は、SAPとTalendの連携について書いてみました。
正直、情報無さすぎて辛い所はありますが、外部連携用のコンポーネントが存在するのはとてもありがたいですね。
Talend-SAP連携は、海外サイトにはそこそこ記事が散見されたので、海外のものを中心に探してみると良いかもしれません。

今回は以上です!

Youtubeでもレブル250/グラディウス400/GN125の情報を発信してます! (登録してもらえると超喜びます!!)
最新情報をチェックしよう!