Operator Advisor 데이터 모델에 사용자 정의 엔티티 추가
Operator Advisor 데이터 모델에 새 엔티티를 추가하는 작업은 다음과 같이 여러 단계로 수행됩니다.
새 엔티티의 데이터 셰이프 생성
새 엔티티의 데이터 셰이프를 생성하려면 다음 단계를 완료하십시오.
1. ThingWorx Composer에서 새 데이터 셰이프를 만듭니다. 이 예에서는 데이터 셰이프의 이름을 MyObject로 지정합니다.
2. 필드 정의에서 추가를 클릭하고 데이터 셰이프에 포함할 각 속성에 대한 새 필드 정의를 지정합니다.
a. 해당 필드의 기본 키임 확인란을 선택하여 필드 하나를 기본 키로 지정합니다.
b. 기본 키 필드의 기본 유형을 LONG으로 설정합니다. 기본 키 필드가 LONG 데이터 유형인 경우, 이 필드의 값은 자동으로 생성되며 값을 증가시키는 논리는 데이터베이스에서 처리됩니다. 다른 기본 유형이 선택된 경우 기본 키 고유성에 대한 논리를 처리해야 합니다.
Operator Advisor 데이터 모델과 정렬하려면 기본 유형이 LONG인 UID 필드를 추가하고 기본 키임 확인란을 선택합니다.
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. 완료를 클릭한 다음 저장을 클릭하여 업데이트된 서비스를 저장합니다.
데이터베이스 정보를 얻기 위한 새 서비스 작성
데이터 셰이프에 대한 데이터베이스 정보를 얻기 위해 새 서비스를 작성하려면 다음을 수행하십시오.
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 서비스를 작성합니다.
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로 가져올 때 작성 서비스를 사용하여 새 데이터 셰이프의 인스턴스를 작성할 수 있습니다. 각 데이터 셰이프는 이 구성 테이블에서 한 번만 지정해야 합니다.
데이터베이스 정보를 데이터베이스 스키마와 동기화