iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0

設置好專案後,我們可以來建立個簡單的問卷,來試試這一整套系統流程。其實筆者覺得這XLSForm的使用難度有些高,因為它其實有自己的語法,而非使用試算表的語法,且如果套入了複雜的判斷式,有時候結果不如預期,需要反覆測試與調整,多實驗幾次後,就會開始熟悉,之後就會順利些。

關於深入的用法,我後面會再細說,這裡先弄個簡單的問卷,來測試一下整套系統。

原始網站也有教學頁面,可以參考:
https://docs.getodk.org/tutorial-first-form/

以下是我的教學,我們這裡使用Google 試算表的範本(https://docs.google.com/spreadsheets/d/1v9Bumt3R0vCOGEKQI6ExUf2-8T72-XXp_CbKKTACuko) 作為教學,請開啟連結後,使用「檔案」>「建立副本」來複製一份使用。
https://ithelp.ithome.com.tw/upload/images/20240918/20007221bT3NJZZLfT.jpg

設定目標:
依照前面的範例,我希望能建立一個讓稽查巡檢時填寫的「日誌表單」,讓稽查人員進行巡邏時,進行打卡,然後標記是否有異常情況。

所以所需要的資料有:

報表內容:

表頭:

  • 日期
  • 稽查員工號

內容:

  • 時間
  • 稽查位置
  • GPS位置
  • 是否異常? (有異常出現以下選項)
    • 問題分類
    • 內容
    • 相關人員工號
    • 負責單位
    • 照片

結尾:

  • 顯示摘要
  • 其他事項

選擇清單:

  • 稽查員
  • 是否異常
  • 問題分類
  • 稽查位置
  • 負責單位

我們將上面列出需求,轉換成XLSForm的方式,以下一步步說明:

表頭有僅有 日期、稽查員工號,這邊比較簡單,我這裡是這樣設定:
https://ithelp.ithome.com.tw/upload/images/20240918/20007221oksOa66VhJ.png

群組顯示:
第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是用來設定一些參數,有些類型的資料可以設定參數。

https://ithelp.ithome.com.tw/upload/images/20240918/20007221p5pOr5ujOU.png

第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類型,將文字描述帶出。
https://ithelp.ithome.com.tw/upload/images/20240918/20007221SThQNzduIu.png

以上就是這個簡易表單的設計邏輯。

設計完成後,使用「檔案->下載->Microsoft Excel(.xlsx)」將檔案下載到電腦,我們需要將這個檔案上傳到ODK Central使用。

https://ithelp.ithome.com.tw/upload/images/20240918/20007221dv1EQJgyQ0.jpg


上一篇
Day5: ODK Central 的基本配置
下一篇
Day7: 上傳問卷至 ODK Central
系列文
用 ODK 和 Access VBA 打造行動化資料收集流程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言