Operator Advisor 사용자 정의 > Operator Advisor 데이터 모델 확장 > Operator Advisor 데이터 모델에 사용자 정의 엔티티 추가
Operator Advisor 데이터 모델에 사용자 정의 엔티티 추가
Operator Advisor 데이터 모델에 새 엔티티를 추가하는 작업은 다음과 같이 여러 단계로 수행됩니다.
새 엔티티의 데이터 셰이프 생성
새 엔티티의 데이터 셰이프를 생성하려면 다음 단계를 완료하십시오.
1. ThingWorx Composer에서 새 데이터 셰이프를 만듭니다. 이 예에서는 데이터 셰이프의 이름을 MyObject로 지정합니다.
2. 필드 정의에서 추가를 클릭하고 데이터 셰이프에 포함할 각 속성에 대한 새 필드 정의를 지정합니다.
a. 해당 필드의 기본 키임 확인란을 선택하여 필드 하나를 기본 키로 지정합니다.
b. 기본 키 필드의 기본 유형LONG으로 설정합니다. 기본 키 필드가 LONG 데이터 유형인 경우, 이 필드의 값은 자동으로 생성되며 값을 증가시키는 논리는 데이터베이스에서 처리됩니다. 다른 기본 유형이 선택된 경우 기본 키 고유성에 대한 논리를 처리해야 합니다.
Operator Advisor 데이터 모델과 정렬하려면 기본 유형LONGUID 필드를 추가하고 기본 키임 확인란을 선택합니다.
3. 저장을 클릭하여 새 데이터 셰이프를 저장합니다.
* 
데이터 셰이프에 대한 데이터베이스 테이블을 작성할 때 데이터베이스 테이블 이름은 모든 접두사를 제외하고 전체가 소문자로 된 데이터 셰이프 이름입니다. 예를 들어, 데이터 셰이프의 이름이 ABC.MyObject인 경우 데이터베이스 테이블 이름은 myobject입니다. 접두사는 데이터베이스 테이블 이름에 포함되지 않기 때문에 ABC.MyObject 또는 PTC.SCA.SCO.MyObject 등 같은 데이터베이스 테이블 이름을 생성하는 여러 데이터 셰이프 이름은 지원되지 않습니다.
마찬가지로 데이터베이스 테이블의 열 이름은 소문자로 된 데이터 셰이프의 필드 이름입니다. 예를 들어, MyPrimaryLocation이라는 이름의 필드에는 myprimarylocation이라는 열이 생성됩니다. 결과적으로 MyName, myName, myname 등 같은 문자를 포함하지만 대소문자가 다른 필드 이름은 동일한 데이터 셰이프에서 지원되지 않습니다.
새 데이터 셰이프를 포함하도록 데이터베이스 정보 업데이트
새 데이터 셰이프를 포함하도록 데이터베이스 정보를 업데이트합니다. 새 엔티티가 논리적으로 속한 데이터 모델 엔티티의 기존 Get<entity>DBInfo 서비스에 데이터베이스 정보를 추가하거나 엔티티에 대한 새 Get<entity>DBInfo 서비스를 작성하여 이 작업을 수행할 수 있습니다. 예를 들어, 새 엔티티가 논리적으로 작업 지시서 데이터베이스 스키마의 일부인 경우 새 데이터 셰이프에 대한 데이터베이스 정보를 GetJobOrderDBInfo 서비스에 추가합니다.
새 엔티티에 사용자 정의 관리자 만들기를 선택하는 경우, 엔티티에 대해 새 Get<entity>DBInfo 서비스를 작성합니다.
기존 서비스에 데이터베이스 정보 추가
새 데이터 셰이프에 대한 데이터베이스 정보를 기존 Get<entity>DBInfo 서비스에 추가하려면 다음을 수행하십시오.
1. 기본 생산 주문 관리자(PTC.SCA.SCO.DefaultProductionOrderManager)로 이동합니다.
2. 서비스에서 엔터티에 대한 Get<entity>DBInfo 서비스를 찾아 재정의합니다. 예를 들어, GetJobOrderDBInfo 서비스 또는 GetWorkDefinitionDBInfo 서비스입니다.
3. 기존 데이터 셰이프 엔트리와 마찬가지로 스크립트 편집기에서 새 데이터 셰이프에 대한 엔트리를 배열로 추가합니다. 데이터 셰이프에 대한 다음 데이터베이스 정보를 포함합니다.
dataShapeName - 새 데이터베이스 테이블을 추가할 데이터 셰이프의 이름입니다.
indexedFields - 색인화할 열입니다. 색인화하면 더 빠르게 검색 및 정렬을 할 수 있습니다. 여러 개의 색인화된 필드를 하나의 배열에 정의할 수 있습니다. 배열의 각 요소에는 다음 속성이 포함될 수 있습니다.
name – (필수) 열의 이름입니다.
unique - 열에 고유한 값이 있어야 하는지 여부를 지정합니다.
identifier - 데이터베이스의 엔티티 이름입니다. 지정하지 않으면 <table_name>_<column_name>_idx 형식으로 값이 자동으로 생성됩니다. 지정한 경우 값이 지정된 값과 자동으로 생성된 값 모두에 대해 고유해야 합니다. 값의 최대 길이는 데이터베이스에서 식별자에 허용하는 최대 길이입니다.
fields - 일부 추가 사양이 필요한 열입니다. 여러 개의 필드를 하나의 배열에 정의할 수 있습니다. 배열의 각 요소에는 다음 속성이 포함될 수 있습니다.
name – 열의 이름입니다. 필수 사항입니다.
length – 열의 길이입니다(열이 String이고 길이가 데이터베이스 기본 길이가 아니어야 하는 경우).
notNull - 열이 null이 아니어야 하는지 여부를 지정합니다.
* 
열에 고유한 값이 있어야 하는 경우 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. 완료를 클릭한 다음 저장을 클릭하여 업데이트된 서비스를 저장합니다.
데이터베이스 정보를 얻기 위한 새 서비스 작성
데이터 셰이프에 대한 데이터베이스 정보를 얻기 위해 새 서비스를 작성하려면 다음을 수행하십시오.
1. 기본 생산 지시서 관리자(PTC.SCA.SCO.DefaultProductionOrderManager)로 이동하거나, 생성한 경우에는 사용자 정의 관리자로 이동합니다.
2. 서비스에서 추가를 클릭하여 새 서비스를 추가합니다. <엔티티>를 데이터 셰이프 이름으로 대체하여 서비스 이름을 Get<entity>DBInfo로 지정합니다. 예를 들어, GetMyObjectDBInfo입니다.
3. 서비스에 대한 출력 유형을 JSON으로 설정합니다.
4. 기존 Get<entity>DBInfo 서비스 중 하나를 모델로 사용하여 데이터 셰이프에 대한 데이터베이스 정보를 입력합니다. 지정할 데이터베이스 정보는 이전 단원의 단계 c를 참조하십시오.
5. 완료를 클릭한 다음 저장을 클릭하여 새 서비스를 저장합니다.
6. GetDBInfo 서비스를 재정의하고 편집합니다.
7. 스크립트 편집기에서 새 서비스에 대한 엔트리를 추가합니다.
예를 들어, 기본 생산 주문 관리자에서 GetDBInfo 서비스를 무시하는 경우 다음과 유사한 GetMyObjectDBInfo 서비스에 대한 엔트리를 추가합니다.
Array.prototype.push.apply(dbInfo.dbInfo, me.GetMyObjectDBInfo().dbInfo);
예를 들어, 사용자 정의 관리자에서 GetDBInfo 서비스를 무시하는 경우 서비스 코드가 다음과 유사하게 표시되도록 GetMyObjectDBInfo 서비스에 대한 엔트리를 추가합니다.
var dbInfo = {
dbInfo: []
};
Array.prototype.push.apply(dbInfo.dbInfo, me.GetMyObjectDBInfo().dbInfo);
var result = dbInfo;
8. 완료를 클릭한 다음 저장을 클릭하여 업데이트된 서비스를 저장합니다.
CRUD 서비스 작성
새 데이터 셰이프의 인스턴스를 관리하는 데 필요한 CRUD 서비스를 작성합니다.
1. 기본 생산 지시서 관리자(PTC.SCA.SCO.DefaultProductionOrderManager)로 이동하거나, 생성한 경우에는 사용자 정의 관리자로 이동합니다.
2. 서비스에서 추가를 클릭하고 필요한 서비스를 생성합니다. Operator Advisor 엔티티에 대한 기존 CRUD 서비스를 모델로 사용합니다.
만들기 서비스:
서비스 이름을 입력합니다. 이 예에서는 CreateMyObjects을 입력합니다.
서비스 입력의 경우, 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);
3. 저장을 클릭하여 새 서비스를 기본 생산 주문 관리자(PTC.SCA.SCO.DefaultProductionOrderManager)에 저장합니다.
4. 구성 아래에서 새 데이터 셰이프 및 새 작성 서비스에 대한 엔트리를 ServiceConfigurationSettings 테이블에 추가합니다. 이렇게 하면 데이터를 Operator Advisor로 가져올 때 작성 서비스를 사용하여 새 데이터 셰이프의 인스턴스를 작성할 수 있습니다. 각 데이터 셰이프는 이 구성 테이블에서 한 번만 지정해야 합니다.
자세한 내용은 다른 시스템에서 데이터 가져오기 항목을 참조하십시오.
데이터베이스 정보를 데이터베이스 스키마와 동기화
데이터베이스 정보를 데이터베이스 스키마와 동기화하여 데이터베이스에 새 엔티티를 추가합니다. 자세한 내용은 데이터베이스 정보 및 데이터베이스 스키마 동기화 항목을 참조하십시오.