questetraからセキュリティを確保し、google apps scriptをコールする方法

25
Questetraからセキュリティを 確保し、Google Apps Script をコールする方法 ミラクル・リナックス株式会社 2016320

Upload: -

Post on 11-Feb-2017

550 views

Category:

Small Business & Entrepreneurship


3 download

TRANSCRIPT

Questetraからセキュリティを確保し、Google Apps Script

をコールする方法

ミラクル・リナックス株式会社

2016年3月20日

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

全体の関係と流れ

Questetra側の設定A)OAuthの設定 1)Scope、Consumer Key(=Client ID)、Consumer Secret(=Client Secret)の設定 2)トークンの取得B)メッセージ送信中間イベントの設定1)送信データの設定2)呼び出すGASのAPI IDを含めたアクセスURLの設定などの通信設定

Google側の設定A)QST側設定のB-2にセットする、API IDの確認B)QST側のA-1に設定するGASのScopeの確認C)QST側のA-1に設定するGASのClient IDとClient Secretの確認

2

■ Questetraからセキュリティを確保し、Google Apps Scriptをコールする場合には、QST側のOAuth機能を使い、GAS側は、Google Apps Script Execution APIを設定し、GASをAPI化して、QSTからのコールを受ける。注)ただし、GAS Execution APIを利用するには、Cloud Platformの無償トライアルの設定が必要。

■ Google Apps Scriptのサンプルは、本資料の最後を参照

Google側の設定

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

前提:GASの作成

■ まずは、呼び出すGASを作成します。■ 基本的なGASの作成方法については、

➢ http://www.ka-net.org/blog/?p=6326➢ の「呼び出すスクリプトの準備」なども参照ください。

■ Questetraとの連携GASサンプルは、本資料の最後を参照ください。

4

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

A)QST側設定のB-2にセットする、API IDの確認

■ API IDの取得は、GASの「実行可能APIとして導入」メニューを選択します。続いてAPIとして導入するかの確認画面などが表示され、導入をすすめると、最後にポップアップにて表示されますので、API IDをメモします。

5

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

B)QST側のA-1に設定するGASのScopeの確認

■ GASの「ファイル」メニューから「プロジェクトのプロパティを選択し、プロパティのポップアップウィンドウで「スコープ」タブにて確認をします。その内容をメモします。

6

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

C)クライアントIDとクライアントシークレットの取得(1)

1. GAS プロジェクト画面よりリソース→ Developers Console プロジェクトを選択する。

2. ポップ表示される画面の「このスクリプトが現在関連付けられているプロジェクト:」 の下のリンクをクリック

7

注意)2016/3/20時点では、GASのプロジェクト名が英語でないと、 Developer Consoleの画面が表示されないため、GASのプロジェクト名は英語にしておく必要がある。

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

C)クライアントIDとクライアントシークレットの取得(2)

3. Google Developers Console より「Google API を有効化し、鍵などの認証情報を取得します」を選択

4. API の検索窓で "execut" で検索し「Google Apps Script Execution API」をクリック

5. 表示された概要の画面で「有効」をクリックする。(「無効にする」がハイライトされていなければ有効)

8

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

C)クライアントIDとクライアントシークレットの取得(3)

6. Google Developers Consoleの左メニュー「認証情報」タブを選択

7. 「認証情報を作成」ボタンをクリック

8. プルダウンメニューから「OAuthクライアントID」を選択

9

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

C)クライアントIDとクライアントシークレットの取得(4)

9. 「アプリケーションの種類」で「ウェブアプリケーション」を選択

10

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

10. 承認済みのJavaScriot生成先:https://developers.google.com承認済みのリダイレクトURI:https://s.questetra.net/oauth2callbackを入力。名前は、適宜変更。

C)クライアントIDとクライアントシークレットの取得(5)

11

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

11. 最後に下部にある「作成」ボタンをクリック

12. クライアントIDとクライアントシークレットがポッポアップウィンドウで表示されます。

13. クライアントID=Consumer Key、クライアントシークレットが=Consumer Secretになるため、これらをメモしておきます。

C)クライアントIDとクライアントシークレットの取得(6)

12

Questetra側の設定

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

A)OAuthの設定 1)Scope、Consumer Key(=Client ID)、Consumer Secret(=Client Secret)の設定

1. メッセージ送信中間イベントのプロパティを表示させ、「セキュリティ」タブを選択

