#【まえがき】
今回はGoogleDriveの機能だけでワークフローできないかなーということで
挑戦してみた件をご紹介いたします。
※あんまり実際のScriptが書いていないので役に立たなかったら、すいません。
AddOnとか3rd party製でいいものあると思いますが、
そのあたりとは比べないでくださいね。
#【まとめ】
フォームとGASを使えば簡単なワークフローは組める!!
#【ポイント】
####①すべてのデータを集約するシートを作る
⇒承認状況を確認できるように!
####②申請Noを持ち、キー項目とする
⇒ワークフローで異常が起きないように!
####③マスタシートを作成し、承認者の変更にも対応可能とする
⇒部署異動等にも対応!
#【設計】
####前提:2段階承認⇒繰り返せば何段階でも…可
####処理概要
① 申請者がフォームから必要事項を入力し、申請
② SpreadSheetにフォームの回答が入る
③ SpreadSheet上で別シートにデータをコピーする(処理用シート)
④ コピーされたシートのデータを元に承認者にメールを配信する)
⑤ 届いたメールのリンクから承認用フォームを開き、承認・否認を入力する
⑥ SpreadSheetに⑤のフォームの回答が入る
⑦ ⑥のデータを元に処理用シートに承認結果でStatusを書き換える
⑧ ⑦の結果を元に承認であれば、最終承認者にメールを配信する。
否認の場合は否認メールを本人に配信する
⑨ ⑤~⑧を繰り返す(さらに繰り返せば・・・)
⑩ 結果を元に承認完了か否認かのメールを本人に配信する
#【作成したもの】
####★Form & SpreadSheet 3セット
>申請用フォーム&申請用回答シート/処理用シート/マスタシート
>承認用フォーム&承認用回答シート
>最終承認用フォーム&最終承認用回答シート
####★AppsScript
・申請用回答シート
>dataCopy(申請用回答シート) …10分に1度ぐらいで十分
申請フォームの回答を処理用シートにコピーする処理
>mailSend …10分に1度ぐらいで十分
Statusに基づきメールを配信
>dataClear …1日に1度ぐらいで十分(夜間処理)
フォームの回答を日時で削除
・承認用回答シート/最終承認用回答シート
>dataSend …10分に1度ぐらいで十分
承認/否認の回答を元に処理用シートのStatusを変更
#【Scriptのポイント】
全部のScriptを書くのもちょっとあれなので、
ポイントになるところだけ…
####●申請用回答シートへのデータコピー(dataCopy)時のポイント
1.承認フラグ(Status)列を作り、その結果を元にユーザーに分かり易い承認状況列を表示させる
dataCopy 処理時に元データにプラスして下記2項目を作る
①「承認状況列」
例:回答用シート.getRange(最終行+1,列).setFormula('=vlookup(U'+最終行+1+',flg!A:B,2,false)');
⇒flgシートには承認状況と承認フラグのマスタを作っておく
②「承認フラグ列」に1をSet
⇒1は「未処理」を意味する
この「承認フラグ列」の値を別シートから更新することで、ワークフローの条件分岐に使う
例:mailSendで下記条件に基づきメール配信を行う
1 未処理 :申請された状態
10 一次承認待ち:一次承認メールが配信された状態
15 一次否認 :一次承認にて否認された状態
20 一次承認済み:一次承認にて承認された状態
30 最終承認待ち:最終承認メールが配信された状態
35 最終否認 :最終承認にて否認された状態
40 最終承認済み:最終承認にて承認された状態
50 完了 :40の状況から承認完了メールが申請者に送付された状態
98 一次否認 :15の状況から否認メールが申請者に送付された状態
99 最終否認 :35の状況から否認メールが申請者に送付された状態
※あくまで一例です。使いやすいように調整してください。
2.承認依頼メールの承認フォームへのリンク
mailSendで承認依頼メールを送る際に、承認フォームのリンクを送付します
その際に、「処理用シート」のデータ行とマッチングを書けるために、
「申請No. 」デフォルトセットしたフォームのURLを送ります。
var formURL = "https://docs.google.com/フォームのURL?entry_XXXXXX="+対象の行No;
※entry_XXXXX="+対象の行Noのところがキモなのですが
このentry_XXXXXというのはフォームの項目をセットします
⇒対象のフォームをライブフォームで開き、右クリック⇒ページのソースを表示とすると
<label class="ss-q-item-label" for="entry_XXXXXX"><div class="ss-q-title">申請No.
と対象の項目のentry keyがわかりますので、そちらをセットします。
3.メールの送信先
mailSendで承認依頼メールを送る際の宛先もマスタ化して、
承認フラグと他のキー項目(所属部署等)によって、
対象の承認先を取得して送信
※このあたりはSpreadSheetのループ処理で対象者を探す感じです。
ちょっといろいろと端折りすぎちゃいましたが、
一応こんな感じで作るとワークフローがこんな感じで組めました。
社内の稟議通すぐらいのワークフローであれば、こんな感じで十分かなと思われます。
#【さらに!】
「フォームじゃファイルの添付ができねーじゃねーか!」というご指摘もあるかと思いますが、
そんな時は、DriveにアップしてそのURLを項目に記載してもらえば対応可能です!
注:権限の付与を忘れずに!
#【あとがき】
2年振り2回目の投稿ということにふと気が付きましたが、
そんなことは置いといて・・・
「こんなんじゃわかんない!」とか「もっと詳細を!」とかあれば、
コメントいただけたら嬉しいです!
できる限りコメントでお答えしたいと思います!
最後までお読みいただきありがとうございました!