TALON(ローコード)でSAP S/4 HANAとPostgreSQLを連携して業務システムをサクッと作ってみた

この記事は [CData Software Advent Calendar 2021](https://qiita.com/advent-calendar/2021/cdatasoftware) の17日目の記事です。

#はじめに

こんにちは、株式会社HOIPOI 代表取締役の古関と申します。ローコード開発ツールTALON（タロン）という製品を開発・販売しています。CData社とは2017年にお付き合いが始まりました。最初に製品を知った時、TALONとCDataドライバの相性の良さに驚いた記憶があります。現在もTALONを使っているお客様からは色々なドライバの利用希望を頂いています。

今回はTALON上で、CDataドライバを使ってSAP S/4 HANAと、PostgreSQL14を連携して業務システムチックな物をサクッと作ってみました。
SAPと直接連携するとなるとかなり敷居が高いイメージですが、想像よりもはるかに簡単に出来てしまったのでポイントを含めて書いていきます。

今回紹介する製品は全て無料で試せますので是非チャレンジしたい人はやってみて下さい！
※SAP S/4 HANAのトライアル利用でAWSを利用する場合、クラウド費用が掛かります。

#ローコード開発ツールTALONについて

そもそもTALONって何？という方はぜひ以下の5分間の動画を見てイメージを掴んでください。

<iframe width="560" height="315" src="https://www.youtube.com/embed/7j1y3Oj8FaI" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


物凄く簡単に言うと、データベースモデリングが出来たら業務システムが完成したらよいなぁと思って作ったローコード開発ツールです。おかげ様で販売開始から8年が経ち、200社以上の企業様でご利用頂いています。考え方として、SQLの、特にSELECT文を作る事で業務システムを作っていくので、CDataドライバの考え方をご存じの方はその親和性の高さがすぐに分かると思います。

CDataドライバを使うと各種のサービスからデータをSELECT文で取得でき、SQL構文でデータの書き込みが行えます。これはTALONにとっては極めて相性が良い仕組みです。

さらに、TALONで構築するシステムはほぼ全て所謂業務システムです。その中でも製造業向けのシステムを作ることが非常に多く、今回はERP製品の雄であるSAP S/4 HANAと繋いでみました！

では初めて行きます。

#SAP S/4 HANAの環境構築

まずはSAPからです。オンプレミス版のトライアルが1か月限定で体験可能です。CData社のブログに非常に丁寧に記事になっていますのでこちらを参考にセットアップしました。AWSの環境に自動でセットアップしてくれるので非常に楽です。

https://www.cdatablog.jp/entry/saps4hanatrial


#SAP S/4 HANAとCData Driverを接続

CDataドライバとの接続については以下の記事を参考にしました。こちらはODBCですが、今回はJDBCドライバを使うので多少異なりますが、接続方法などは同じです。記事と同様に「SAP ERP」と接続します。

https://www.cdatablog.jp/entry/saperpdrivers4hanaconnection

注意点としては、NetWeaver RFC SDKの入手にはSAPのSユーザアカウントが必要になります。試してみようという方はご注意ください。CData JDBC Driver for SAP HANAは以下より体験版をダウンロードできます。

http://www.cdata.com/jp/drivers/saphana/jdbc/

SAPの環境にJDBC driverをセットアップしたら、早速接続の確認を行います。ここではDBVisualizerを使って接続してみます。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/625243d4-9037-2fa9-9770-f088c952c046.png)

接続に成功したら早速データを見てみます。ここではBNKAという銀行データを見てみます。

![bnka.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/05f3de28-3dfb-4cf4-0f25-2a5f995cc391.png)

確認できました。銀行のサンプル情報が入っています。試しにSELECT文で取得してみます。

![bnka2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/983269b4-6b78-cfd3-4d08-e18f77ab7736.png)

キチンとERNAMがBPIから始まるデータだけを抽出できていますね。これでまるでRDBのようにSAP S/4 HANAを扱えることが分かりました。続いてTALONの準備に進みます。

#TALONの構築

こちらも体験版があり、ホームページから申し込みいただくと利用する事が可能です。体験版はクラウド版とオンプレミス版があります。今回のSAPとの接続にはオンプレミス版が必要になります。

https://talon.jp/