2. 「OAuth2.0で接続する」をチェック3. 「設定はこちら」ボタンをクリックする4. OAuth設定のポップアップウィンドウ

にて、「追加」ボタンをクリック5. 上部のリストから「Google」を選択。

(自動的にAuthorization Code Request URLとAccess Token Request URLが代入されます)

14

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

A)OAuthの設定 1)Scope、Consumer Key(=Client ID)、Consumer Secret(=Client Secret)の設定

6. 名前は、任意のものを入力7. Scopeは、GASの情報で確認したスコープを入力8. Consumer Key(は、GASの情報で確認したクライアントIDを入力

9. Consumer Secretは、GASの情報で確認したクライアントシークレットを入力10. 最後に保存ボタンをクリック

15

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

A)OAuthの設定 2)トークンの取得

1. 追加した設定の「トークンの取得」ボタンをクリック

2. GASへのアクセス許可メッセージが出て「許可」をクリック(GASを作成したユーザでGoogleでログインしている必要があります)

3. 「トークンの有無」が「○(リフレッシュトークン)」となっていればOK

16

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

B-1)送信データ設定(1)

17

1. メッセージ送信中間イベントのリクエストボディに指定する文字型データ(複数行)のデータ項目の作成。(例では、「送信データJSON」)

2. 作成したデータ項目にJSON形式の引数を代入するサービスタスクの作成。(例では、「送信JSONデータ作成」)

Excecution API へは、JSON データにて送信を行う必要があるために、送信前にサービスタスクでデータを作成する必要がある。

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

B-1)送信データ設定(2)

18

3. サービスタスクでJSON形式の引数を「値もしくは式」に入力

{ 'function': 'doGet', 'parameters': { "param_Code":"#{data['8']}", "param_Sup_Id":"#{data['0']}", "param_Start_Date":"#{data['1']}", "param_End_Date":"#{data['3']}", "param_Sup_Docs":"#{data['5']}", "param_Sup_Name1":"#{data['10']}", "param_Sup_Name2":"#{data['15']}", "param_Sup_Name3":"#{data['16']}", "param_Sup_User_Name":"#{data['14']}", "param_Sup_Tech_Name":"#{data['13']}", "param_Sup_Ml_Sales":"#{data['7']}", "param_Sup_Ml_Tech":"#{data['6']}", "param_ID":"#{processInstanceId}" }, 'devMode': true}

● 'function': 'doGet',のdoGetは、GAS側の関数名● "param_Code"は、GAS側への引数名● #{data['8']}は、引数の値で、QST側のデータ番号

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

B-2)呼び出すGASのAPI IDを含めたアクセスURLなどの通信設定(1)

1. 「通信設定」タブを選択2. アクセスURLを

https://script.googleapis.com/v1/scripts/{API ID}:runAPI IDは、GASから取得したものを代入

3. HTTP Methodを「POST(リクエストボディを指定)」に設定

19

GASの実行失敗時にエラーメッセージが返る文字型複数行データを指定しておくとデバック時に便利。

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

B-2)呼び出すGASのAPI IDを含めたアクセスURLなどの通信設定(2)

1. 「リクエストボディ」タブを選択2. 「リクエストボディとして送信するプロセスデータ項目」にB)-2で作成したJSON

形式の値が入っているデータ項目を指定(例では、送信データJSON)3. 「リクエストボディのContent-Type」を「application/json」を選択

20

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

1. 「レスポンス」タブを選択2. 「レスポンスをプロセスデータに保存する」をチェックする3. 「保存先のプロセスデータ項目」に、文字方複数行データ項目(事前に作成し

ておく)を指定する。

B-2)呼び出すGASのAPI IDを含めたアクセスURLなどの通信設定(3)

21

以下のように値が返ってくる

スクリプト呼び出しレスポンス

{

"name": "doGet",

"done": true,

"response": {

"@type": "type.googleapis.com/google.apps.script.v1.

ExecutionResponse",

"result": {

"response": "{\"status\":\"OK\",\"date\":\"2016/03/20 18:58:42

JST\"}"

}

}

}

これらを実施することで、 Google API からレスポンスデータを受けられるになり、正常アクセスが行えているかを確認することができます。

Google Apps Scriptサンプル

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

