1

在我的头上。尝试使用容器绑定脚本中的 UrlFetchApp.fetch(url, options) 在 Web 应用程序中运行代码。

问题:容器绑定的文档脚本只能作为activeUser运行。doc 脚本通过复制模板来创建新文档。我希望从模板新创建的文档存储在开发人员拥有的集中文件夹中。我看到两个解决方案。

  1. 我授予所有域用户查看/编辑开发人员文件夹的权限。
  2. 我从一个独立脚本创建了一个 Web 应用程序,该脚本作为有权访问该文件夹的有效用户(开发人员)运行。在这种情况下,文档脚本使用 UrlFetchApp 调用 Web 应用程序,并传入参数(文件夹、文档)。但是,如果可能的话,非常能够弄清楚如何做到这一点。

    var unitId =  DocumentApp.getActiveDocument().getId();
    var unit = DriveApp.getFileById(unitId);
    var folderId = unit.getDescription() //FoldId for unit is stored in description
    var folder = DriveApp.getFolderById(folderId);
    var lesson = DriveApp.getFileById(UNIT.LESSON_TEMPLATE_ID).makeCopy('Lesson - ' + result.getResponseText());
    folder.addFile(lesson);//Currently I have the folder shared/edit with domain users.
                          //I would prefer to share/view. However, since the 
                          //container-bound doc script runs only as active user, no 
                          //can do.  Is it possible to build a small web app which 
                          //runs as effective user and saves lesson to folder. 
    
    showLessonSidebar(folderId);
    

    有什么提示吗?

4

2 回答 2

0

是的,可以创建一个以有效用户身份运行的 Web 应用程序。如果开发人员 - 有效用户有权访问文件夹和模板文件。

您可以将要复制到 WebApp 的文件的 folderId 和 Name 传递给 WebApp,而不是传递文件夹和 Doc 对象(将文件夹对象和 Doc 对象作为 URL 参数传递可能非常棘手,如果内容太大甚至不可能因为对 URL 的可能长度有限制)

1) 编写应用程序脚本

  function doGet(e) {
     var folderId = e.parameters.folderId;
     var copyFileName = e.parameters.name;
     var userEmail = e.parameters.email;
     var folder = DriveApp.getFolderById(folderId);
     var lesson = DriveApp.getFileById(UNIT.LESSON_TEMPLATE_ID).makeCopy(copyFileName);
     folder.addFile(lesson);
     //share file to domain or share folder with domain - folder.setSharing(....);
     file.setSharing(DriveApp.Access.DOMAIN, DriveApp.Permission.VIEW);
  }

2) 部署Web App时,开发者可以将Execute设置为我(developer@...),将“Who has access to Web App”设置为Anyone。

3) 确保开发者已授权 Web App。

4) 与所有域用户共享 Web App 脚本文件。

此外,如果您出于某种原因想要将文件内容从容器脚本传递到 Web 应用程序,您可以考虑在 doPost() 中实现逻辑,因为您将能够在 UrlFetch 中使用 POST 传递大数据。

于 2013-07-08T17:27:03.570 回答
0

据我了解,UrlFetch在绑定脚本中使用的唯一方法是使用installed trigger. (UrlFetch在绑定脚本中使用时无权运行simple triggershttps ://developers.google.com/apps-script/add-ons/lifecycle#authorization_modes 。)
安装的触发器始终“在创建用户的授权下运行触发器,即使另一个具有编辑权限的用户打开了电子表格”。因此,只需使用已安装的触发器

function setupTrigger(){
  var doc = DocumentApp.getActiveDocument();
  ScriptApp.newTrigger('open').forDocument(doc).onOpen().create();
}

此示例代码创建一个可安装的触发器,用于打开绑定到脚本的文档。

于 2016-02-17T13:21:40.590 回答