こんにちは、栗原です。
今回は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で実装するといった、
良いとこ取りができるのではないでしょうか。
最後までご視聴頂きありがとうございました!