일반적인 데이터 선택
데이터로 작업할 때는 데이터를 필터링하거나 변환할 수 있어야 합니다. Mendix에서는 XPath라는 쿼리 언어를 통해 앱의 여러 위치에서 이 작업을 수행할 수 있습니다. XPath 쿼리를 작성할 때 구문을 이해하는 것만으로는 항상 충분하지 않습니다. 쿼리를 실행하는 데 걸리는 시간도 고려해야 합니다. 이를 효과적으로 수행하려면 XPath 쿼리가 기본 데이터베이스가 이해하는 방식으로 어떻게 변환되는지 아는 것이 도움이 됩니다. 그러면 최상의 성능을 발휘하는 쿼리를 작성할 수 있습니다. XPath를 작동하게 하는 기반 기술을 살펴보겠습니다. 이를 위해서는 약간의 이론이 필요합니다. 이는 Mendix와 데이터베이스 전반의 데이터 검색을 더 잘 이해하는 데 도움이 될 것입니다.
모든 Mendix 애플리케이션의 핵심은 도메인 모델입니다. 이것은 관계형 데이터베이스에 대한 추상화입니다. Mendix는 다양한 관계형 데이터베이스를 지원하며, 각 데이터베이스에는 고유한 장단점이 있습니다. 이 모든 것은 Edgar F. Codd가 만든 수학의 한 분야인 관계대수학을 기반으로 합니다. 이 이론은 데이터 작업을 위한 다섯 가지 기본 연산, 즉 선택, 투영, 데카르트 곱, 집합 유니온 , 집합 차이에 대해 설명합니다. 이러한 연산은 관계형 데이터베이스를 위한 사실상의 쿼리 언어인 SQL의 기초를 형성합니다. Mendix는 데이터 저장에 관계형 데이터베이스를 사용하므로 이 이론을 이해하면 최적의 XPath 쿼리를 설계하는 데 도움이 됩니다. 이러한 각 연산을 개별적으로 살펴보겠습니다.
선택 (Selection)
이 연산을 사용하면 엔티티에서 하위 집합을 선택할 수 있습니다.
투영 (Projection)
이 작업을 사용하면 엔티티에서 열의 하위 집합을 선택할 수 있습니다.
데카르트 곱(Cartesian Product)
이 작업은 두 엔티티의 정보를 하나로 결합합니다.
집합 유니온(Set Union)
이 작업은 동일한 엔티티의 두 개체 집합 간에 이진 유니온을 수행합니다.
집합 차이(Set difference)
이 연산은 동일한 엔티티의 두 개체 집합 간의 차이를 반환합니다.
이러한 기본 연산으로 거의 모든 데이터 선택 작업을 수행할 수 있습니다.
이러한 모든 연산은 멘딕스에서도 사용됩니다. XPath를 사용하여 특정 개체 집합을 검색하는 경우 선택을 사용하는 것입니다. 보안을 사용하여 특정 속성에 대한 액세스를 제한하는 경우 투영을 사용하는 것입니다. 연관을 사용할 때마다 데카르트 곱의 개념을 사용합니다. 집합 연산의 개념은 마이크로플로우에서 찾을 수 있습니다.
XPath에서 OQL로
XPath 쿼리가 런타임으로 전송되면 SQL로 직접 번역되지 않고 먼저 OQL(Object Query Language)이라는 중간 언어를 거치게 됩니다. 이 언어는 SQL(구조화된 쿼리 언어)에 더 가깝기 때문에 OQL에서 Microsoft SQL과 같은 SQL로 번역기를 작성하는 것이 더 쉽습니다. 예를 들어 영업 담당자 직함을 가진 모든 사람을 선택하고 그들의 LoginID와 HireDate를 보고 싶다면 다음과 같이 XPath 쿼리를 작성할 수 있습니다:
HumanResources.Employee[JobTitle = 'Sales Representative']
그러면 Mendix는 호출 스키마 정보라는 정보를 추가하여 무엇을 검색할지 결정하는 데 도움을 줍니다. 이 XPath 쿼리에 대한 스키마 정보는 다음과 같습니다:
Schema(LoginID, HireDate)
그런 다음 이 정보를 사용하여 OQL 쿼리를 생성합니다. 아래 쿼리에서 볼 수 있듯이 스키마 정보가 필수 항목이 되는 곳이기도 합니다:
그런 다음 Mendix 애플리케이션에 사용 중인 데이터베이스에 대한 SQL 쿼리로 변환됩니다. 아래 예시를 참조하세요:
현재 사용 가능한 모든 제품 보기
연습할 시간입니다. Mendix사이트의 동일한 강의에 첨부된 프로젝트 패키지를 다운로드하여 Mendix로 가져옵니다. 아직 다운로드하지 않으셨다면, 마켓플레이스에서 Mendix Studio Pro 9.12.4를 다운로드하여 설치하세요. 이 프로젝트 패키지에는 AdventureWorks 회사의 데이터가 포함되어 있습니다.
많은 제품과 많은 데이터를 보유하고 있지만 모든 제품을 쉽게 관리할 수 있는 몇 가지 중요한 페이지가 누락되어 있습니다. 여러분은 이 작업을 쉽게 수행할 수 있도록 필요한 페이지와 XPath를 만들어야 합니다. 첫 번째 작업은 사람들이 현재 판매 가능한 제품을 볼 수 있는 페이지를 추가하는 것입니다. 이를 위해 SellEndDate 속성을 사용합니다.
1. Studio Pro를 열고 프로젝트 패키지를 가져옵니다.
2. Production 모듈을 열고 Production_Overview 페이지를 찾습니다.
3. 사용 가능한 제품 탭에서 목록 보기의 속성을 열고 데이터 소스 탭으로 이동합니다. 이 탭에서 아직 판매되지 않은 모든 제품을 표시하려고 합니다. 이를 위해 이미 판매된 모든 제품을 제외하는 XPath를 생성합니다.
SellEndDate 속성에 날짜가 설정되어 있지 않은 제품에 필터를 추가하려고 합니다. 이는 AdventureWorks가 아직 제품을 판매 중임을 나타냅니다.
4. 다음 XPath를 추가합니다: [SellEndDate != empty].
축하합니다. 이 학습 경로의 첫 번째 XPath 쿼리를 추가했습니다. 다음 연습에서는 조금 더 복잡성을 추가하여 좀 더 깊이 파고들 시간입니다.
위치별 제품 가져오기
어드벤처웍스 직원들은 지금까지의 진행 상황에 만족하고 있으며 탭 컨테이너의 기능에 대해 매우 만족해하고 있습니다. 이들은 생산 모듈에 추가할 수 있는 또 다른 아이디어가 있는데, 바로 제품의 위치에 대한 개요를 표시하는 것입니다. 이 연습에서는 XPath를 사용하여 위치별로 제품을 표시합니다.
1. ProductManagement 폴더에 Inventory_Overview라는 새 페이지를 추가합니다. 템플릿을 마스터 상세로 설정하고 Atlas_TopBar 레이아웃을 사용합니다.
2. 목록 보기와 데이터 보기 모두에서 모든 콘텐츠와 새로 만들기 버튼을 제거하여 아래 스크린샷과 같이 페이지를 조정합니다. 그런 다음 목록 보기의 데이터 소스를 Location 엔티티로 설정하고 데이터 보기의 데이터 소스도 Location 엔티티로 설정합니다. 데이터 보기 내에 Location Name 을 표시합니다.
3. 데이터 뷰에 목록 뷰를 추가하고 데이터 소스를 마이크로 플로우로 설정합니다. DS_Product_GetProductForLocation이라는 이름의 새 마이크로플로우를 만듭니다.
방금 만든 마이크로플로우를 사용하여 특정 위치와 관련된 모든 제품을 검색할 수 있습니다. 데이터 보기에 연결된 위치 개체는 사용할 수 있는 매개변수로 마이크로플로우에 나타납니다.
4. 마이크로플로우에 검색을 추가하고 $Location 매개변수와 관련된 모든 제품을 Production.Product/Production.ProductInventory_Product/Production.ProductInventory/Production.ProductInventory_Location 연결을 통해 검색합니다.
5. 엔드포인트의 반환값을 $ProductList로 설정합니다.
6. Production_Overview 에서 레이아웃 그리드를 복사하여 목록 보기에 붙여넣습니다. 모든 속성 매개변수가 목록 보기의 컨텍스트에 완벽하게 연결됩니다.
이제 AdventureWorks는 각 위치의 모든 제품 목록을 볼 수 있게 되었습니다! 회사 전체에서 특정 품목을 추적하는 데 큰 도움이 될 것입니다. 이 시점에서 무엇을 하면 좋을지 아세요? 여러분의 작업을 살펴보세요. 로컬에서 애플리케이션을 실행하고 애플리케이션이 얼마나 잘 작동하는지 확인하세요!
리뷰가 있는 모든 제품 보기
AdventureWorks 측에서 다른 페이지를 만들어 주기를 원합니다. 검토가 완료된 모든 제품 목록을 표시해 달라는 것입니다.
1. Production_Overview 페이지를 열고 검토된 제품 탭으로 이동합니다.
2. 목록 보기의 데이터 원본이 XPath로 설정되어 있는지 확인하고 다음 XPath 표현식을 추가합니다.