적용 대상: Azure Logic Apps(표준)
논리 앱 워크플로에서 다른 XML 또는 JSON 형식을 사용하는 메시지를 교환하는 경우 원본 형식에서 대상 형식(예: XML 문서 간 또는 JSON 문서 간)으로 데이터를 변환하거나 변환하는 방법을 지정해야 합니다. 이 작업은 특히 원본 스키마와 대상 스키마의 데이터 구조 간에 차이가 있는 경우에 중요합니다. 스키마는 XML 또는 JSON 문서의 데이터 요소, 특성, 데이터 형식을 설명합니다.
데이터 구조 간의 변환을 정의하고 간격을 메우기 위해 원본 스키마와 대상 스키마의 데이터 요소 간의 관계를 지정하는 맵(.xslt 파일)을 만들 수 있습니다. 표준 논리 앱 프로젝트의 컨텍스트 내에서 Azure Logic Apps(표준) 확장과 함께 Visual Studio Code를 사용하여 맵을 시각적으로 만들거나 편집할 수 있습니다. 데이터 매퍼 도구는 끌어서 놓기 제스처를 사용하여 매핑과 변환을 위한 통합된 환경, 식을 빌드하기 위한 미리 빌드된 함수, 워크플로에서 맵을 사용하기 전에 수동으로 테스트하는 방법을 제공합니다.
맵을 만든 후 논리 앱 프로젝트의 워크플로 또는 Azure Portal의 표준 논리 앱 워크플로에서 해당 맵을 직접 호출할 수 있습니다. 이 작업의 경우 워크플로에서 데이터 매퍼 XSLT를 사용하여 변환이라는 데이터 매퍼 작업 작업을 사용할 수 있습니다.
이 방법 가이드에서는 빈 데이터 맵을 만들고 원본 및 대상 스키마를 선택하고 스키마 요소 간에 다양한 종류의 매핑을 만들고 맵을 저장 및 테스트한 다음, 논리 앱 프로젝트의 워크플로에서 맵을 호출하는 방법을 보여 줍니다.
제한 사항 및 알려진 문제
데이터 매퍼는 현재 Azure Portal이 아닌 Visual Studio Code에서만 사용할 수 있으며 사용량 논리 앱 프로젝트가 아닌 표준 논리 앱 프로젝트 내에서만 사용할 수 있습니다.
데이터 매퍼에 대한 프런트 엔드 환경은 Azure Logic Apps 팀의 공용 GitHub 리포지토리에서 오픈 소스로 사용할 수 있습니다. 자세한 내용은 다음 리소스를 참조하세요.
데이터 매퍼는 현재 Windows 운영 체제에서 실행되는 Visual Studio Code에서만 작동합니다.
데이터 매퍼는 현재 쉼표로 구분된 값(.csv) 파일 형식을 사용하는 스키마를 지원하지 않습니다.
데이터 매퍼의 코드 창은 현재 읽기 전용입니다.
데이터 매퍼 화면에서 함수의 레이아웃과 위치는 이동 가능하지만 스키마 노드는 정적입니다.
Filter 함수는 큰따옴표로 묶인 숫자 조건(예: ">=10")을 올바르게 처리합니다. 그러나 이 함수는 현재 항목 이름이 "= 'Pen'"인지 여부를 확인하는 것과 같은 문자열 비교에 대해 일관되게 동작하지 않습니다.
원본 및 대상 스키마의 부모 배열 요소 간에 매핑을 만들 때 매퍼는 배열 항목 요소를 반복하는 루프를 자동으로 추가합니다. 그러나 원본 배열 항목 요소와 대상 배열 항목 요소 간에 매핑을 명시적으로 만들어야 합니다.
데이터 매퍼를 사용하여 만든 맵을 호출하려면 데이터 매퍼 XSLT를 사용하여 변환이라는 데이터 매퍼 작업 작업만 사용할 수 있습니다. 다른 도구를 사용하여 만든 맵의 경우 XML 변환이라는 XML 작업 작업을 사용합니다.
Azure Portal에서 워크플로와 함께 데이터 매퍼로 만든 맵을 사용하려면 표준 논리 앱 리소스에 직접 추가해야 합니다.
비차단 버그 또는 기능 요청의 경우 Azure Logic Apps 팀의 GitHub 리포지토리에서 데이터 매퍼 레이블이 있는 항목을 엽니다.
필수 구성 요소
Azure 계정 및 구독 구독이 없는 경우 Azure 체험 계정에 등록합니다.
표준 논리 앱 워크플로를 만들 수 있는 Visual Studio Code 및 Azure Logic Apps(표준) 확장
참고
이전의 별도 데이터 매퍼 확장은 이제 Azure Logic Apps(표준) 확장과 병합됩니다. 충돌을 방지하기 위해 Azure Logic Apps(표준) 확장을 설치하거나 업데이트할 때 기존 버전의 데이터 매퍼 확장이 제거됩니다. 확장이 설치되거나 업데이트되면 Visual Studio Code를 다시 시작하세요.
변환할 데이터 형식을 설명하는 원본 및 대상 스키마 파일. 이러한 파일은 다음 형식 중 하나일 수 있습니다.
.xsd 파일 확장명을 사용하는 XML 스키마 정의 파일
.json 파일 확장명을 사용하는 JavaScript 개체 표기법 파일
최소한 트리거가 있는 상태 저장 또는 상태 비정상 워크플로를 포함하는 표준 논리 앱 프로젝트입니다. 프로젝트가 없는 경우 Visual Studio Code에서 다음 단계를 수행합니다.
아직 연결하지 않은 경우 Azure 계정에 연결합니다.
로컬 폴더, 표준 논리 앱 작업 공간 및 프로젝트, 상태 저장 또는 상태 비저장 워크플로를 만듭니다. 워크플로를 만드는 동안 현재 창에서 열기를 선택합니다.
맵을 테스트하고 변환이 예상대로 작동하는지 확인하려는 경우 입력 데이터를 샘플링합니다.
데이터 맵 만들기
Visual Studio Code에서 표준 논리 앱 프로젝트의 폴더를 엽니다.
Visual Studio Code의 왼쪽 메뉴에서 Azure 아이콘을 선택합니다.
Azure 창의 데이터 매퍼 아래에서 데이터 맵 만들기를 선택합니다.
Visual Studio Code 제목 표시줄에서 지도의 이름을 제공할 수 있도록 프롬프트 상자가 열립니다.
프롬프트 상자에 지도의 이름을 입력합니다.
이 가이드의 경우 이러한 단계에서는 Example-data-map이라는 이름을 사용합니다.
데이터 매퍼는 빈 데이터 맵을 만들고 엽니다.
다음 단계에 따라 원본과 대상 스키마를 선택합니다.
원본 창에서 새로 추가>찾아보기를 선택하여 원본 스키마를 찾아 업로드합니다.
원본 스키마를 추가한 후 원본 창은 원본 스키마의 데이터 형식에 대한 XML 요소 "노드"로 채워집니다. 예를 들면 다음과 같습니다.
대상 창에서 새로 추가>찾아보기를 선택하여 대상 스키마를 찾아 업로드합니다.
대상 스키마를 추가한 후 대상 창은 대상 스키마 의 데이터 형식에 대한 XML 요소 "노드"로 채워집니다. 예를 들면 다음과 같습니다.
팁
스키마를 로드하는 데 문제가 발생하는 경우 논리 앱 프로젝트의 로컬 아티팩트/ 스키마 폴더에 원본 및 대상스키마 파일을 추가할 수 있습니다. 이 시나리오에서는 데이터 매퍼에서 원본 및 대상 스키마를 지정하려면 원본 및 대상 창에서 새로 추가 대신에 기존에서 선택 목록을 열고 스키마를 선택합니다.
스키마 데이터 형식
다음 표에서는 스키마에 나타날 수 있는 가능한 데이터 형식을 설명합니다.
| 기호 | Type | 추가 정보 |
|---|---|---|
|
|
복합(배열) | 항목 또는 반복 항목 노드를 포함합니다. 배열 요소에는 다음 연결점도 표시됩니다.
|
|
|
Bool | 참 또는 거짓만 |
|
|
Complex | Object JSON 형식과 비슷한 자식 속성이 있는 XML 개체 |
|
|
날짜/시간 | |
|
|
Decimal | |
|
|
정수 | 정수만 |
|
|
String |
요소 간 직접 매핑 만들기
원본 스키마와 대상 스키마에서 형식이 동일한 요소 간에 간단한 변환을 지정하려면 다음 단계를 수행합니다.
매핑을 만드는 동안 코드에서 발생하는 작업을 보려면 매퍼의 오른쪽 위 모서리에서 코드 보기를 선택합니다.
매퍼 화면의 원본 창에서 매핑할 원본 요소를 찾습니다.
기본적으로 부모 요소는 자동으로 확장되어 자식을 표시합니다.
이 예제에서는 원본 요소에서 매핑을 시작하지만 대상 요소에서 매핑을 시작하도록 선택할 수 있습니다.
포인터가 더하기 기호(+)로 변경될 때까지 원본 요소 이름 옆의 원 위로 마우스 포인터를 이동합니다.
이 예제에서는 직원 ID 원본 요소에서 시작하는 매핑을 만듭니다.
원본 요소가 대상 창의 대상 요소 에 대한 원에 연결되도록 선을 끌어서 그립니다.
다음은 원본 요소와 데이터 형식이 같은 ID 대상 요소와의 매핑을 완료하는 예제입니다.
이제 데이터 형식이 동일한 두 요소 간에 직접 매핑을 만들었습니다.
코드 창에는 사용자가 만든 매핑 관계가 표시됩니다.
팁
매핑에 문제가 있는지 확인하려면 문제 보기를 선택합니다. 예를 들어 데이터 형식이 일치하지 않는 요소 간에 매핑을 만들면 경고 탭의 문제 목록에 경고가 표시됩니다.
복잡한 요소 간 매핑 만들기
원본 스키마와 대상 스키마의 요소 간에 보다 복잡한 변환을 지정하려면(예: 다른 데이터 형식을 결합하거나 사용하려는 요소) 매핑에서 원하는 변환을 수행하는 하나 이상의 함수를 사용할 수 있습니다.
매퍼 화면에서 함수 레이블은 함수 그룹에 따라 색으로 구분됩니다. 함수 이름 옆에 함수의 기호가 나타납니다. 예를 들면 다음과 같습니다.
다음 표에서는 사용할 수 있는 함수 그룹 및 몇 가지 예제 함수를 나열합니다. 전체 목록은 데이터 매퍼의 함수 목록을 참조하세요.
| 그룹 | 예제 함수 |
|---|---|
| 컬렉션 | 평균, 개수, 직접 접근, 구분된 값, 필터, 색인, 조인, 최대, 최소, 역순, 정렬, 부분수열, 합계 |
| 변환 | To date, To integer, To number, To string |
| 날짜 및 시간 | 일, 현재 날짜, 현재 시간, 같음 날짜 추가 |
| 논리 비교 | Equal, Exists, Greater, Greater or equal, If, If Else, Is Nil, Is Null, Is Number, Is String, Less, Less or Equal, Logical AND, Logical NOT, Logical OR, Not Equal |
| Math | Absolute, Add, Arctangent, Ceiling, Cosine, Divide, Exponential, Exponential(base 10), Floor, Integer Divide, Log, Log(base 10), Module, Multiply, Power, Round, Sine, Square Root, Subtract, Tangent |
| String | Codepoints to String, Concat, Contains, Ends with, Length, Lowercase, Name, Regular Expression Matches, Regular Expression Replace, Replace, Starts with, String to Codepoints, Substring, Substring after, Substring before, Trim, Trim Left, Trim Right, Uppercase |
| 유틸리티 | 복사, 오류, XPath 실행, DateTime 서식, 서식 번호, XSLT 실행 |
매핑 없이 함수 추가
이 섹션의 예제에서는 원본 요소의 데이터를 대상 요소 형식인 String에서 DateTime으로 변환합니다. 이 예제는 먼저 매핑을 만들지 않고 시작하고 단일 입력을 허용하는 To Date 함수를 사용합니다.
매핑을 만드는 동안 코드에서 발생하는 작업을 보려면 매퍼의 오른쪽 위 모서리에서 코드 보기를 선택합니다.
함수 목록에서 사용하려는 함수를 찾아 선택합니다. 그러면 매퍼 화면에 함수가 추가됩니다. 함수 목록이 축소되면 매퍼의 왼쪽 위 모서리에서 함수 아이콘(
)을 선택합니다.다음은 변환 함수 그룹에 있는 To Date 함수를 선택하는 예제입니다.
참고
맵에 매핑이 없거나 맵에 함수를 추가할 때 매핑이 선택되면 함수가 나타나지만 요소나 다른 함수에 연결되지 않습니다. 예를 들면 다음과 같습니다.
함수를 원본 및 대상 요소에 연결합니다.
소스 요소와 함수의 왼쪽 가장자리에 있는 원 사이의 선을 끌어서 그립니다. 원본 요소 또는 함수에서 시작할 수 있습니다.
함수의 오른쪽 가장자리와 대상 요소 사이에 선을 끌어서 그립니다. 대상 요소 또는 함수에서 시작할 수 있습니다.
코드 창에는 사용자가 만든 매핑 관계가 표시됩니다.
매퍼 화면에서 함수 셰이프를 선택하여 함수 세부 정보를 봅니다.
입력 탭에서 사용할 입력을 확인하거나 편집합니다.
일부 시나리오에서는 원본 및 대상 요소의 즉각적인 쌍을 넘어 변환을 정의해야 합니다. 예를 들어 배열 쌍과 해당 항목 간의 변환을 정의하려면 배열 간에 루프를 만들어야 합니다. 또는 요소의 값이 조건을 충족할 때 작업을 수행하려면 요소 간에 조건을 추가해야 합니다.
여러 입력을 사용하는 함수 추가
이 섹션의 예제에서는 여러 소스 요소를 입력으로 연결하고 단일 출력을 대상 요소에 매핑합니다. 이 예제에서는 여러 입력을 허용하는 Concat 함수를 사용합니다.
매핑을 만드는 동안 코드에서 발생하는 작업을 보려면 매퍼의 오른쪽 위 모서리에서 코드 보기를 선택합니다.
함수 목록에서 사용하려는 함수를 찾아 선택합니다. 그러면 매퍼 화면에 함수가 추가됩니다.
함수 목록이 축소되면 매퍼의 왼쪽 위 모서리에서 함수 아이콘(
)을 선택합니다.다음은 String 함수 그룹에 있는 Concat 함수를 선택하는 예제입니다.
참고
맵에 매핑이 없거나 맵에 함수를 추가할 때 매핑이 선택되면 함수가 나타나지만 요소나 다른 함수에 연결되지 않습니다. 예를 들면 다음과 같습니다.
매퍼 화면에서 함수 셰이프를 선택하여 함수 세부 정보를 봅니다.
입력 탭에서 입력으로 사용할 원본 스키마 요소를 선택합니다.
다음은 FirstName 및 LastName 원본 스키마 요소를 함수 입력으로 선택하는 예제입니다. 매퍼는 원본 요소와 함수 간에 각 매핑을 자동으로 추가합니다.
매핑을 완료하려면 함수의 오른쪽 가장자리와 대상 요소 사이에 선을 끌어서 그립니다. 대상 요소 또는 함수에서 시작할 수 있습니다.
코드 창에는 사용자가 만든 매핑 관계가 표시됩니다.
배열 반복
원본 및 대상 스키마에 배열이 포함된 경우 배열의 항목을 반복하는 루프를 만들 수 있습니다. 이 섹션의 예제에서는 배열 항목 간의 매핑과 함께 직원 원본 배열 및 사람 대상 배열을 통해 루프를 만듭니다.
매핑을 만드는 동안 코드에서 발생하는 작업을 보려면 매퍼의 오른쪽 위 모서리에서 코드 보기를 선택합니다.
매퍼 화면의 원본 및 대상 창에서 매핑할 배열을 찾습니다.
배열 항목 쌍을 드래그하여 선을 그립니다. 원본 창 또는 대상 창에서 시작할 수 있습니다.
다음 예제는 원본 창에서 시작하여 직원 원본 배열 및 사람 대상 배열의 이름 항목을 매핑합니다.
배열 항목의 첫 번째 쌍 매핑을 완료한 후 매퍼는 원본 및 대상 배열 부모 요소 간에 루프를 자동으로 추가합니다. 연결점 유형은 다음과 같습니다.

