こんにちは。CData Software Japanリードエンジニアの杉本です。
今回はPCA商魂・商管DX/会計DX の Web APIに接続する CData PCA Sales & Accounting DriverのTips・フィルター条件の適切な実施方法をお伝えします。
www.cdata.com
www.cdata.com
フィルター条件の有効なカラムについて
PCA Web APIはその仕様上様々なフィルター条件をサポートしています。
例えば商品マスターを取得することができる「MasterSms」というテーブルであれば、商品コードを範囲条件とする「SyohinCodeFrom 」「SyohinCodeTo」といった条件です。
API リクエストを例にすると「FindByCondition」の機能を利用して、以下のような条件を発行するイメージですね。
0006
0002
CData Driver ではそれらAPIのフィルター条件をサポートするための特殊なカラムとして「Pseudo-Columns(疑似カラム)」という項目をサポートしています。
それぞれのテーブルやビューがどのような疑似カラムをサポートしているのか?については、それぞれのテーブルのヘルプに記載しています。
cdn.cdata.com
ユーザーはこの疑似カラムを使うことで、適切にPCA Web APIのフィルターを利用しながら、データを取得することができます。
例えば先程紹介した「MasterSms」というテーブルの商品コードを範囲条件とする「SyohinCodeFrom 」「SyohinCodeTo」であれば、以下のように利用します。
※疑似カラムは必ずEqual(=)を使って条件指定をする必要があります。<>やINは利用できないので注意しましょう。
SELECT * FROM MasterSms
WHERE SyohinCodeFrom = '0002' AND SyohinCodeTo = '0006';
以下のように商品マスタのデータを商品コードの0002~0006までの範囲で取得することができました。
ちなみに内部的には以下のようなAPIリクエストが実施されています。
POST https://east02.pcawebapi.jp/V1/Kon20/FindByCondition/MasterSms?Limit=100&Offset=0 HTTP/1.1
Host: east02.pcawebapi.jp
Authorization: Bearer XXXXXXX
Accept: application/xml
Content-Type: application/xml
0006
0002
フィルター条件を指定する際の注意点
CData Driverはその特性上、サーバーがフィルター条件をサポートしていないSQL文が実行された場合、一度APIから全データを取得して、その取得したデータをメモリ上でフィルタリングして表示するようになっています。
つまり、全データを取得するためのAPIリクエストが裏側で多重に発生してしまい、想定以上に処理時間を要してしまいます。
例えば、先程の商品コードを元にした範囲指定ですが、以下のようにクエリした場合はフィルター条件がサーバー側に渡りません。
SELECT * FROM MasterSms WHERE SyohinCode > '0002' AND SyohinCode < '0006';
そのため、自身では数件のデータを取得しようとしているものの、想定した以上のデータが内部では取得され、処理に時間を要してしまうことがあります。
これらの処理が結果的にPCAのAPI Limitに抵触してしまう可能性もあるので、注意しましょう。
疑似カラムを一覧に表示する方法
ちなみにこの疑似カラムですが、デフォルトではExcel Add-inなどの以下のカラム一覧に表示されません。
もしこの一覧に擬似カラムを表示させて、UIからフィルター条件を指定できるようにしたい場合は以下の「Pseudo Columns」というプロパティを設定します。
cdn.cdata.com
例えば「Pseudo Columns="="」という設定を追加することで、
以下のように擬似カラムが表示され、UI上でフィルターを実施できるようになります。
おわりに
その他もし気になる点やわからない点があれば、テクニカルサポートまでお気軽にお問い合わせください。
https://www.cdata.com/jp/support/submit.aspx
関連コンテンツ