如何使用自訂函式搭配醫療技術服務裝置對應
使用 JMESPath 做為運算式語言時,有許多函式可供使用。 除了作為 JMESPath 規格一部分的內建函式之外,還可以使用更多自訂函式。 本文說明如何使用醫療技術服務特定的自訂函式搭配醫療技術服務裝置對應。
您可以使用醫療技術服務對應偵錯工具 ,協助建立、更新及疑難排解醫療技術服務裝置和 FHIR® 目的地對應。 對應偵錯工具可讓您輕鬆即時檢視和進行內嵌調整,無需離開 Azure 入口網站。 對應偵錯工具也可用來上傳測試裝置訊息,以查看處理為規範訊息並轉換成 FHIR 觀察之後看起來的樣子。
函式簽章
每個函式都有遵循 JMESPath 規格的簽章。 此簽章可以表示為:
return_type function_name(type $argname)
簽章會指出引數的有效類型。 如果引數傳入無效的型別,就會發生錯誤。
重要
當數學相關函式完成時,最終結果必須能夠符合 C# long 值。 如果最終結果無法符合 C# long 值,則會發生數學錯誤。
如先前所述,這些函式只能在指定 JmesPath 做為運算式語言時使用。 根據預設,運算式語言為 JsonPath。 定義運算式時,可以變更運算式語言。
例如:
"templateType": "CalculatedContent",
"template": {
"typeName": "heartrate",
"patientIdExpression": {
"value": "insertString('123', 'patient', `0`) ",
"language": "JmesPath"
},
...
}
此範例會使用 insertString 運算式來產生病患識別碼patient123
。
常值
常數值可以提供給函式。
- 數值應該以反引弧括住:`
- 範例:add(`10`, `10`)
- 字串值應以單引號括住:'
- 範例:insertString('mple', 'sa', `0`)
如需詳細資訊,請參閱 JMESPath 規格。
例外狀況處理
例外狀況可能發生在裝置資料處理生命週期內的各種點。 以下是可能發生例外狀況的各種點:
動作 | 時機 | 在剖析裝置對應期間可能發生的例外狀況 | 結果 |
---|---|---|---|
裝置對應剖析 | 每次收到新的裝置訊息批次時,都會載入並剖析裝置對應。 | 無法剖析裝置對應。 | 系統嘗試重載並剖析最新的裝置對應,直到剖析成功為止。 在剖析成功之前,不會處理任何新的裝置訊息。 |
裝置對應剖析 | 每次收到新的裝置訊息批次時,都會載入並剖析裝置對應。 | 無法剖析任何運算式。 | 系統嘗試重載並剖析最新的裝置對應,直到剖析成功為止。 在剖析成功之前,不會處理任何新的裝置訊息。 |
函式執行 | 每次針對裝置訊息內的裝置資料執行函式時。 | 輸入裝置資料不符合函式簽章的資料。 | 系統停止處理該裝置訊息。 不會重試裝置訊息。 |
函式執行 | 每次針對裝置訊息內的裝置資料執行函式時。 | 函式描述中所列的任何其他例外狀況。 | 系統停止處理該裝置訊息。 不會重試裝置訊息。 |
數學函式
add
number add(number $left, number $right)
傳回將左引數新增至右引數的結果。
範例:
假設 | 運算式 | 結果 |
---|---|---|
n/a | add(`10`, `10`) | 20 |
{"left": 40, "right": 50} | add(left, right) | 90 |
{"left": 0, "right": 50} | add(left, right) | 50 |
除
number divide(number $left, number $right)
傳回將左引數除以右引數的結果。
範例:
假設 | 運算式 | 結果 |
---|---|---|
n/a | divide(`10`, `10`) | 1 |
{"left": 40, "right": 50} | divide(left, right) | 0.8 |
{"left": 0, "right": 50} | divide(left, right) | 0 |
{"left": 50, "right": 0} | divide(left, right) | 數學錯誤:除以零 |
乘
number multiply(number $left, number $right)
傳回將左引數與右引數相乘的結果。
範例:
假設 | 運算式 | 結果 |
---|---|---|
n/a | multiply(`10`, `10`) | 100 |
{"left": 40, "right": 50} | multiply(left, right) | 2000 |
{"left": 0, "right": 50} | multiply(left, right) | 0 |
pow
number pow(number $left, number $right)
傳回將左引數提升為右引數乘冪的結果。
範例:
假設 | 運算式 | 結果 |
---|---|---|
n/a | pow(`10`, `10`) | 10000000000 |
{"left": 40, "right": 50} | pow(left, right) | 數學錯誤:溢位 |
{"left": 0, "right": 50} | pow(left, right) | 0 |
{"left": 100, "right": 0.5} | pow(left, right) | 10 |
減
number subtract(number $left, number $right)
傳回從左引數減去右引數的結果。
範例:
假設 | 運算式 | 結果 |
---|---|---|
n/a | subtract(`10`, `10`) | 0 |
{"left": 40, "right": 50} | subtract(left, right) | -10 |
{"left": 0, "right": 50} | subtract(left, right) | 50- |
字串函數
insertString
string insertString(string $original, string $toInsert, number pos)
將 toInsert
的值插入字串 original
,以產生新的字串。 字串插入到字串 original
內的位置 pos
處。
如果位置引數是以零為基底,則零的位置會參考字串內的第一個字元。
如果提供的位置引數超出 original
長度的範圍,則會發生錯誤。
範例:
假設 | 運算式 | 結果 |
---|---|---|
n/a | insertString('mple', 'sa', 0 ) |
"sample" |
{"original": "mple", "toInsert": "sa", "pos": 0} | insertString(original, toInsert, pos) | "sample" |
{"original": "suess", "toInsert": "cc", "pos": 2} | insertString(original, toInsert, pos) | "success" |
{"original": "myString", "toInsert": "!!", "pos": 8} | insertString(original, toInsert, pos) | "myString!!" |
日期函式
fromUnixTimestamp
string fromUnixTimestamp(number $unixTimestampInSeconds)
從指定的 Unix 時間戳記產生 ISO 8061 符合規範時間戳記。 時間戳會表示為自 Epoch (1970 年 1 月 1 日) 以來的時間戳記。
範例:
假設 | 運算式 | 結果 |
---|---|---|
{"unix": 1625677200} | fromUnixTimestamp(unix) | "2021-07-07T17:00:00+0" |
{"unix": 0} | fromUnixTimestamp(unix) | "1970-01-01T00:00:00+0" |
fromUnixTimestampMs
string fromUnixTimestampMs(number $unixTimestampInMs)
從指定的 Unix 時間戳記產生 ISO 8061 符合規範時間戳記。 時間戳記會以自 Epoch 之後的毫秒數表示 (1970 年 1 月 1 日)。
範例:
假設 | 運算式 | 結果 |
---|---|---|
{"unix": 1626799080000} | fromUnixTimestampMs(unix) | "2021-07-20T16:38:00+0" |
{"unix": 0} | fromUnixTimestampMs(unix) | "1970-01-01T00:00:00+0" |
提示
請參閱醫療技術服務文章使用醫療技術服務記錄疑難排解錯誤,以協助使用醫療技術服務記錄修正錯誤。
下一步
注意
FHIR® 是 HL7 的註冊商標,在 HL7 的許可下使用。