ITメモ

ITのこと学習中

Google スプレッドシートにBusiness CentralのWeb Serviceのデータ表示

Google App ScriptsでBusiness CentralのWeb Serviceを取得してGoogle SpreadSheetsに表示できないかと考えてApp Scriptsにトライ。

Business CentralのWeb Serviceで公開されているデータを取得するためにはOAuth2.0認証を行う必要があるため、App Scriptsで認証。こんな感じ

function getBCToken() {
  // Call token endpoint
  // This is a POST Request to get Token

  // Base URL
  // Grant Type
  const grantType = 'client_credentials';
  // Client ID
  const clientId = "<Client ID>";
  // Secret Key
  const clientSecret = '<Client Secret>';
  // Scope
  const scope = baseURL + '/.default';

  const formData = {
    grant_type: grantType,
    client_id: clientId,
    client_secret: clientSecret,
    scope: scope
  };
  // Get BC/AAD Access Token
  let response = UrlFetchApp.fetch('https://login.microsoftonline.com/<Tenant ID>/oauth2/v2.0/token', {
    method: 'POST',
    payload: formData,
    contentType: 'application/x-www-form-urlencoded'
    });
 
  //Json Perse
  const tokenInfo = JSON.parse(response.getContentText());
  return tokenInfo;

}

<Client Secret>、<Client ID>、<Tenant ID>は各環境に合わせて変更します。これで、OAuth2.0のトークンの取得ができました。その取得したトークンを利用してBusiness CentralのWeb Serviceで公開しているデータを取得します。

// Get Business Central Customer Info on Web Service
function getBCOdata(url) {
  // let url = "https://api.businesscentral.dynamics.com/v2.0/<Tenant ID>/<Environment Name>/ODataV4/Company('<Company Name>')/Test_CustomerLedgerEntries";

  let tokenInfo = getToken();

  let myHeaders = {
    "Authorization": tokenInfo.token_type + " " + tokenInfo.access_token
  };

  let requestOptions = {
    method: 'GET',
    headers: myHeaders,
    redirect: 'follow'
  }

  let resp = UrlFetchApp.fetch(url, requestOptions)

// console.log(JSON.parse(resp.getContentText()));
  return JSON.parse(resp.getContentText());
}
 

console.logからデバッグで出力したら、OData(JSON)形式でデータの取得ができた模様。

Sample OData from Business Central

公開済らしい import_json_appsscript.jsスクリプトに上の内容を適当に追加して、Google SpreadSheetsに出せるか確認。とりあえず表示させることができた。

Business Central Customer Ledger Entries on Google Sheets

あとは、欲しい情報に加工すればOK。

マイクロソフトExcelアプリならデータ読み込みさせられるからもっと簡単にできる。Excelオンラインはできないのはなぜ・・・?