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。其實我回答了我自己的問題。