使用谷歌图表选择运行服务器端代码

时间:2017-01-23 17:37:24

标签: google-apps-script google-visualization google-chartwrapper serverside-javascript

我有一个谷歌可视化表,我在网络应用程序中发布。

背景 我运行一个脚本,列出电子表格中google文件夹中的所有文档。然后我将该列表推送到我在网络应用程序中发布的Google桌面。

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

我完成了两件事:

  1. 我有一个脚本可以将文档移动到特定的文件夹中 谷歌驱动器使用它的文档ID。
  2. 我在表上有一个事件监听器,这样当你点击一行时 然后单击删除图标,您会收到提示,并确认 你想存档[输入文件名]?"当我点击确定,我得到了我的 测试提示说"文档存档"。当我点击否,我得到了我的 测试提示说"请求已取消"。所以,据此,我知道我 有适当的代码(至少看起来如此)。
  3. 我挣扎的是什么: 我似乎无法让上面的代码一起工作。事件监听器正在向我提供我已解析的文档的URL,只给我ID。这是我希望用来运行其余代码的东西,但我认为因为我试图从客户端与服务器端进行交互,所以它无法正常工作。任何人都可以帮我搞清楚吗?我知道在从客户端运行服务器端脚本时我需要使用 google.script.run.withSuccessHandler ,但我不知道它是如何应用于这种情况我需要的docid正在收集表格选择。任何帮助表示赞赏,我希望上述内容有意义!

       // 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"); 
                               }
                             });
                            });
                          }
                      }); 
                   });
    

1 个答案:

答案 0 :(得分:1)

我得到了它!我很难理解的是如何将变量从客户端传递给code.gs.我只在客户端的code.gs上运行一个脚本按钮提交但从未传回任何东西。

所以我最终将我的代码更改为下面的代码,它将我需要的变量传递给successhandler,其中archiveDoc是我的code.gs中的函数.docurl是我需要从eventlistener传递的变量的名称。

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

我还是新编码所以我刚学到了新东西!谢谢Spencer Easton。事实上我确实回答了我自己的问题。