1. 현재 상황 및 제한 사항
통합하는 Mendix 외부 세계와 연결된 응용 프로그램을 사용하면 XML 문서를 가져와서 생성할 수 있습니다. Mendix 문서에 포함된 정보를 기반으로 하는 객체. 이를 위해서는 두 가지가 필요합니다. 첫째, XML 데이터가 어떻게 보일 수 있는지 설명하는 XML 스키마 문서(XSD 파일)로, 그 안에 설명된 객체를 인식할 수 있습니다. 둘째, 이러한 XML 객체를 Mendix 객체가 필요합니다. Mendix 플랫폼은 XML-to-Domain 매핑 문서에서 이 변환을 설명하며 해당 문서가 이 문서의 주요 주제입니다. 이 문서에서 사용자는 다음을 구성해야 합니다.
- 뭐 Mendix 객체를 생성해야 합니다
- 이러한 객체가 서로 어떻게 연관되어야 하는지
- 이러한 엔터티의 속성을 채워야 하는 방법
마지막으로, 사용자가 이 문서를 구성하는 데 도움이 되도록 다음 기능이 있습니다. Mendix XML 스키마에 정의된 요소를 기반으로 엔터티를 자동으로 생성합니다.
위에서 설명한 상황의 구현에 있어서 주요 제한 사항은 버전 5.14에서 해결되었으며 이 문서에서 논의됩니다. 이러한 제한 사항은 다음과 같습니다.
- 선택에 대한 대안은 선택을 참조하는 엔터티에 대한 별도의 연결로 간주됩니다.
- choice 요소의 다중성이 손실되었습니다(XML 스키마가 목록을 정의한 경우에도 모든 다른 choice 옵션의 다중성은 1이었습니다)
- 매핑이 투명하지 않아 선택 요소가 명확하게 표시되지 않았습니다.
- 매핑을 위해 엔터티를 자동으로 생성할 때 기존 엔터티는 재사용되지 않습니다.
이 기사의 나머지 부분에서는 위의 문제가 어떻게 해결되었는지 설명합니다. 따라서 다음을 대상으로 합니다. Mendix 일반적으로 XML-to-Domain 매핑을 사용하는 개발자와 특히 choice 요소가 있는 XML 스키마 문서를 사용하는 사람들에게 적합합니다. 먼저 2절에서 새로운 기능을 설명하기 위해 choice 요소가 있는 XML 스키마의 명시적 예를 소개합니다. 그런 다음 3절에서 예제를 실제로 실행하여 제한 사항을 설명합니다. Mendix 버전 5.14 이전의 플랫폼. 그런 다음 섹션 4에서 동일한 예를 사용하여 버전 5.14에서 이것이 어떻게 수정되었는지 설명합니다. 마지막으로 섹션 5에서 마이크로플로에서 새로운 XML-도메인 매핑의 더 풍부한 유형 정보를 사용하여 변경 사항의 가치를 추가로 설명합니다.
2. 우리의 예: 사람들
우리는 다음의 XML 스키마를 고려합니다.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="https://www.w3.org/2001/XMLSchema" >
<xs:complexType name="employee">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="salary" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="customer">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="company" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="persons">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="employee" type="employee"/>
<xs:element name="customer" type="customer"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
이 스키마는 요소 "persons"를 정의합니다. 여기에는 각 "person"을 반영하는 선택 요소 목록이 포함됩니다(minOccurs="0" maxOccurs="unbounded"). 이 목록의 각 항목은 "employee" 또는 "customer"(둘 다는 아님)입니다.
이는 유효한 XML 메시지의 예입니다.
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<employee>
<firstname>Piet </firstname>
<lastname>Pieters</lastname>
<salary>5</salary>
</employee>
<customer>
<firstname>Customer</firstname>
<lastname>Klant</lastname>
<company>Company</company>
</customer>
<employee>
<firstname>Other</firstname>
<lastname>Guy</lastname>
<salary>50</salary>
</employee>
</persons>
여기 사람 목록에는 직원, 고객, 다른 직원 등 3개 항목이 있습니다.
3. 현재 상황에서의 인물의 예
이 섹션에서는 현재 상황에서 이 XML 스키마를 기반으로 XML-to-Domain 매핑을 만드는 방법을 보여줍니다. 먼저 새 XML 스키마 문서를 만들고 섹션 2에서 정의한 XML 스키마를 선택합니다. 그런 다음 새 XML-to-Domain 매핑을 만들고 "요소 선택"을 클릭한 다음 결과 팝업에서 방금 만든 XML 스키마를 스키마 소스로 선택합니다.1. 결과 화면은 그림 1에 표시됩니다. 이 그림에서 선택 요소가 스키마 요소 트리에 표시되지 않고 따라서 0-* 다중성도 누락된 것을 확인할 수 있습니다.

