谷歌应用程序脚本,谷歌选择器的团队合作精神 [英] google apps script, google picker for team drive

本文介绍了谷歌应用程序脚本,谷歌选择器的团队合作精神的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

221/5000

你好!目前,我正在尝试为Google Team Drive实施google pikker.此代码对我的Google云端硬盘效果很好,但是如果您将此代码用于Google Team Drive,请添加参数

Hello! At the moment I'm trying to implement google pikker for google team drive. This code works well for my google drive, but if you use this code for Google Team Drives, adding parameters

.enableFeature(google.picker.Feature.SUPPORT_TEAM_DRIVES)

.setSelectFolderEnabled(true)

在文件显示窗口中为空.

in the file display window is empty.

我该如何解决? 谢谢!

How I can fix it? Thank you!

它看起来应该像这样:

我认为OAuth 2.0存在问题.

I think problem with OAuth 2.0.

有一篇很好的文章,介绍了团队驱动力选择器 https://developers.google. com/drive/v3/web/picker ,但不要使用此参数:

There is good article about picker for team drive https://developers.google.com/drive/v3/web/picker, but there don't use this parameters:

.enableFeature(google.picker.Feature.SUPPORT_TEAM_DRIVES)

.setSelectFolderEnabled(true)

Picker.html

Picker.html

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons.css">
  <script type="text/javascript">
    var DIALOG_DIMENSIONS = {
        width: 600,
        height: 425
    };

    var pickerApiLoaded = false;

    function onApiLoad() {
        gapi.load('picker', {
            'callback': function() {
                pickerApiLoaded = true;
            }
        });
        google.script.run.withSuccessHandler(createPicker)
            .withFailureHandler(showError).getOAuthToken();
    }

    function createPicker(token) {

        if (pickerApiLoaded && token) {

            var docsView = new google.picker.DocsView()
                .setIncludeFolders(true)
                .setMimeTypes('application/vnd.google-apps.folder')
                .setSelectFolderEnabled(true)
                .setEnableTeamDrives(true);

            var picker = new google.picker.PickerBuilder()
                .addView(docsView)
                .enableFeature(google.picker.Feature.SUPPORT_TEAM_DRIVES)
                .enableFeature(google.picker.Feature.NAV_HIDDEN)
                .hideTitleBar()
                .setSize(DIALOG_DIMENSIONS.width - 2, DIALOG_DIMENSIONS.height - 2)
                .setOAuthToken(token)
                .setCallback(pickerCallback)
                .setOrigin('https://docs.google.com')
                .build();

            picker.setVisible(true);

        } else {
            showError('Unable to load the file picker.');
        }
    }

    /**
     * A callback function that extracts the chosen document's metadata from the
     * response object. For details on the response object, see
     * https://developers.google.com/picker/docs/result
     *
     * @param {object} data The response object.
     */
    function pickerCallback(data) {
        var action = data[google.picker.Response.ACTION];
        if (action == google.picker.Action.PICKED) {
            var doc = data[google.picker.Response.DOCUMENTS][0];
            var id = doc[google.picker.Document.ID];
            // Show the ID of the Google Drive folder
            document.getElementById('result').innerHTML = id;
            /**/

            google.script.run.searchFileInFoder(id);
            google.script.host.close();
            /**/
        } else if (action == google.picker.Action.CANCEL) {
            google.script.host.close();
        }
    }

    function showError(message) {
        document.getElementById('result').innerHTML = 'Error: ' + message;
    }
  </script>
</head>

<body>
    <div>
        <p id='result'></p>
    </div>
    <script type="text/javascript" src="https://apis.google.com/js/api.js?onload=onApiLoad"></script>
</body>
</html>

code.gs

  /*Picker for сhoose folder*/
    function showPicker() {
    var html = HtmlService.createHtmlOutputFromFile('Picker.html')
      .setWidth(600)
      .setHeight(425)
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
    SpreadsheetApp.getUi().showModalDialog(html, 'Select Folder');
    }

       function getOAuthToken() {
      DriveApp.getRootFolder();
      return ScriptApp.getOAuthToken();
    }

推荐答案

将docsView变量更改为这样定义,因此您可以在DocsView的括号内包含google.picker.viewId.DOCS,如下所示:

Change your docsView variable to be defined like this, so you include google.picker.viewId.DOCS inside the brackets of DocsView like this:

let docsView = new google.picker.DocsView(google.picker.ViewId.DOCS)
                        .setEnableTeamDrives(true);

我尝试实现上述问题中的代码,并且控制台错误很少,并且选择器无法正常工作.可能与.setOrigin参数有关.由于我不知道您的控制台日志,所以我无法说出代码的哪一部分导致了错误.但是无论如何,下面是我可以使用的完整createPicker()函数:

I tried to implement the code in the question above and I had few console errors and the picker didn't work properly. Probably it has to do with .setOrigin parameter. I can't say which part of your code is causing the error since I don't know your console logs. But anyways, below is my full createPicker() function which works for me:

function createPicker() {
    if (pickerApiLoaded && oauthToken) {
      var view = new google.picker.DocsView(google.picker.ViewId.FOLDERS)
                        .setSelectFolderEnabled(true);
      var picker = new google.picker.PickerBuilder()
          .enableFeature(google.picker.Feature.SUPPORT_TEAM_DRIVES)
          .addView(new google.picker.DocsView(google.picker.ViewId.DOCS)
                        .setEnableTeamDrives(true))
          .addView(google.picker.ViewId.DOCS)
          .addView(view)
          .setOAuthToken(oauthToken)
          .setDeveloperKey(developerKey)
          .setCallback(pickerCallback)
          .build();
      picker.setVisible(true);
    }
  }

这篇关于谷歌应用程序脚本,谷歌选择器的团队合作精神的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