다음 예제에서는 원본 직원과 대상 사람 부모 배열 간에 자동으로 추가된 루프를 강조 표시합니다.
코드 창에는 사용자가 만든 매핑 및 루프가 표시됩니다.
다른 배열 요소 매핑을 계속합니다. 예를 들면 다음과 같습니다.
작업을 수행하는 조건 평가
조건을 평가하고 조건이 충족되면 작업을 수행하는 매핑을 추가하려고 합니다. 이 시나리오에서는 여러 함수를 사용할 수 있습니다.
다음 예제에서 구매 수량이 20개 항목을 초과하면 매핑은 다음 함수를 사용하여 적용할 할인을 계산합니다.
| 함수 그룹 | 함수 | 이 예제의 용도 |
|---|---|---|
| 비교 | 더 큼 | 구매 수량이 20을 초과하는지 확인합니다. |
| 비교 | If | Greater 함수가 true를 반환하는지 확인합니다. |
| Math | 곱하기 | 조건이 맞으면 항목 가격에 10%로 곱하여 할인을 계산합니다. |
원본 및 대상 창에서 시나리오에서 매핑할 요소를 찾습니다.
이 예제에서는 다음 요소를 사용합니다.
원본 창: ItemPrice 및 ItemQuantity
대상 창: ItemPrice, ItemQuantity, ItemDiscount
Functions 목록에서 사용하려는 함수를 찾아 선택하여 매퍼 화면에 함수를 추가합니다.
함수 목록이 축소되면 매퍼의 왼쪽 위 모서리에서 함수 아이콘(
)을 선택합니다.필요한 경우 더 쉽게 선택할 수 있도록 매퍼 화면에서 함수 셰이프를 이동합니다.
다음은 매퍼 화면에 다음 함수를 추가하는 예제입니다(Greater, If, Multiply).
매핑을 만드는 동안 코드에서 발생하는 작업을 보려면 매퍼의 오른쪽 위 모서리에서 코드 보기를 선택합니다.
시나리오에 필요한 대로 원본 요소, 함수, 대상 요소를 특정 순서대로 연결합니다.
다음은 지정된 순서대로 다음 항목을 연결하여 매핑을 올바르게 만드는 예제입니다.
시작 끝 ItemPrice 원본 요소 ItemPrice 대상 요소 ItemQuantity 원본 요소 셰이프의 왼쪽 가장자리에 있는Greater 함수의 입력입니다. 이 입력은 함수 세부 정보의 값 1 필드에 대한 데이터를 제공합니다. 셰이프의 오른쪽 가장자리에 있는Greater 함수의 출력입니다. 셰이프의 왼쪽 가장자리에 있는 If 함수의 입력입니다. 이 입력은 함수 세부 정보의 조건 필드에 대한 데이터를 제공합니다. ItemPrice 원본 요소 셰이프의 왼쪽 가장자리에 있는 Multiply 함수의 입력입니다. 이 입력은 함수 세부 정보의 Multiplicand 필드에 대한 데이터를 제공합니다. 셰이프의 오른쪽 가장자리에 있는 Multiply 함수의 출력입니다. 셰이프의 왼쪽 가장자리에 있는 If 함수의 입력입니다. 이 입력은 함수 세부 정보의 값 필드에 대한 데이터를 제공합니다. 셰이프의 오른쪽 가장자리에 있는 If 함수의 출력입니다. ItemDiscount 대상 요소 다음 예제에서는 이 시점의 매핑을 보여 줍니다.
다음 함수 세부 정보의 입력 탭에서 다음 값을 확인하거나 제공합니다.
함수 입력 필드 및 값 더 큼 - Value 1: ItemQuantity 원본 요소
- Value 2: 사용자 지정 값으로 20곱하기 - Multiplicand 1: ItemPrice 원본 요소
- Multiplicand 2: 사용자 지정 값으로 .10If - 조건: is-greater-than(ItemQuantity, 20)
- 값: multiply(ItemPrice, .10)완성된 맵의 예는 다음과 같습니다.
코드 창에는 사용자가 만든 매핑이 표시됩니다.
맵 저장
완료되면 맵 도구 모음에서 저장을 선택합니다.
Visual Studio Code는 데이터 맵을 다음 아티팩트로 저장합니다.
- < > 프로젝트 폴더에 있는 데이터 매퍼 파일(your-map-name>.lml)
- < > 프로젝트 폴더에 있는 데이터 맵 파일(your-map-name>.xslt)
팁
아티팩트 수준을 더 자세히 구성하려면 다음 폴더 및 하위 폴더를 사용할 수 있습니다.
- 아티팩트/MapDefinitions
- 아티팩트/스키마
- 아티팩트/DataMapper/확장 기능/함수
- 아티팩트/DataMapper/확장 기능/InlineXslt
맵 테스트
변환이 예상대로 작동하는지 확인하려면 샘플 입력 데이터가 필요합니다.
맵을 테스트하기 전에 맵을 저장하여 현재 <your-map-name>.xslt 파일을 생성합니다.
지도 도구 모음에서 테스트 패널 열기를 선택합니다.
테스트 맵 창에서 샘플 데이터 창에 샘플 입력을 붙여넣고 테스트를 선택합니다.
결과 상자에는 테스트 결과가 표시됩니다.
프로젝트의 워크플로에서 맵 호출
Visual Studio Code 작업 표시줄에서 탐색기(파일 아이콘)를 선택하여 논리 앱 프로젝트 구조를 봅니다.
워크플로 이름이 있는 폴더를 확장합니다. workflow.json 파일의 바로 가기 메뉴에서 디자이너 열기를 선택합니다.
워크플로 디자이너에서 다음과 같은 일반적인 단계를 수행하여 데이터 매퍼 XSLT를 사용하여 변환이라는 이름의 데이터 매퍼 작업 기본 제공 작업을 추가합니다.
디자이너에서 데이터 매퍼 XSLT를 사용하여 변환 작업을 선택합니다.
표시되는 작업 정보 창에서 콘텐츠 값을 지정하고 맵 원본을 LogicApp에 설정된 상태로 둡니다.
지도 이름 목록을 열고 지도(.xslt 파일)를 선택합니다.
Azure Portal에서 동일한 데이터 매퍼 XSLT를 사용하여 변환 작업을 사용하려면 맵을 표준 논리 앱 리소스에 추가해야 합니다.
데이터 맵에서 XSLT 실행
실행 XSLT 함수를 사용하여 데이터 맵(.xslt) 파일 내에서 실행 가능한 XSLT 코드 조각을 실행할 수 있습니다. 이 함수를 사용하면 실제 실행 파일 XSLT가 포함된 데이터 맵 파일을 가져옵니다. 데이터 매퍼(.lml) 파일에는 실행 파일 XSLT(.xslt 또는 .xml) 파일에 대한 참조가 포함되어 있습니다.
이 작업을 완료하려면 다음 단계를 수행합니다.
실행하려는 실행 파일 XSLT 코드 조각이 포함된 새 데이터 맵(.xslt 또는 .xml) 파일을 만듭니다.
XSLT 코드 조각 파일을 다음 프로젝트 폴더로 넣거나 이동합니다.
아티팩트>DataMapper\Extensions>InlineXSLT
참고
Visual Studio Code에서 이 실행 파일 XSLT 파일을 만들거나 저장하면 아티 팩트>맵 프로젝트 폴더에 파일이 자동으로 나타납니다. XSLT 코드 조각 파일을 InlineXslt 폴더로 이동해야 합니다.
XSLT를 실행하려는 위치에서 데이터 맵을 엽니다.
함수 창의 유틸리티 아래에서 XSLT 실행을 선택하여 매퍼 화면에 함수를 추가합니다.
매퍼 화면에서 XSLT 실행을 선택합니다.
파일 드롭다운 목록에서 InlineXSLT 폴더에 추가한 실행 파일 .xslt 파일을 선택합니다. 예를 들면 다음과 같습니다.
XSLT 논리를 적용하려는 대상 노드에 XSLT 실행 함수를 연결합니다. 예를 들면 다음과 같습니다.
XSLT 논리는 대상 노드에만 적용되므로 XSLT 실행 함수를 원본 노드에 연결할 필요가 없습니다.
맵을 테스트하여 예상 결과가 대상 스키마에 표시되는지 확인합니다.
배포의 경우 인라인 실행 파일 XSLT가 있는 결과 데이터 맵만 필요합니다.
중첩된 XML의 액세스 노드
중첩된 XML 노드가 있는 스키마가 있고 다음과 같은 방법으로 이러한 노드를 사용하고 싶다고 가정합니다.
- 특성 또는 중첩된 요소에 액세스합니다.
- 들어오는 데이터의 구조 또는 콘텐츠에 따라 논리를 적용합니다.
이러한 작업을 완료하려면 XPath 실행 함수를 사용합니다.
작업하려는 데이터 맵을 엽니다.
함수 창의 유틸리티 아래에서 XPath 실행을 선택하여 매퍼 화면에 함수를 추가합니다.
매퍼 화면에서 XPath 실행을 선택합니다.
XPATH 식 상자에 원하는 작업을 수행하는 식을 입력합니다.
식 구문에 대한 자세한 내용은 XPath 구문을 참조하세요.
이 예제에서는
//Address테스트 페이로드와 함께 식을 사용합니다.참고
이중 슬래시(
//)는 노드가 있는 위치에 관계없이 선택 영역과 일치하는 현재 노드에서 노드를 선택합니다.XPath 실행 함수를 함수를 실행하려는 대상 노드에 연결합니다.
이 예제에서는 함수를 대상 스키마의 주소 노드에 연결합니다.
참고
노드 이름은 자동으로 큰따옴표(" ")로 묶입니다.
맵을 테스트하여 예상 결과가 대상 스키마에 표시되는지 확인합니다.
이 예제에서는 테스트 페이로드를 사용하고 원본 주소 노드가 Employee 배열에 있고 대상 주소 노드가 Person 배열에 있기 때문에 여러 주소 노드가 있는 결과를 올바르게 생성합니다.
참고
원본 스키마와 대상 스키마의 배열 간에 매핑을 만드는 경우 배열 요소를 반복하기 위해 매퍼 화면에 루프가 자동으로 나타납니다. 그러나 원본 및 대상 배열 요소 간에 매핑을 만들어야 합니다. 배열을 반복하는 방법에 대한 자세한 내용은 배열 반복을 참조하세요.
사용자 지정 XML 함수 만들기
맵에서 재사용 가능한 논리를 정의하려면 다음과 같은 이점을 제공하는 사용자 지정 XML 함수를 만들 수 있습니다.
- 중복을 줄이고 스키마별 변환을 지원합니다.
- 복잡한 논리를 관리 가능한 구성 요소로 래핑합니다.
- 스키마 관련 에지 사례를 처리합니다.
사용자 지정 XML 함수를 만들려면 다음 단계를 수행합니다.
함수의 용도를 설명하는 의미 있는 이름으로 XML(.xml) 파일을 만듭니다.
XML 파일은 함수 정의에 특정 스키마를 사용해야 합니다. 여러 함수가 관련되는 경우 단일 파일을 이러한 함수에 사용할 수 있습니다. 모든 파일 이름을 사용할 수 있지만 의미 있는 파일 이름 또는 범주를 사용하면 함수를 더 쉽게 식별하고, 찾고, 검색할 수 있습니다.
다음 폴더의 논리 앱 프로젝트에 이 XML 파일을 추가합니다.
아티팩트>DataMapper\Extensions>함수
함수를 사용할 데이터 맵을 엽니다.
함수 창의 유틸리티 아래에서 사용자 지정 함수를 선택합니다. 이 함수는 이제 매퍼 화면에 표시됩니다.
매퍼 화면에서 함수를 선택합니다. 함수가 작동하는 데 필요한 입력을 제공합니다.
함수를 필요한 엔드포인트에 연결합니다.
다음 예제에서는 제공된 생년월일의 나이를 반환하는 Age 라는 사용자 지정 함수를 보여줍니다. 이 함수는 Dat_of_Birth 원본 노드 및 기타 대상 노드에 연결합니다. 이 사용자 지정 함수에 대한 정의를 검토하려면 샘플 함수 정의 검토를 참조하세요.
맵을 테스트하여 예상 결과가 대상 스키마에 표시되는지 확인합니다. 예를 들면 다음과 같습니다.
함수 정의에 대한 스키마 검토
XML 파일은 함수 정의에 다음 스키마를 사용해야 합니다. 이름이 있는 "function" 각 XML 요소는 몇 가지 특성이 더 포함된 XSLT 3.0 스타일 함수를 구현합니다. 데이터 매퍼 함수 목록에는 함수 이름, 설명, 매개 변수 이름 및 매개 변수 형식이 포함됩니다.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="customfunctions">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="function">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="param">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="as" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:any minOccurs="0" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="as" type="xs:string" use="required" />
<xs:attribute name="description" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
샘플 함수 정의 검토
다음 SampleFunctions.xml 파일은 다음 함수에 대한 구현을 보여 줍니다.
"age""custom-if-then-else"
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<customfunctions>
<function name="age" as="xs:float" description="Returns the current age.">
<param name="inputDate" as="xs:date"/>
<value-of select="round(days-from-duration(current-date() - xs:date($inputDate)) div 365.25, 1)"/>
</function>
<function name="custom-if-then-else" as="xs:string" description="Evaluates the condition and returns corresponding value.">
<param name="condition" as="xs:boolean"/>
<param name="thenResult" as="xs:anyAtomicType"/>
<param name="elseResult" as="xs:anyAtomicType"/>
<choose>
<when test="$condition">
<value-of select="$thenResult"></value-of>
</when>
<otherwise>
<value-of select="$elseResult"></value-of>
</otherwise>
</choose>
</function>
</customfunctions>