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 Typeconst grantType = 'client_credentials';// Client IDconst clientId = "<Client ID>";// Secret Keyconst clientSecret = '<Client Secret>';// Scopeconst scope = baseURL + '/.default';
const formData = {grant_type: grantType,client_id: clientId,client_secret: clientSecret,scope: scope};// Get BC/AAD Access Tokenlet response = UrlFetchApp.fetch('https://login.microsoftonline.com/<Tenant ID>/oauth2/v2.0/token', {method: 'POST',payload: formData,contentType: 'application/x-www-form-urlencoded'});//Json Persereturn tokenInfo;
}
<Client Secret>、<Client ID>、<Tenant ID>は各環境に合わせて変更します。これで、OAuth2.0のトークンの取得ができました。その取得したトークンを利用してBusiness CentralのWeb Serviceで公開しているデータを取得します。
// Get Business Central Customer Info on Web Servicefunction 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 = {};
let requestOptions = {method: 'GET',headers: myHeaders,redirect: 'follow'}
let resp = UrlFetchApp.fetch(url, requestOptions)
// console.log(JSON.parse(resp.getContentText()));}
console.logからデバッグで出力したら、OData(JSON)形式でデータの取得ができた模様。
公開済らしい import_json_appsscript.js のスクリプトに上の内容を適当に追加して、Google SpreadSheetsに出せるか確認。とりあえず表示させることができた。
あとは、欲しい情報に加工すればOK。
マイクロソフトのExcelアプリならデータ読み込みさせられるからもっと簡単にできる。Excelオンラインはできないのはなぜ・・・?