사용자 지정 구성 요소 생성
구성 요소 아키텍처 항목에 설명된 대로 각 ThingWorx Navigate 구성 요소는 두 개의 하위 구성 요소, 즉 사용자 인터페이스 하위 구성 요소와 비즈니스 로직 하위 구성 요소로 구성됩니다. 또한 비즈니스 로직 하위 구성 요소는 기본 비즈니스 로직 및 기본 비즈니스 로직 구현의 두 부분으로 구성되어 있으며, 이 항목에서는 이 두 부분을 각각 기본 구성 요소 및 구현이라고 하겠습니다.
기본적으로 각 기본 구성 요소는 하나 이상의 구현과 함께 제공됩니다. 각 구현은 사용자 인터페이스에 특정 정보를 표시하도록 설계되었습니다. 다른 정보를 표시하기 위해 사용자 지정 구현을 작성하여 구성 요소를 사용자 지정할 수 있습니다. 예를 들어, 기본적으로 항목 ID 기본 구성 요소는 부품 ID와 작업 ID의 두 가지 구현과 함께 제공됩니다. 또한 문서 ID와 같은 항목 ID 기본 구성 요소의 사용자 지정 구현을 작성할 수 있습니다.
구성 요소에 대한 사용자 지정 구현을 작성하려면 기존 기본 구성 요소나 기존 구현을 확장한 다음 필요한 서비스를 재정의해야 합니다. 아래 단원에 자세한 단계와 예가 나와 있습니다.
기본 구성 요소를 확장하여 사용자 지정 구현 작성 
기존 기본 구성 요소에서 사용자 지정 구현을 작성하려면 다음 단계를 따릅니다.
1. 사용자 지정 구현을 위한 시작점으로 사용할 기존 기본 구성 요소를 선택합니다. ThingWorx Navigate 버전에 따라 다음 표에서 기본 구성 요소를 찾아 해당 사물 템플릿 및 프로젝트를 기록합니다. 이 정보는 나중에 필요합니다.
기본 구성 요소
사물 템플릿
프로젝트(ThingWorx Navigate 9.0)
프로젝트(ThingWorx Navigate 9.1 이상)
속성
PTC.Nav.AttributesBusinessLogicThingTemplate
PTC.Nav.AttributesProject
PTC.Nav.AttributesBusinessLogicProject
항목 ID
PTC.Nav.ItemIdentityBusinessLogicThingTemplate
PTC.Nav.ItemIdentityProject
PTC.Nav.ItemIdentityBusinessLogicProject
항목 목록
PTC.Nav.ItemListBusinessLogicThingTemplate
PTC.Nav.ItemListProject
PTC.Nav.ItemListBusinessLogicProject
진행률
PTC.Nav.ProgressBusinessLogicThingTemplate
PTC.Nav.ProgressProject
PTC.Nav.ProgressBusinessLogicProject
타일
PTC.Nav.TilesBusinessLogicThingTemplate
PTC.Nav.TilesProject
PTC.Nav.TilesBusinessLogicProject
2. 사용자 지정 구현에 대한 프로젝트를 작성합니다. 프로젝트 종속성 아래에 1단계에서 기록한 프로젝트를 입력합니다. 프로젝트를 저장합니다.
3. 사용자 지정 구현에 대한 사물 템플릿을 작성합니다. 프로젝트 아래에 2단계에서 작성한 프로젝트를 입력합니다. 기본 사물 템플릿 아래에 1단계에서 기록한 사물 템플릿을 입력합니다.
4. 사용자 지정 구현에 대한 사물을 작성합니다. 프로젝트 아래에 2단계에서 작성한 프로젝트를 입력합니다. 기본 사물 템플릿 아래에 3단계에서 작성한 사물 템플릿을 입력합니다.
5. 작성한 사물에서 서비스 탭을 클릭합니다. 그런 다음 을 클릭하여 GetImplementationConfigurationVersion 서비스를 재정의하고 구현에 대한 버전을 설정합니다. 이 버전에 임의의 값을 사용할 수 있습니다. 사물을 저장합니다.
6. 사용자 지정 구현에 대해 재정의해야 할 서비스를 식별합니다. 기본으로 제공되는 구성 요소에 대한 서비스에 대한 자세한 내용은 사용 가능한 구성 요소 아래에서 확장하려는 구성 요소에 대한 항목을 찾은 다음 사용자 지정 서비스 표를 참조하십시오.
7. 작성한 사물 템플릿에서 서비스 탭을 클릭합니다. 그런 다음 을 클릭하여 필요한 서비스를 재정의합니다. 다른 서비스를 재정의하기 전에 GetConfigurations 서비스를 재정의하는 것이 좋습니다.
GetConfigurations 서비스에 대한 코드에서 5단계에서 설정된 GetImplementationConfigurationVersion 버전과 일치하도록 implementationConfigurationVersion의 버전을 설정합니다. 이 단계를 건너뛰면 ThingWorx Navigate의 이후 릴리즈에서 호환성 문제가 발생할 수 있습니다.
8. 나머지 필요한 서비스를 재정의합니다. 구성을 매개 변수로 받는 서비스를 재정의할 경우 먼저 코드에서 Migrate 서비스를 호출하고 기본 및 구현 버전을 전달합니다.
Migrate 서비스에서 targetBaseVersion에 사용할 값을 결정하려면 4단계에서 작성한 사물에서 GetBaseConfigurationVersion 서비스를 실행합니다. GetBaseConfigurationVersion 서비스 코드를 호출하여 해당 값을 반환하지 마십시오.
Migrate 서비스에서 targetImplementationVersion을 설정하는 경우 이전에 5단계에서 설정한 버전을 사용합니다.
Migrate 서비스 호출에 대한 자세한 내용은 버전 지정 및 마이그레이션 항목을 참조하십시오.
* 
서비스를 재정의할 때 서비스를 카테고리 PTC.Nav.Private으로 재정의하지 마십시오.
9. 사물 템플릿을 저장합니다. 이제 사용자 지정 구현을 사용할 준비가 되었습니다. 구현을 사용하려면 매쉬업을 작성합니다. 구현에 대한 기본 구성 요소를 매쉬업에 추가하고 을 클릭합니다. 구성 유형 드롭다운 메뉴에서 사용자 지정 구현에 속하는 구성을 선택합니다.
구현을 확장하여 사용자 지정 구현 작성 
기존 구현에서 사용자 지정 구현을 작성하려면 다음 단계를 따릅니다.
1. 사용자 지정 구현을 위한 시작점으로 사용할 기존 구현을 선택합니다.
기본으로 제공되는 구현을 사용하는 경우 ThingWorx Navigate 버전에 따라 다음 표에서 이 구현을 찾은 다음 해당하는 사물 템플릿과 프로젝트를 기록합니다. 이 정보는 나중에 필요합니다.
사용자 지정 구현을 사용하는 경우 이에 해당하는 사물 템플릿 및 프로젝트를 기록합니다. 이 정보는 나중에 필요합니다.
구현
사물 템플릿
프로젝트(ThingWorx Navigate 9.0)
프로젝트(ThingWorx Navigate 9.1 이상)
활동
PTC.Nav.ActivityBusinessLogicThingTemplate
PTC.Nav.ItemListProject
PTC.Nav.ActivityBusinessLogicProject
영향 받는 항목
PTC.Nav.AffectedItemsBusinessLogicThingTemplate
PTC.Nav.ItemListProject
PTC.Nav.AttachmentsBusinessLogicProject
첨부
PTC.Nav.AttachmentsBusinessLogicThingTemplate
PTC.Nav.ItemListProject
PTC.Nav.AffectedItemsBusinessLogicProject
속성 일반
PTC.Nav.AttributesGenericBusinessLogicThingTemplate
PTC.Nav.AttributesProject
PTC.Nav.AttributesGenericBusinessLogicProject
부품 ID
PTC.Nav.PartIdentityBusinessLogicThingTemplate
PTC.Nav.ItemIdentityProject
PTC.Nav.PartIdentityBusinessLogicProject
작업 ID
PTC.Nav.TaskIdentityBusinessLogicThingTemplate
PTC.Nav.ItemIdentityProject
PTC.Nav.TaskIdentityBusinessLogicProject
작업 진행 상황
PTC.Nav.TaskProgressBusinessLogicThingTemplate
PTC.Nav.ProgressProject
PTC.Nav.TaskProgressBusinessLogicProject
작업
PTC.Nav.TaskListBusinessLogicThingTemplate
PTC.Nav.ItemListProject
PTC.Nav.TaskListBusinessLogicProject
타일 일반
PTC.Nav.TilesGenericBusinessLogicThingTemplate
PTC.Nav.TilesProject
PTC.Nav.TilesGenericBusinessLogicProject
2. 사용자 지정 구현에 대한 프로젝트를 작성합니다. 프로젝트 종속성 아래에 1단계에서 기록한 프로젝트를 입력합니다. 프로젝트를 저장합니다.
3. 사용자 지정 구현에 대한 사물 템플릿을 작성합니다. 프로젝트 아래에 2단계에서 작성한 프로젝트를 입력합니다. 기본 사물 템플릿 아래에 1단계에서 기록한 사물 템플릿을 입력합니다.
4. 사용자 지정 구현에 대한 사물을 작성합니다. 프로젝트 아래에 2단계에서 작성한 프로젝트를 입력합니다. 기본 사물 템플릿 아래에 3단계에서 작성한 사물 템플릿을 입력합니다.
5. 작성한 사물에서 서비스 탭을 클릭합니다.
GetBaseMigrationVersion을 사용자의 ThingWorx Navigate 버전(예: 9.0.0 또는 9.1.0)으로 재정의하려면 을 클릭합니다.
GetImplementationConfigurationVersion을 사용자의 ThingWorx Navigate 버전(예: 9.0.0 또는 9.1.0)으로 재정의하려면 을 클릭합니다.
6. 사물을 저장합니다.
7. 사용자 지정 구현에 대해 재정의해야 할 서비스를 식별합니다. 기본으로 제공되는 구성 요소에 대한 서비스에 대한 자세한 내용은 사용 가능한 구성 요소 아래에서 확장하려는 구성 요소에 대한 항목을 찾은 다음 사용자 지정 서비스 표를 참조하십시오.
8. 작성한 사물 템플릿에서 서비스 탭을 클릭합니다. 그런 다음 을 클릭하여 필요한 서비스를 재정의합니다. 다른 서비스를 재정의하기 전에 GetConfigurations 서비스를 재정의하는 것이 좋습니다.
* 
GetConfigurations 서비스를 재정의할 때 기본으로 제공되는 구조에서 구성 구조를 변경하는 것은 지원되지 않습니다. 개별 JSON 속성에 대한 값만 변경합니다. 자세한 내용은 구성 속성에 대한 변경 예를 참조하십시오.
구성에서 implementationConfigurationVersion 속성의 값을 GetImplementationConfigurationVersion 서비스에서 반환하는 값과 같도록 설정해야 합니다.
9. 나머지 필요한 서비스를 재정의합니다. 구성을 매개 변수로 받는 서비스를 재정의할 경우 먼저 코드에서 Migrate 서비스를 호출하고 기본 및 구현 버전을 전달합니다.
Migrate 서비스로 전달할 기본 버전을 결정하려면 4단계에서 작성한 사물에서 GetBaseConfigurationVersion 서비스를 실행합니다. GetBaseConfigurationVersion 서비스를 호출하지 않고 해당 값을 반환합니다.
Migrate 서비스로 전달할 구현 버전을 결정하려면 4단계에서 작성한 사물에서 GetImplementationConfigurationVersion 서비스를 실행합니다. GetImplementationConfigurationVersion 서비스를 호출하지 않고 해당 값을 반환합니다.
Migrate 서비스 호출에 대한 자세한 내용은 버전 지정 및 마이그레이션 항목을 참조하십시오.
* 
서비스를 재정의할 때 서비스를 카테고리 PTC.Nav.Private으로 재정의하지 마십시오.
10. 사물 템플릿을 저장합니다. 이제 사용자 지정 구현을 사용할 준비가 되었습니다. 구현을 사용하려면 매쉬업을 작성합니다. 구현에 대한 기본 구성 요소를 매쉬업에 추가하고 을 클릭합니다. 구성 유형 드롭다운 메뉴에서 사용자 지정 구현에 속하는 구성을 선택합니다.
예: 부품 목록 구현 작성 
다음 예에서는 항목 목록 기본 구성 요소의 구현인 부품 항목이라는 사용자 지정 구현을 작성하는 방법을 보여줍니다. 부품 목록은 부품을 입력으로 수신하고 여기에 포함된 첫 번째 수준의 부품을 반환합니다.
* 
다음 예는 ThingWorx Navigate 9.0에서 작동하도록 설계되었으며, 코드 조각에 사용된 버전 값은 해당 버전의 ThingWorx Navigate에 대해 적합합니다. ThingWorx Navigate의 이후 버전에서 이 예를 따라 수행하려면 코드에 올바른 버전 값을 사용해야 합니다.
1. ThingWorx Composer에서 Demo.PartsListProject라는 이름의 새 프로젝트를 작성합니다.
ThingWorx Navigate 9.0에서 PTC.Nav.ItemListProject프로젝트 종속성 아래에 를 입력합니다.
ThingWorx Navigate 9.1 이상 버전에서 프로젝트 종속성 아래에 PTC.Nav.ItemListBusinessLogicProject를 입력합니다.
2. Demo.PartsListBusinessLogicThingTemplate이라는 이름의 새 사물 템플릿을 작성합니다. 프로젝트Demo.PartsListProject로 설정하고 기본 사물 템플릿PTC.Nav.ItemListBusinessLogicThingTemplate으로 설정합니다.
3. Demo.PartsListBusinessLogicThing이라는 이름의 사물을 작성합니다. 프로젝트Demo.PartsListProject로 설정하고 기본 사물 템플릿Demo.PartsListBusinessLogicThingTemplate으로 설정합니다.
4. 서비스 탭을 클릭하고 GetImplementationConfigurationVersion 서비스를 찾습니다. 을 클릭하여 서비스를 재정의하고 다음 코드를 사용하여 버전을 1.0.0으로 설정합니다.
result = "1.0.0";
완료를 클릭합니다. 저장을 클릭하여 사물을 저장합니다.
5. 항목 목록에 대한 사용자 지정 서비스 테이블을 확인하고 사물 템플릿에서 재정의해야 할 서비스를 식별합니다. 이 사용자 지정 구현에서는 다음 세 가지 서비스를 재정의해야 합니다.
GetConfigurations - 이 서비스는 구현에 사용할 수 있는 구성을 반환합니다. 부품 목록에 대한 구성을 정의하기 위해 편집하겠습니다.
GetImplementationLabel - 이 서비스는 Mashup Builder에 나타나는 구현 이름을 반환합니다. 이름 Parts List Demo를 표시하도록 설정하겠습니다.
GetItems - 이 서비스는 입력 및 구성을 매개 변수로 수신하고 항목 목록 사용자 인터페이스에 표시할 데이터가 있는 CCO 형식의 JSON을 반환합니다. 해당 부품에 대한 첫 번째 수준 부품 뿐만 아니라 첫 번째 수준 부품에 대한 속성을 반환하도록 설정하겠습니다.
6. Demo.ItemListBusinessLogicThingTemplate 사물 템플릿을 엽니다. 서비스 탭을 클릭합니다.
7. 을 클릭하여 GetConfigurations 서비스를 재정의합니다. 다음 코드를 서비스에 붙여 넣습니다. 이 코드에는 Mashup Builder와 ThingWorx Navigate 사용자 인터페이스 모두에서 Parts List라는 레이블이 붙은 부품 목록에 대한 구성 하나가 포함되어 있습니다.
result = {
"partsList": {
"label": "Parts List",
"configuration": {
"selectionType": {
"selectedKey": "single"
},
"waitForInput": {
"value": true
},
"actionBarConfiguration": {
"value": {
"actionBarConfigurationJSON": {
"value": ""
}
}
},
"baseConfigurationVersion": {
"value": "9.0.0"
},
"implementationConfigurationVersion": {
"value": "1.0.0"
},
"defaultSortFields": {
"selectedValues": {
"data": [{
"itemListsData": [{
"items": [{
"additionalData": {
"itemListDefaultSortFieldDefinition": {
"defaultSortDirection": {
"selectedKey": "asc"
}
}
},
"id": "Name"
}
],
"objectType": "PTC.ProdMgmt.Part"
}
],
"adapter": {
"instanceName": "windchill",
"thingName": "PTC.WCAdapter"
}
}
]
}
},
"attributes": {
"selectedValues": {
"data": [{
"itemListsData": [{
"items": [{
"id": "Name",
"ordinal": 1
}, {
"id": "State#Display",
"ordinal": 2
}, {
"id": "Version",
"ordinal": 3
}, {
"id": "Number",
"ordinal": 0
}, {
"id": "ID",
"ordinal": 4
}
],
"objectType": "PTC.ProdMgmt.Part"
}
],
"adapter": {
"instanceName": "windchill",
"thingName": "PTC.WCAdapter"
}
}
]
},
"inTailoring": false
},
"label": {
"value": "Parts List"
},
"showExportAction": {
"value": true
},
"enableSearch": {
"additionalData": {
"itemListSearchDefinition": {
"searchHintText": {
"value": "Find"
}
}
},
"value": true
},
"maxNumberOfRowsInGrid": {
"inTailoring": false,
"value": 50
}
}
}
};
다음은 하나 대신 두 개의 구성을 포함하고 있는 GetConfigurations에 대한 다른 샘플 코드입니다. 첫 번째 구성은 위의 코드와 동일한 구성입니다. 두 번째 구성은 부품 목록의 미니 버전에 대한 구성입니다. 속성 3개와 최대 5개의 행만 표시됩니다. 레이블은 Mashup Builder의 경우 Parts List mini, ThingWorx Navigate 사용자 인터페이스의 경우 Parts List로 붙습니다.
result = {
"partsList": {
"label": "Parts List",
"configuration": {
"selectionType": {
"selectedKey": "single"
},
"waitForInput": {
"value": true
},
"actionBarConfiguration": {
"value": {
"actionBarConfigurationJSON": {
"value": ""
}
}
},
"baseConfigurationVersion": {
"value": "9.0.0"
},
"implementationConfigurationVersion": {
"value": "1.0.0"
},
"defaultSortFields": {
"selectedValues": {
"data": [{
"itemListsData": [{
"items": [{
"additionalData": {
"itemListDefaultSortFieldDefinition": {
"defaultSortDirection": {
"selectedKey": "asc"
}
}
},
"id": "Name"
}
],
"objectType": "PTC.ProdMgmt.Part"
}
],
"adapter": {
"instanceName": "windchill",
"thingName": "PTC.WCAdapter"
}
}
]
}
},
"attributes": {
"selectedValues": {
"data": [{
"itemListsData": [{
"items": [{
"id": "Name",
"ordinal": 1
}, {
"id": "State#Display",
"ordinal": 2
}, {
"id": "Version",
"ordinal": 3
}, {
"id": "Number",
"ordinal": 0
}, {
"id": "ID",
"ordinal": 4
}
],
"objectType": "PTC.ProdMgmt.Part"
}
],
"adapter": {
"instanceName": "windchill",
"thingName": "PTC.WCAdapter"
}
}
]
},
"inTailoring": false
},
"label": {
"value": "Parts List"
},
"showExportAction": {
"value": true
},
"enableSearch": {
"additionalData": {
"itemListSearchDefinition": {
"searchHintText": {
"value": "Find"
}
}
},
"value": true
},
"maxNumberOfRowsInGrid": {
"inTailoring": false,
"value": 50
}
}
},
"partsListMini": {
"label": "Parts List mini",
"configuration": {
"selectionType": {
"selectedKey": "single"
},
"waitForInput": {
"value": true
},
"actionBarConfiguration": {
"value": {
"actionBarConfigurationJSON": {
"value": ""
}
}
},
"baseConfigurationVersion": {
"value": "9.0.0"
},
"implementationConfigurationVersion": {
"value": "1.0.0"
},
"defaultSortFields": {
"selectedValues": {
"data": [{
"itemListsData": [{
"items": [{
"additionalData": {
"itemListDefaultSortFieldDefinition": {
"defaultSortDirection": {
"selectedKey": "asc"
}
}
},
"id": "Name"
}
],
"objectType": "PTC.ProdMgmt.Part"
}
],
"adapter": {
"instanceName": "windchill",
"thingName": "PTC.WCAdapter"
}
}
]
}
},
"attributes": {
"selectedValues": {
"data": [{
"itemListsData": [{
"items": [{
"id": "Name",
"ordinal": 1
}, {
"id": "Version",
"ordinal": 2
}, {
"id": "Number",
"ordinal": 0
}
],
"objectType": "PTC.ProdMgmt.Part"
}
],
"adapter": {
"instanceName": "windchill",
"thingName": "PTC.WCAdapter"
}
}
]
},
"inTailoring": false
},
"label": {
"value": "Parts List"
},
"showExportAction": {
"value": true
},
"enableSearch": {
"additionalData": {
"itemListSearchDefinition": {
"searchHintText": {
"value": "Find"
}
}
},
"value": true
},
"maxNumberOfRowsInGrid": {
"inTailoring": false,
"value": 5
}
}
}
};
코드를 추가한 후 완료를 클릭합니다.
8. GetImplementationLabel 서비스를 재정의합니다. 다음 코드를 사용하여 구현 레이블을 설정합니다.
result = "Parts List Demo";
완료를 클릭합니다.
9. GetItems 서비스는 다음 프로세스를 사용하여 Windchill에서 첫 번째 수준 부품을 읽어들입니다.
a. 앞으로 작성하게 될 ConvertAttributesToCCO 서비스를 사용하여 구성의 속성 부분을 CCO 구조로 변환합니다.
b. CCO 형식의 결과 JSON을 PTC.WCAdapterGetRelatedItems 서비스로 전달합니다. 이 서비스는 데이터를 UsageLink 객체로 읽어들입니다.
c. 앞으로 작성하게 될 ConvertUsageLinkToPart 서비스를 사용하여 UsageLink 객체를 Part 객체로 변환합니다.
GetItems 서비스를 재정의하기 전에 서비스 ConvertAttributesToCCOConvertUsageLinkToPart를 작성해야 합니다.
10. 새 서비스를 작성하고 이름을 ConvertAttributesToCCO로 지정합니다. 입력 아래에 다음 입력을 추가합니다.
configuration, 기본 유형JSON
attributesPrefix, 기본 유형STRING
replaceObjectType, 기본 유형STRING
출력 아래 드롭다운 메뉴에서 JSON을 선택합니다.
11. 다음 코드를 ConvertAttributesToCCO 서비스에 붙여 넣습니다.
let attributesData = configuration.attributes.selectedValues;
attributesPrefix = attributesPrefix || "";
let objectType = replaceObjectType || attributesData.data[0].itemListsData[0].objectType;
attributesData.data[0].itemListsData[0].objectType = objectType;
let items = attributesData.data[0].itemListsData[0].items;
let newItems = [];
let newObj = {};
let hasID = false;
//convert to CCO
for(var i = 0; i < items.length; i++) {
let item = items[i];
if (item.id === 'ID') {
hasID = true;
}
newObj[attributesPrefix + item.id] = {"value":""};
}
//add ID if needed
if (!hasID) {
newObj[attributesPrefix + 'ID'] = {"value":""};
}
newItems.push (newObj);
attributesData.data[0].itemListsData[0].items = newItems;
//create date
var dateValue = new Date();
var y = dateValue.getFullYear();
var mo = dateValue.getMonth()+1;
if(mo<10) {mo='0'+mo;}
var d = dateValue.getDate();
if(d<10) {d='0'+d;}
//create time
var h = dateValue.getHours();
if(h<10) {h='0'+h;}
var mi = dateValue.getMinutes();
if(mi<10) {mi='0'+mi;}
var s = dateValue.getSeconds();
if(s<10) {s='0'+s;}
var ms = dateValue.getMilliseconds();
if(ms<10) {ms='00'+ms;} else {if(ms>=10 && ms<100) {ms='0'+ms;}}
attributesData.timeStamp = y + "-" + mo + "-" + d + " " + h + ":" + mi + ":" + s + "." + ms;
attributesData.version = "";
attributesData.statusMessage = "OK";
attributesData.status = "200";
result = attributesData;
완료를 클릭합니다.
12. 새 서비스를 작성하고 이름을 ConvertUsageLinkToPart로 지정합니다. 입력 아래에 다음 입력을 추가합니다.
usageLinkCCO, 기본 유형JSON
출력 아래 드롭다운 메뉴에서 JSON을 선택합니다.
13. 다음 코드를 ConvertUsageLinkToPart 서비스에 붙여 넣습니다.
let itemListsData = usageLinkCCO.data[0].itemListsData[0];
let tempMetadata = itemListsData.metadata;
let items = itemListsData.items;
//convert metadata
delete tempMetadata.ID;
let newMetadata = {};
for (var key in tempMetadata) {
let newKey = key.replace(/^(Uses\|)/,"");
newMetadata[newKey] = tempMetadata[key];
}
newMetadata['id'] = newMetadata.ID;
itemListsData['metadata'] = newMetadata;
//convert Items
let newItems = [];
for (var i=0 ; i<items.length ; i++) {
let item = items[i];
let newItem = {};
for (key in item) {
let newKey = key.replace(/^(Uses\|)/,"");
newItem[newKey] = item[key];
}
newItem['id'] = newItem.ID;
newItems.push(newItem);
}
itemListsData['items'] = newItems;
itemListsData['objectType'] = 'PTC.ProdMgmt.Part';
//update CCO
let partsListCCO = usageLinkCCO;
partsListCCO.data[0].itemListsData = [itemListsData];
result = partsListCCO;
완료를 클릭합니다.
14. 을 클릭하여 GetItems 서비스를 재정의합니다. 다음 코드를 GetItems 서비스에 붙여 넣습니다.
var migratedConfig = me.Migrate({
targetImplementationVersion: "1.0.0" /* STRING */,
data: configuration /* JSON */,
migrationType: "Configuration" /* STRING */,
targetBaseVersion: "9.0.0" /* STRING */
});
var attributesConfigurationCCO = me.ConvertAttributesToCCO({
configuration:migratedConfig /* JSON */,
attributesPrefix: "Uses|" /* STRING */,
replaceObjectType: "PTC.ProdMgmt.PartUse" /* STRING */
});
// result: JSON
var tempResult = Things["PTC.WCAdapter"].GetRelatedItems({
item: input /* JSON */,
relation: {path:"Uses"} /* JSON */,
attributes: attributesConfigurationCCO /* JSON */
});

