自訂資訊內容與存取 > 自訂設備匯入服務 > 匯入服務自訂的範例
匯入服務自訂的範例
以下部分提供特定可取代服務的範例自訂:
匯入
GetImportSupportedBaseTypes
GetImportSupportedBaseTypes 服務可讓您針對匯入控制所支援的內容基礎類型。此範例自訂從匯入排除屬性基本類型。
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportExportEquipmentUtils 項目以利編輯。
2. 「服務」之下尋找GetImportSupportedBaseTypes,然後按一下 來取代服務。
3. 在指令集編輯器中,檢視可支援的基礎類型清單。
var result = ['Boolean', 'DateTime', 'Integer', 'Long', 'JSON', 'Number', 'String'];
4. 若要從匯入排除基礎類型,請刪除或註解您要從清單中排除的基礎類型。以排除 JSON 基礎類型為例,請如下所示更新服務:
var result = ['Boolean', 'DateTime', 'Integer', 'Long', 'Number', 'String'];
5. 按一下「完成」以儲存對服務的變更。
6. 按一下「儲存」以儲存項目。
在變更之後,如果包含 JSON 基礎類型的屬性出現在匯入試算表中,則不會匯入相關屬性。當上載並驗證試算表時,包含 JSON 基礎類型的屬性計為無效,且於匯入期間略過。
* 
若要針對匯入檢視無效資料的詳細資訊,請存取指令集記錄檔:
1. ThingWorx Composer 中,按下左窗格內的「監控」
2. 「記錄檔」 之下點按 ScriptLog
3. 選擇 ScriptLog 表格中的任一列,以檢視該輸入項的 Log Messages
ParseImportFile
此範例可自訂匯入剖析流程,以便剖析顯示在 ScriptLog 中並屬「警告」層級的訊息。
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ParseExcelProcessor 項目。
2. 「服務」之下尋找ParseImportFile,然後按一下 來取代服務。
3. 在指令集編輯器中,變更記錄器的層級為「警告」,如下所示:
var result = (function () {
var constants = Things["PTC.SCA.SCO.Common.ImportExportEquipmentUtils"].GetImportExportConstants();
logger.warn("Parsing process started");
var user = Resources["CurrentSessionInfo"].GetCurrentUser();
var lastFileEntry = Things["PTC.SCA.SCO.Common.ImportProcessHistoryDataTable"].GetDataTableEntryByKey({ key: user });
// Invoke service which parses equipment data
var parsedInfoTable = Resources["PTC.Factory.CommonUtilities"].ParseImportFile({
fileName: lastFileEntry.FileName /* STRING */ ,
dataShape: constants.importExportDataShape /* DATASHAPENAME */
});
logger.warn("Parsing process completed");
return parsedInfoTable;
})();
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
ValidateEquipment
此範例可自訂設備驗證,即使匯入試算表中所指定的專案不存在時,也會建立設備。
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportValidator 項目。
2. 「服務」之下尋找ValidateEquipment,然後按一下 來取代服務。
3. 在指令集編輯器中,尋找並註解下列行︰
if (project.length > 0 && !validateProject(project)) {
logger.warn("Import Validation Process: [General Information Tab] [Name: " + name + "] Invalid reason: Project does not exist");
isInformationIncorrect = true;
}
這會導致程式碼略過為設備指定的專案,而不驗證其是否存在。
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
ValidateEquipmentHierarchyTab
此範例自訂會讓 ScriptLog 記錄 ValidateEquipmentHierarchyTab 服務的起點,以作為「追蹤」輸入項。
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportValidator 項目。
2. 「服務」之下尋找ValidateEquipmentHierarchyTab,然後按一下 來取代服務。
3. 在指令集編輯器中,於指令集的末端新增下列程式碼:
logger.trace("Validation complete for EquipmentHierarchyTab custom service");
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
6. 導覽至 「監控」 > ScriptLog,並變更記錄層級設定為「追蹤」。此記錄現在包含用於輸入 ValidateEquipmentHierarchyTab 自訂服務的「追蹤」輸入項。
ValidateImportFile
此範例自訂會讓驗證結果表顯示工作表 (標籤) 的名稱為階層,而不是設備結構
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportValidator 項目。
2. 「服務」之下尋找ValidateImportFile,然後按一下 來取代服務。
3. 在指令集編輯器中,尋找並註解下列行︰
var equipmentHierarchyToken = Resources["RuntimeLocalizationFunctions"].GetEffectiveTokenForLanguage({
language: currentUserLanguage,
token: constants.equipmentHierarchyToken
});
4. 在緊跟在新註解之後的行中編輯方程式,以將值從 equipmentHierarchyToken 變更為 Hierarchy,如下所示︰
hierarchyReport[workSheetColumn] = Hierarchy;
5. 按一下「完成」以儲存對服務的變更。
6. 按一下「儲存」以儲存項目。
ValidateLocallyBoundProperty
此範例會自訂本機繫結屬性的驗證,因此僅指定的 PTC.SCA.SCO.Demo.KepServer 物件可用於本機繫結屬性:
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportValidator 項目。
2. 「服務」之下尋找ValidateLocallyBoundProperty,然後按一下 來取代服務。
3. 在指令集編輯器中,搜尋並尋找下列行︰
// Check if server thing or property for bounding exists
if (!boundThingExists || property.length === 0) {
validationResult = me.GenerateReportForEquipment({
operation: constants.invalid
});
if (!boundThingExists) {
logger.warn("Import Validation Process: [Properties Tab] [Equipment Name: " + thingName + " Name: " + name + "] Invalid reason: Thing does not exist");
}
if (property.length === 0) {
logger.warn("Import Validation Process: [Properties Tab] [Equipment Name: " + thingName + " Name: " + name + "] Invalid reason: Property not specified");
}
} else {
以下列程式碼取代這些行︰
// Check if server thing or property for bounding exists and if thing is same as required
if (!boundThingExists || thing !== "PTC.SCA.SCO.Demo.KepServer" || property.length === 0) {
validationResult = me.GenerateReportForEquipment({
operation: constants.invalid
});
if (!boundThingExists) {
logger.warn("Import Validation Process: [Properties Tab] [Equipment Name: " + thingName + " Name: " + name + "] Invalid reason: Thing does not exist");
}
if (thing !== "PTC.SCA.SCO.Demo.KepServer") {
logger.warn("Import Validation Process: [Properties Tab] [Equipment Name: " + thingName + " Name: " + name + "] Invalid reason: Property can be locally bounded only to specified thing");
}
if (property.length === 0) {
logger.warn("Import Validation Process: [Properties Tab] [Equipment Name: " + thingName + " Name: " + name + "] Invalid reason: Property not specified");
}
}
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
ValidatePropertiesTab
此範例將自訂在匯入設備時對匯入試算表的「內容」標籤之驗證,以使得內容名稱不是以 InternalPrefix 開頭,將其視為有效的內容名稱。
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportValidator 項目。
2. 「服務」之下尋找ValidatePropertiesTab,然後按一下 來取代服務。
3. 在指令集編輯器中,尋找下列行︰
var isNameValid = isValidPropertyName(propertyName);
插入下列程式碼作為下一行︰
isNameValid = !propertyName.startsWith("InternalPrefix");
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
ValidateProperty
此範例會自訂驗證,以使得在匯入試算表中所指定任何內容的「繫結」欄中具備「遠端繫結」值均視為無效,同時不會透過匯入流程進行建立或更新。
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportValidator 項目。
2. 「服務」之下尋找ValidateProperty,然後按一下 來取代服務。
3. 在指令集編輯器中,尋找並註解下列行︰
} else if (equalsIgnoreCase(binding, constants.remotelyBound)) {
validationResult = me.ValidateRemotelyBoundProperty({
parsedInfoTable: parsedInfoTable
});
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
ValidateRemotelyBoundProperty
此範例會自訂驗證,以使得現有遠端繫結內容的「遠端內容名稱」值在匯入試算表中進行了變更時,驗證流程不會識別此變更,且不會在匯入期間更新內容值。
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportValidator 項目。
2. 「服務」之下尋找ValidateRemotelyBoundProperty,然後按一下 來取代服務。
3. 在指令集編輯器中,尋找下列行︰
if (isRemotePropertyNameDifferent(remotePropertyName, remotePropertyBindingInfo)) {
updated = true;
} else if (isCacheIntervalDifferent(cacheInterval, thingName, name)) {
透過 else 語句註解程式碼,如此處所示︰
/* if (isRemotePropertyNameDifferent(remotePropertyName, remotePropertyBindingInfo)) {
updated = true;
} else */
if (isCacheIntervalDifferent(cacheInterval, thingName, name)) {
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
ValidateGeneralInformationTab
此範例會自訂驗證,以使得對於在試算表中定義的任何設備,其名稱沒有必要的 Equipment_ 前綴時,則視為其無效且不會在匯入期間建立。
若要在匯入設備時自訂一般資訊的驗證:
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportValidator 項目。
2. 「服務」之下尋找ValidateGeneralInformationTab,然後按一下 來取代服務。
3. 在指令集編輯器中,尋找下列程式碼行︰
// validate context and network
在此程式碼行的正前方,插入下列程式碼︰
if (name.substring(0, 10) !== "Equipment_") {
reportInfoTable = markEquipment(reportInfoTable, reportDataShapeFields, constants.invalid);
logger.warn("Import Validation Process: [General Information Tab] [Row number: " + rowNum + "] Invalid reason: Name does not have required prefix");
continue;
}
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
匯入
此範例自訂可避免執行後匯入流程。
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportProcessor 項目。
2. 「服務」之下尋找Import,然後按一下 來取代服務。
3. 在指令集編輯器中,尋找並註解下列行︰
// Run post-import process
me.PostImport({
parsedInfoTable: parsedInfoTable
});
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
ImportEquipmentHierarchy
此範例自訂會讓 ScriptLog 記錄 ImportEquipmentHierarchy 服務的起點,以作為「追蹤」輸入項。
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportProcessor 項目。
2. 「服務」之下尋找ImportEquipmentHierarchy,然後按一下 來取代服務。
3. 在指令集編輯器中,於指令集的末端新增下列程式碼:
logger.trace("Entering ImportEquipmentHierarchy custom service");
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
6. 導覽至 「監控」 > ScriptLog,並變更記錄層級設定為「追蹤」。此記錄現在包含用於輸入 ImportEquipmentHierarchy 自訂服務的「追蹤」輸入項。
ImportEquipmentInformation
此範例自訂會在任何設備不具備在匯入試算表中指定的特定顯示名稱值時,為預設的顯示名稱新增前綴「E_」。預設顯示名稱即是 ThingWorx Composer 中的項目名稱。
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportProcessor 項目。
2. 「服務」之下尋找ImportEquipmentInformation,然後按一下 來取代服務。
3. 在指令集編輯器中,尋找下列程式碼︰
if (thing != null) {
if (displayName.length > 0) {
thing.displayName = displayName;
}
在結束括弧之後,插入下列程式碼︰
else {
thing.displayName = "E_" + name;
}
程式碼此時會按如下方式顯示︰
if (thing != null) {
if (displayName.length > 0) {
thing.displayName = displayName;
} else {
thing.displayName = "E_" + name;
}
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
ImportGeneralInformation
此範例自訂顯示了在「指令集記錄檔」中匯入期間處理之列數的相關資訊,並將所顯示的記錄層級變更為「追蹤」
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportProcessor 項目。
2. 「服務」之下尋找ImportEquipmentInformation,然後按一下 來取代服務。
3. 在服務窗格中,新增下列程式碼行 27 傳送處理列的記錄資訊之後:
logger.trace("Import Process: [General Information Tab] Already processed rows: " + (i + 1));
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
若要變更在 ScriptLog 中顯示的記錄層級:
1. ScriptLog 中按一下組態
2. 組態記錄視窗中,從記錄層級下拉式清單中選取所需層級。
3. 按一下「套用」
ImportNoneBoundProperty
只要是以繫結於匯入試算表中指定的任何屬性,此範例自訂都會透過已記錄值 True 於 ThingWorx Composer 中建立之,而不論在匯入試算表中所指定的已記錄值為何。
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportProcessor 項目。
2. 「服務」之下尋找ImportNoneBoundProperty,然後按一下 來取代服務。
3. 在指令集編輯器中,尋找下列行︰
var logged = getBooleanValue(equipmentProperty[loggedHeader]);
編輯此行,如下所示︰
var logged = true;
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
ImportProperties
此範例自訂會導致匯入流程不會建立本機繫結屬性,即使已在匯入試算表中指定亦是如此。同時也不會由驗證流程回報為無效的列。
若要在匯入設備時自訂屬性的匯入作業:
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportProcessor 項目。
2. 「服務」之下尋找ImportProperties,然後按一下 來取代服務。
3. 在指令集編輯器中,尋找並註解下列行︰
} else if (equalsIgnoreCase(binding, constants.locallyBound)) {
me.ImportLocallyBoundProperty({
equipmentProperty: propertyRowInfoTable
});
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
ImportRemotelyBoundProperty
若匯入流程是透過遠端繫結繫結值在匯入試算表中所指定,則以該匯入流程所建立的任何屬性,此範例自訂會針對 ThingWorx Composer 中的設備工件,在屬性與警示頁面上的中斷連線時值,提供將所有變更合併為單一最後變更值
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportProcessor 項目。
2. 「服務」之下尋找ImportRemotelyBoundProperty,然後按一下 來取代服務。
3. 在指令集編輯器中,尋找下列程式碼區段,並在每個區段中將 NONE 的值變更為 FOLD
if (params.whenDisconnected.length === 0) {
params.whenDisconnected = 'NONE';
}
if (whenDisconnected.length === 0 || whenDisconnected.length > 0 && !isWhenDisconnectedAllowed(whenDisconnected)) {
whenDisconnected = 'NONE';
}
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
PreImport
此範例自訂會讓 ScriptLog 記錄 PreImport 服務的起點,以作為「追蹤」輸入項。
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportProcessor 項目。
2. 「服務」之下尋找PreImport,然後按一下 來取代服務。
3. 在指令集編輯器中,於指令集的末端新增下列程式碼,以啟用 PreImport 自訂服務:
logger.trace("Entering PreImport custom service");
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
6. 導覽至 「監控」 > ScriptLog,並變更記錄層級設定為「追蹤」。此記錄現在包含用於輸入 PreImport 自訂服務的「追蹤」輸入項。
PostImport
此範例自訂會讓 ScriptLog 記錄 PostImport 服務的起點,以作為「追蹤」輸入項。
1. ThingWorx Composer 中開啟 PTC.SCA.SCO.Common.ImportProcessor 項目。
2. 「服務」之下尋找PostImport,然後按一下 來取代服務。
3. 在指令集編輯器中,於指令集的末端新增下列程式碼,以啟用 PostImport 自訂服務:
logger.trace("Entering PostImport custom service");
4. 按一下「完成」以儲存對服務的變更。
5. 按一下「儲存」以儲存項目。
6. 導覽至 「監控」 > ScriptLog,並變更記錄層級設定為「追蹤」。此記錄現在包含用於輸入 PostImport 自訂服務的「追蹤」輸入項。