MedTech 서비스 디바이스 매핑과 함께 사용자 지정 함수를 사용하는 방법
JMESPath를 식 언어로 사용할 때 많은 함수를 사용할 수 있습니다. JMESPath 사양의 일부로 사용할 수 있는 기본 제공 함수 외에도 더 많은 사용자 지정 함수를 사용할 수 있습니다. 이 문서에서는 MedTech 서비스 디바이스 매핑과 함께 MedTech 서비스 관련 사용자 지정 함수를 사용하는 방법을 설명합니다.
MedTech 서비스 매핑 디버거를 사용하여 MedTech 서비스 디바이스 및 FHIR® 대상 매핑을 만들고 업데이트하고 문제를 해결하도록 지원할 수 있습니다. 매핑 디버거를 사용하면 Azure Portal을 벗어나지 않고도 실시간으로 인라인을 쉽게 보고 조정할 수 있습니다. 매핑 디버거는 테스트 디바이스 메시지를 업로드하여 해당 메시지가 정규화된 메시지로 처리되고 FHIR 관찰로 변환된 후 어떻게 표시되는지 확인할 수도 있습니다.
함수 시그니처
각 함수에는 JMESPath 사양을 따르는 시그니처가 있습니다. 이 시그니처는 다음과 같이 나타낼 수 있습니다.
return_type function_name(type $argname)
시그니처는 인수에 유효한 형식을 나타냅니다. 인수에 잘못된 형식이 전달되면 오류가 발생합니다.
Important
수학 관련 함수가 완료되면 최종 결과가 C# long 값 크기에 맞습니다. 최종 결과가 C# long 값 크기에 맞지 않으면 수학 오류가 발생합니다.
앞에서 설명한 대로 이러한 함수는 JmesPath를 식 언어로 지정할 때만 사용할 수 있습니다. 기본적으로 식 언어는 JsonPath입니다. 식을 정의할 때 식 언어를 변경할 수 있습니다.
예시:
"templateType": "CalculatedContent",
"template": {
"typeName": "heartrate",
"patientIdExpression": {
"value": "insertString('123', 'patient', `0`) ",
"language": "JmesPath"
},
...
}
이 예제에서는 insertString 식을 사용하여 환자 ID patient123
을 생성합니다.
리터럴 값
상수 값을 함수에 제공할 수 있습니다.
- 숫자 값은 백틱(`)으로 묶어야 합니다.
- 예: add(`10`, `10`)
- 문자열 값은 작은따옴표(')로 묶어야 합니다.
- 예: insertString('mple', 'sa', `0`)
자세한 내용은 JMESPath 사양을 참조하세요.
예외 처리
예외는 디바이스 데이터 처리 수명 주기 내의 다양한 시점에서 발생할 수 있습니다. 예외가 발생할 수 있는 다양한 시점은 다음과 같습니다.
작업 | When | 디바이스 매핑을 구문 분석하는 동안 발생할 수 있는 예외 | 결과 |
---|---|---|---|
디바이스 매핑 구문 분석 | 디바이스 메시지의 새 일괄 처리가 수신될 때마다 디바이스 매핑이 로드되고 구문 분석됩니다. | 디바이스 매핑을 구문 분석하지 못했습니다. | 시스템은 구문 분석이 성공할 때까지 최신 디바이스 매핑을 다시 로드하고 구문 분석하려고 시도합니다. 구문 분석이 성공할 때까지 새 디바이스 메시지는 처리되지 않습니다. |
디바이스 매핑 구문 분석 | 디바이스 메시지의 새 일괄 처리가 수신될 때마다 디바이스 매핑이 로드되고 구문 분석됩니다. | 식을 구문 분석하지 못했습니다. | 시스템은 구문 분석이 성공할 때까지 최신 디바이스 매핑을 다시 로드하고 구문 분석하려고 시도합니다. 구문 분석이 성공할 때까지 새 디바이스 메시지는 처리되지 않습니다. |
함수 실행 | 디바이스 메시지 내의 디바이스 데이터에 대해 함수가 실행될 때마다 | 입력 디바이스 데이터는 함수 시그니처의 데이터와 일치하지 않습니다. | 시스템에서 해당 디바이스 메시지의 처리를 중지합니다. 디바이스 메시지가 다시 시도되지 않습니다. |
함수 실행 | 디바이스 메시지 내의 디바이스 데이터에 대해 함수가 실행될 때마다 | 함수 설명에 나열된 다른 예외입니다. | 시스템에서 해당 디바이스 메시지의 처리를 중지합니다. 디바이스 메시지가 다시 시도되지 않습니다. |
수학 함수
추가
number add(number $left, number $right)
오른쪽 인수에 왼쪽 인수를 추가한 결과를 반환합니다.
예:
조건 | 식 | 결과 |
---|---|---|
해당 없음 | add(`10`, `10`) | 20 |
{"left": 40, "right": 50} | add(left, right) | 90 |
{"left": 0, "right": 50} | add(left, right) | 50 |
divide
number divide(number $left, number $right)
왼쪽 인수를 오른쪽 인수로 나눈 결과를 반환합니다.
예:
조건 | 식 | 결과 |
---|---|---|
해당 없음 | 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) | 수학 오류: 0으로 나누기 |
multiply
number multiply(number $left, number $right)
왼쪽 인수에 오른쪽 인수를 곱한 결과를 반환합니다.
예:
조건 | 식 | 결과 |
---|---|---|
해당 없음 | 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)
왼쪽 인수의 오른쪽 인수 거듭제곱 값을 구한 결과를 반환합니다.
예:
조건 | 식 | 결과 |
---|---|---|
해당 없음 | 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 |
subtract
number subtract(number $left, number $right)
왼쪽 인수에서 오른쪽 인수를 뺀 결과를 반환합니다.
예:
조건 | 식 | 결과 |
---|---|---|
해당 없음 | 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)
문자열 original
에 toInsert
값을 삽입하여 새 문자열을 생성합니다. 이 문자열은 문자열 original
내의 위치 pos
에 삽입됩니다.
위치 인수가 0부터 시작하는 경우 0의 위치는 문자열 내의 첫 번째 문자를 나타냅니다.
제공된 위치 인수가 original
의 길이 범위를 벗어나면 오류가 발생합니다.
예:
조건 | 식 | 결과 |
---|---|---|
해당 없음 | 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" |
팁
MedTech 서비스 로그를 사용하여 오류를 수정하는 데 도움을 받으려면 MedTech 서비스 문서 MedTech 서비스 로그를 사용하여 오류 해결을 참조하세요.
다음 단계
참고 항목
FHIR®은 HL7의 등록 상표이며, HL7의 사용 허가 하에 사용됩니다.