#実装方法#機能紹介:CDataを用いたGeneXusとkintoneとの連携について

こんにちは、栗原です。
今回はCDataを用いたGeneXusとkintoneアプリの連携方法について解説させていただきます。

通常ではGeneXusでkintoneアプリに接続することは出来ませんが、
CDataのJDBC接続を使用することでkintoneアプリの情報をGeneXusで操作可能になります。

※本投稿はkintoneアプリを作成している前提でのご紹介となります。

環境準備

◆CdataのJDBC接続をダウンロードしてインストール(無償版30日トライアル)
https://www.cdata.com/jp/jdbc/

1)Kintone用のJDBC接続をダウンロード
https://www.cdata.com/jp/drivers/kintone/jdbc/


2)setup.jarが入っているので、任意の場所(例:c:\temp)に配置して
コマンドプロンプトから実行

cd c:\temp
java -jar setup.jar -console


3)インストール後

◆ Kintoneの中の情報にアクセスする際に、CdataでJDBC接続をするにあたり、
どのようなテーブル構造/テーブル名/項目名になっているかを
把握する必要があるため、DbVisualizer等のCdataに対応したDBツールを使用

1)DbVisualizerをダウンロードしてインストール
https://www.dbvis.com/


2)CDATAの説明に従ってDbVisualizerのセットアップを行う
https://cdn.cdata.com/help/EKF/jp/jdbc/pg_jdbcdbvisualizer.htm


3)JDBC Driver for kintone の追加
[Tools]->[Driver Manager]を選択


4)[Driver]->[Create Driver]を選択して、「JDBC Driver for kintone」を設定

5)[Tools]->[Connection Wizard]を選択
接続名は任意の名前を入力

6)4)で追加したCDATAのJDBCドライバを選択

7)接続情報を設定


上の図のDatabaseURLは作成したアプリではなくkintone自体のURLを直接入力します。
UserIDとPasswordはKintoneのログインIDとPWです。

8)接続できるとこのようにテーブル一覧が表示できます

9)テーブルをダブルクリックすることでテーブルの詳細、データの中身が参照できます。

後述するDataView設定の際に、ここで確認できる項目名を使用します。

GeneXus側の設定

1)設定から新規データストアに「MySQL」を選択して、Cdata用のデータストアを追加

JdbcURLは
jdbc:kintone:URL=”[kintone自体のURL]”;User=”[UserID]”;Password=”[Password]”;AppId=”[任意のアプリ]”;APIToken=”[任意のアプリトークン]”;
といった形式で記述します。

※GeneXusとしてはDataStoreにMySQLを指定しているので、
MySQLのつもりでSQL文を生成するイメージとなります。
PostgreSQLにしたところ、実行時にSQLエラーが発生したため、
PostgreSQL特有のSQL発行処理がCDATAのJDBCドライバ的に会わなかった模様。
MySQLの場合だと特に問題ありませんでした。

2)GeneXusのコンパイルのためにJDBCドライバを設定
C:\Program Files\CData\CData JDBC Driver for kintone 2021J\lib\cdata.jdbc.kintone.jar
をナレッジベース配下にコピーする
C:\knowlage_base\gx17\CDataConnectKB\JavaModel\web\drivers

3)DataViewオブジェクトだけでもxFor eachコマンドにてアクセスは可能ですが、
それだとデータの参照のみとなるため、DataViewに対となるTransactionも合わせて追加します。

4)トランザクションを追加
・項目名、トランザクション名はGeneXusで利用する場合の名前になるので任意に設定
・型については、DbVisualizerから判断して設定
・Kintoneの場合はキー項目がRecodeIdになる模様、この辺りもDbVisualizerから判断します
・実テーブルでは主キーではないですが、GeneXus側ではリビジョン、APPIdも主キーとして作成します

※ちなみに、リバースエンジニアリングを用いたトランザクション・DataViewの作成はうまく動作しませんでした。
 (DBに接続はできても、テーブル読み込みのフェーズでエラーとなってしまいます。)

5)DataViewを追加
※トランザクションを保存した上で実施

6)DataViewのインデックスも設定

・リビジョン、APPIdもインデックスに追加する(同じツリー内でOK)
※ビルドエラーが発生する場合はインデックスツリーを削除→保存→再作成してみてください

7)ビルドをすると影響分析で「データベーステーブルは変更されません」と表示されるので、そのまま続行
・JDBCドライバエラーが発生する場合
ジェネレータプロパティの[Base Classpath]の中に、.\drivers\cdata.jdbc.kintone.jar;が記載されており、
実際の\CDataConnectKB\JavaModel\web\driversにjarファイルが存在するか確認
※[Base Classpath]の中にない場合は、[Classpath]プロパティのほうに自分でjarファイルを追加する

8)実行環境の設定
・CDATAのJDBCドライバとライセンスファイルを実行環境に設定する
C:\Program Files\CData\CData JDBC Driver for kintone 2021J\lib
cdata.jdbc.kintone.jar
cdata.jdbc.kintone.lic
・上記の2ファイルを下記フォルダにコピー
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\CDataConnectKBJavaEnvironment\WEB-INF\lib

9)Tomcatを再起動して実行


10)トランザクション画面が作成されているので動かしてみましょう!

まとめ

いかがでしたでしょうか。

導入コストも安く様々な企業が利用しているkintoneですが、
シンプルな機能しか実装できないというジレンマもあります。

しかし、そんなkintoneにGeneXusを連携させることで、
データはkintoneに置きつつも難しいビジネスロジックはGeneXusで実装するといった、
良いとこ取りができるのではないでしょうか。

最後までご視聴頂きありがとうございました!