var userProperties = PropertiesService.getUserProperties();我的工作不正常?

时间:2014-07-23 11:06:25

标签: google-apps-script

我正在使用PropertiesService创建userproperties,为

      var userProperties = PropertiesService.getUserProperties();

用于为我的附加组件存储用户单个标记,当我在userproperties中使用密钥对值设置usertoken时,userProperties.setProperty('USERTOKEN','token');在一份文件中。

根据userproperties范围执行此操作后,我可以使用userProperties.getProperty('USERTOKEN')从任何文档中检索用户属性值;但是,

当我这样做时,值为null(即),我无法从其他文档中检索'userProperties'值,

因此,userproperties的范围失败。 userproperties值仅与创建它的特定文档相关联。

安装了我的附加组件后,我每次都会检查所有文档的userproperties值,

        if(value)
         {
          retrieve data;
          }
             else
             {
              authorize;

               }

因此,value为null,并且每次为每个新文档授予用户权限。由于我的附加组件无法从userProperties.getProperty('USERTOKEN')中检索值;

2 个答案:

答案 0 :(得分:9)

根据Properties Service - Saving Data的文件:

"脚本属性也可以通过脚本编辑器用户界面保存,方法是转到文件>项目属性并选择“项目属性”选项卡。 无法在用户界面中设置或查看用户属性和文档属性。"

我不确定这意味着什么,但我认为这意味着即使您能够使用脚本设置属性,如果您在文件>中查看它,该值也不会更新;项目属性>用户属性。 但这并不代表房产没有更新。但是,如果它是您通过脚本设置的脚本属性,则该值将在您的视图中更新。

我说这是因为我通过在doGet()中设置它来尝试它。请参阅以下示例:

//Set properties as global variables
var userProperty = PropertiesService.getUserProperties();
var scriptProperty = PropertiesService.getScriptProperties(); 

function doGet() {

 userProperty.setProperty('uservar', 'Hello');
 scriptProperty.setProperty('scriptvar', 'World');

 Logger.log(userProperty.getProperty('uservar'));
 Logger.log(scriptProperty.getProperty('scriptvar'));

 return HtmlService.createTemplateFromFile('index').evaluate();
}

我在doGet()中做了这个,所以我可以通过刷新我的WebApp页面来检查它。 有趣的是,日志显示正确的值(Hello和World)。 但是,如果我访问文件> Project Properties,只更新了Script Propery值,User Property保持与我为其设置的原始值相同。

希望这有帮助。

答案 1 :(得分:5)

出于某种原因,似乎PropertiesService不起作用。即使我在https://developers.google.com/apps-script/guides/properties#reading_data中使用Google示例,我也会获得空值。我已经恢复到旧的UserProperties并且它可以工作,但它应该被折旧... PropertiesService似乎适用于脚本属性。