iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
自我挑戰組

用 ODK 和 Access VBA 打造行動化資料收集流程系列 第 21

Day21: 表單函數(Functions) Part 1

  • 分享至 

  • xImage
  •  

表單函數包含了主要的流程控制、重複群組、字串處理、數字處理、日期處理、地理工具、其他工具等項目,這部份我依然照ODK Docs的文件翻譯下去。

原始文件請參考:Functions in the ODK XForm Specification
https://getodk.github.io/xforms-spec/#xpath-functions

函數(Functions)

流程控制(Control flow)

if(expression, then, else)
如果expression(表達式)計算結果為 True,則傳回 then,否則,返回 else。

position(xpath)
傳回一個整數,該整數等於 xpath 定義的節點中目前節點的1-indexed位置。
最常見的是,它以position(..) 的形式使用來標識重複問題組內的目前疊代索引。

type name label repeat_count calculation
note person_list_note 請列出您家中人員的姓名。
begin_repeat person 家庭成員
text name 姓名
end_repeat
begin_repeat person_details 細節 count(${person})
calculate current_name indexed-repeat(${name}, ${person}, position(..))
date member_bday ${current_name}的生日
end_repeat
once(expression)
如果問題的值為空,則傳回值表達式,否則,傳回問題的目前值。
這可用於確保隨機數僅產生一次,或以即使稍後回應發生變更也可檢索的方式儲存為問題輸入的第一個值。

注意
這個函數經常被誤,請閱讀何時評估表達式以了解更多資訊:
https://docs.getodk.org/form-logic/#when-expressions-are-evaluated
####存取回應值(Accessing response values)

注意
大多數問題類型的資料存取都可以使用變數來存取。
需要使用函數來存取的為多選問題和重複組內問題的回答。

選擇問題 (Select questions)

selected(space_delimited_array, string)
如果 string 是 space_delimited_array 的成員,則傳回 True,否則傳回 False。
通常用於確定是否在選擇問題中,選擇了特定選項,因為選擇問題的參考值會傳回以空格分隔的選擇名稱數組。

survey

type name label hint relevant constraint
select_multiple medical_issues what_issues 您是否經歷過以下情況? 選擇所有適用的選項。
select_multiple cancer_types what_cancer 您曾患過什麼類型的癌症? 選擇所有適用的選項。 selected(${what_issues}, 'cancer')
select_multiple diabetes_types what_diabetes 您患有什麼類型的糖尿病? 選擇所有適用的選項。 selected(${what_issues}, 'diabetes')
begin_group blood_pressure 血壓讀數 selected(${what_issues}, 'hypertension')
integer systolic_bp 收縮壓 . > 40 and . < 400
integer diastolic_bp 舒張壓 . >= 20 and . <= 200
end_group
text other_health 列出其他問題。 selected(${what_issues}, 'other')
note after_health_note This note is after all health questions.

choices

list_name name label
medical_issues cancer Cancer
medical_issues diabetes 糖尿病
medical_issues hypertension 高血壓
medical_issues other 其他
cancer_types lung 肺癌
cancer_types skin 皮膚癌
cancer_types prostate 攝護腺癌
cancer_types breast 乳癌
cancer_types other 其他
diabetes_types type_1 1 型(胰島素依賴性)
diabetes_types type_2 2 型(胰島素抗性)

selected-at(space_delimited_array, n)

傳回 space_delimited_array 第 n 個位置的字串。
(該陣列為zero-indexed。)如果索引不存在,則傳回空字串。
這可用於從多選問題中取得所選選項的名稱,因為選擇問題的參考會傳回以空格分隔的選擇名稱數組。

筆記
如果用於從選擇問題中取得選項名稱(name),則此函數會傳回所選選項的名稱,而不是標籤(label)。
若要取得目前語言的標籤(label),請使用 jr:choice-name()函數。

XLSFORM
survey

type name label hint calculation
select_multiple colors color_prefs 你喜歡什麼顏色? 選擇三個。
calculate color_0 selected-at(${color_prefs}, 0)
calculate color_1 selected-at(${color_prefs}, 1)
calculate color_2 selected-at(${color_prefs}, 2)
note color_note 所選顏色: ${color_0} ${color_1} ${color_2}

choices

list_name name label
colors red 紅色
colors blue 藍色
colors yellow 黃色
colors green 綠色
colors orange 橘子
colors purple 紫色

count-selected(multi_select_question)

傳回在 multi_select_question 中選擇的選項數。

XLSFORM
survey

type name label hint constraint constraint_message
select_multiple colors color_prefs 你喜歡什麼顏色? 選擇三個。 count-selected(.)=3 需要正好選三個。

choices

list_name name label
colors red 紅色
colors blue 藍色
colors yellow 黃色
colors green 綠色
colors orange 橘子
colors purple 紫色

jr:choice-name(choice_name, 'select_question')

以使用的語言傳回與 select_question 的選項清單中的 choice_name 關聯的標籤值(label)。
注意
您必須將 select_question括在引號中:

'${question_name}'

XLSFORM
survey

type name label::English label::Español hint::English hint:Español calculation
select_multiple colors color_prefs What colors do you like? ¿Qué colores te gustan? Select three. Seleccione tres.
calculate color_0 jr:choice-name( selected-at(${color_prefs}, 0), '${color_prefs}')
calculate color_1 jr:choice-name( selected-at(${color_prefs}, 1), '${color_prefs}')
calculate color_2 jr:choice-name( selected-at(${color_prefs}, 2), '${color_prefs}')
note color_note Selected colors: Colores seleccionados: ${color_0} ${color_1} ${color_2} ${color_0} ${color_1} ${color_2}

choices

list_name name label::English label::Español
colors red Red Rojo
colors blue Blue Azul
colors yellow Yellow Amarillo
colors green Green Verde
colors orange Orange Anaranjado
colors purple Purple Púrpura

上一篇
Day20: 表單運算子(Operators)
下一篇
Day22: 表單函數(Functions) Part 2
系列文
用 ODK 和 Access VBA 打造行動化資料收集流程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言