CData Software Blog

クラウド連携のCData Software の技術ブログです。

CData PCA Sales & Accounting(商魂・商管DX/会計DX)Driver でフィルター条件を適切に設定する方法

f:id:sugimomoto:20210705091050p:plain

こんにちは。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」の機能を利用して、以下のような条件を発行するイメージですね。

<BEMasterSmsCondition>
  <SyohinCodeTo>0006</SyohinCodeTo>
  <SyohinCodeFrom>0002</SyohinCodeFrom>
</BEMasterSmsCondition>

CData Driver ではそれらAPIのフィルター条件をサポートするための特殊なカラムとして「Pseudo-Columns(疑似カラム)」という項目をサポートしています。

それぞれのテーブルやビューがどのような疑似カラムをサポートしているのか?については、それぞれのテーブルのヘルプに記載しています。

cdn.cdata.com

f:id:sugimomoto:20210705090656p:plain

ユーザーはこの疑似カラムを使うことで、適切にPCA Web APIのフィルターを利用しながら、データを取得することができます。

例えば先程紹介した「MasterSms」というテーブルの商品コードを範囲条件とする「SyohinCodeFrom 」「SyohinCodeTo」であれば、以下のように利用します。

※疑似カラムは必ずEqual(=)を使って条件指定をする必要があります。<>やINは利用できないので注意しましょう。

SELECT * FROM MasterSms 
WHERE SyohinCodeFrom = '0002' AND SyohinCodeTo = '0006';

f:id:sugimomoto:20210705090704p:plain

以下のように商品マスタのデータを商品コードの0002~0006までの範囲で取得することができました。

f:id:sugimomoto:20210705090724p:plain

ちなみに内部的には以下のような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

<BEMasterSmsCondition>
  <SyohinCodeTo>0006</SyohinCodeTo>
  <SyohinCodeFrom>0002</SyohinCodeFrom>
</BEMasterSmsCondition>

フィルター条件を指定する際の注意点

CData Driverはその特性上、サーバーがフィルター条件をサポートしていないSQL文が実行された場合、一度APIから全データを取得して、その取得したデータをメモリ上でフィルタリングして表示するようになっています。

つまり、全データを取得するためのAPIリクエストが裏側で多重に発生してしまい、想定以上に処理時間を要してしまいます。

例えば、先程の商品コードを元にした範囲指定ですが、以下のようにクエリした場合はフィルター条件がサーバー側に渡りません。

SELECT * FROM MasterSms WHERE SyohinCode > '0002' AND SyohinCode < '0006';

そのため、自身では数件のデータを取得しようとしているものの、想定した以上のデータが内部では取得され、処理に時間を要してしまうことがあります。

これらの処理が結果的にPCAのAPI Limitに抵触してしまう可能性もあるので、注意しましょう。

疑似カラムを一覧に表示する方法

ちなみにこの疑似カラムですが、デフォルトではExcel Add-inなどの以下のカラム一覧に表示されません。

f:id:sugimomoto:20210705090730p:plain

もしこの一覧に擬似カラムを表示させて、UIからフィルター条件を指定できるようにしたい場合は以下の「Pseudo Columns」というプロパティを設定します。

cdn.cdata.com

例えば「Pseudo Columns="="」という設定を追加することで、

f:id:sugimomoto:20210705090736p:plain

以下のように擬似カラムが表示され、UI上でフィルターを実施できるようになります。

f:id:sugimomoto:20210705090741p:plain

おわりに

その他もし気になる点やわからない点があれば、テクニカルサポートまでお気軽にお問い合わせください。

https://www.cdata.com/jp/support/submit.aspx