그림 1. 버전 5.14 이전의 XML-도메인 매핑에 포함할 XSD 요소 선택
모든 요소를 선택하고 확인을 클릭하면 매핑의 왼쪽이 채워집니다. 그 후에 "매핑 생성"을 클릭하면 연관된 엔터티, 속성 및 연결이 생성되고(도메인 모델에서 그림 2 참조) XML-도메인 매핑의 오른쪽에 채워집니다. 결과는 그림 3에 나와 있습니다. 이 그림에서 왼쪽에 선택 옵션이 실제로 누락된 것을 볼 수 있습니다. 이것의 주요 결과는 person이 XML 스키마 문서의 정의에서 예상할 수 있듯이 직원과 고객(함께 혼합됨)이 모두 채워진 목록과 하나의 연결을 갖지 않고 직원과 고객에 대한 두 개의 1:1 연결을 갖는다는 것입니다. 이것은 본질적으로 다른 것이며 따라서 첫 번째 연결만 실제로 매핑되기 때문에 고객/직원 목록을 가져오면 데이터 손실로 이어질 수 있습니다. Mendix 개체. 이것은 버전 5.14에서 해결되었습니다. Mendix 다음 섹션에서 설명할 플랫폼입니다.

그림 2. 버전 5.14 이전의 persons 예제에 대한 자동 생성된 도메인 모델

그림 3. 버전 5.14 이전의 persons 예제에서 XML-도메인 매핑에서 매핑 구성
4. 그 사람의 예를 새로운 상황으로 전환하기
이 섹션에서는 이전 섹션에서 설명한 상황이 어떻게 해결되었는지 보여줍니다. 이전 상황부터 시작하여 프로젝트를 변환하는 데 필요한 단계를 설명하고 결과 변경 사항을 반영하여 이를 수행합니다. 이는 사람들이 업그레이드하기 쉽도록 하기 위한 것입니다. 물론 새 상황에서 새 프로젝트를 처음부터 시작하는 것은 완벽하게 가능합니다. 이를 위해 섹션 3에서 설명한 것과 동일한 단계를 따르고 이 섹션에 설명된 추가 단계로 이를 확장하기만 하면 됩니다.
버전 3의 섹션 5.14에서 생성한 프로젝트를 열면 Mendix 플랫폼 수동 단계는 프로젝트를 변환하는 데 필요합니다. 오류 창에 다음 오류 메시지가 나타납니다. "매핑 요소는 선택 사항입니다. 스키마 요소를 다시 선택하고 선택 요소를 포함하세요"메시지를 두 번 클릭하면 XML-to-Domain 문서가 열리고 관련 요소가 선택됩니다(그림 4 참조).

그림 4. 프로젝트를 변환하기 위해 수동 단계가 필요한 변환 후
메시지에 설명된 대로 일관성 오류를 해결하려면 스키마 요소를 다시 선택해야 합니다. 이를 수행하려면 다음을 클릭하세요. “요소 선택…” 그림 5에 나타난 대화 상자가 나타납니다.

그림 5. 변환 후 스키마 요소 다시 선택
스키마 요소 트리에서 이제 XML 선택 요소에 대한 명시적 요소가 있음을 알 수 있습니다. "(선택)". 이 요소의 다중성이 0..*로 올바르게 설정되어 있는지 확인하십시오. 이 창을 열면 선택 요소가 자동으로 선택되었으므로 확인을 클릭하여 설정을 저장하고 매핑 구성을 계속하십시오.
그림 6에서 볼 수 있듯이, "(선택)" 매핑 요소가 가져오기 매핑 문서에 삽입되었습니다. 이 추가 매핑 요소의 의미는 다음과 같습니다. 선택에 대한 모든 대안(이 경우 직원과 고객)은 무언가에 대한 대안이므로 공통점이 있어야 합니다. 이 경우 공통점은 둘 다 사람이라는 것입니다. 따라서 새로운 상황에서 선택의 모든 대안은 보다 일반적인 엔터티(사람)에서 상속해야 하며 해당 엔터티를 매핑으로 끌어와야 합니다. 이것의 의미를 실제로 파악하는 것이 중요합니다. 예를 들어, 사람 엔터티에는 사람 유형의 목록이 있고 직원과 고객은 목록에 나타날 수 있는 특정 유형의 사람이라는 것을 의미합니다.
그림 6에는 일관성 오류가 XNUMX개 있습니다. 처음 두 개는 직원과 고객에 대한 올바른 일반화 엔터티를 선택하여 해결합니다. 아래 두 개는 원래 상황(명시적 선택 요소 없음)에서 선택 대안 자체(직원과 고객)가 매핑의 사람과 연관되어 있다는 사실과 관련이 있습니다. 이는 선택 요소에서 구성해야 하므로 더 이상 허용되지 않습니다. 이를 해결하려면 직원과 고객을 두 번 클릭하면 연관이 제거된다는 메시지가 나타납니다. 확인을 클릭하여 확인합니다.

그림 6. 새(선택) 요소를 선택한 후의 XML-도메인 매핑 문서
첫 번째 두 가지 일관성 오류를 해결하려면 직원과 고객에 대한 일반화 클래스를 수동으로 만들고 매핑 문서에서 이를 선택하면 됩니다. 다른 방법으로는 "자동으로 매핑" 버튼을 사용하여 이를 대신 수행할 수 있습니다. 이 버튼을 클릭하면 그림 7에 표시된 메시지가 표시되어 수행된 작업을 설명합니다.

