사용자 정의 속성 및 데이터 셰이프 추가
사용자 정의 속성 및 데이터 셰이프 추가
Operator Advisor 데이터 모델을 확장하여 기본으로 제공되지 않은 모델에 비즈니스 관련 데이터를 추가할 수 있습니다. 이 과정은 다음과 같은 방식으로 실행됩니다.
Operator Advisor 엔티티와 연관된 _AP 데이터 셰이프를 업데이트하여 기존 Operator Advisor 엔티티에 사용자 정의 속성 추가.
사용자 정의 데이터 셰이프 및 이를 관리하는 서비스를 작성하여 Operator Advisor에 새 엔티티 추가.
_AP 데이터 셰이프에 사용자 정의 속성 추가
Operator Advisor 데이터 모델의 엔티티 대부분에는 사용자 정의 속성을 추가하기 위한 관련 _AP 데이터 셰이프가 있습니다. 예를 들어, 작업 주문 데이터 셰이프(PTC.SCA.SCO.JobOrder)에는 연관된 PTC.SCA.SCO.JobOrder_AP 데이터 셰이프가 있습니다.
사용자 정의 속성을 Operator Advisor 엔티티에 추가하려면 다음 절차를 따르십시오. 이 예에서는 PTC.SCA.SCO.JobOrder_AP 데이터 셰이프에 새 Location 속성을 추가합니다.
1. ThingWorx Composer에서 엔티티의 _AP 데이터 셰이프로 이동합니다. 이 예에서는 PTC.SCA.SCO.JobOrder_AP로 이동합니다.
2. 필드 정의에서 추가를 클릭합니다.
3. 새 필드 정의 창에서 다음을 지정합니다.
이름 - 속성의 이름입니다. 이 예에서는 Location을 입력합니다.
기본 유형 - 속성에 대한 데이터 유형입니다. 이 예에서는 STRING을 선택합니다.
4. 을 클릭하여 새 필드 정의를 추가합니다.
5. 저장을 클릭하여 데이터 셰이프에 대한 업데이트를 저장합니다.
6. 시스템에 대해 구성된 데이터베이스 사물(예: PTC.SCA.SCO.PostgresDatabase)로 이동합니다.
7. 서비스에서 다음 입력을 사용하여 AddColumn 서비스를 실행합니다.
dataShapeName의 경우 새 필드 정의를 추가한 _AP 데이터 셰이프를 검색하여 선택합니다. 이 예에서는 PTC.SCA.SCO.JobOrder_AP를 검색하고 선택합니다.
fieldName의 경우 새 필드 정의의 이름을 입력합니다. 이 예에서는 Location을 입력합니다.
dbInfo의 경우 다음과 같이 새 열에 대한 데이터베이스 정보를 입력합니다.
name - 새 속성에 대해 데이터베이스에 추가되는 열의 이름입니다. 필수
length - 데이터베이스의 기본 열 길이와 다른 경우 새 열의 열 길이입니다.
unique - 열에 고유한 값이 있어야 하는지 여부를 지정합니다.
notNull - 열이 null이 아니어야 하는지 여부를 지정합니다.
이 예에서는 다음을 입력합니다.
{"name":"Location","length":4000}
다음 코드는 사용자 정의 속성을 서비스에 포함하여 프로그래밍 방식으로 속성을 채우는 방법을 보여주는 예입니다. 이 코드는 CreateInfoTable 서비스를 사용하여 단일 인포테이블에 PTC.SCA.SCO.JobOrderPTC.SCA.SCO.JobOrder_AP 데이터 셰이프를 병합하고 새 Location 속성을 Montreal 값으로 채웁니다.
var jobOrderDataShapeName = "PTC.SCA.SCO.JobOrder";
var productionManagerThingName = Things["PTC.Factory.LaunchPointConfigurationThing"].GetProductionOrderManagerThingName();
var jobOrders = Things[productionManagerThingName ].CreateInfoTable({
dataShapeName: jobOrderDataShapeName
});
var jobOrder = {};
jobOrder.ID = "" + 121;
jobOrder.WorkType = 1;
jobOrder.Description = "test";
jobOrder.Location = "Montreal";
jobOrders.AddRow(jobOrder);

