데이터 모델 엔티티에 사용자 정의 속성 추가
빌딩 블록 데이터 모델의 많은 엔티티에는 사용자 정의 속성을 추가하기 위한 관련 _AP 데이터 셰이프가 있습니다. 예를 들어, 작업 지시서 데이터 셰이프(PTC.JobOrder.JobOrder)에는 연관된 PTC.JobOrder.JobOrder_AP 데이터 셰이프가 있습니다. 이 예에서는 PTC.JobOrder.JobOrder_AP 데이터 셰이프에 새 City 속성을 추가합니다.
데이터 모델에 사용자 정의 속성을 추가하는 작업은 다음과 같이 여러 단계로 수행됩니다.
서비스를 사용하여 새 사용자 정의 속성을 프로그래밍 방식으로 채우는 방법을 보여주는 예는
사용자 정의 속성 채우기를 참조하십시오.
데이터 셰이프에 필드 추가
1. ThingWorx Composer에서 엔티티의 _AP 데이터 셰이프로 이동합니다. 이 예에서는 PTC.JobOrder.JobOrder_AP로 이동합니다.
2. 필드 정의에서 추가를 클릭합니다.
3. 새 필드 정의 창에서 다음을 지정합니다.
◦ 이름 - 속성의 이름입니다. 이 예에서는 City을 입력합니다. 새 이름은 원래 데이터 셰이프의 필드 이름과 일치할 수 없습니다.
◦ 기본 유형 - 속성에 대한 데이터 유형입니다. 이 예에서는 STRING을 선택합니다. 다음과 같은 데이터 유형이 지원됩니다.
▪ STRING
▪ NUMBER
▪ INTEGER
▪ BOOLEAN
▪ LONG
▪ TEXT
▪ DATETIME
▪ THINGNAME
▪ THINGSHAPENAME
▪ THINGTEMPLATENAME
▪ USERNAME
▪ SCHEDULE
▪ IMAGELINK
|
데이터베이스 테이블의 열 이름은 소문자로 된 데이터 셰이프의 필드 이름입니다. 예를 들어, MyPrimaryCity이라는 이름의 필드에는 myprimarycity이라는 열이 생성됩니다. 결과적으로 MyName, myName, myname 등 같은 문자를 포함하지만 대소문자가 다른 필드 이름은 동일한 데이터 셰이프에서 지원되지 않습니다.
|
4. 을 클릭하여 새 필드 정의를 추가합니다.
5. 저장을 클릭하여 데이터 셰이프에 대한 업데이트를 저장합니다.
데이터베이스 정보를 데이터베이스 제약 조건으로 업데이트합니다.
새 속성에 데이터베이스 제약 조건이 필요한 경우 다음 단계를 완료하십시오.
1. 새 속성을 추가할 엔티티의 관리자로 이동합니다. 이 예에서는 PTC.JobOrderImpl.Manager 사물로 이동합니다.
2. 사용자 정의할 수 있는 해당 관리자 사물의 복사본을 생성합니다. 이 예에서는 중복된 관리자 사물의 이름을
MyCompany.MyJobOrderImpl.Manager로 지정합니다. 중복된 관리자 사물에 대한
프로젝트 값의 경우, 사용자가 작성한 빌딩 블록에 대해 프로젝트를 사용합니다. 이 예에서는
MyCompany.MyJobOrderImpl이라는 프로젝트가 있는
PTC.JobOrderImpl 빌딩 블록을 기반으로 한 빌딩 블록을 사용합니다. 자세한 내용은
새 빌딩 블록 작성를 참조하십시오.
3. 중복된 관리자를 등록합니다.
a. PTC.Base.Manager 사물로 이동합니다.
b. 구성에서 DefaultGlobalManagerConfiguration 구성 테이블의 해당 관리자 행을 편집하고 managerThingName 값을 2단계에서 생성한 새로운 중복된 관리자 값으로 설정합니다. 이 예에서는 PTC.JobOrder.Manager의 행을 업데이트하여 MyCompany.MyJobOrderImpl.Manager를 managerThingName으로 설정합니다.
c. 저장을 클릭하여 변경 내용을 관리자 사물에 저장합니다.
4. 2단계에서 생성한 중복된 관리자 사물로 이동합니다. 이 예에서는 MyCompany.MyJobOrderImpl.Manager로 이동합니다.
5. 서비스에서 GetDBInfo 서비스를 찾아 재정의합니다.
6. 스크립트 편집기에서 속성을 추가한 데이터 셰이프의 엔트리로 스크롤합니다. 이 예에서는 다음 엔트리를 찾아보십시오.
"dataShapeName": "PTC.JobOrder.JobOrder_AP",
"indexedFields": []
7. 새 속성에 대한 데이터베이스 정보를 사용하여 데이터 셰이프에 대한 엔트리를 업데이트합니다.
◦ 속성을 색인화하려면 다음 속성을 사용하여 데이터 셰이프의 indexedFields 배열에 속성을 추가합니다.
▪ name – 열의 이름입니다. 필수 사항입니다.
▪ unique - 속성에 고유한 값이 있어야 하는지 여부를 지정합니다.
▪ fieldNames - 열 이름을 포함하는 배열입니다. 열이 하나만 지정된 경우 단일 색인이 생성됩니다. 여러 열이 지정된 경우 복합 색인이 생성됩니다.
| fieldnames에 단일 값을 지정하는 대신 열 이름인 단일 값으로 name을 지정하여 단일 색인을 생성할 수 있습니다. name 및 fieldnames가 모두 지정된 경우 name은 무시되고 fieldnames 값을 사용하여 색인이 생성됩니다. |
▪ identifier - 데이터베이스의 엔티티 이름입니다. 지정하지 않으면 시스템에서 <table_name>_<column_name1>_<column_name2>_<column_nameN>_idx 형식으로 값이 자동으로 생성됩니다. 지정한 경우 값이 지정된 값과 자동으로 생성된 값 모두에 대해 고유해야 합니다. 값의 최대 길이는 데이터베이스에서 식별자에 허용하는 최대 길이입니다.
◦ 속성이
외래 키인 경우, 다음 속성을 사용하여 데이터 셰이프에 대해
foreignKeys 배열을 추가합니다.
▪ name - 외래 키가 될 현재 데이터 셰이프의 속성 이름입니다.
▪ referenceDataShapeName - 참조된 데이터베이스 테이블의 데이터 셰이프입니다.
▪ referenceFieldName - 참조되는 값을 포함하는 필드 이름입니다.
▪ onDelete - 참조된 데이터 셰이프의 인스턴스가 삭제될 때 현재 데이터 셰이프의 인스턴스에 대해 수행되는 동작입니다.
▪ deleteReference - 현재 데이터 셰이프의 인스턴스가 삭제될 때 참조된 데이터 셰이프의 인스턴스에 대해 수행되는 동작입니다.
◦ 속성에 대한 추가 데이터베이스 제약 조건을 지정하려면 해당 제약 조건을 fields 배열에 엔트리로 추가합니다.
▪ name - 새 속성의 이름입니다. 필수 사항입니다.
▪ length - 데이터베이스의 기본 열 길이와 다른 경우에 대한 새 속성의 열 길이입니다.
▪ notNull - 속성이 null이 아니어야 하는지 여부를 지정합니다.
▪ defaultValue - 속성의 기본값입니다.
| 데이터베이스 열에 고유한 값이 있어야 하는 경우 fields 배열이 아니라 indexedFields 배열의 unique을 사용하여 지정합니다. |
이 예에서는 City의 열 길이가 4000자이고 null 값을 가질 수 없도록 지정하려면 PTC.JobOrder.JobOrder_AP 데이터 셰이프에 대한 엔트리를 다음과 같이 업데이트합니다.
{
"dataShapeName": "PTC.JobOrder.JobOrder_AP",
"indexedFields": []
"fields": [{
"name": "City",
"length": 4000
"notNull": true
}]
},
8. 저장을 클릭하여 변경 내용을 서비스에 저장합니다.
데이터베이스 정보를 데이터베이스 스키마와 동기화
데이터베이스 정보를 데이터베이스 스키마와 동기화합니다. 자세한 내용은
데이터베이스 정보 및 데이터베이스 스키마 동기화 항목을 참조하십시오.
사용자 정의 속성 채우기
다음 코드는 사용자 정의 속성을 서비스에 포함하여 프로그래밍 방식으로 속성을 채우는 방법을 보여주는 예입니다. 이 코드는 구현 설계 패턴 빌딩 블록의 각 관리자 사물에서 사용 가능한 CreateInfoTable 서비스를 사용하여 PTC.JobOrder.JobOrder 및 PTC.JobOrder.JobOrder_AP 데이터 셰이프를 단일 인포테이블로 병합하고 새 City 속성을 Montreal 값으로 채웁니다.
var jobOrderDataShapeName = "PTC.JobOrder.JobOrder";
var jobOrderManagerThingName = me.GetJobOrderManager();
var jobOrders = Things[jobOrderManagerThingName ].CreateInfoTable({
dataShapeName: jobOrderDataShapeName
});
var jobOrder = {};
jobOrder.ID = "" + 121;
jobOrder.WorkType = 1;
jobOrder.Description = "test";
jobOrder.City = "Montreal";
jobOrders.AddRow(jobOrder);
var newJobOrders = Things[jobOrderManagerThingName ].CreateJobOrders({
JobOrders: jobOrders
});