var convertedResults = me.ConvertUsageLinkToPart({
usageLinkCCO:tempResult /* JSON */
});
var result = convertedResults;
완료를 클릭합니다. 저장을 클릭하여 사물 템플릿을 저장합니다.
이제 부품 목록 사용자 지정 구현 및 해당 구성이 작성되어 Mashup Builder에서 사용할 준비가 되었습니다. 구현을 사용하려면 항목 목록 기본 구성 요소를 매쉬업에 추가하고 을 클릭합니다. 구성 유형 드롭다운 메뉴에서 Parts Lists Demo - Parts List 레이블이 붙은 부품 항목 구성을 선택합니다.
부품 목록을 사용하여 아래 비디오에 표시된 매쉬업을 생성할 경우 다음과 같이 몇 가지 추가 코드가 있습니다.
Attributes 구성 요소를 구성하는 데 사용되는 코드:
{
"layout": {
"selectedKey": "horizontal",
"additionalData": {
"dimensionDefinition": {
"maxHeight": {
"value": 200,
"version": "1.0.0"
},
"maxWidth": {
"value": 200,
"version": "1.0.0"
}
}
},
"version": "1.0.0"
},
"attributes": {
"sets": [{
"data": {
"selectedValues": {
"data": [{
"itemListsData": [{
"items": [{
"id": "ModifiedBy",
"ordinal": 0
}, {
"id": "GatheringPart",
"ordinal": 1
}, {
"id": "Latest",
"ordinal": 2
}, {
"id": "FolderName",
"ordinal": 3
}
],
"objectType": "PTC.ProdMgmt.Part"
}
],
"adapter": {
"instanceName": "windchill",
"thingName": "PTC.WCAdapter"
}
}
]
}
},
"name": ""
}
],
"inTailoring": true,
"filteredValues": {
"data": [{
"itemListsData": [{
"objectType": ""
}
],
"adapter": {
"instanceName": "",
"thingName": ""
}
}
]
},
"version": "1.0.0"
}
}
매쉬업의 input 매개 변수에 사용되는 코드입니다. 올바른 부품 ID를 추가했는지 확인:
{
"version": "1.0.0",
"data": [{
"adapter": {
"thingName": "PTC.WCAdapter",
"instanceName": "windchill"
},
"itemListsData": [{
"objectType": "PTC.ProdMgmt.Part",
"items": [{
"id": {
"value": ""
}
}
]
}
]
}
]
}
비디오 자습서: 부품 목록 구현 작성
다음 두 비디오 자습서에서는 사용자 지정 구현 부품 목록을 작성하고 사용하는 방법을 보여줍니다. 첫 번째 비디오에서는 위의 예에 제시된 단계를 따라 부품 목록을 작성하는 방법을 보여줍니다. 두 번째 비디오에서는 매쉬업에서 부품 목록을 사용하는 방법을 보여줍니다. 위의 예에서 비디오에 사용된 모든 코드를 확인할 수 있습니다.
큰 창에서 비디오를 보려면 플레이어에서 제목을 클릭합니다. YouTube의 비디오가 새 탭에 열립니다.
도움이 되셨나요?