また、TALONにはデモサイトがあり、こちらでどのような機能を作ることが出来るのかを実際に動かしながら色々と確認する事が出来ます。動かすためにはアカウントが必要ですので、申込みいただくと期間限定のアカウントを発行します。体験版をお申込みいただくとこちらのアカウントも発行しています。

https://dev.talon.jp/manual_web/page_know/

ここではTALONのセットアップ後のSAP S/4 HANAとの接続から説明をしていきます。TALONのセットアップについては体験版に含まれるセットアップマニュアルをご確認下さい。

##JDBC Driverの配置とプロパティファイルへの追記

TALONはAPサーバにGlassfishからforkしたPayaraを利用しています。CData driverを利用するにはPayaraへの設定を幾つか行う必要があります。以下のTALONとSAPの接続方法を記した記事を参考に設定します。

https://www.cdata.com/jp/kb/tech/sap-jdbc-talon.rst

JDBC接続プールのPingテストが成功すれば接続が成功です。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/c4d1c173-144e-c512-01e7-6af2cfcbb526.png)

##TALONでSAP S/4 HANAのデータを扱ってみる

ここまででTALONとSAP S/4 HANAを接続出来る状態になりました。本格的な機能を作る前に、まずはウォーミングアップという事で先ほどDBVisualizerで接続した銀行（BNKA）データをウェブ画面に表示してみます。

TALONの開発画面で開発していきます。先に少しだけTALONの特徴について説明しておきます。
TALONにはブロックという仕組みがあり、この「ブロック」がTALONの最大の特徴です。ブロックには以下の種類のユーザインターフェースがあります。

+ 明細
+ 単票
+ グラフ
+ カレンダー
+ ガントチャート
+ 他ブロックリンク

１つの画面にブロックを組み合わせる事で多彩なUI表現が可能で、それぞれのブロックに対して接続先を指定できるので、１つの画面上にSAPのデータとPostgreSQLのデータ、さらにSalesforceのデータを表示し、それぞれのデータベースやサービスに直接書き込みをするといった事が可能になります。デジタルデータのハブとしての役割を担うことも簡単に出来ます。

ブロック表現の例です。この、それぞれのブロックが自由に接続先を選択可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/88f8ae98-2deb-02c2-aee1-ce432fcb82fe.png)

ちょっと横道にそれましたが、SAPデータを表示する機能を作っていきます。ここでは銀行情報を一覧で出力してみたいと思います。TALONの機能構築画面を開き、機能IDと機能名を設定します。ブロックのタイプを「明細」にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/ab993da0-a49b-518a-fc2f-dfd7328bf55d.png)

ブロック設定の「設定」ボタンをクリックし、ブロック設定画面へ行きます。
「DB接続先」をPayaraの接続プールで作成した名前を選択する事で、当ブロックの接続先がSAPになります。
TALONはデータの取得にSELECT文を使うので、以下の画面に直接SELECT文を埋め込む事でSAPからデータを取得できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/bd0e0dfa-3d28-48b1-0d42-8c6701872763.png)

SELECT文を作成するウィザードもあるので、複数のテーブルやカラムを選択してSELECT文を組み立てる事も可能です。以下の画面です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/73708094-7469-b48b-e012-a711f6299931.png)

テーブル、カラムを選択して「設定」ボタンを押下すると以下のように自動でSELECT文が組み上がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/ad3926cf-9de9-0060-09e0-8ceeec5483f9.png)

ここまで来ると機能はほとんど完成になります。左下にある「項目情報生成」をクリックすると、「項目情報」タブに以下の様に自動で展開されます。SELECT文をメタ解釈して、項目の見出しやデータ型、桁数などが自動で初期設定されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/406c70a0-c927-6445-cc31-e7b868147e93.png)

その他大量に設定機能がありますが、表示するだけという事であればこれで完了になります。検索の絞り込みに使いたいフィールドにだけチェックを入れてみました。ここまでSELECT文をウィザードで作っただけなので3分と掛かっていません。この後セキュリティの権限設定だけ行うと完成です。完成したらメニューに追加するなどして利用しますが、すぐに確認する場合は「PREVIEW」ボタンをクリックすると実行できます。

TALONはエンジン駆動型の仕組みとなっており、機能を開発するとコンパイルやモジュール配置といった作業は不要で即時利用が可能になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/b23c7874-a5a8-e79b-6efe-ed6cb43e1781.png)

