Workday のデータでGoogle Sheets を拡張
マクロ、カスタム関数、アドオンを使用してGoogle スプレッドシートからWorkday のデータとやり取りします。CData API Server は、ADO.NET Provider for Workday(またはその他の250+ ADO.NET Providers)と組み合わせることで、Google Sheets のようなクラウドベースのモバイルアプリケーションからWorkday のデータに接続できるようになります。API Server は、Workday およびCData ADO.NET Providers にサポートされるすべてのソースのOData サービスを生成する軽量のWeb アプリケーションです。
Google Apps Script(GAS)は、これらのOData サービスをJSON 形式で利用できます。この記事では、Google スプレッドシートにWorkers データを取り込み、変更を加えたときにWorkday のデータの更新を実行するシンプルなアドオンを作成する方法を説明します。
Workday データ連携について
CData は、Workday のライブデータにアクセスし、統合するための最も簡単な方法を提供します。お客様は CData の接続機能を以下の目的で使用しています:
- Prism Analytics Data Catalog で作成したテーブルやデータセットにアクセスでき、Workday システムの忠実性を損なうことなく、ネイティブの Workday データハブを操作できます。
- Workday Reports-as-a-Service にアクセスして、Prism から利用できない部門データセットや、Prism の許容サイズを超えるデータセットのデータを表示できます。
- WQL、REST、または SOAP でベースデータオブジェクトにアクセスし、より詳細で細かいアクセスを実現できます(ただし、クエリの作成には Workday 管理者や IT の支援が必要な場合があります)。
ユーザーは、Tableau、Power BI、Excel などの分析ツールと Workday を統合し、当社のツールを活用して Workday データをデータベースやデータウェアハウスにレプリケートしています。アクセスは、認証されたユーザーの ID とロールに基づいて、ユーザーレベルで保護されます。
Workday を CData と連携させるための設定についての詳細は、ナレッジベース記事をご覧ください:Comprehensive Workday Connectivity through Workday WQL および Reports-as-a-Service & Workday + CData: Connection & Integration Best Practices
はじめに
API Server の設定
以下のリンクからAPI Server の無償トライアルをスタートしたら、セキュアなWorkday OData サービスを作成していきましょう。
Workday への接続
GAS からWorkday のデータを操作するには、まずWorkday への接続を作成・設定します。
- API Server にログインして、「Connections」をクリック、さらに「接続を追加」をクリックします。
- 「接続を追加」をクリックして、データソースがAPI Server に事前にインストールされている場合は、一覧から「Workday」を選択します。
- 事前にインストールされていない場合は、コネクタを追加していきます。コネクタ追加の手順は以下の記事にまとめてありますので、ご確認ください。
CData コネクタの追加方法はこちら >> - それでは、Workday への接続設定を行っていきましょう!
-
Workday 接続プロパティの取得・設定方法
ここでは、4つのWorkday API の接続パラメータを設定する方法、およびTenant とBaseURL を取得する方法について説明します。必要なAPI のパラメータが設定され、カスタムOAuth および / またはAzure AD API クライアントを作成したら、接続の準備は完了です。
接続の前提条件
API / 前提条件 / 接続パラメータ
WQL / WQL サービスを有効化(下記参照) / ConnectionType: WQL
Reports as a Service / カタログレポートの設定(ヘルプドキュメントの「データアクセスのファインチューニング」参照) / ConnectionType: Reports
REST / 自動で有効化 / ConnectionType: REST
SOAP / 自動で有効化 / ヘルプドキュメントのWorkday SOAP API への認証を参照BaseURL およびTenant の取得
BaseURL およびTenant プロパティを取得するため、Workday にログインしてView API Clients を検索します。 この画面では、Workday はBaseURL とTenant の両方を含むURL であるWorkday REST API Endpoint を表示します。
REST API Endpoint のフォーマットは、 https://domain.com/
/mycompany です。ここで、
- https://domain.com(URL のサブディレクトリと会社名の前の部分)はBaseURL です。
- mycompany(URL の最後のスラッシュの後の部分)はTenant です。
例えば、REST API エンドポイントがhttps://wd3-impl-services1.workday.com/ccx/api/v1/mycompany の場合、 BaseURL はhttps://wd3-impl-services1.workday.com であり、Tenant はmycompany です。
WQL サービスを有効化
Workday WQL API を介して接続するには、はじめにWQL Service を有効にする必要があります。- Workday を開きます。
- 検索バーにView Domain と入力します。
- プロンプトにWorkday Query Language と入力します。
- Allowed Security Group Types のいずれかに、接続するユーザーが含まれていることを確認します。
Workday への認証
Basic 認証以外のほとんどのWorkday 接続では、認証のためにOAuth ベースのカスタムAPI クライアントアプリケーションを作成する必要があります。これには、ユーザーがAzure AD 資格情報を介して接続するエンタープライズインストールも含まれます。 Workday への認証につての詳細は、ヘルプドキュメントの「Workday への認証」セクションを参照してください。 - 接続情報の入力が完了したら、「保存およびテスト」をクリックします。
Workday 接続プロパティの取得・設定方法
ここでは、4つのWorkday API の接続パラメータを設定する方法、およびTenant とBaseURL を取得する方法について説明します。必要なAPI のパラメータが設定され、カスタムOAuth および / またはAzure AD API クライアントを作成したら、接続の準備は完了です。
接続の前提条件
API / 前提条件 / 接続パラメータ
WQL / WQL サービスを有効化(下記参照) / ConnectionType: WQL
Reports as a Service / カタログレポートの設定(ヘルプドキュメントの「データアクセスのファインチューニング」参照) / ConnectionType:
Reports
REST / 自動で有効化 / ConnectionType: REST
SOAP / 自動で有効化 / ヘルプドキュメントのWorkday SOAP API への認証を参照
BaseURL およびTenant の取得
BaseURL およびTenant プロパティを取得するため、Workday にログインしてView API Clients を検索します。 この画面では、Workday はBaseURL とTenant の両方を含むURL であるWorkday REST API Endpoint を表示します。
REST API Endpoint のフォーマットは、
https://domain.com/
- https://domain.com(URL のサブディレクトリと会社名の前の部分)はBaseURL です。
- mycompany(URL の最後のスラッシュの後の部分)はTenant です。
例えば、REST API エンドポイントがhttps://wd3-impl-services1.workday.com/ccx/api/v1/mycompany の場合、 BaseURL はhttps://wd3-impl-services1.workday.com であり、Tenant はmycompany です。
WQL サービスを有効化
Workday WQL API を介して接続するには、はじめにWQL Service を有効にする必要があります。
- Workday を開きます。
- 検索バーにView Domain と入力します。
- プロンプトにWorkday Query Language と入力します。
- Allowed Security Group Types のいずれかに、接続するユーザーが含まれていることを確認します。
Workday への認証
Basic 認証以外のほとんどのWorkday 接続では、認証のためにOAuth ベースのカスタムAPI クライアントアプリケーションを作成する必要があります。これには、ユーザーがAzure AD 資格情報を介して接続するエンタープライズインストールも含まれます。 Workday への認証につての詳細は、ヘルプドキュメントの「Workday への認証」セクションを参照してください。
API Server のユーザー設定
次に、API Server 経由でWorkday にアクセスするユーザーを作成します。「Users」ページでユーザーを追加・設定できます。やってみましょう。
- 「Users」ページで ユーザーを追加をクリックすると、「ユーザーを追加」ポップアップが開きます。
-
次に、「ロール」、「ユーザー名」、「権限」プロパティを設定し、「ユーザーを追加」をクリックします。
-
その後、ユーザーの認証トークンが生成されます。各ユーザーの認証トークンとその他の情報は「Users」ページで確認できます。
Workday 用のAPI エンドポイントの作成
ユーザーを作成したら、Workday のデータ用のAPI エンドポイントを作成していきます。
-
まず、「API」ページに移動し、
「 テーブルを追加」をクリックします。
-
アクセスしたい接続を選択し、次へをクリックします。
-
接続を選択した状態で、各テーブルを選択して確認をクリックすることでエンドポイントを作成します。
OData のエンドポイントを取得
以上でWorkday への接続を設定してユーザーを作成し、API Server でWorkday データのAPI を追加しました。これで、OData 形式のWorkday データをREST API で利用できます。API Server の「API」ページから、API のエンドポイントを表示およびコピーできます。
Workday のデータを取得する
「Tools」->「Script Editor」とクリックして、スプレッドシートからScript Editor を開きます。Script Editor で次の機能を追加し、スプレッドシートにOData クエリの結果を入力します。
function retrieve(){
var url = "https://MyUrl/api.rsc/Workers?select=Id,Worker_Reference_WID,Legal_Name_Last_Name,Legal_Name_Last_Name";
var response = UrlFetchApp.fetch(url,{
headers: {"Authorization":"Basic " + Utilities.base64Encode("MyUser:MyAuthtoken")}
});
var json = response.getContentText();
var sheet = SpreadsheetApp.getActiveSheet();
var a1 = sheet.getRange('a1');
var index=1;
var workers = JSON.parse(json).value;
var cols = [["Id","Worker_Reference_WID","Legal_Name_Last_Name","Legal_Name_Last_Name"]];
sheet.getRange(1,1,1,4).setValues(cols);
row=2;
for(var i in workers){
for (var j in workers[i]) {
switch (j) {
case "Id":
a1.offset(row,0).setValue(account[i][j]);
break;
case "Worker_Reference_WID":
a1.offset(row,1).setValue(account[i][j]);
break;
case "Legal_Name_Last_Name":
a1.offset(row,2).setValue(account[i][j]);
break;
case "Legal_Name_Last_Name":
a1.offset(row,3).setValue(account[i][j]);
break;
}
}
row++;
}
}
次のステップに従って、開いたタイミングでスプレッドシートに入力するインストール可能なトリガーを追加します。
- 「Resources」->「Current Project's Triggers」->「Add a New Trigger」とクリックします。
- 「Run」メニューで「retrieve」を選択します。
- 「From Spreadsheet」を選択します。
- 「On open」を選択します。
ダイアログを閉じると、アプリケーションへのアクセスを許可するように要求されます。
Workday のデータへの変更を追加する
以下の関数を追加し、セルへの変更をAPI Server に追加します。
function buildReq(e){
var sheet = SpreadsheetApp.getActiveSheet();
var changes = e.range;
var id = sheet.getRange(changes.getRow(),1).getValue();
var col = sheet.getRange(1,changes.getColumn()).getValue();
var url = "http://MyServer/api.rsc/Workers("+id+")";
var putdata = "{\"@odata.type\" : \"CDataAPI.Workers\", \""+col+"\": \""+changes.getValue()+"\"}";;
UrlFetchApp.fetch(url,{
method: "put",
contentType: "application/json",
payload: putdata,
headers: {"Authorization":"Basic " + Utilities.base64Encode("MyUser:MyAuthtoken")}
});
}
下記の手順に従って、アップデートトリガーを追加します。
- 「Resources」->「Current Project's Triggers」とクリックします。
- 「Run」メニューで「buildReqe」を選択します。
- 「From Spreadsheet」を選択します。
- 「On edit」を選択します。
「Publish」->「Test as Add-On」とクリックすることで、スクリプトを確認できます。バージョン、インストールタイプ、およびスプレッドシートを選択し、テストの構成を作成します。作成したら、選択して実行できます。
セルを変更すると、API Server はWorkday のデータのアップデートを実行します。