在前一篇「用 Awesome Table做的最新消息列表結合Google Form輸入」完成之後,繼續構思如何以Google Form對既有記錄的修改,因為我們知道Google Form可以設定讓填答者在提交後進行編輯,每一筆記錄有個唯一的網址可再開啟進行編輯修改,若能將這樣的網址取得並記錄起來,然後做個給管理者使用的介面可以指定開啟某一筆的編輯網址,那就無需直接編輯Google Sheet,避免在修改一筆資料時不小心更動到其他筆資料。(完成這項功能後,就如同一般資料庫系統增刪查改的概念幾乎都做到了。)
首先,從觀察「Editable List with Google Form」這個版型開始學習官網上的做法。將TEMPLATE GALLERY展開:
準備套用Editable List with Google Form這個版型:
點擊右上角的USE TEMPLATE按鈕,就會開始將該版型後端所需要的Google Sheet檔案建立到你自己的雲端硬碟裡面。
然後,我們就可以開始編輯自己的這個View,右上角標示了DATA SOURCE是你雲端硬碟裡的Google Sheet檔案(資料來自Form Responses Sheet之範圍A1:H)。
觀察重點包括ADVANCED PARAMETERS設定中的Query語法 "SELECT A,B,G,C,D,E,F,H where B is not null ORDER BY A DESC",對照著Form Responses Sheet來看,G欄是空白的界線欄,在G之前的A欄是時間戳記、B欄是項目標題(推估這三欄應該是不能動的,就算要改成套用我們自己準備的Google Sheet也要把對應的這三欄標示在此)。墊底的H欄是記錄Google Form讓填答者在提交後可再開啟進行編輯的網址,而在G與H之間就是其他資料欄位。另外,再觀察Template Sheet可以看到呈現出來的Book與Update內容所使用的HTML語法。
注意到前述幾個重點,然後我們就可以開始著手改變前一篇「用 Awesome Table做的最新消息列表結合Google Form輸入」的Google Sheet之設計。不過,還是先弄個副本來練習,請在雲端硬碟找到自己依據前一篇文章練習做出來的Google Sheet,按滑鼠右鍵執行 [建立副本]。
由於原來的Google Sheet是已經有一個連動的Google Form,所以建立副本也應該有產生出兩個檔案。
然後將這兩個檔案重新命名,讓自己好管理。
而且,不要忘了將這個Google Sheet設定與他人共用可以檢視(Share your Google Sheet):
再回到Form Responses Sheet Sheet範例的Google Sheet,將其Template Sheet [複製到] 我們自己的Google Sheet。
於是在我們自己的Google Sheet就多了一個「Template」的副本,將其 [重新命名] 為 "Template4EditableList" 吧。而且也順便把A1格的 "Book" 改成 "News Title",將A2格第一行裡面的 "{{Book title}}" 改成 "{{Search}}",並刪除第二行。
在Articles Sheet最右邊,再插入兩欄,分別在J1格輸入 "News Title"、K1格輸入 "Update"。並在K欄的每一筆資料都先暫時輸入隨便一個網址。
再回到Awesome Table編輯這個View的畫面,在DATA SOURCE點擊筆形按鈕更換其對應使用的是我們自己備妥的Google Sheet ( 資料來自Articles Sheet之範圍A1:K)。
而且在ADVANCED PARAMETERS設定中的Query語法改為 "SELECT A,B,J,F,G,H,K where B is not null ORDER BY H DESC",這是因為要設定成我們自己的Google Sheet各個對應欄位,J欄是空白的界線欄,在G之前的A欄是時間戳記、B欄是項目標題(先前推估這三欄應該是不能動的)。墊底的K欄是記錄Google Form讓填答者在提交後可再開啟進行編輯的網址,而在J與K之間就只有把列入Filter的其他資料欄位納入。
然後,再按下 [UPDATE VIEW],就可以看到呈現出正確結果了。不過,現在呈現出來的 "EDIT ENTRY" 紅色按鈕之超連結是先前隨便輸入的網址,還不是Google Form讓填答者在提交後進行編輯的網址,這部份還要在回到Google Sheet寫一點程式才行。
在Awesome Table官網的DOCUMENTATION,有一篇「用Connect a Google Form to Awesome Table」就有介紹程式要如何寫就能將Google Form讓填答者在提交後進行編輯的網址記錄下來。不必真的搞懂那些程式邏輯,先將文章中的程式碼複製起來再說。
回到我們自己的Google Sheet,開啟 [指令碼編輯器],將前述的程式碼貼上,然後著手更改前三行的部分內容,然後 [存檔]。
第一行的formURL變數,網址部分是要改成我們自己的Google Form序號(如下圖所示的網址列部分,而且在Google Form要 [設定] 勾選 [填答者可以] [在提交後進行編輯] )。第二行的sheetName變數改成 "Articles",因為我們的資料存放在Articles Sheet。第三行的columIndex變數改成11,因為我們的Articles Sheet的第11欄(K欄)才是準備用來記錄網址。
而且,為了能在每次填答完Google Form提交資料後能觸發執行該程式碼執行,必須在Google Sheet的指令碼編輯器中依下列方式設定其觸發條件為 [來自試算表] [提交表單時]。
最後,做一次測試,在Google Form填寫一筆資料,觀察看看是否資料能正確寫入Google Sheet,而且K欄有記錄Google Form讓填答者在提交後進行編輯的網址(記得開啟確認看看)。
搞定上述步驟,以我們自己備妥的Google Sheet為後端資料來源所呈現的「最新消息列表」就完成了,而且可以利用我們設計的Google Form來新增與修改資料,然後就將Awesome Table平台提供的Embed碼複製起來,嵌入自己網頁的HTML即可呈現(如此範例呈現於jsfiddle、jsbin)。注意,若你只是先嵌入自己電腦上的HTML檔而直接以Chrome開啟,將會因為新版Chrome對於安全控制而阻擋其程式的正確執行,但若使用Firefox開啟自己電腦上的HTML檔則能看到正確執行。
P.S. 不要忘了,再依前前一篇「用 Awesome Table快速做出最新消息列表」的方式,以這篇文章的Google Sheet做出給一般使用者觀看的最新消息列表。需要設定的步驟畫面如下,就不再多做說明了。