実行すると以下のような画面が立ち上がりました。検索の絞り込みでName of Bank のカラムを指定できるようにしたので、ここに Bank と打ち込んで「検索」をクリックすると対象データが表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/6909ac19-e890-19d3-d4a3-23e6f480cda3.png)

ここまででひとまずSAP S/4 HANAとTALONをCDataで繋ぐことが出来ました。続いて業務システムチックなものを作ってみましょう。

※全ての設定を説明すると膨大な量になってしまうのでここからはダイジェストでお伝えします。より詳細をお知りになりたい方はセミナーへの参加や、動画シリーズなどがありますので是非そちらをご覧ください。

https://talon.jp/

##SAP S/4 HANAとPostgreSQLの情報を1画面に同居させて、データを転送する。

ここから、より具体的な機能を作ってみます。SAPが持っている販売伝票ヘッダデータ（VBAK）、販売伝票明細データ（VBAP）、販売伝票納入日程（VBEP）の3データ（テーブル）を取得して、１画面に表示しつつ、さらにSAPが持っている取引先（KNA1）と取引銀行（BNKA）の情報をPostgreSQLに転送するという機能です。完成最終形は以下のような物になります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/b4794885-6d2b-a21a-d727-241b1545da30.png)

基準となる情報はSAP側にある想定で、その情報をSAPからPostgreSQLに渡す仕組みとなります。伝票番号情報単位にPostgreSQL側も情報を持つため、PostgreSQL側がさらに情報を付与したり、帳票出力したりといった展開が可能になります。

具体的なデータ転送方法は、PostgreSQLのデータを扱っている「取引先情報」ブロックに値をセットする事で更新しますが、今回はTALONのサジェスト機能を使ってデータをセットできるようにしてみました。他にも標準機能としてルールエンジンの仕組みやスクリプトの記述で、内部的にデータをSAPからPostgreSQLへ自動で書き込む方法もありますが今回は見て分かりやすい方式を選んでみました。

各ブロックの設定については先ほどの銀行情報で取得した部分でご説明したので割愛ながら進めますが、１つの機能に複数のブロックを設定すると、設定画面はこんな感じになります。ブロック設定の部分が３行になっています。これで１画面に３つのブロックが設定されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/7c5c352c-dbef-1e2f-c4b6-6c116c8f6754.png)

さらに、この2つ目の「取引先情報」ブロックがPostgreSQLのデータベースに接続して、繋いでいるので設定内容を確認してみます。「更新テーブル」フィールドにセットしたテーブルが更新対象のテーブルとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/22f7af1d-6d18-b293-dbd9-eddbc2fdc9c0.png)

続いて項目情報タブですが、サジェスト機能の設定が以下のような形になっています。面白いのは、このブロックは対象接続先がPostgreSQLなのですが、サジェストで参照する先はSAP S/4 HANAの情報なのです。今回はさらにここで取得した情報をPostgreSQL側のテーブルに書き込んでいますが、社内システムを利用する際に、外部のサービスにマスタ情報などがあり、それらのマスタを参照したり、エラーチェックをしたいような場合、ここでご紹介した仕組みであっさりと構築できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270910/f85614b3-109a-cbcb-b342-485d3cabbb61.png)

たったこれだけで、SAPのデータをPostgreSQLに転送する事が出来るようになりました。

#最後に

業務システムをサクッと作ってみた！は以上になります。これまで私自身もSAP S/4 HANAとの接続は非常に敷居が高いと感じていましたが、ここまで簡単に接続出来てTALONの機能として組み込むことが出来るという事に驚きました。
一方で、CDataの他のドライバーよりもやや難易度は高いというのも正直感じました。特にSAP側へのデータ更新はCDataのストアドプロシージャ機能を呼び出して実行する必要があります。多くのCData driverではSQLのINSERT,UPDATE,DELETEが使えるので、TALONでもチェックを付けるだけでデータ更新させることが出来るのですが、ストアドを明示的に呼び出す必要があります。これはSAP側が不整合を避けるために直接のデータ更新を許していないからなので、当然と言えば当然なのですが。とはいえこれだけ簡単にデータを扱えるので、これまでSAPとの連携はCSVファイルを使って、と考えていましたが考えが変わりました。是非ご興味がある方はお試しください！