使用 Google 应用程序脚本在 G 套件共享驱动器中创建 Google 文档快捷方式

Creating a Google Document shortcut in a G suite shared drive using Google App Script

我能够轻松地创建 Google 文档文件的快捷方式,使用我的云端硬盘中的快捷方式,或我的云端硬盘中的文件夹。这个问题和回应

对这有很大帮助

但是,当我尝试对 G Suite 共享云端硬盘文件夹执行相同操作时,出现以下错误:

GoogleJsonResponseException: API call to drive.files.insert failed with error: File not found: #FILE NUM

用于“我的云端硬盘”但不适用于共享云端硬盘的代码是:

function createShortcut() {

  const targetId = "TARGET DOCUMENT ID"; 
  const shortcutName = "Test"; 
  const folderId = "TARGET FOLDER ID";
 
  const resource = {
    shortcutDetails: { targetId: targetId },
    title: shortcutName,
    mimeType:"application/vnd.google-apps.shortcut",
    supportsTeamDrives:true,
    parents: [{id: folderId}]
  };

  const shortcut = Drive.Files.insert(resource);
}

我查阅了文档:https://developers.google.com/drive/api/v3/shortcuts 没有运气。

问题

您在文件资源中包含 supportsTeamDrives 参数。首先,如文档中所示,此参数已弃用:您现在应使用 supportsAllDrives。其次,请求体(你叫的那个resource)和请求参数是有区别的

解决方案

如果您查看 Drive.Files.insert() 函数签名,您会看到有 3 个选项:

  • .insert(File resource);
  • .insert(File resource, Blob mediaData);
  • .insert(File resource, Blob mediaData, Object optionalArgs);

您使用的是第一个,这不允许指定任何请求参数。因此,您应该使用第三个。

以下是如何在您的案例中使用它:

// Since you are not creating nor uploading any file you shall leave the Blob mediatada parameter as null
 const resource = {
    shortcutDetails: { targetId: targetId },
    title: shortcutName,
    mimeType:"application/vnd.google-apps.shortcut",
    parents: [{id: folderId}]
  };
  
  const options = { supportsAllDrives: true };

  const shortcut = Drive.Files.insert(resource, null, options);

参考

Files v2 insert

在此处查找https://groups.google.com/g/google-apps-script-community/c/bH-kn9UW_cg

添加参数 supportsAllDrives 设置为 true。并确保您有权将文件添加到驱动器。 高级驱动服务使用 v2 API。您可以查看参考以获取更多详细信息。

let sheetFile = Drive.Files.insert( newFile, blob, { convert: true, supportsAllDrives: true } );