この記事は、Google Apps Script Advent Calendar 2013 11日目の記事です。
前回、AlertDialogの表示方法について書いたので、その続きで、PromptDialogについてです。
PromptDialog?
PromptDialogはGoogle Document、Spreadsheet、Formエディタでクライアント側に表示される、メッセージと入力欄があるダイアログです。
ユーザがボタンが押すまで、サーバ側の処理は止まりますが、JDBC接続は切れてしまいます。
(したがって、プロンプトを使ってユーザの入力を取得し、かつJDBCを使う場合は、PromptDialogの表示後に接続にいくようにしないと正常に動作しないということですね)
Document、Formどちらも、ui.prompt()を呼び出すことで、PromptDialogを表示させる事ができます。
戻り値が押されたボタンと入力されたテキストを持つオブジェクトなので、入力されたテキストを取得するには、result.getResponseText()を呼び出し、押されたボタンを取得するには、result.getSelectedButton()を呼び出すと取得できます。
PromptDialog1つでも、任意の書類を自動生成するための入力項目に使用するなどの用途が考えられますし、手軽に利用できるので、ユーザの簡単な入力等に利用してみて下さい。
PromptDialogを表示する。
Google Document編
// 事前にUiオブジェクトを取得しておく
var ui = DocumentApp.getUi();
function onOpen(e) {
ui.createMenu("テストメニュー")
.addItem("PromptDialog表示", 'showPromptDialog')
.addToUi();
}
// ※最初の実行時に承認が必要です。
function showPromptDialog() {
var doc = DocumentApp.getActiveDocument();
var result = ui.prompt("PromptDialog", "名前を入力して下さい。", ui.ButtonSet.OK_CANCEL);
// 押されたボタンを取得する。
var btn = result.getSelectedButton();
// getResponseText()はキャンセル、×ボタンを押した時も、入力があれば取得できます。
if(btn == ui.Button.OK) {
doc.getBody().appendParagraph("あなたの名前は「" + result.getResponseText() + "」です。")
} else if(btn == ui.Button.CANCEL) {
doc.getBody().appendParagraph("キャンセルを押した!(" + result.getResponseText() + ")")
} else if(btn == ui.Button.CLOSE) {
doc.getBody().appendParagraph("×ボタンを押した!(" + result.getResponseText() + ")");
}
}
Spreadsheet編
これは、Browser.inputBox()で表示できますので、私の書籍をごらん下さい…。
Google Form編
// 事前にUiオブジェクトを取得しておく
var ui = FormApp.getUi();
function onOpen(e) {
ui.createMenu("テストメニュー")
.addItem("PromptDialog表示", 'showPromptDialog')
.addToUi();
}
// ※最初の実行時に承認が必要です。
function showPromptDialog() {
var form = FormApp.getActiveForm();
var result = ui.prompt("PromptDialog", "名前を入力して下さい。", ui.ButtonSet.OK_CANCEL);
// 押されたボタンを取得する。
var btn = result.getSelectedButton();
// getResponseText()はキャンセル、×ボタンを押した時も、入力があれば取得できます。
if(btn == ui.Button.OK) {
form.addTextItem().setTitle("あなたの名前は「" + result.getResponseText() + "」です。");
} else if(btn == ui.Button.CANCEL) {
form.addTextItem().setTitle("キャンセルを押した!(" + result.getResponseText() + ")");
} else if(btn == ui.Button.CLOSE) {
form.addTextItem().setTitle("×ボタンを押した!(" + result.getResponseText() + ")");
}
}