removeEditor在某些编辑器上失败

时间:2012-08-21 06:07:14

标签: google-apps-script

我有一些谷歌应用程序脚本代码,可以将编辑器添加到文档中,没有任何问题。但是,当我运行以下代码时,我发现某些编辑器被删除,并且出现以下消息时出现一些错误:“异常:我们很抱歉,发生了服务器错误。请稍等一下再试一次。”

var file = DocsList.getFileById( fid );
var editors = file.getEditors();

  for ( el = 0; el < editors.length ; el++ ) {
      file.removeEditor( editors[ el ] );
}

鉴于编辑器是从文件本身检索的,然后无法删除,我无法看到如何进行此操作,因为错误消息没有提供任何帮助。

有没有人经历过类似的事情。我看不出任何针对此的问题。

提前致谢。 克里斯

2 个答案:

答案 0 :(得分:0)

您可以尝试将file.remove(editors[ el ])置于try-catch结构中以捕获错误(并查看)并让您的应用在每种情况下完成。

示例:

function myFunction() {

var file = DocsList.getFileById( '0AnqS........bW1DNnVBbVE' );
var editors = file.getEditors();

Logger.log(editors.join())

  for ( el = 0; el < editors.length ; el++ ) {

      try{      

      file.removeEditor( editors[ el ] );
      Logger.log(editors[el]+' removed');// this editor is successfully removed

      } catch(error)

      {Logger.log('error on el = '+editors[el]+' = '+error)

      }
      }
}

这当然没有为您的问题提供答案,但它可以帮助您查看更多细节中发生的事情,哪个编辑器出错,哪个没有。

答案 1 :(得分:0)

我有相同的经验,尽管从getViewers或getEditors方法获取用户对象,但removeEditor和removeViewer都可能因某些用户而失败。

我的观察是,除非返回的用户对象是Google Apps帐户持有者,否则删除操作将失败。

因此,在Google Apps域example.com上,可能会与以下电子邮件地址共享文件:

normal_account@example.com
group_account@example.com
third_party@some_other_example.com

removeEditor / removeViewer只会成功获取列表中的第一个地址。

虽然对getEditors / getViewers的调用返回了一个用户对象列表,但是有些对象显示为空,例如user.getEmail()返回一个空字符串,这就是API文档所说的https://developers.google.com/apps-script/reference/drive/user#getEmail%28%29如果电子邮件地址不可用。