그림 7. 매핑, 엔터티, 연결 및 속성을 자동으로 생성할 때의 변경 사항 개요
여기서 매핑의 대부분 엔터티와 연관이 이전 상황에서 유지된 것을 볼 수 있습니다. choice 요소의 경우 ChoiceBase라는 클래스가 생성되었고, employee와 customer가 이 클래스의 특수화가 되었으며 ChoiceBase가 persons 엔터티와 연관되었습니다. 이는 “자동으로 지도를 만듭니다..” 이전 버전에서는 이 함수를 실행할 때마다 모든 엔터티, 속성 및 연결을 다시 생성했기 때문에 이 함수는 엔터티, 속성 및 연결을 생성하지 않았습니다. 그 결과 더 이상 필요 없는 엔터티로 채워진 도메인 모델이 계속 커졌습니다.
결과 도메인 모델은 그림 8에 나와 있습니다.

그림 8. persons 예제에 대한 자동 생성된 도메인 모델
이 자동 생성된 모델을 개선할 수 있다는 점에 유의하세요. 첫째, ChoiceBase는 매우 일반적인 용어이며 실제로 우리 자신의 도메인 모델을 이해하고 있기 때문에 더 구체적으로 만들 수 있습니다. 예를 들어 엔터티의 이름을 다음과 같이 바꿀 수 있습니다. "사람". 그렇게 하면 이름을 바꾸는 것도 좋은 생각입니다. “ChoiceBase_persons” 협회. 이어서 우리는 다음을 이동할 수 있습니다. “이름” "성" 직원 및 고객 엔터티에서 이 Person 엔터티로 속성을 전달하는 이유는 두 전문 분야 모두에 이러한 속성이 포함되어 있기 때문입니다. 마지막으로, 직원과 사람, 고객과 사람 간의 연결을 제거할 수 있습니다. 이는 Person 엔터티가 도입되면서 더 이상 필요하지 않기 때문입니다. 이는 Person 엔터티에서 사람과의 연결을 상속하기 때문입니다. 이러한 모든 변경을 한 후 도메인 모델은 그림 9에 표시된 것과 같습니다.

그림 9. persons 예제에 대한 자동 생성된 도메인 모델의 수동 개선
이러한 변경을 한 후 XML-도메인 매핑에 대한 네 가지 새로운 일관성 오류가 있음을 알게 되었습니다. 이러한 일관성 오류는 우리가 다음을 이동했기 때문에 존재합니다. “이름” "성" 전문화 엔터티(직원 및 고객)에서 일반화(사람)로 속성을 매핑해야 하며 이를 수동으로 다시 매핑해야 합니다. 이를 위해 XML-도메인 매핑으로 이동하여 고객과 직원을 모두 두 번 클릭하고 속성을 수동으로 매핑하거나 "이름으로 속성 매핑" 버튼을 클릭합니다. 이렇게 하면 모든 일관성 오류가 해결되고 XML-도메인 매핑 문서는 그림 10에 표시된 것과 같습니다.

그림 10. persons 예제에 대한 XML-도메인 매핑 문서의 최종 버전
5. 새로운 XML-to-Domain 매핑 사용
이전 섹션에서 choice 요소가 있는 XML 스키마에 대한 XML-to-Domain 매핑을 만들고 구성하는 방법을 설명했으므로, 이 문서를 마무리하면서 마이크로플로에서 이 매핑을 사용하는 방법에 대한 예를 제공합니다. 이 예에서는 가져온 XML 파일에 있는 모든 직원의 급여 총액을 계산하는 반면, 급여가 정의되지 않은 고객은 무시합니다.
이를 위해 그림 11에 나와 있는 마이크로플로를 만듭니다. 다음과 같이 합니다. 먼저 Filedocument를 입력 매개변수로 선택합니다. 그런 다음 다음을 드래그합니다. “XML 문서 가져오기” 작업에서 Filedocument를 입력으로 선택하고, 정의된 XML-to-Domain 매핑을 매핑으로 선택하고, 출력을 persons 변수에 저장하도록 선택합니다. 이어서, personList를 검색하는 검색 작업을 끌어옵니다. “사람_사람” persons 변수의 연관. 그 후에 모든 급여의 합계를 저장하는 변수를 만들고 0으로 초기화합니다. 그런 다음 personList의 모든 항목을 반복하고 항목이 Person의 특정 하위 유형인지에 따라 다른 작업을 수행합니다(상속 분할 사용). Person이 직원인 경우 직원으로 캐스팅하고 급여를 합계에 추가합니다. Person이 고객인 경우 대신 무시합니다. 모든 항목을 반복한 후 모든 급여의 합계를 로그에 기록합니다.
그림 11. XML-to-Domain 매핑을 사용하여 XML 파일에 있는 모든 고객의 급여를 합산하는 마이크로플로우
감사의 글
이 기사는 Pieter van Balen과 Kevin Dullemond가 공동 집필했습니다.