0

我有一个谷歌可视化表,我在一个web应用程序中发布。用谷歌图表选择运行服务器端代码

背景: 我运行一个脚本,列出电子表格中谷歌文件夹中的所有文档。然后,我将这个列表推入我在Web应用程序中发布的Google表格中。

需求: 我想直接从Web应用程序管理那些相同的文档列表。当我选择表格上的适用行时,我希望能够将文档从一个文件夹移动到另一个文件夹。

两件事情我已经完成:

  1. 我有一个脚本,将文件的谷歌驱动器使用它的doc ID移动到特定的文件夹 。
  2. 我在桌面上有一个事件监听器,这样当你点击一行然后点击删除图标,你会得到一个提示,询问:“确定你想要存档 [输入文档名称]?当我点击确定,我得到我的 测试提示,说“文档归档”。当我点击否,我得到我的 测试提示说“请求取消”。所以从这里,我知道我 有适当的代码(至少这是它的样子)。

我正在挣扎: 我似乎无法得到上面的代码一起工作。事件监听器向我提供了我已解析的文档的URL,仅给出了我的ID。这就是我希望用来获取其他代码的运行方式,但是我想因为我试图从客户端与服务器端进行交互,所以它不起作用。任何人都可以帮我弄明白吗?我知道我需要在客户端运行服务器端脚本时使用google.script.run.withSuccessHandler,但我不知道它如何适用于这种情况,我需要的docid正在收集在表select上。任何帮助表示赞赏,我希望以上是有道理的!

// Draw Dashboard 
     h2dashboard.bind([h2stringFilter, h2typeFilter], [h2chart]); 
     h2dashboard.draw(h2dataView); 


google.visualization.events.addOneTimeListener(h2chart, 'ready', function() { 
     google.visualization.events.addListener(h2chart.getChart(), 'select', function() { 
        var selection = h2chart.getChart().getSelection(); 
        var dt = h2chart.getDataTable(); 
        // Get Value of clicked row 
        if (selection.length) { 
        var item = selection[0]; 
        var docurl = dt.getValue(item.row, 1); 
        var docname = dt.getValue(item.row, 0); 
        var source = dt.getValue(item.row, 3); 
        // When button is clicked, show confirm box with value 
         $(document).ready(function() { 
         $("#hu2archive").on("click", function() { 
         var answer = confirm("Are you sure you want to archive " + docname + "?"); 
        if (answer === true) { 
        var archive = DriveApp.getFolderById("FOLDER ID"); 
        var docid = docurl.match(/[-\w]{25,}/); // This is where I'm grabbing the value from the row. 
        var doc = DriveApp.getFileById(docid); 
         doc.makeCopy(archive).setName(doc.getName()); 
         source.removeFile(doc); 
          alert(docname + " has been archived!"); 
          } else { 
           alert("Request cancelled"); 
          } 
         }); 
         }); 
         } 
        }); 
       }); 
+0

你有点回答你自己的问题。您正在混合客户端和服务器端代码。在这里可以找到从客户端运行服务器端代码的文档:'https:// developers.google.com/apps-script/guides/html/reference/run'具体来说,所有引用'DriveApp'的代码都需要在服务器端运行。 –

+0

是的 - 这是我的理解,但是我的奋斗目前正在通过事件监听器获取id。我如何将它绑回到Driveapp代码中使用?它可以被绑回吗?我应该以另一种方式去做吗? – Niya

回答

1

我刚刚得到它!我很难理解的是如何将来自客户端的变量传递给code.gs.我只在按钮提交中从客户端运行code.gs中的脚本,但从未传回任何内容。

所以我最终将我的代码更改为下面的代码,将需要的变量传递给成功处理程序,其中archiveDoc是我的代码中的函数,docurl是我需要从eventlistener传递的变量的名称。

if (answer === true) { google.script.run.withSuccessHandler(onSuccess).withFailureHandler(err).archiveDoc(docurl);

我还是新来的编码,所以我只是学到新的东西!所以谢谢Spencer Easton。其实我回答了我自己的问题。