業務:週次売上報告へのフィードバック
「一週間分の売上」が Google Sheets に書き込まれるようになった。(参照:第550話)全店長が一つのファイル(例:『売上報告2017-08-27to2017-09-02』)を同時編集するので、
- 各店長は他店を意識するようになった
- 店長同士で誤入力を指摘し合うようになった
- 本部での集計作業は(Spreadsheet任せなので)不要になった
- 役員達もファイルを閲覧し、各店舗の動向を能動的に確認するようになった
課題:管理職側のコメントがない
しかし、本部マネージャから全店長に「フィードバック」があっても良いのではないだろうか?セッカク全店長が頑張って報告してくれているのに、本部のマネージャ達から何も感想がないのは寂しい。「目標達成を頼む」の一言でもイイ。マネージャの笑顔を待ちわびる店長達に伝えてやってくれ。。。
そうすれば「実績データについて本部のマネージャ達がどう考えているか/どんな助言をしているのか」を役員達が知ることもできる。
[週次売上報告プロセス-フィードバック]
解決:フィードバック工程の設置と SpreadSheet への自動書込
ヒューマン工程『2.コメント』を下流工程に設置すれば、エリアマネージャに対して「フィードバックを行う業務」を追加することが可能です。この業務プロセス定義では、2人のエリアマネージャに対して「コメント業務」が追加されます。すなわちワークフロー基盤(Questetra等)で毎週「フィードバック」を記入することになります。
さらにこの例では、メール送信イベント『店長通知』と自動工程『Sheet書込』も併せて設置されています。すなわち、記入された「フィードバック」は店長達にメールで自動通知されるとともに、当該 Spreadsheet にも自動的に保存されます。(二度手間の回避)
考察:Google Sheets API をワークフローから呼び出す
Google Sheets に対して、より複雑な「ファイル操作」をリクエストさせたい場合には、サービス工程の定義ファイルを自作する必要があります。#この例では、パッケージ化された「サービス工程アドオン:Google Spreadsheets セル値の更新」によって『Sheet 書込』が配置されているので、API やプログラミングについての知識は不要です。すなわち、プロセスオーナーはテンプレートとなる Spreadsheet ファイルを作成し、そのIDをプロセスモデラ内で設定するだけで、「業務システム」を構築することができます。
Google Sheets 自身が「spreadsheetsファイル > 複数のSheets > セルのValues」というデータ管理構造をもつため、API の呼び出しについては、その操作内容に応じて最適な API マニュアルを参照する必要があります。
- spreadsheetsファイル全体に影響を及ぼす操作: Collection: spreadsheets (Sheets API v4)
- 個別のシートをコピーする等: Collection: spreadsheets.sheets (Sheets API v4)
- 個別のセルの値を書き換える等: Collection: spreadsheets.values (Sheets API v4)
- spreadsheetsファイル自体を複製するような操作: Drive API v3
この例では「Collection: spreadsheets.values」が利用されていますが、データの一括削除やデータの一括参照といった操作は、「Collection: spreadsheets」に位置づけられている「Method: spreadsheets.batchUpdate」が非常にパワフルで有用といえます。
たとえば、『Google Sheet 2列データの一括取得』や『Google Sheets 行追加 (TSV)』といった「サービス工程アドオン」では「Method: spreadsheets.batchUpdate」が活用されています。
<定義ファイルのサンプル:Google Spreadsheets セル値の更新>
<?xml version="1.0" encoding="UTF-8"?><service-task-definition> <label>Google Spreadsheets value update</label> <label locale="ja">Google Spreadsheets セル値の更新</label> <summary>1. Get Secret: https://console.developers.google.com/apis/dashboard 2. Config [OAuth 2.0 Setting] (scope) https://www.googleapis.com/auth/spreadsheets </summary> <help-page-url>https://www.questetra.com/tour/m4/m415/addon-googlespreadsheets-value-update/</help-page-url> <help-page-url locale="ja">https://www.questetra.com/ja/tour/m4/m415/addon-googlespreadsheets-value-update/</help-page-url> <configs> <config name="conf_OAuth2" required="true" form-type="TEXTFIELD"> <label>A: Set OAuth2 Config Name (at [OAuth 2.0 Setting])</label> <label locale="ja">A: OAuth2通信許可設定名 (←[OAuth 2.0 設定])</label> </config> <config name="conf_DataIdB" required="true" form-type="SELECT" select-data-type="STRING_TEXTFIELD|SELECT_SINGLE"> <label>B: Select STRING/SELECT DATA for Spreadsheet ID</label> <label locale="ja">B: Spreadsheet ID が格納されている文字列型or選択肢型データを選択してください</label> </config> <config name="conf_DataIdC" required="true" form-type="SELECT" select-data-type="STRING_TEXTFIELD|SELECT_SINGLE"> <label>C: Select STRING/SELECT DATA for Sheet Title</label> <label locale="ja">C: Sheet の名前が格納されている文字列型データor選択肢型データを選択してください</label> </config> <config name="conf_DataIdD" required="true" form-type="SELECT" select-data-type="STRING_TEXTFIELD|SELECT_SINGLE"> <label>D: Select STRING/SELECT DATA for Cell Coordinate (e.g. "A1")</label> <label locale="ja">D: 更新セルの座標が格納されている文字列型or選択肢型データを選択してください (例 "A1")</label> </config> <config name="conf_DataIdE" required="true" form-type="SELECT" select-data-type="STRING|SELECT_SINGLE|DECIMAL|DATE|DATETIME|QUSER|QGROUP"> <label>E: Select DATA ITEM for Stored Value</label> <label locale="ja">E: セルを更新するデータが格納されているデータ項目を選択してください</label> </config> <config name="conf_DataIdX" required="false" form-type="SELECT" select-data-type="STRING_TEXTAREA"> <label>X: Select STRING DATA for Access Log (update)</label> <label locale="ja">X: 通信ログが格納される文字列型データを選択してください (更新)</label> </config> </configs> <script><![CDATA[ // Google Spreadsheets Value Update via Sheets API v4 (ver. 20170828) // (c) 2017, Questetra, Inc. (the MIT License) ////// == 工程コンフィグの参照 / Config Retrieving == var oauth2 = configs.get( "conf_OAuth2" ) + ""; // Convert from 'java.lang.String' to 'JavaScript string' by '+""' var dataIdB = configs.get( "conf_DataIdB" ) + ""; // Data Identification Number (e.g. "9") var dataIdC = configs.get( "conf_DataIdC" ) + ""; var dataIdD = configs.get( "conf_DataIdD" ) + ""; var dataIdE = configs.get( "conf_DataIdE" ) + ""; var dataIdX = configs.get( "conf_DataIdX" ) + ""; ////// == ワークフローデータの参照 / Data Retrieving == var fileId = ""; // e.g. "1PEZ5KEZc0RkUn7AbAe2lYaHXzbJ9jnZ2swIWPszRz6U" if( engine.findDataDefinitionByNumber( dataIdB ).matchDataType( "STRING_TEXTFIELD" ) ){ fileId = data.get( dataIdB ) + ""; // convert to JavaScript string }else if( engine.findDataDefinitionByNumber( dataIdB ).matchDataType( "SELECT_SINGLE" ) ){ fileId = data.get( dataIdB ).get(0).getValue() + ""; } var sheetTitle = ""; // e.g. "Sheet1" if( engine.findDataDefinitionByNumber( dataIdC ).matchDataType( "STRING_TEXTFIELD" ) ){ sheetTitle = data.get( dataIdC ) + ""; }else if( engine.findDataDefinitionByNumber( dataIdC ).matchDataType( "SELECT_SINGLE" ) ){ sheetTitle = data.get( dataIdC ).get(0).getValue() + ""; } var cellCoordinate = ""; // e.g. "A1" if( engine.findDataDefinitionByNumber( dataIdD ).matchDataType( "STRING_TEXTFIELD" ) ){ cellCoordinate = data.get( dataIdD ) + ""; }else if( engine.findDataDefinitionByNumber( dataIdD ).matchDataType( "SELECT_SINGLE" ) ){ cellCoordinate = data.get( dataIdD ).get(0).getValue() + ""; } var updateValue = ""; if( engine.findDataDefinitionByNumber( dataIdE ).matchDataType( "SELECT_SINGLE" ) ){ updateValue = data.get( dataIdE ).get(0).getValue() + ""; }else{ updateValue = data.get( dataIdE ) + ""; } ////// == 演算 / Calculating == // preparing for API Request var apiRequest = httpClient.begin(); // HttpRequestWrapper // preparing for API Request (OAuth2 Access Token) var token = httpClient.getOAuth2Token( oauth2 ); apiRequest = apiRequest.bearer( token ); // preparing for API Request (Path parameters) var apiUri = "https://sheets.googleapis.com/v4/spreadsheets/"; apiUri += fileId + "/values/" + sheetTitle + "!" + cellCoordinate; // preparing for API Request (Query parameters) apiRequest = apiRequest.queryParam( "valueInputOption", "USER_ENTERED" ); // preparing for API Request (JSON Body) var requestObj = {}; requestObj.values = []; requestObj.values[0] = []; requestObj.values[0][0] = updateValue; apiRequest = apiRequest.body( JSON.stringify( requestObj ), "application/json" ); // PUT Request to the API var response = apiRequest.put( apiUri ); // HttpResponseWrapper var statusCode = response.getStatusCode() + ""; var accessLog = ""; accessLog += "---PUT request--- " + statusCode + "\n"; accessLog += response.getResponseAsString() + "\n"; // Retrieve Properties from Response-JSON // (no action) ////// == ワークフローデータへの代入 / Data Updating == if( dataIdX !== "" ){ retVal.put( dataIdX, accessLog ); } ]]></script> <icon> iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACuUlEQVRYR82X0VHbQBCGd8UT8BA6iFMBTgXxIwjP4A4SKoBUEFNBTAU4HTgz6PCjqCCkgpAOnBf5Sfdnfs3JcxKSLBmUyc34wZLu9t/d2+/2VFqMk5OTwd7e3gcRGfIHYKCqA38qgCdVfRKRR/7SNH1YLpf83zi06W0Yhp9E5FJVabjzAPCoqrMoir7VTa4UMB6PR9ba27KXnRW4CYxOEAQXd3d3cXmNZwLotare7mqsaR6AC2PM3P+mIMDl+lcfxvM10zR95++NgoCzs7MrEfnapwAR+RxF0Sy3URDQZ/hzg+U0FASMRqOjg4MDltObPqIA4E+SJIM4jleVEeBDV3qz1xZB40EQTMqVUFmGYRiy7imC8HnxAPAgIlfGGEKqMBpBdHp6OlFVluX5LioAfAcwv7+/X7QCEasAAIwxN/4E7o39/f2RIyKjc8T3eYSch3zE3D6SgOv1OvZz7dI7VdVVUxXwgy+O69MmhLaNCMUfHh6eA7iiAwCujTHTujLMBHiLrwAwfAtr7c82h4vzdKiqxwAYtUkeMb7rKqDK0YznALJwu1SMvA83Kaqa/BoC2ka/7rtGEjJ0P15qoWk+gPd+OVadhqz/yz5EALgxxvC82Yw6EL26iCrj2f6p89TRkFWxE4TydQkjEZlWUfCZAJKvDBD2CEEQcJeznLhH3m7J8W9XHYskSRY+jLgWWeCTsXwc0+NLALMkSW7KJMsNMzpBEGQ0zIe1dlXnpTtl2VuStNwHrUC0gZAxhmHsPFxv+dGH0a4cyKGTtdzW2sp2W1VJPkaGMPLhtBG/q4DO3tdN+L8F/IumtLEndCXH20xvPaG1dljbljNvfXbGWy8m+cZx5TPfBp22OxMA4TTp3BO6aPDwOG5rzP/OtWrz8nVs62FUNubhOLueiwiRWkCy83JzPbfWxm06qL/sgpkwsGVshgAAAABJRU5ErkJggg== </icon> </service-task-definition>
[週次売上報告プロセス-フィードバック:「2a.コメント」画面]
<データ項目一覧画面>
[雛形ダウンロード (無料)]
- 業務テンプレート:週次売上報告プロセス-フィードバック
- 第550話:スプレッドシート記入という業務の自動化 (2017-08-28)
- 第546話:月曜朝の Analytics API リクエスト(1) (2017-07-31)
- 第539話:時刻が来れば自動的に「受け取った」ことになる工程 (2017-06-12)
- 第537話:差し戻しの発生状況を可視化したい (2017-05-29)
- M217 自動開始: 決められた日時に先頭処理が自動的に開始されるように設定する (使い方)
- M415 自動工程: 業務プロセス定義で利用可能な自動工程を追加する (使い方)
- M416 自動工程: 業務プロセス定義で利用可能な自動工程を自作する (使い方)
- Google Drive ファイルコピー (Addon解説)
- Google Spreadsheets セル値の更新 (Addon解説)
[英文記事 (English Entry) ]
0 件のコメント :
コメントを投稿