すべてのコレクション
案件管理
他ツールとの連携事例紹介
案件管理とGoogle Formsの連携方法(Google Apps Script使用)
案件管理とGoogle Formsの連携方法(Google Apps Script使用)
LegalForceサポートチーム avatar
対応者:LegalForceサポートチーム
一週間前以上前にアップデートされました

本ページはあくまで事例の紹介であり、貴社のポリシーによって手順は異なる場合があります。

実際の連携方法については 貴社システム管理者またはサービス提供元(外部ツール)にご相談ください。

Google Apps Scriptを活用し、Google Formsで受け付けた依頼を案件管理に自動反映する方法を記載します。

コミュニケーションの中心がメールではない場合も、案件管理を活用して法務案件の管理やナレッジの蓄積などが可能です。

また、本連携方法では、フォームにアップロードしたファイルを添付ファイルとして案件管理に反映できるため、LegalForceへのファイル取り込みもスムーズに実施できます。

ご注意点

本連携方法では、Google Apps Scriptを使用し、Googleドライブの共有リンクからファイルを取得・添付する処理を行います。

後述の「1. Google Formsの作成」と「2. Google Apps Scriptの作成」は同じユーザーが実施してください。

事前準備

本連携を行うには、以下の製品が導入されている必要があります。

  • Google Workspace

    • Googleドライブ

    • Googleスプレッドシート

    • Google Apps Script

※Google Apps Scriptは、組織によっては利用を禁止されている場合があります。事前に情報システム部門にご相談いただくことをおすすめします。

なお、本連携には案件管理の「案件依頼用メールアドレス」が必要です。事前に案件依頼用メールアドレスをメモ帳などに控えてください。

※案件依頼用メールアドレスの確認方法はこちらをご覧ください。

設定手順

1. Google Formsを作成する

①Google Formsを新規作成し、任意のタイトルとフォームの説明を入力する

https://docs.google.com/forms/よりGoogle Formsを新規作成してください。

②フォームの質問を下表の通りに作成する

質問は[+]より追加できます。

質問

種類

選択肢

必須

依頼者名

記述式

依頼者所属部署

プルダウン、またはラジオボタン

依頼元部署の名称の短縮形で選択肢を作成

相手方企業名

記述式

契約締結の背景

段落

希望納期

日付

契約類型

プルダウン、またはラジオボタン

頻繁に依頼がある類型で作成

契約書1

ファイルをアップロード

契約書2

ファイルをアップロード

契約書3

ファイルをアップロード

③[設定]タブ→「回答」項目の[V]の順にクリックする

④「メールアドレスを収集する」項目で[確認済み]を選択する

⑤画面右上の「プレビュー」マークをクリックする

⑥作成したフォームにテスト回答し、[送信]をクリックする

⑦フォームの編集画面に戻り、[回答]タブ→[スプレッドシートにリンク]の順にクリックする

⑧[新しいスプレッドシートを作成]を選択し、[作成]をクリックする

新規のスプレッドシートが作成され、「1. Google Formsの作成 手順⑥」で送信した回答が反映されていればフォームの作成は完了です。

作成したスプレッドシートを開いた状態で「2. Google Apps Scriptの作成」に進んでください。

2. Google Apps Scriptを作成する

①[拡張機能]→[Apps Script]の順にクリックする

②プロジェクトタイトルを任意の名称に変更する

③テンプレートとして入力されているコードを削除し、以下のコードを入力する

以下のコードをコピーアンドペーストしてください。

