使用Drive.Permissions.insert错误修改驱动器文件权限

问题描述 投票:0回答:1

我有一个触发器,该触发器在提交Google表单时执行。提交表单后,它将创建一个文档。我想让触发脚本添加一个用户,以便能够查看文件。

我的代码:

function onSubmitter(e){
  var user = e.namedValues['Shareholder Name:'][0];
  var email = e.namedValues['Shareholder Email:'][0];
  var proxy1 = e.namedValues['1ST PROXY NOMINEE:'][0];  
  var proxy2 = e.namedValues['2ND PROXY NOMINEE:'][0];
  var attendance = e.namedValues['ATTENDANCE:'][0];
  var arrival = e.namedValues['ARRIVAL DATE:'][0];
  var departure = e.namedValues['DEPARTURE DATE:'][0];
  var certification = e.namedValues['CERTIFICATION:'][0];
  var electronicsignature = e.namedValues['ELECTRONIC SIGNATURE:'][0];
  var rowstart = e.range.getRow();
  var app = SpreadsheetApp;
  var activeSheet = app.getActiveSpreadsheet().getActiveSheet()
  var pdflink = activeSheet.getRange(rowstart, 14).getValue();

  var fileID = pdflink.toString().replace("https://drive.google.com/a/xxxxxx/file/d/", "");
  fileID = fileID.toString().replace("/view?usp=drivesdk", "");


  var id = DriveApp.getFileById(fileID);
  var idtwo = id.getId();

  Drive.Permissions.insert(
   {
     'role': 'reader',
     'type': 'user',
     'value': email
   },
   idtwo,
   {
     'sendNotificationEmails': 'false'
   });

  var templ = HtmlService.createTemplateFromFile('email_proxy');
        templ.shareholderAccount = user;
        templ.shareholderLink = pdflink;
        templ.shareholderFriendlyName = user;

  var message = templ.evaluate().getContent();

  GmailApp.sendEmail(email, 'Proxy Confirmation', '',{
         htmlBody: message
       });

我得到的错误:

对drive.permissions.insert的API调用失败,并出现错误:经过身份验证的用户未授予应用280983214043111对文件1GI0psQysSE9xuzs3W3vNs99qcCFSUUsF4T的写访问权限在onSubmitter(Trigger:48)**

我认为,由于该应用程序以我的用户帐户运行,并且我有权访问该文件,因此该文件具有正确的权限。我猜是否没有被触发器调用?

任何想法,我如何赋予我的应用程序对云端硬盘中所有文件的写权限?我可以直接运行此代码,并且它可以工作,只是不能被触发器调用。

google-apps-script google-drive-api
1个回答
0
投票

我不确定您如何创建文件,但是以下代码对我有用,在表单提交时没有错误:


function myFunction() {
  var file = DriveApp.createFile("name", "content");
  var email = "[email protected]";
  var fileID=file.getId();

  Drive.Permissions.insert(
   {
     'role': 'reader',
     'type': 'user',
     'value': email
   },
   fileID,
   {
     'sendNotificationEmails': 'false'
   });
}

如果此代码也对您有用,但您自己的代码不起作用-请提供其余代码以进行故障排除。

© www.soinside.com 2019 - 2024. All rights reserved.