我有一个表格,我希望我的员工每天填写。为此,我在电子表格中添加了一个脚本,以自动通过电子邮件将表单链接发送给与电子表格共享的每个人。每周还会有一封电子邮件回复他们的回复。我已将所有共享用户存储在 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()