設置好專案後,我們可以來建立個簡單的問卷,來試試這一整套系統流程。其實筆者覺得這XLSForm的使用難度有些高,因為它其實有自己的語法,而非使用試算表的語法,且如果套入了複雜的判斷式,有時候結果不如預期,需要反覆測試與調整,多實驗幾次後,就會開始熟悉,之後就會順利些。
關於深入的用法,我後面會再細說,這裡先弄個簡單的問卷,來測試一下整套系統。
原始網站也有教學頁面,可以參考:
https://docs.getodk.org/tutorial-first-form/
以下是我的教學,我們這裡使用Google 試算表的範本(https://docs.google.com/spreadsheets/d/1v9Bumt3R0vCOGEKQI6ExUf2-8T72-XXp_CbKKTACuko) 作為教學,請開啟連結後,使用「檔案」>「建立副本」來複製一份使用。
設定目標:
依照前面的範例,我希望能建立一個讓稽查巡檢時填寫的「日誌表單」,讓稽查人員進行巡邏時,進行打卡,然後標記是否有異常情況。
所以所需要的資料有:
報表內容:
表頭:
內容:
結尾:
選擇清單:
我們將上面列出需求,轉換成XLSForm的方式,以下一步步說明:
表頭有僅有 日期、稽查員工號,這邊比較簡單,我這裡是這樣設定:
群組顯示:
第2列與第6列,A2與A6的位置,有標記begin_group與end_group,標記的列會用藍色框起來,此時在begin_group那列的appearance(外觀),選擇field-list,這樣框起來的範圍,裡面的問題,就會在同一頁顯示,如果沒有這樣設置,問題就會是一提一題不同頁面,也隸屬於不同群組。
欄位說明:
A欄位的type為資料類型,或者群組起訖,重複內容起訖的填寫位置,
B欄位的name為資料表的欄位名稱,這裡需要填寫沒空白字串的不重覆名稱,可以依照資料庫欄位的命名邏輯命名即可。
C欄位的label為標籤,這個欄位於畫面顯示時,要顯示的標籤內容。
E欄位的required為是否必要欄位,輸入yes表示必須要有資料。
F欄位的relevant為是否顯示出該項目關聯條件,空白表示不設限,有輸入條件,則符合條件才會顯示。
G欄位的appearance為外觀樣貌,有一些選項可以用,例如之前提到群組項目,可以使用field-list,就是其中一種外觀設計。
H欄位的default為預設資料欄位。
T欄位的read_only是我自已加上去的,這個額外的欄位是表示該項目為唯讀選項,無法修改。
資料列說明:
第3列我們要記錄目前的日期,但我希望不要讓user更改,以避免人為修改紀錄的日期,資料類型為data, 欄位名稱我們取名AuditDate,標籤為「作業日期」,必須要有資料、預設值為現在now()、是唯讀欄位。
第4列我們要記錄的是稽查員工號,資料類型使用「select_one user」, user為一組清單資料,必須於choices分頁填寫該清單,必須要有資料,外觀為minimal樣式,這樣是可以最小化選擇清單,避免佔用版面空間。
第5列是第4列的延伸,如果第4列選擇Other的話,就顯示這一列,這列是輸入其他工號,避免選項沒有時,沒辦法有效表達正確項目。其重點在relevant的項目內,輸入「${AID}="other"」,這樣才能達到預期效果。
第2列,begin_group那列,標籤的部份,我們設定為「稽查日誌-${AuditDate} - ${AID}」,這樣顯示這群組的名稱時,就會出現「稽查日誌-作業日期 –工號」作為顯示的標題。
內容區域,資料就多很多,前面我們有提到的一些說明,這裡就略過,這裡我們多幾個欄位,這裡說明一下:
D欄位的hint為提醒說明,它會擺在label下面用小字淺色呈現,可以用於說明該欄位的輸入方式與用途。
K欄位的calculation是用來進行計算,計算結果會放到該項目的name指名的變數名稱。
N欄位的parameters是用來設定一些參數,有些類型的資料可以設定參數。
第7列與第20列,A7與A20的位置,有標記begin_repeat與end_repeat,標記的列會用綠色框起來,此時在begin_repeat那列的名稱為Issue,標籤為稽查內容,這樣框起來的範圍,裡面的問題,就可以重複被詢問,而資料也會另外存成一個檔案,而這其中我們又另外包了一層Group與設定為field-list外觀,讓問題在同一頁面呈現。
資料列說明:
第9列我們要記錄目前的時間,資料類型為time,可以讓user更改,以修正成正確發生事情的時間,標籤為「作業時間」,必須要有資料、預設值為現在now()。
第10列我們要記錄巡察的部門代號,資料類型使用「select_one dep」, dep為一組清單資料,必須於choices分頁填寫該清單,必須要有資料,外觀為minimal樣式。
第11列我們要讓稽查人員進行打卡,資料類型為geopoint,點一下後就會偵測GPS訊號,並且提示誤差範圍,可以重新偵測,或者就記錄偵測結果。
第12列我們詢問稽查人員該位置是否有什麼異常情況,有的話按下「是」,這樣第13~17列就會跑出來,如果為「否」,則會隱藏這幾行。
第13與16列可以讓稽查員選擇問題分類與負責單位,都是從choices帶資料出來使用。14與15列為資料類型為text,分別可以輸入內容與相關人員工號。第16列類型為image可以拍照或者選擇照片,parameters參數設定為「max-pixels=1600」,也就是照片會自動縮成這個大小,節省上傳時間與紀錄空間。
第17列是用來計算,產生給repeat用的標題資料,內容為「concat('部門: ', ${LocationDep} , if(${HaveIssue}='yes',' !',''))」,這個公式用concat()函數,將多個資料合併成一個變數,程式檢測,果HaveIssue為Yes的話,後面就帶出個驚嘆號,否則只帶部門名稱。
結尾:
結尾的部分,列出日期與資料筆數,另外有增加一個欄位,讓稽查員寫其他事項。
這邊用到的欄位前面都有提過,22列計算的部分為,有用「count(${Issue})」帶出有多少筆稽查資料,然後透過23列的note類型,將文字描述帶出。
以上就是這個簡易表單的設計邏輯。
設計完成後,使用「檔案->下載->Microsoft Excel(.xlsx)」將檔案下載到電腦,我們需要將這個檔案上傳到ODK Central使用。