[ConMas Gateway]複数行の検索結果を入力帳票に反映させたい
以下2つの方法で、複数行の検索結果を入力帳票に反映することが可能です。
1. Pythonスクリプト連携で実行 ※推奨
SQLで取得した複数行の検索結果をPython上の処理で、入力帳票の任意のクラスターに振り分けて設定するようなレスポンスを作成することで実現できます。
# 参照マニュアル
ConMas Gateway マニュアル > 22. Python スクリプト連携(複数行の検 索結果を 複数ページの帳票に展開するサンプル)
2. SQL文を工夫しアクションファイルのみで実行
複数行の検索結果を1行に集約いただくようなデーター取得用のSQL文を作成いただくと、アクションファイルのみでも実現可能です。
SQL文が少し複雑になるため、BaseQuery を外部ファイルから読み込む手法をお勧めします。
<実行イメージ>
以下のようなデーターのうち、busho_codeが「10」のものだけ、入力帳票に反映
<アクションファイル例>
・BaseQuery を外部ファイルから読み込み
・バインド変数を使って絞り込み
{
"datasource": "gateway_test",
"basetype": "file",
"basequery": "sql/gw_demo/gw_demo10/gw_demo10.sql",
"params": [
{ "name": "busho_code", "type": "string"}
],
"mappings": [
{ "item": "shain_code_1" ,"cluster": 1,"type": "string","value" : ""},
{ "item": "shain_name_1" ,"cluster": 2,"type": "string","value" : ""},
{ "item": "shain_code_2" ,"cluster": 3,"type": "string","value" : ""},
{ "item": "shain_name_2" ,"cluster": 4,"type": "string","value" : ""},
{ "item": "shain_code_3" ,"cluster": 5,"type": "string","value" : ""},
{ "item": "shain_name_3" ,"cluster": 6,"type": "string","value" : ""},
{ "item": "shain_code_4" ,"cluster": 7,"type": "string","value" : ""},
{ "item": "shain_name_4" ,"cluster": 8,"type": "string","value" : ""},
{ "item": "shain_code_5" ,"cluster": 9,"type": "string","value" : ""},
{ "item": "shain_name_5" ,"cluster": 10,"type": "string","value" : ""}
]
}
<SQL文例>
・sql/gw_demo/gw_demo10/gw_demo10.sql の中身
・バインド変数を使って絞り込み
・最大5件 データが5件未満の場合、空文字を設定
SELECT
COALESCE(MAX(CASE WHEN rn = 1 THEN shain_code END), '') AS shain_code_1,
COALESCE(MAX(CASE WHEN rn = 1 THEN shain_name END), '') AS shain_name_1,
COALESCE(MAX(CASE WHEN rn = 2 THEN shain_code END), '') AS shain_code_2,
COALESCE(MAX(CASE WHEN rn = 2 THEN shain_name END), '') AS shain_name_2,
COALESCE(MAX(CASE WHEN rn = 3 THEN shain_code END), '') AS shain_code_3,
COALESCE(MAX(CASE WHEN rn = 3 THEN shain_name END), '') AS shain_name_3,
COALESCE(MAX(CASE WHEN rn = 4 THEN shain_code END), '') AS shain_code_4,
COALESCE(MAX(CASE WHEN rn = 4 THEN shain_name END), '') AS shain_name_4,
COALESCE(MAX(CASE WHEN rn = 5 THEN shain_code END), '') AS shain_code_5,
COALESCE(MAX(CASE WHEN rn = 5 THEN shain_name END), '') AS shain_name_5
FROM (
SELECT
shain_code,
shain_name,
ROW_NUMBER() OVER (ORDER BY shain_code) AS rn
FROM
cs_gw_m_shain
WHERE
busho_code = :busho_code
) AS t
WHERE rn <= 5;
! 注意事項
上記SQLはサンプルとなります。
実際には運用に合わせたコードをご検討ください。また、データベースの負荷など、十分にご検証の上、運用でご活用ください。
また、テーブルの項目数・レコード数・インデックス有無によりSQLの処理に負荷がかかる可能性があり、結果Pythonスクリプト連携で実行いただくほうが、処理が軽くなる傾向があります。