39
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

アプリケーション接続(JDBC)によりDBのテーブルデータを取得する操作はCAIプロセスの実装方法を理解していないと はまってしまう ポイントがあります。
この記事ではDBを操作するためのアプリケーション接続設定で作成したアプリケーション接続を利用して、DBのテーブルデータを取得(SELECT)する実装、および注意点を確認します。

なお、この記事は次の記事の内容を理解していることを前提としています。

テーブルデータを参照する実装

テーブルが主キーを持つ場合

テーブルデータの参照時に主キーを持つテーブルを参照する場合には、CAIプロセスは主キー列のみを取得する動作となります。
主キー列のデータを取得するには次のようにCAIプロセスを作成します。

  1. CAIプロセスを次の設定で作成します。

    • 名前を recipe-psa-jdbcSelect とする
    • 匿名アクセス を許可する
    • Secure Agent にデプロイする
  2. 出力フィールド out を定義して以下のように定義します。
    image.png

  3. 割り当てステップを追加して、出力フィールド outクエリ として COL1 LIKE '%10%' を設定して取得対象のデータを指定します(SQLにおけるWHERE句の指定)。
    image.png

  4. 保存してパブリッシュします。

curlコマンドによりCAIプロセスを実行すると以下のように結果が得られます。

curlコマンドと実行結果
// curl コマンド
curl -k https://localhost:7443/process-engine/public/rt/recipe-psa-jdbcSelect

// 実行結果
{"out":["410","510","610","710","810","910","10","100","1000","101","102","103","104","105","106","107","108","109","110","210","310"]}

実行結果を見るとrecipeTest001pkに設定された主キー列の値のみが取得されていることがわかります。主キーを持たないテーブルを参照した場合には、すべての列のデータを取得できます。これはCAIプロセスの既定の動作です。
主キー以外の列も含めてデータを取得したい場合には、後述するテーブルから全列を取得する実装に従ってCAIプロセスを実装します。

テーブルから全列を取得する実装

主キーを持つテーブルのアクセス時にはCAIプロセスは主キー列のみを取得します。主キー列以外も取得するためには次のようにCAIプロセスを実装します。

  1. 以下のフィールドをもつ新規プロセスオブジェクト po-jdbcSelectAllColumns を作成します。
    image.png
    このプロセスオブジェクトは参照するテーブルの全ての列データを保持するために利用します(プロセスオブジェクトを新規に作成しない実装も可能です)。

  2. CAIプロセスを次の設定で作成します。

    • 名前を recipe-psa-jdbcSelectAllColumns とする
    • 匿名アクセス を許可する
    • Secure Agent にデプロイする
  3. 出力フィールド out を定義して以下のように定義します。
    image.png

  4. 一時フィールドを以下のように定義します。
    image.png

  5. CAIプロセスが次の順に実行されるように各種ステップを追加して、ディシジョンステップ、ジャンプステップをスクリーンショットのとおりに設定します。
    image.png

  6. 1つの目の割り当てステップは次のようにLIMIT 3を指定して、3行分のデータを取得するように指定します。
    image.png

  7. 2つ目の割り当てステップは次のように指定します。
    image.png
    この処理では1つ目のアサインステップで取得した先頭行のみ取り出してtmpRowに設定(head)、先頭行を削除したデータをtmpRowsに再設定しています(tail)。

  8. 3つ目の割り当てステップは次のように指定します。
    image.png
    この処理では、主キーに対応する各列の値をDBから取得してStep1で作成したプロセスオブジェクトに設定しています(緑枠部分の処理)。
    その後、各列の値を設定したプロセスオブジェクトをリスト型の出力フィールド out追加 しています(赤枠部分の処理)。
    なお、この処理では主キー列以外の値である $temp.tmpRow.COL2 の参照時にバックグラウンドでSELECT SQLが実行されています。

  9. 保存してパブリッシュします。

curlコマンドによりCAIプロセスを実行すると以下のように非主キー列であるcol2の値を含む3行分のデータが得られます。

curlコマンドと実行結果
// curl コマンド
curl -k https://localhost:7443/process-engine/public/rt/recipe-psa-jdbcSelectAllColumns | jq

// 実行結果
{
  "out": [
    {
      "col1": "36",
      "col2": "val-36"
    },
    {
      "col1": "360",
      "col2": "val-360"
    },
    {
      "col1": "361",
      "col2": "val-361"
    }
  ]
}

テーブルから全行を取得する実装

既定のクエリ操作では、該当するレコードを最大100件返します。該当する全レコードを取得するには次のように割り当てステップにおいて LIMIT 0 を指定します(未指定時にはLIMIT 100の動作)。
image.png

参照

39
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?