function formToLegalforce() {
//スクリプトに紐づくシートを指定
var activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在のスプレッドシートを取得

//修正箇所①
//シート名が「フォームの回答 1」でない場合は""内をシート名に書き換える
var mySheet = activeSpreadSheet.getSheetByName("フォームの回答 1");// 回答が記載されるシート名を指定

//シートの最終行を指定
var lastRow = mySheet.getLastRow();
Logger.log(lastRow);

//現在時刻を取得し、「2023/01/01 13:00」の形式にフォーマット
var today = new Date();
var todayStr = Utilities.formatDate(today,"JST","yyyy/MM/dd HH:mm");

//シートの最終行の値を変数に格納
//例えばgetRange(lastRow,2)は、最終行・2列目を指定する
var requesterMail = mySheet.getRange(lastRow,2).getValues();//依頼者のメールアドレス
var requesterName = mySheet.getRange(lastRow,3).getValues();//依頼者名
var department = mySheet.getRange(lastRow,4).getValues();//所属
var companyName = mySheet.getRange(lastRow,5).getValues();//相手先企業名
var background = mySheet.getRange(lastRow,6).getValues();//依頼背景
var deadLine = mySheet.getRange(lastRow,7).getDisplayValues();//納期
var typology = mySheet.getRange(lastRow,8).getValues();//類型
var documentUrl1 = mySheet.getRange(lastRow,9).getValues();//契約書リンク1
var documentUrl2 = mySheet.getRange(lastRow,10).getValues();//契約書リンク2
var documentUrl3 = mySheet.getRange(lastRow,11).getValues();//契約書リンク3


//修正箇所②
//以下の"legal.request@XXX.legalforce-cloud.com"の部分を、案件依頼用メールアドレスを記述する
let address = "legal.request@XXX.legalforce-cloud.com";

//メールの件名を記述する
//件名は以下の通りとなる
//【所属部署_依頼者名】相手先企業名_契約類型_納期:yyyy/MM/dd
let mailTitle = "【"+ department + "_"+ requesterName +"】"+companyName+"_"+typology+"_納期:"+deadLine;

//メール本文を記述する
//"\n"で改行を追加
let mailText =
"審査依頼がありました。" +"\n"+
"\n"+
"依頼日時:"+todayStr +"\n"+
"依頼者メールアドレス:"+requesterMail +"\n"+
"依頼者名:"+requesterName +"\n"+
"所属部署:"+department +"\n"+
"相手先社名:"+companyName +"\n"+
"依頼背景:"+"\n"
+background +"\n"+
"期限:"+deadLine +"\n"+
"契約類型:"+typology +"\n"+
"契約書リンク1:"+"\n"
+documentUrl1 +"\n"+
"契約書リンク2:"+"\n"
+documentUrl2 +"\n"+
"契約書リンク3:"+"\n"
+documentUrl3;

//Googleドライブのリンクから不要箇所を削除し、ファイルIDを取得する
//Word形式・Excel形式・PDFを想定、その他の形式の場合、ファイルIDが適切に抽出できず、メールへの添付ができない可能性あり
var documentId1 = documentUrl1.toString().replace("https://docs.google.com/document/d/","").replace("https://drive.google.com/open?id=","").replace("https://docs.google.com/spreadsheets/d/","").replace("https://drive.google.com/file/d/","");
var documentId1split = documentId1.split(/[/?&]/);
var documentId1 = documentId1split[0];

var documentId2 = documentUrl2.toString().replace("https://docs.google.com/document/d/","").replace("https://drive.google.com/open?id=","").replace("https://docs.google.com/spreadsheets/d/","").replace("https://drive.google.com/file/d/","");
var documentId2split = documentId2.split(/[/?&]/);
var documentId2 = documentId2split[0];

var documentId3 = documentUrl3.toString().replace("https://docs.google.com/document/d/","").replace("https://drive.google.com/open?id=","").replace("https://docs.google.com/spreadsheets/d/","").replace("https://drive.google.com/file/d/","");
var documentId3split = documentId3.split(/[/?&]/);
var documentId3 = documentId3split[0];

//添付ファイルを格納するための配列を作成
let attachFiles =new Array();

//添付ファイルの配列番号の変数を作成
var fileNum = 0;

//契約書リンク1~3のファイルIDを指定し、Googleドライブからファイルを取得し、配列に格納
//契約書リンク記載されていない場合や、リンクが不正な場合は例外処理の上、次の処理へ進む
try{
var doc1 = DriveApp.getFileById(documentId1).getBlob();
attachFiles[fileNum] = doc1;
fileNum =fileNum + 1 ;
}catch(e){
Logger.log("契約書1が添付できませんでした");
}

try{
var doc2 = DriveApp.getFileById(documentId2).getBlob();
attachFiles[fileNum] = doc2;
fileNum =fileNum + 1 ;
}catch(e){
Logger.log("契約書2が添付できませんでした");
}

try{
var doc3 = DriveApp.getFileById(documentId3).getBlob();
attachFiles[fileNum] = doc3;
fileNum =fileNum + 1 ;
}catch(e){
Logger.log("契約書3が添付できませんでした");
}


//添付ファイル・CCを設定する
let options = {
"attachments":attachFiles,
//修正箇所③
//CCに追加したいアドレスがある場合、""内に記載の上、先頭の//を削除
//"cc":""
};

//MailAppで宛先、件名、本文、オプションを引数にしてメールを送付
MailApp.sendEmail(address, mailTitle, mailText, options);
}

