我使用Google应用脚本遇到此问题。 我在电子表格中有一个菜单,有两个选项(设置密码和添加时间记录)。这些选项引发UI服务用户界面以分别提示其数据。要访问添加时间记录,我先询问用户是否经过身份验证。我使用scriptProperties = PropertiesService.getScriptProperties()和setProperty('authenticated',false)来保存经过身份验证的初始值。
1-我点击设置密码,我登录确定并关闭用户界面。
2-我点击添加时间记录,我希望收到我的AddTime记录Ui(因为我先设置密码),而是收到Set Password UI。即使我再次登录,我也会一次又一次地收到相同的UI。
每次单击菜单选项时,无论我之前执行的操作如何,都会将身份验证重置为false。这是预期的行为?或者我做错了什么?非常感谢你的帮助。
var scriptProperties = PropertiesService.getScriptProperties();
scriptProperties.setProperty('authenticated', 'false');
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('ProWorkflow')
.addItem('Set Pasword', 'getPassword').addSeparator()
.addItem('Add Time Record', 'isAuthenticated').addSeparator()
.addToUi();
}
function isAuthenticated()
{
var scriptProperties = PropertiesService.getScriptProperties();
var value = scriptProperties.getProperty('authenticated');
if(value =='false'){
getPassword(); // at the end of this function I set scriptProperties.setProperty('authenticated', ‘true’);
}
return addTimeRecord();
}
function getPassword(e)
{
…
…
…
var scriptProperties = PropertiesService.getScriptProperties();
var value = scriptProperties.getProperty('authenticated');
value = 'true';
scriptProperties.setProperty('authenticated', value); //change de value of uthenticated
return app.close();
}
答案 0 :(得分:1)
我不清楚哪里如果你想以编程方式设置项目属性。我在我的脚本中添加了一个函数:
function setScriptProperties() {
var scriptProperties = PropertiesService.getScriptProperties();
scriptProperties.setProperty('KEY', 'Some value.');
}
然后我使用UI来手动运行此功能'来自GAS界面。
从UI调用一次函数后,将设置项目属性。
答案 1 :(得分:0)
"每次点击菜单选项时,无论我之前采取的操作是什么,都会将身份验证重置为false"
实际上就是这样。
当您将线放在任何函数之外时,它会在每次运行任何函数时执行,因此您的线scriptProperties.setProperty('authenticated', 'false');
每次都会将其设置为false。
将其移动到应有的位置,scriptProperties
和userProperties
- 根据定义 - 作为全局变量工作,因为它们存储在全局脚本/用户范围内,实际上它们是什么是专为..
另请参阅您在getPassword函数中编写的内容...您在上面显示的内容不是很合理(请参阅代码中的注释):
var value = scriptProperties.getProperty('authenticated');// you get a value
value = 'true'; // and change it immediately to a constant... what's the point ?
scriptProperties.setProperty('authenticated', value); //change de value of uthenticated