{ 'function': 'doGet', 'parameters': { "param_Code":"#{data['8']}", "param_Sup_Id":"#{data['0']}", "param_Start_Date":"#{data['1']}", "param_End_Date":"#{data['3']}", "param_Sup_Docs":"#{data['5']}", "param_Sup_Name1":"#{data['10']}", "param_Sup_Name2":"#{data['15']}", "param_Sup_Name3":"#{data['16']}", "param_Sup_User_Name":"#{data['14']}", "param_Sup_Tech_Name":"#{data['13']}", "param_Sup_Ml_Sales":"#{data['7']}", "param_Sup_Ml_Tech":"#{data['6']}", "param_ID":"#{processInstanceId}" }, 'devMode': true}

<メッセージ送信中間イベントから送信されたデータ>

※引数 e には、送信データの parameters の内容がセット されます。 parameters の内容は object 形式のデータとなります。GASのコーディングの中では、以下のように参照できます。

range_B.setValue(e.param_Code); range_C.setValue(e.param_Sup_Id); range_D.setValue(e.param_Start_Date);

//Questetraから呼び出す関数を指定して、このdoGetを呼び出し

ている。

function doGet(e) {

receive_(e); //メイン関数の呼び出し

//Questetraの呼び出し元に応答(実行時間)をreturnする

var s = JSON.stringify({status: "OK" ,date: d.toLocaleString()});

return {mime:ContentService.MimeType.JSON,response: s};

}

<GAS側のコーディング>

QSTの引数をGASの参照方法

23

#{data[‘0’]}は、QSTのWF内のプロセスデータ項目番号0を参照しています。

Copyright © 2000-2015 MIRACLE LINUX CORPORATION All rights reserved

GASのサンプル

24

var SPREADSHEET_ID = "1aYxJBdi90-jajf-0ijafksdjfkaajf329ufdas"; var SHEET_NAME = "Actual"; //実績を入れるシート名var LOG_SHEET_NAME = "Log"; //Log用のシート名var d = new Date(); //更新日付用の変数

//Questetraから呼び出す関数名を指定して、このdoGetを呼び出している。function doGet(e) { receive_(e); //メイン関数の呼び出し

//Questetraの呼び出し元に応答(実行時間)をreturnする⇒JSON形式でReply var s = JSON.stringify({status: "OK" ,date: d.toLocaleString()}); return {mime:ContentService.MimeType.JSON,response: s}; }//これがメインの関数となる。function receive_(e) { var ss = SpreadsheetApp.openById(SPREADSHEET_ID); //指定したスプレッドシートのオープン var sheet = ss.getSheetByName(SHEET_NAME); //スプレッドシートのシート名を指定=sheetオブジェクト var log_sheet = ss.getSheetByName(LOG_SHEET_NAME); //スプレッドシートのログ用シート名を指定=sheetオブジェクト//更新情報をActualシートに追加挿入する //現時点の一番下の行のすぐ下に出力  var rowIndex = sheet.getLastRow() + 1; //各引数をActualシートのA〜Nカラムのレンジをオブジェクト変数の取得 var range_A = sheet.getRange('A' + rowIndex); var range_B = sheet.getRange('B' + rowIndex); var range_C = sheet.getRange('C' + rowIndex); var range_D = sheet.getRange('D' + rowIndex);    //各引数をActualシートに代入

    range_A.setValue(e.param_ID); //Questetraから渡された引数の参照

   range_B.setValue(e.param_Code);    range_C.setValue(e.param_Sup_Id);    range_D.setValue(e.param_Start_Date);}

ミラクル・リナックス株式会社 【無断転載を禁ず】この文書はあくまでも参考資料であり、掲載されている情報は予告なしに変更されることがあります。ミラクル・リナックス(株)は本書の内容に関していかなる保証もいたしません。また、本書の内容に関連したいかなる損害についても責任を負いかねます。又、本資料の著作権は特に指定されている箇所を除いて、ミラクル・リナックスが有します。ミラクル・リナックスが著作権を有するコンテンツにつきましては、ミラクル・リナックスに対して無断で複製、改変、頒布などをすることはできません。

MIRACLE LINUX の製品名、ロゴ、サービス名などは、ミラクル・リナックスが所有するか、使用権許諾を受けている商標もしくは登録商標です。その他、本 Web サイトに掲載されている他社の製品名、ロゴなどは、それぞれ該当する各社が所有する商標もしくは登録商標です。

【お問い合わせ先】[email protected]

http://www.miraclelinux.com