빌딩 블록 > 데이터 모델 확장 > 데이터 모델에 사용자 정의 엔티티 추가
데이터 모델에 사용자 정의 엔티티 추가
데이터 모델에 새 엔티티를 추가하는 작업은 다음과 같이 여러 단계로 수행됩니다.
새 빌딩 블록 작성
새 빌딩 블록을 만들려면 다음 단계를 완료하십시오.
1. 새 프로젝트를 작성합니다. 회사 이름 등 프로젝트에 고유한 접두사를 사용합니다. PTC 접두사는 PTC에서 제공하는 엔티티를 위해 예약되어 있습니다. 이 예에서는 이름이 MyCompany.MyBuildingBlock인 프로젝트를 작성합니다. 이 빌딩 블록에 대해 작성하는 새 사물 템플릿, 사물 또는 기타 엔티티에 대해 새 프로젝트를 엔티티의 일반 정보 페이지에 있는 프로젝트 값으로 추가합니다.
2. 프로젝트에서 새 진입점 사물 템플릿을 작성합니다. 이 예에서는 새 사물 템플릿의 이름을 MyCompany.MyBuildingBlock.EntryPoint_TT로 지정합니다. 사용할 기본 사물 템플릿은 새 빌딩 블록의 유형에 따라 다릅니다.
빌딩 블록이 PTC 빌딩 블록에서 확장되는 경우, PTC 빌딩 블록의 진입점 사물 템플릿을 사용합니다.
빌딩 블록이 추상 빌딩 블록인 경우, PTC.Base.ComponentEntryPoint_TT 사물 템플릿을 사용합니다.
빌딩 블록이 구현 빌딩 블록인 경우, PTC.DefaultConfiguration.EntryPoint_TT
사물 템플릿을 사용합니다.
빌딩 블록이 표준 빌딩 블록인 경우, PTC.Base.ComponentEntryPoint_TT 사물 템플릿을 사용합니다.
빌딩 블록이 사용자 인터페이스 빌딩 블록인 경우, PTC.Base.ComponentEntryPoint_TT 사물 템플릿을 사용합니다.
3. 2단계에서 만든 사물 템플릿을 기본 사물 템플릿으로 사용하는 프로젝트에서 새 사물을 작성합니다. 이 예에서는 새 사물의 이름을 MyCompany.MyBuildingBlock.EntryPoint로 지정합니다.
4. 빌딩 블록이 PTC 빌딩 블록에서 확장되지 않는 경우, 프로젝트에서 새 엔티티를 관리하기 위한 서비스 정의를 저장할 새 사물 형태를 작성합니다. 이 예에서는 새 사물 형태의 이름을 MyCompany.MyBuildingBlock.Managment_TS로 지정합니다. 빌딩 블록이 PTC 빌딩 블록에서 확장되는 경우 이 단계를 건너뜁니다.
5. 빌딩 블록이 PTC 빌딩 블록에서 확장되지 않는 경우, PTC.Base.CommonManager_TT기본 사물 템플릿으로 사용하여 프로젝트에서 새 사물 템플릿을 작성합니다. 이 예에서는 새 사물 템플릿의 이름을 MyCompany.MyBuildingBlock.Manager_TT로 지정합니다. 빌딩 블록이 PTC 빌딩 블록에서 확장되는 경우 이 단계를 건너뜁니다.
6. 빌딩 블록이 PTC 빌딩 블록에서 확장되지 않는 경우, 4단계에서 작성한 사물 형태를 5단계에서 작성한 사물 템플릿의 구현된 형태 필드에 추가합니다. 빌딩 블록이 PTC 빌딩 블록에서 확장되는 경우 이 단계를 건너뜁니다.
7. 5단계에서 작성한 사물 템플릿을 기본 사물 템플릿으로 사용하여 프로젝트에서 새 사물을 작성합니다. 이 예에서는 새 사물의 이름을 MyCompany.MyBuildingBlock.Manager로 지정하고 MyCompany.MyBuildingBlock.Manager_TT기본 사물 템플릿으로 사용합니다.
8. 새 빌딩 블록이 PTC 빌딩 블록에서 확장되는 경우 원래 빌딩 블록에 대한 관리자 사물의 구성을 새 빌딩 블록의 관리자 사물에 추가합니다.
a. 7단계에서 작성한 관리자 사물로 이동합니다. 이 예에서는 MyCompany.MyBuildingBlock.Manager입니다.
b. 구성에서 원래 빌딩 블록의 관리자 사물에 대한 구성 페이지에 있는 것과 동일한 구성을 추가합니다.
9. 사용자 정의 관리자를 등록합니다.
a. PTC.Base.Manager 사물로 이동합니다.
b. 구성 아래에서 DefaultGlobalManagerConfiguration 구성 테이블에 대해 추가를 클릭합니다.
이름MyCompany.MyBuildingBlock.Manager 등 사용자 정의 관리자의 이름을 입력합니다.
에 대해서는 7단계에서 작성된 사용자 정의 관리자 사물을 검색하여 선택합니다.
c. 추가를 클릭하여 사용자 정의 관리자를 구성 테이블에 추가합니다.
d. 저장을 클릭하여 관리자 사물에 업데이트를 저장합니다.
새 엔티티의 데이터 셰이프 생성
새 엔티티의 데이터 셰이프를 생성하려면 다음 단계를 완료하십시오.
1. ThingWorx Composer에서 새 데이터 셰이프를 만듭니다. 새 빌딩 블록에 대한 데이터 셰이프를 프로젝트에 추가합니다. 이 예에서는 데이터 셰이프의 이름을 MyObject로 지정합니다.
2. 필드 정의에서 추가를 클릭하고 데이터 셰이프에 포함할 각 속성에 대한 새 필드 정의를 지정합니다.
a. 해당 필드의 기본 키임 확인란을 선택하여 필드 하나를 기본 키로 지정합니다.
b. 기본 키 필드의 기본 유형LONG으로 설정합니다. 기본 키 필드가 LONG 데이터 유형인 경우, 이 필드의 값은 자동으로 생성되며 값을 증가시키는 논리는 데이터베이스에서 처리됩니다. 다른 기본 유형이 선택된 경우 기본 키 고유성에 대한 논리를 처리해야 합니다.
빌딩 블록 데이터 모델과 정렬하려면 기본 유형LONGUID 필드를 추가하고 기본 키임 확인란을 선택합니다.
3. 저장을 클릭하여 새 데이터 셰이프를 저장합니다.
* 
데이터 셰이프에 대한 데이터베이스 테이블을 작성할 때 데이터베이스 테이블 이름은 모든 접두사를 제외하고 전체가 소문자로 된 데이터 셰이프 이름입니다. 예를 들어, 데이터 셰이프의 이름이 ABC.MyObject인 경우 데이터베이스 테이블 이름은 myobject입니다. 접두사는 데이터베이스 테이블 이름에 포함되지 않기 때문에 ABC.MyObject 또는 PTC.JobOrder.MyObject 등 같은 데이터베이스 테이블 이름을 생성하는 여러 데이터 셰이프 이름은 지원되지 않습니다.
마찬가지로 데이터베이스 테이블의 열 이름은 소문자로 된 데이터 셰이프의 필드 이름입니다. 예를 들어, MyPrimaryLocation이라는 이름의 필드에는 myprimarylocation이라는 열이 생성됩니다. 결과적으로 MyName, myName, myname 등 같은 문자를 포함하지만 대소문자가 다른 필드 이름은 동일한 데이터 셰이프에서 지원되지 않습니다.
새 데이터 셰이프를 포함하도록 데이터베이스 정보 업데이트
새 데이터 셰이프를 포함하도록 데이터베이스 정보를 업데이트합니다. 새 빌딩 블록(MyCompany.MyBuildingBlock.Manager)에 대한 관리자 사물의 GetDBInfo 서비스에 엔티티에 대한 데이터베이스 정보를 추가하여 이 작업을 수행할 수 있습니다.
새 데이터 셰이프에 대한 데이터베이스 정보를 기존 GetDBInfo 서비스에 추가하려면 다음을 수행하십시오.
1. 새 빌딩 블록(MyCompany.MyBuildingBlock.Manager)에 대한 관리자 사물로 이동합니다.
2. 서비스에서 GetDBInfo 서비스로 이동하여 재정의합니다.
3. 기존 데이터 셰이프 엔트리와 마찬가지로 스크립트 편집기에서 새 데이터 셰이프에 대한 엔트리를 배열로 추가합니다. 데이터 셰이프에 대한 다음 데이터베이스 정보를 포함합니다.
dataShapeName - 새 데이터베이스 테이블을 추가할 데이터 셰이프의 이름입니다.
indexedFields - 색인화할 열입니다. 색인화하면 더 빠르게 검색 및 정렬을 할 수 있습니다. 여러 개의 색인화된 필드를 하나의 배열에 정의할 수 있습니다. 배열의 각 요소에는 다음 속성이 포함될 수 있습니다.
name – 열의 이름입니다. 필수 사항입니다.
unique - 열에 고유한 값이 있어야 하는지 여부를 지정합니다.
fieldNames - 열 이름을 포함하는 배열입니다. 열이 하나만 지정된 경우 단일 색인이 생성됩니다. 여러 열이 지정된 경우 복합 색인이 생성됩니다.
* 
fieldnames에 단일 값을 지정하는 대신 열 이름인 단일 값으로 name을 지정하여 단일 색인을 생성할 수 있습니다. namefieldnames가 모두 지정된 경우 name은 무시되고 fieldnames 값을 사용하여 색인이 생성됩니다.
identifier - 데이터베이스의 엔티티 이름입니다. 지정하지 않으면 <table_name>_<column_name>_idx 형식으로 값이 자동으로 생성됩니다. 지정한 경우 값이 지정된 값과 자동으로 생성된 값 모두에 대해 고유해야 합니다. 값의 최대 길이는 데이터베이스에서 식별자에 허용하는 최대 길이입니다.
fields - 일부 추가 사양이 필요한 열입니다. 여러 개의 필드를 하나의 배열에 정의할 수 있습니다. 배열의 각 요소에는 다음 속성이 포함될 수 있습니다.
name – 열의 이름입니다. 필수 사항입니다.
length – 열의 길이입니다(열이 String이고 길이가 데이터베이스 기본 길이가 아니어야 하는 경우).
notNull - 열이 null이 아니어야 하는지 여부를 지정합니다.
defaultValue - 속성의 기본값입니다.
* 
열에 고유한 값이 있어야 하는 경우 fields 배열이 아니라 indexedFields 배열의 unique을 사용하여 지정합니다.
foreignKeys - 새 데이터베이스 테이블에 대한 모든 외래 키 열 정의입니다. 여러 개의 외래 키를 하나의 배열에 정의할 수 있습니다. 배열의 각 요소에는 다음 속성이 포함되어야 합니다.
name - 외래 키가 될 현재 데이터 셰이프의 열 이름입니다.
referenceDataShapeName - 참조된 데이터베이스 테이블의 데이터 셰이프입니다.
referenceFieldName - 참조되는 값을 포함하는 필드 이름입니다.
identifier - 데이터베이스의 엔티티 이름입니다. 지정하지 않으면 <table_name>_<column_name>_fk 형식으로 값이 자동으로 생성됩니다. 지정한 경우 값이 지정된 값과 자동으로 생성된 값 모두에 대해 고유해야 합니다. 값의 최대 길이는 데이터베이스에서 식별자에 허용하는 최대 길이입니다.
onDelete - 참조된 데이터 셰이프의 인스턴스가 삭제될 때 현재 데이터 셰이프의 인스턴스에 대해 수행되는 동작입니다.
deleteReference - 현재 데이터 셰이프의 인스턴스가 삭제될 때 참조된 데이터 셰이프의 인스턴스에 대해 수행되는 동작입니다.
삭제 동작에 대한 자세한 내용은 외래 키를 사용하여 삭제 동작 설정 항목을 참조하십시오.
예를 들어, 새 MyObject 데이터 셰이프에 색인화된 필드가 포함되지 않고 하나의 외래 키가 포함되며 Location 필드 길이를 4000자로 설정하려면 다음을 입력합니다.
{
"dataShapeName": "MyObject",
"indexedFields": [],
"foreignKeys": [{"name":"WorkDefinitionUID", "referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition", "referenceFieldName":"UID"}],
"fields": [
{
"name": "Location",
"length": 4000
}
]
}
4. 완료를 클릭한 다음 저장을 클릭하여 업데이트된 서비스를 저장합니다.
CRUD 서비스 작성
새 데이터 셰이프의 인스턴스를 관리하는 데 필요한 CRUD 서비스를 작성합니다.
1. 빌딩 블록(MyCompany.MyBuildingBlock.Managment_TS)의 관리 사물 형태의 서비스에서 추가를 클릭하여 필요한 서비스를 작성합니다. 빌딩 블록 엔티티에 대한 기존 CRUD 서비스를 모델로 사용합니다.
만들기 서비스:
서비스 이름을 입력합니다. 이 예에서는 AddMyObjects을 입력합니다.
서비스 입력의 경우, MyObjects기본 유형이고 이름이 INFOTABLE인 입력을 추가합니다. 데이터 셰이프에 대해 사용자의 데이터 셰이프를 선택합니다.
서비스 출력의 경우, INFOTABLE을 선택하고 데이터 셰이프를 선택합니다.
스크립트 창에서 다음과 유사한 코드를 입력합니다.
var insertParams = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Insert(insertParams);
삭제 서비스:
서비스 이름을 입력합니다. 이 예에서는 DeleteMyObject을 입력합니다.
서비스 입력의 경우, 기본 유형STRING이고 이름이 UID인 입력을 추가합니다.
서비스 출력의 경우, INFOTABLE을 선택하고 데이터 셰이프를 선택합니다.
스크립트 창에서 다음과 유사한 코드를 입력합니다.
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Delete(params);
업데이트 서비스:
서비스 이름을 입력합니다. 이 예에서는 UpdateMyObjects을 입력합니다.
서비스 입력의 경우, MyObjects기본 유형이고 이름이 INFOTABLE인 입력을 추가합니다. 데이터 셰이프에 대해 사용자의 데이터 셰이프를 선택합니다.
서비스 출력의 경우, INFOTABLE을 선택하고 데이터 셰이프를 선택합니다.
스크립트 창에서 다음과 유사한 코드를 입력합니다.
var params = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Update(params);
이 데이터 셰이프의 개별 인스턴스를 검색하는 서비스:
서비스 이름을 입력합니다. 이 예에서는 GetMyObject을 입력합니다.
서비스 입력의 경우, 기본 유형STRING이고 이름이 UID인 입력을 추가합니다.
서비스 출력의 경우, INFOTABLE을 선택하고 데이터 셰이프를 선택합니다.
스크립트 창에서 다음과 유사한 코드를 입력합니다.
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].GetEntity(params);
이 데이터 셰이프의 여러 인스턴스를 검색하는 서비스이며 선택적으로 filter, offset 및 limit 입력 매개 변수를 포함합니다. 입력 매개 변수를 지정하지 않으면 MyObject의 모든 인스턴스가 반환됩니다.
서비스 이름을 입력합니다. 이 예에서는 GetMyObjects을 입력합니다.
서비스 입력의 경우:
기본 유형JSON이고 이름이 filter인 입력을 추가합니다.
기본 유형INTEGER이고 이름이 offset인 입력을 추가합니다.
기본 유형INTEGER이고 이름이 limit인 입력을 추가합니다.
서비스 출력의 경우, INFOTABLE을 선택하고 데이터 셰이프를 선택합니다.
스크립트 창에서 다음과 유사한 코드를 입력합니다.
var params = {
filter: filter,
dataShapeName: "MyObject",
offset: offset,
limit: limit
};
var result = Things[me.GetDatabaseThingName()].Query(params);
2. 저장을 클릭하여 사물 형태에 새 서비스를 저장합니다.
데이터베이스 정보를 데이터베이스 스키마와 동기화
데이터베이스 정보를 데이터베이스 스키마와 동기화하여 데이터베이스에 새 엔티티를 추가합니다. 자세한 내용은 데이터베이스 정보 및 데이터베이스 스키마 동기화 항목을 참조하십시오.
도움이 되셨나요?