빌딩 블록 > 데이터 모델 확장 > 데이터 모델 엔티티에 사용자 정의 속성 추가
데이터 모델 엔티티에 사용자 정의 속성 추가
빌딩 블록 데이터 모델의 많은 엔티티에는 사용자 정의 속성을 추가하기 위한 관련 _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.ManagermanagerThingName으로 설정합니다.
c. 저장을 클릭하여 변경 내용을 관리자 사물에 저장합니다.
4. 2단계에서 생성한 중복된 관리자 사물로 이동합니다. 이 예에서는 MyCompany.MyJobOrderImpl.Manager로 이동합니다.
5. 서비스에서 GetDBInfo 서비스를 찾아 재정의합니다.
6. 스크립트 편집기에서 속성을 추가한 데이터 셰이프의 엔트리로 스크롤합니다. 이 예에서는 다음 엔트리를 찾아보십시오.
"dataShapeName": "PTC.JobOrder.JobOrder_AP",
"indexedFields": []
7. 새 속성에 대한 데이터베이스 정보를 사용하여 데이터 셰이프에 대한 엔트리를 업데이트합니다.
속성을 색인화하려면 다음 속성을 사용하여 데이터 셰이프의 indexedFields 배열에 속성을 추가합니다.
name – 열의 이름입니다. 필수 사항입니다.
unique - 속성에 고유한 값이 있어야 하는지 여부를 지정합니다.
fieldNames - 열 이름을 포함하는 배열입니다. 열이 하나만 지정된 경우 단일 색인이 생성됩니다. 여러 열이 지정된 경우 복합 색인이 생성됩니다.
* 
fieldnames에 단일 값을 지정하는 대신 열 이름인 단일 값으로 name을 지정하여 단일 색인을 생성할 수 있습니다. namefieldnames가 모두 지정된 경우 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.JobOrderPTC.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
});
도움이 되셨나요?