④入力したコードを修正する

コピーアンドペーストしたコードの以下3箇所を修正してください。

④-1 【シート名を「シート1」以外としている場合】修正箇所① の””内を適切なシート名に修正する

//修正箇所①
//シート名が「フォームの回答 1」でない場合は""内をシート名に書き換える
var mySheet = activeSpreadSheet.getSheetByName("フォームの回答 1");// 回答が記載されるシート名を指定

例)シート名を「Googleフォーム連携用」とした場合

//修正箇所①
//シート名が「フォームの回答 1」でない場合は""内をシート名に書き換える
var mySheet = activeSpreadSheet.getSheetByName("Googleフォーム連携用");// 回答が記載されるシート名を指定

④-2 修正箇所② の”"内を自テナントの「案件依頼用メールアドレス」に修正する

※案件依頼用メールアドレスの確認方法はこちらをご覧ください。

//修正箇所②
//以下の"legal.request@XXX.legalforce-cloud.com"の部分を、案件依頼用メールアドレスを記述する
let address = "legal.request@XXX.legalforce-cloud.com";

例)案件依頼用メールアドレスが「legal.request@abc123.legalforce-cloud.com」の場合

//修正箇所②
//以下の"legal.request@XXX.legalforce-cloud.com"の部分を、案件依頼用メールアドレスを記述する
let address = "legal.request@abc123.legalforce-cloud.com";

④-3 【案件をCCで受信したいアドレスがある場合】修正箇所③の""内にメールアドレスを記載し、行の先頭の//を削除する

//修正箇所③
//CCに追加したいアドレスがある場合、""内に記載の上、先頭の//を削除
//"cc":""

例)CCで「taro.legal@legalontech.jp」にも依頼メールを送信する場合

//修正箇所③
//CCに追加したいアドレスがある場合、""内に記載の上、先頭の//を削除
"cc":"taro.legal@legalontech.jp"

⑤「保存」マークをクリックする

⑥[実行]ボタンをクリックする

⑦[権限を確認]をクリックする

以下のポップアップが表示されたら、[権限を確認]をクリックしてください。

⑧スクリプトを実行するアカウントを選択し、[許可]ボタンをクリックする

許可が完了すると、画面下部に「実行ログ」が表示されます。正常に設定されている場合、数秒程度で「実行完了」のログが表示されます。

案件管理画面を開き、案件が新規作成されているかご確認ください。

※「1. Google Formsの作成 手順⑥」でテスト送信した内容が、新規案件として作成される想定です。

3. Google Apps Scriptのトリガーを設定する

Slackワークフローからフォームが送信され、スプレッドシートに反映される度にスクリプトが実行されるよう、トリガーを設定します。

①左メニューの[トリガー]をクリックする

②画面右下の[+トリガーを追加]をクリックする

③「イベントの種類を選択」のプルダウンリストで[変更時]を選択し、[保存]をクリックする

下図のように、トリガーが追加されたことを確認してください。

以上で設定は完了です。

Google Formsから再度テスト送信し、動作確認(Googleスプレッドシートへの書き込み、および案件管理での案件反映)のうえご利用ください。

おすすめポイント

・トリガーを設定すると、スプレッドシートに変更を加える度に依頼メールが送信され、案件が新規作成されます。そのため、スプレッドシートの内容を修正する場合は、設定したトリガーを事前に削除してシート内容の修正が完了した後に、再度トリガーを設定することをおすすめします。

・スプレッドシートに入力されているデータを台帳として活用する場合は、Importrange関数などを利用して別のスプレッドシートに当該データを取り込むことをおすすめします。

4. 作成したGoogle Formsの回答用URLを取得する

①フォーム編集画面を表示し、画面右上の[送信]をクリックする

②[リンク]マークのタブ→[コピー]の順にクリックする

※「URLを短縮」にチェックを入れると、短縮URLを取得できます。社内展開時に便利です。

こちらの回答で解決しましたか?