送信済みの回答を直してもらいたい場合は、フォームを新規入力するURLと、その回答を編集するURLを区別します。GASのgetEditResponseUrlは特定のFormResponseに対応する編集URLを生成します。
回答の編集URLは、知っている人がその回答へアクセスするための情報です。全員が見るシートや共有ログへ一覧で公開せず、必要な相手へ渡す範囲を決めます。URLを作ることと、編集を許可する設定や本人確認は別に確かめます。
フォームのIDと回答のIDを分ける
フォームのファイルIDだけでは、どの回答を直すかが決まりません。送信済み回答のIDも指定します。配列の先頭を無条件に選ぶと、意図しない人の回答URLを取り出すおそれがあります。
以下の一覧関数は練習用フォームに送信した少数の回答から、末尾の3件のIDと日時だけを表示します。本文やメールアドレスは表示しません。実際の業務フォーム全件へ広げず、架空の回答が入った練習用フォームで使ってください。
公式のFormResponse資料では、送信前の回答でgetEditResponseUrlを呼ぶとnullになることも説明されています。事前入力URLを作ることと、送信済み回答の編集は違う操作です。
送信済み回答をIDで選ぶコード
一覧から練習用の回答IDを控え、RESPONSE_IDへ指定します。関数は編集URLを返すだけで、メール送信やフォーム設定の変更を行いません。
function listPracticeResponseIds() {
const form = FormApp.openById('練習用フォームID');
console.log(JSON.stringify(form.getResponses().slice(-3)
.map(response => ({id: response.getId(), time: response.getTimestamp()}))));
}
function readResponseEditLink(form, responseId) {
if (typeof responseId !== 'string' || responseId.trim() === '') {
throw new Error('送信済みの回答IDを指定してください');
}
const response = form.getResponse(responseId);
if (!response || response.getId() !== responseId) {
throw new Error('対象の回答を確認してください');
}
const url = response.getEditResponseUrl();
if (!url) throw new Error('送信済み回答の編集URLがありません');
return {responseId: responseId, showsEditLink: form.canEditResponse(), url: url};
}
function previewResponseEditLink() {
const RESPONSE_ID = '練習回答ID';
const form = FormApp.openById('練習用フォームID');
console.log(JSON.stringify(readResponseEditLink(form, RESPONSE_ID)));
}
responseIdが選んだ回答IDと一致し、urlへ文字列が返ることを確認します。実際のURLには回答ごとの情報が入るため、ここでは完成形のURLを掲載していません。ログを見る権限にも注意してください。
リンクの表示設定と実際の編集を確認する
canEditResponseは、送信後に編集リンクを表示する設定の確認です。Formの公式資料では、その設定と、スクリプトから編集URLを生成することを分けて説明しています。URLが返っただけで、回答者が編集できるとは判断しません。
公式のFormResponse資料にも、編集設定が無効な場合や、アクセス条件の説明があります。設定の名称だけを根拠にせず、練習用の編集URLを、利用者と同じ条件のアカウントで開いて確認します。設定変更が必要なら、その変更による影響を確認してから行ってください。
メールアドレスの収集を有効にしている場合、編集した人のアドレスが記録される条件も公式資料にあります。元の回答者と編集者が同じだと推測せず、誰が直したかを扱う業務では、記録の意味まで確かめます。
修正後の処理も別に確認する
回答を編集した後に、転記済みの台帳や通知先が自動で同じ内容になるとは限りません。フォームの回答本体と、GASが複製した情報の更新方法を分けます。再処理で同じ連絡を重複送信しない条件も必要です。
ローカルの代用回答で確認したのは、指定IDの照合、URLなし、未指定、表示設定の受け渡しです。Google上の編集画面・アクセス権・編集後の連携は未実行です。URLの誤配布は取り消しが難しいため、架空の回答で一度流れを確かめてください。
送信後のデータ処理はフォーム回答の処理、通知を組み込む場合はGmail通知の作り方へつながります。