var newJobOrders = Things[productionManagerThingName ].CreateJobOrders({
JobOrders: jobOrders
});
매쉬업에 사용자 정의 속성 포함
다음 단계는 매쉬업에 속성 포함을 사용하는 모범 사례를 제공합니다.
1. _AP 데이터 셰이프에 사용자 정의 속성을 추가하고 이전 단원에서 설명한 대로 AddColumn 서비스를 실행합니다. 이 예에서는 이전 단원에서 PTC.SCA.SCO.JobOrder_AP 데이터 셰이프에 추가된 사용자 정의 Location 속성을 계속 사용합니다.
2. 기본 엔티티 데이터 셰이프와 _AP 데이터 셰이프 모두에서 필드 정의가 포함된 새 데이터 셰이프를 작성합니다.
이 예에서는 MyJobOrder라는 새 데이터 셰이프를 작성합니다. ID(PTC.SCA.SCO.JobOrder 데이터 셰이프에서) 및 Location(PTC.SCA.SCO.JobOrder_AP 데이터 셰이프에서)에 대한 필드 정의를 추가합니다.
3. PTC.SCA.SCO.ProductionOrderUtils 사물로 이동합니다.
4. 서비스에서 새 서비스를 추가하여 2단계에서 생성한 데이터 셰이프의 인스턴스를 생성합니다. 입력 매개 변수와 출력 매개 변수 모두에 대해 새 데이터 셰이프의 인포테이블을 사용합니다.
이 예에서는 입력 및 출력 매개 변수 모두에 대해 MyJobOrder 데이터 셰이프의 인포테이블을 사용하여 이름이 CreateMyJobOrder인 새 서비스를 추가합니다. 서비스 편집기에서 다음과 유사한 코드를 입력합니다.
var productionManagerThingName = Things["PTC.Factory.LaunchPointConfigurationThing"].GetProductionOrderManagerThingName();
var newJobOrders = Things[productionManagerThingName].CreateJobOrders({
JobOrders: myJobOrders
});
//Put new job orders in a new info table of MyJobOrder in order to filter the return attribute, this is not required.
var params = {
infoTableName : "InfoTable",
dataShapeName : "MyJobOrder"
};
var result = Resources["InfoTableFunctions"].CreateInfoTableFromDataShape(params);
var tableLength = newJobOrders.rows.length;
for (var x=0; x < tableLength; x++) {
var row = newJobOrders.rows[x];
result.AddRow(row);
}
5. 매쉬업에서 새 서비스를 사용하면 사용자 정의 속성이 포함된 엔티티의 새 인스턴스가 생성됩니다. 이 예에서 매쉬업의 CreateMyJobOrder 서비스를 사용하면 PTC.SCA.SCO.JobOrder 데이터베이스 테이블에 채워진 ID 속성과 PTC.SCA.SCO.JobOrder_AP 데이터베이스 테이블에 채워진 사용자 정의 Location 속성이 포함된 새 작업 지시서가 작성됩니다.
사용자 정의 데이터 셰이프 추가
Operator Advisor에 새 엔티티를 추가하려면, 데이터 셰이프의 인스턴스를 관리하는 데 필요한 서비스가 있는 엔티티의 새 데이터 셰이프를 작성합니다.
1. ThingWorx Composer에서 새 데이터 셰이프를 만듭니다. 이 예에서는 데이터 셰이프의 이름을 MyObject로 지정합니다.
2. 필드 정의에서 추가를 클릭하고 데이터 셰이프에 포함할 각 속성에 대한 새 필드 정의를 지정합니다.
3. 저장을 클릭하여 새 데이터 셰이프를 저장합니다.
4. 시스템에 대해 구성된 데이터베이스 사물(예: PTC.SCA.SCO.PostgresDatabase)로 이동합니다.
5. 서비스에서 다음 입력을 사용하여 CreateTable 서비스를 실행합니다.
dataShapeName의 경우 1단계에서 작성한 새 데이터 셰이프를 검색하여 선택합니다.
dbInfo의 경우 다음과 같이 데이터 셰이프에 대한 데이터베이스 정보가 포함된 JSON 배열을 입력합니다.
dataShapeName - 새 데이터베이스 테이블을 추가할 데이터 셰이프의 이름입니다.
indexedFields - 색인화할 열입니다. 색인화하면 더 빠르게 검색 및 정렬을 할 수 있습니다. 여러 개의 색인화된 필드를 하나의 배열에 정의할 수 있습니다. 배열의 각 요소에는 다음 속성이 포함될 수 있습니다.
name – 열의 이름입니다. 필수 사항입니다.
unique - 열에 고유한 값이 있어야 하는지 여부를 지정합니다.
fields - 일부 추가 사양이 필요한 열입니다. 여러 개의 필드를 하나의 배열에 정의할 수 있습니다. 배열의 각 요소에는 다음 속성이 포함될 수 있습니다.
name – 열의 이름입니다. 필수 사항입니다.
length – 열의 길이입니다(열이 String이고 길이가 데이터베이스 기본 길이가 아니어야 하는 경우).
unique - 열에 고유한 값이 있어야 하는지 여부를 지정합니다.
notNull - 열이 null이 아니어야 하는지 여부를 지정합니다.
foreignKeys - 새 데이터베이스 테이블에 대한 모든 외래 키 열 정의입니다. 여러 개의 외래 키를 하나의 배열에 정의할 수 있습니다. 배열의 각 요소에는 다음 속성이 포함되어야 합니다.
name - 외래 키가 될 현재 데이터 셰이프의 열 이름입니다.
referenceDataShapeName - 참조된 데이터베이스 테이블의 데이터 셰이프입니다.
referenceFieldName - 참조되는 값을 포함하는 필드 이름입니다.
자세한 내용은 외래 키 추가 또는 제거를 참조하십시오.
예를 들어, 새 MyObject 데이터 셰이프에 색인화된 필드가 포함되지 않고 하나의 외래 키가 포함되며 Location 필드 길이를 4000자로 설정하려면 다음을 입력합니다.
{
"dataShapeName": "MyObject",
"indexedFields": [],
"foreignKeys": [{"name":"WorkDefinitionUID", "referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition", "referenceFieldName":"UID"}],
"fields": [
{
"name": "Location",
"length": 4000
}
]
}
6. 기본 생산 주문 관리자(PTC.SCA.SCO.DefaultProductionOrderManager)로 이동합니다.
7. 서비스에서 추가를 클릭하고 필요한 서비스를 작성하여 새 데이터 셰이프의 엔티티를 관리합니다. Operator Advisor 엔티티에 대한 기존 CRUD 서비스를 모델로 사용합니다.
만들기 서비스입니다. 이 예에서는 서비스 이름으로 CreateMyObjects를 입력합니다. 서비스 편집기에서 다음 코드를 입력합니다.
var insertParams = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Insert(insertParams);
삭제 서비스입니다. 이 예에서는 서비스 이름으로 DeleteMyObject를 입력합니다. 서비스 편집기에서 다음 코드를 입력합니다.
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Delete(params);
업데이트 서비스입니다. 이 예에서는 서비스 이름으로 UpdateMyObjects를 입력합니다. 서비스 편집기에서 다음 코드를 입력합니다.
var params = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Update(params);
이 데이터 셰이프의 개별 인스턴스를 검색하는 서비스입니다. 이 예에서는 서비스 이름으로 GetMyObject를 입력합니다. 서비스 편집기에서 다음 코드를 입력합니다.
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].GetEntity(params);
이 데이터 셰이프의 여러 인스턴스를 검색하는 서비스이며 선택적으로 filter, offset 및 limit 입력 매개 변수를 포함합니다. 입력 매개 변수를 지정하지 않으면 MyObject의 모든 인스턴스가 반환됩니다. 이 예에서는 서비스 이름으로 GetMyObjects를 입력합니다. 서비스 편집기에서 다음 코드를 입력합니다.
var params = {
filter: filter,
dataShapeName: "MyObject",
offset: offset,
limit: limit
};
var result = Things[me.GetDatabaseThingName()].Query(params);
8. 저장을 클릭하여 새 서비스를 기본 생산 주문 관리자(PTC.SCA.SCO.DefaultProductionOrderManager)에 저장합니다.