従業員に毎日記入してもらいたいフォームがあります。そのために、スプレッドシートにスクリプトを追加して、スプレッドシートを共有しているすべての人にフォームへのリンクを自動メールで送信しました。返信の返信メールも毎週あります。すべての共有ユーザーをScriptDbに保存しました。私がやりたいのは、ユーザー設定を設定できるUiAppを作成して、毎日/毎週の電子メールを無効にできるようにすることです。また、シートを共有していない新しいユーザーをここに追加できるようにしたいと思います(リンクを持っているだけのユーザー向け)。私の会社全体がグーグルを使用しているので、誰かがサインインしていない、またはアクセスできないことを心配する必要はありません。
最初は、既存の共有ユーザーにメール設定のチェックボックスを表示するだけの簡単なUiAppフォームを作成してみました。私のdoPostが呼び出されることはありませんでしたが、理由はまだわかりません。ただし、私が本当に望んでいるのは、[共有設定]画面と同じように見える画面ですが、編集/表示アクセスの代わりに、ユーザー設定があります。画面のカスタムバージョンにユーザーを追加しても、ユーザーは共同編集者または閲覧者として追加されません。
UiAppを使用して共有画面を再作成する方法について何かアイデアはありますか?
それが不可能な場合、現在の単純な設定画面で何が間違っているのでしょうか。
function editUserPreferences() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
updateUserPreferences();
var db = ScriptDb.getMyDb();
var results = db.query({});
var saveUserRow = [];
//define form
var app = UiApp.createApplication().setTitle("Edit User's Email Preferences");
app.setHeight(550).setWidth(800);
var form = app.createFormPanel().setId('frm');
var formContent = app.createGrid(results.getSize()+5,3);
formContent.setWidget(0, 0, app.createLabel('Email Address'));
formContent.setWidget(0, 1, app.createLabel('Receive Daily'));
formContent.setWidget(0, 2, app.createLabel('Receive Weekly'));
formContent.setWidget(1, 1, app.createLabel('Reminder'));
formContent.setWidget(1, 2, app.createLabel('Entries'));
var row = 2;
while (results.hasNext()) {
var obj = results.next();
row = row+1;
formContent.setWidget(row, 0, app.createTextBox().setValue(obj.email).setReadOnly(true));
formContent.setWidget(row, 1, app.createCheckBox().setValue(obj.preferences.dailyEmail).setName('daily' + row));
formContent.setWidget(row, 2, app.createCheckBox().setValue(obj.preferences.weeklyEmail).setName('weekly' + row));
obj.row = row;
saveUserRow.push(obj);
}
// file changes
var results = db.saveBatch(saveUserRow, false);
if (db.allOk(results)) {
// everything went swimmingly, proceed
}
else { // partial or no success
for (var i = 0 ; i < results.length; i++) {
var item = results[i];
if ((typeof item.success) == 'function' && !item.success()) {
MailApp.sendEmail(Session.getActiveUser().getEmail(), "Error Updating Script Database", Logger.getLog());
}
}
}
row = row + 2;
formContent.setWidget(row, 1, app.createSubmitButton('Submit'));
form.add(formContent);
app.add(form);
ss.show(app);
}
function doPost(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var app = UiApp.getActiveApplication();
var db = ScriptDb.getMyDb();
var results = db.query({});
var editedUserData = [];
Logger.log("in doPost");
while (results.hasNext()) {
var obj = results.next();
var dailyParam = "daily" + obj.row;
var weeklyParam = "weekly" + obj.row;
Logger.log("test");
Logger.log(obj.email);
Logger.log(dailyParam);
Logger.log(weeklyParam);
obj.preferences.dailyEmail = e.parameter.dailyParam;
obj.preferences.weeklyEmail = e.parameter.weeklyParam;
Logger.log(Utilities.jsonStringify(obj));
editedUserData.push(obj);
}
app.close();
return app;
}
doPostからは何もログに記録されず、実行トランザクションの最後のエントリは次のとおりです。
FormPanel.getId()
FormPanel.getId()
UiInstance.isStandardsMode()