こんにちは。CData Software Japan リードエンジニアの杉本です。
今回は働き方改革プラットフォーム TeamSpirit のデータにCData Driver でアクセスする方法・ポイントを解説したいと思います。
TeamSpirit とは?
TeamSpirit は、株式会社チームスピリットが提供する、勤怠管理・工数管理・経費精算などの機能を融合したクラウドサービスです。
https://www.teamspirit.com/ja-jp/
TeamSpirit は、Salesforce プラットフォーム上で稼働するアプリケーションとして提供されています。さまざまな勤務形態に柔軟・高セキュリティで対応することができ、「組織を1歩強くするための機能」が豊富に提供されています。充実したレポート機能もその1つです。
CData Driver からの接続方法
TeamSpirit は前述の通り、Salesforce プラットフォーム上に構成されているため、各種CData Salesforce Driver を利用してアクセスすることが可能です。今回の記事ではODBC Driver を用いましたが、JDBC、ADO.NET でも利用方法は基本的に変わりありません。
https://www.cdata.com/jp/drivers/salesforce/
CData Salesforce Driver ではいくつかOAuth やセキュリティトークンなどの接続方法が利用できますが、TeamSpirit ではセキュリティトークンが発行できないようですので、AuthScheme で「OAuth」を使って接続するのが良いでしょう。
TeamSpirit のデータアクセスのポイント
CData Driver はデフォルトでSalesforce の標準・カスタムオブジェクトを自動的に算出して、テーブルやビューとしてアクセスできるようになります。
しかしながら、TeamSpirit ではその機能の大部分をカスタムオブジェクトによって構成しており、取得したいデータにアクセスするには、そのオブジェクト構造を正しく理解する必要があります。
そこでおすすめなのがTeamSpirit のレポートを使ってデータを取得する方法です。
TeamSpirit では予め勤怠情報などを集計して表示するための便利なレポートが多数搭載されています。おそらく一般的な分析、連携利用であればこのレポートを通じてデータを取得するのが望ましいでしょう。
CData Salesforce Driver はレポートをテーブルとして定義してデータを取得できるようになっています。
今回は一例として「レポート: 勤怠(ver.3.0) - [データ] 月別勤怠一覧」を通じてデータを取得してみます。対象とするレポートのSalesforce Id を控えておいてください。
レポートは「CreateReportScehma」の実行、もしくは以下のようにODBC DSNのテーブルタブから「新しいテーブル定義」のボタンをクリックすることで利用できます。
https://cdn.cdata.com/help/RFH/jp/odbc/pg_sp-createreportschema.htm
以下のような画面が表示されるのでテーブルスキーマタイプとして「Create Report Schema」を選択し、任意のReport Nameと先ほど取得したReport Idを指定して「作成」をクリックします。
これでPower BI などのツールからアクセスすると、以下のように勤怠データのレポートが取得できます。
Tips:データの書き込み・更新に関する注意点
前述の通りTeamSpirit はSalesforce プラットフォーム上に構成され、各種カスタムオブジェクトで機能が作られています。
CData Driver ではそれらカスタムオブジェクトに対してデータのINSERTやUPDATEを行うことが可能ですが、TeamSpirit のデータ構成、整合性が保てない可能性があるため、カスタムオブジェクトの書き込み操作は行わないほうが良いでしょう。
Tips:レポートをフィルターする時の注意点
便利なレポート機能ですが、ちょっと注意が必要な部分があります。それはSalesforce のレポートはその仕様上2000件以上のデータを取得することができない、という制約です。
そこでフィルター条件を駆使して取得するデータを絞り込むことができます。
ただ注意しなければいけないのはそのフィルターの指定方法です。例えばCData Driver では以下のようにフィルタの指定ができますが、このフィルタの指定だとメモリ上でフィルターがかかる方式になっており、適切にSalesforce 側へフィルターが効きません(件数が少ない場合は正常に動いているように見えるのでより注意が必要です)
SELECT * FROM [月別勤怠一覧] WHERE [勤怠月度] = '2022/09'
そこで利用するのが「ReportFilter」という疑似的に存在しているカラムです。ここにSalesforce のReportで有効はWHERE条件を指定することで、取得結果をSalesforce 上で絞り込むことが可能です。
例えば「月別勤怠一覧」レポートの「勤怠月度」の項目で絞り込みたい場合はカスタムクエリを用いて以下のように指定します。ReportFilterの中ではAPIの列名(teamspirit__AtkEmpMonth__c.teamspirit__YearMonthS__c)を用いて記述しています。
REPLICATE [月別勤怠一覧] SELECT * FROM [月別勤怠一覧] WHERE [ReportFilter] = 'WHERE teamspirit__AtkEmpMonth__c.teamspirit__YearMonthS__c = ''2022/09'''
もし動的に1ヶ月前のレポートを取得したい場合は、以下のように記述すると良いでしょう。
REPLICATE [月別勤怠一覧] SELECT * FROM [月別勤怠一覧] WHERE ReportFilter = CONCAT('WHERE teamspirit__AtkEmpMonth__c.teamspirit__YearMonthS__c = ''',FORMAT(DATEADD('mm',-1,CURRENT_DATE()),'yyyy/MM'),'''');
APIの列名はちょっと調べるのに癖がありますが、一番簡単な方法は作成したレポートの定義ファイル(.rsd)を参照する方法です。
レポートの定義ファイルは接続設定のLocationのフォルダに格納されており、
https://cdn.cdata.com/help/RFH/jp/odbc/RSBSalesforce_p_Location.htm
以下のようなXMLファイルになっています。各カラムが「attr」というプロパティで定義されていて、この「other:internalname」に指定されている文字列がAPI名になります。
おわりに
このようにCData Salesforce Driver を通じてTeamSpirit にアクセスすることで、勤怠などのデータを手軽に取得できるようになります。是非いろいろなツールを通じて活用してみてください。
ご不明な点があれば、テクニカルサポートまでお気軽にお問い合わせください。
https://www.cdata.com/jp/support/submit.aspx
関連コンテンツ