Beispiele für die Anpassung von Importdiensten
Die folgenden Abschnitte enthalten Beispielanpassungen für bestimmte überschreibbare Dienste:
Import
GetImportSupportedBaseTypes
Mit dem Dienst GetImportSupportedBaseTypes können Sie die für den Import unterstützten Eigenschafts-Basistypen steuern. Diese Beispielanpassung schließt einen Eigenschafts-Basistyp vom Import aus.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportExportEquipmentUtils zur Bearbeitung.
2. Suchen Sie unter Dienste den Dienst GetImportSupportedBaseTypes, und klicken Sie auf , um den Dienst zu überschreiben.
3. Zeigen Sie im Skripteditor die Liste der unterstützten Basistypen an.
var result = ['Boolean', 'DateTime', 'Integer', 'Long', 'JSON', 'Number', 'String'];
4. Um einen Basistyp vom Import auszuschließen, löschen oder kommentieren Sie den Basistyp, den Sie aus der Liste ausschließen möchten. Um beispielsweise den JSON-Basistyp auszuschließen, aktualisieren Sie den Dienst wie folgt:
var result = ['Boolean', 'DateTime', 'Integer', 'Long', 'Number', 'String'];
5. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
6. Klicken Sie auf Speichern, um das Ding zu speichern.
Wenn Eigenschaften mit dem JSON-Basistyp im Importarbeitsblatt vorhanden sind, werden sie nach dieser Änderung nicht mehr importiert. Beim Hochladen und Validieren des Arbeitsblatts werden Eigenschaften mit dem JSON-Basistyp als ungültig gezählt und während des Imports übersprungen.
* 
Rufen Sie die Skriptprotokolle auf, um Details zu den ungültigen Daten für den Import anzuzeigen:
1. Klicken Sie in ThingWorx Composer im linken Fensterbereich auf Überwachung ().
2. Klicken Sie unter Protokolle auf ScriptLog.
3. Wählen Sie in der Tabelle ScriptLog eine Zeile aus, um die Protokollmeldungen für diesen Eintrag anzuzeigen.
ParseImportFile
In diesem Beispiel wird der Import-Parsing-Prozess so angepasst, dass die Parsing-Meldungen im ScriptLog auf der Ebene Warnung angezeigt werden.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ParseExcelProcessor.
2. Suchen Sie unter Dienste den Dienst ParseImportFile, und klicken Sie auf , um den Dienst zu überschreiben.
3. Ändern Sie im Skripteditor die Protokollierungsebene wie folgt in WARNUNG:
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. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
ValidateEquipment
In diesem Beispiel wird die Anlagevalidierung so angepasst, dass Anlagen auch dann erstellt werden, wenn das im Importarbeitsblatt angegebene Projekt nicht vorhanden ist.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportValidator.
2. Suchen Sie unter Dienste den Dienst ValidateEquipment, und klicken Sie auf , um den Dienst zu überschreiben.
3. Suchen Sie im Skripteditor die folgenden Zeilen und kommentieren Sie sie aus:
if (project.length > 0 && !validateProject(project)) {
logger.warn("Import Validation Process: [General Information Tab] [Name: " + name + "] Invalid reason: Project does not exist");
isInformationIncorrect = true;
}
Dies führt dazu, dass der Code das Vorhandensein des für die Anlage angegebenen Projekts nicht überprüft.
4. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
ValidateEquipmentHierarchyTab
Diese Beispielanpassung bewirkt, dass ScriptLog den Start des Diensts ValidateEquipmentHierarchyTab als Eintrag unter Ablaufverfolgung protokolliert.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportValidator.
2. Suchen Sie unter Dienste den Dienst ValidateEquipmentHierarchyTab, und klicken Sie auf , um den Dienst zu überschreiben.
3. Fügen Sie im Skripteditor folgenden Code am Ende des Skripts hinzu:
logger.trace("Validation complete for EquipmentHierarchyTab custom service");
4. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
6. Navigieren Sie zu Überwachung > ScriptLog, und ändern Sie die Protokollebeneneinstellungen zu Ablaufverfolgung. Das Protokoll enthält jetzt unter Ablaufverfolgung einen Eintrag für die Eingabe des benutzerdefinierten Diensts ValidateEquipmentHierarchyTab.
ValidateImportFile
Diese Beispielanpassung bewirkt, dass in der Tabelle Validierungsergebnisse der Name des Arbeitsblatts (Registerkarte) als Hierarchie und nicht als Anlagenstruktur angezeigt wird.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportValidator.
2. Suchen Sie unter Dienste den Dienst ValidateImportFile, und klicken Sie auf , um den Dienst zu überschreiben.
3. Suchen Sie im Skripteditor die folgenden Zeilen und kommentieren Sie sie aus:
var equipmentHierarchyToken = Resources["RuntimeLocalizationFunctions"].GetEffectiveTokenForLanguage({
language: currentUserLanguage,
token: constants.equipmentHierarchyToken
});
4. Bearbeiten Sie die Gleichung in der Zeile unmittelbar nach dem neuen Kommentar, um den Wert wie folgt von equipmentHierarchyToken in Hierarchy zu ändern:
hierarchyReport[workSheetColumn] = Hierarchy;
5. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
6. Klicken Sie auf Speichern, um das Ding zu speichern.
ValidateLocallyBoundProperty
In diesem Beispiel wird die Validierung lokal gebundener Eigenschaften so angepasst, dass nur das angegebene Ding PTC.SCA.SCO.Demo.KepServer für lokal gebundene Eigenschaften verwendet werden kann:
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportValidator.
2. Suchen Sie unter Dienste den Dienst ValidateLocallyBoundProperty, und klicken Sie auf , um den Dienst zu überschreiben.
3. Suchen Sie im Skripteditor nach den folgenden Zeilen:
// 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 {
Ersetzen Sie diese Zeilen durch den folgenden Code:
// 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. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
ValidatePropertiesTab
In diesem Beispiel wird die Validierung der Registerkarte Eigenschaften des Importarbeitsblatts beim Importieren von Anlagen so angepasst, dass der Eigenschaftsname als gültig angesehen wird, wenn er nicht mit InternalPrefix beginnt.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportValidator.
2. Suchen Sie unter Dienste den Dienst ValidatePropertiesTab, und klicken Sie auf , um den Dienst zu überschreiben.
3. Suchen Sie im Skripteditor die folgende Zeile:
var isNameValid = isValidPropertyName(propertyName);
Fügen Sie den folgenden Code als nächste Zeile ein:
isNameValid = !propertyName.startsWith("InternalPrefix");
4. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
ValidateProperty
In diesem Beispiel wird die Validierung so angepasst, dass alle Eigenschaften, die im Importarbeitsblatt mit dem Wert Remote gebunden in der Spalte Bindung angegeben sind, als ungültig betrachtet werden und durch den Importprozess nicht erstellt oder aktualisiert werden.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportValidator.
2. Suchen Sie unter Dienste den Dienst ValidateProperty, und klicken Sie auf , um den Dienst zu überschreiben.
3. Suchen Sie im Skripteditor die folgenden Zeilen und kommentieren Sie sie aus:
} else if (equalsIgnoreCase(binding, constants.remotelyBound)) {
validationResult = me.ValidateRemotelyBoundProperty({
parsedInfoTable: parsedInfoTable
});
4. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
ValidateRemotelyBoundProperty
In diesem Beispiel wird die Validierung so angepasst, dass, wenn der Wert Remote-Eigenschaftsname für eine vorhandene remote-gebundene Eigenschaft im Importarbeitsblatt geändert wird, der Validierungsprozess diese Änderung nicht erkennt und der Wert der Eigenschaft beim Import nicht aktualisiert wird.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportValidator.
2. Suchen Sie unter Dienste den Dienst ValidateRemotelyBoundProperty, und klicken Sie auf , um den Dienst zu überschreiben.
3. Suchen Sie im Skripteditor die folgenden Zeilen:
if (isRemotePropertyNameDifferent(remotePropertyName, remotePropertyBindingInfo)) {
updated = true;
} else if (isCacheIntervalDifferent(cacheInterval, thingName, name)) {
Kommentieren Sie den Code durch die Anweisung else aus, wie hier gezeigt:
/* if (isRemotePropertyNameDifferent(remotePropertyName, remotePropertyBindingInfo)) {
updated = true;
} else */
if (isCacheIntervalDifferent(cacheInterval, thingName, name)) {
4. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
ValidateGeneralInformationTab
In diesem Beispiel wird die Validierung so angepasst, dass die im Arbeitsblatt definierte Anlage, deren Name nicht das erforderliche Präfix Equipment_ aufweist, als ungültig betrachtet und beim Import nicht erstellt wird.
So passen Sie die Validierung der Registerkarte Allgemeine Informationen beim Importieren von Anlagen an:
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportValidator.
2. Suchen Sie unter Dienste den Dienst ValidateGeneralInformationTab, und klicken Sie auf , um den Dienst zu überschreiben.
3. Suchen Sie im Skript-Editor die folgende Codezeile:
// validate context and network
Fügen Sie unmittelbar vor dieser Codezeile den folgenden Code ein:
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. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
Import
Diese Beispielanpassung verhindert, dass der Prozess nach dem Import ausgeführt wird.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportProcessor.
2. Suchen Sie unter Dienste den Dienst Import, und klicken Sie auf , um den Dienst zu überschreiben.
3. Suchen Sie im Skripteditor die folgenden Zeilen und kommentieren Sie sie aus:
// Run post-import process
me.PostImport({
parsedInfoTable: parsedInfoTable
});
4. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
ImportEquipmentHierarchy
Diese Beispielanpassung bewirkt, dass ScriptLog den Start des Diensts ImportEquipmentHierarchy als Eintrag unter Ablaufverfolgung protokolliert.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportProcessor.
2. Suchen Sie unter Dienste den Dienst ImportEquipmentHierarchy, und klicken Sie auf , um den Dienst zu überschreiben.
3. Fügen Sie im Skripteditor folgenden Code am Ende des Skripts hinzu:
logger.trace("Entering ImportEquipmentHierarchy custom service");
4. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
6. Navigieren Sie zu Überwachung > ScriptLog, und ändern Sie die Protokollebeneneinstellungen zu Ablaufverfolgung. Das Protokoll enthält jetzt unter Ablaufverfolgung einen Eintrag für die Eingabe des benutzerdefinierten Diensts ImportEquipmentHierarchy.
ImportEquipmentInformation
Diese Beispielanpassung fügt das Präfix "E_" zum Standard-Anzeigenamen für jeden Ausrüstungsgegenstand, für den im Importarbeitsblatt kein Wert für den Anzeigenamen angegeben ist, hinzu. Der Standard-Anzeigename ist der Dingname in ThingWorx Composer.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportProcessor.
2. Suchen Sie unter Dienste den Dienst ImportEquipmentInformation, und klicken Sie auf , um den Dienst zu überschreiben.
3. Suchen Sie im Skripteditor den folgenden Code:
if (thing != null) {
if (displayName.length > 0) {
thing.displayName = displayName;
}
Fügen Sie nach der letzten Klammer den folgenden Code ein:
else {
thing.displayName = "E_" + name;
}
Der Code wird jetzt wie folgt angezeigt:
if (thing != null) {
if (displayName.length > 0) {
thing.displayName = displayName;
} else {
thing.displayName = "E_" + name;
}
4. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
ImportGeneralInformation
Dieses Beispiel zeigt Informationen zur Anzahl der während des Imports von ScriptLog verarbeiteten Zeilen an, und ändert die angezeigte Protokollebene in Ablaufverfolgung.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportProcessor.
2. Suchen Sie unter Dienste den Dienst ImportEquipmentInformation, und klicken Sie auf , um den Dienst zu überschreiben.
3. Fügen Sie im Fensterbereich "Dienst" am Ende von Zeile 27 die folgende Codezeile hinzu, um Protokollinformationen zu verarbeiteten Zeilen zu senden:
logger.trace("Import Process: [General Information Tab] Already processed rows: " + (i + 1));
4. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
So ändern Sie die im ScriptLog angezeigte Protokollebene:
1. Klicken Sie im ScriptLog auf Konfigurieren.
2. Wählen Sie im Fenster Protokoll konfigurieren die gewünschte Ebene aus der Dropdown-Liste Protokollebene aus.
3. Klicken Sie auf Anwenden.
ImportNoneBoundProperty
Diese Beispielanpassung bewirkt, dass Eigenschaften, bei denen im Importarbeitsblatt für Bindung der Wert Keine angegeben ist, in ThingWorx Composer mit Protokolliert als "wahr" erstellt werden, unabhängig davon, welcher Wert für Protokolliert im Importarbeitsblatt angegeben ist.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportProcessor.
2. Suchen Sie unter Dienste den Dienst ImportNoneBoundProperty, und klicken Sie auf , um den Dienst zu überschreiben.
3. Suchen Sie im Skripteditor die folgende Zeile:
var logged = getBooleanValue(equipmentProperty[loggedHeader]);
Bearbeiten Sie die Zeile wie folgt:
var logged = true;
4. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
ImportProperties
Diese Beispielanpassung bewirkt, dass durch den Importprozess keine lokal gebundenen Eigenschaften erstellt werden, selbst wenn diese im Importarbeitsblatt angegeben sind. Außerdem werden sie vom Validierungsprozess nicht als ungültige Zeilen gemeldet.
So passen Sie den Import von Eigenschaften beim Importieren von Anlagen an:
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportProcessor.
2. Suchen Sie unter Dienste den Dienst ImportProperties, und klicken Sie auf , um den Dienst zu überschreiben.
3. Suchen Sie im Skripteditor die folgenden Zeilen und kommentieren Sie sie aus:
} else if (equalsIgnoreCase(binding, constants.locallyBound)) {
me.ImportLocallyBoundProperty({
equipmentProperty: propertyRowInfoTable
});
4. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
ImportRemotelyBoundProperty
Diese Beispielanpassung bewirkt, dass durch den Importprozess erstellte Eigenschaften, die im Importarbeitsblatt mit dem Wert Remote gebunden für Bindung angegeben wurden, für Wenn getrennt den Wert Alle Änderungen in einem einzelnen zuletzt geänderten Wert kombinieren aufweisen, der auf der Seite Eigenschaften und Warnungen für den Ausrüstungsgegenstand in ThingWorx Composer angezeigt wird.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportProcessor.
2. Suchen Sie unter Dienste den Dienst ImportRemotelyBoundProperty, und klicken Sie auf , um den Dienst zu überschreiben.
3. Suchen Sie im Skripteditor die folgenden Codeabschnitte, und ändern Sie in jedem Abschnitt den Wert von NONE in FOLD:
if (params.whenDisconnected.length === 0) {
params.whenDisconnected = 'NONE';
}
if (whenDisconnected.length === 0 || whenDisconnected.length > 0 && !isWhenDisconnectedAllowed(whenDisconnected)) {
whenDisconnected = 'NONE';
}
4. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
PreImport
Diese Beispielanpassung bewirkt, dass ScriptLog den Start des Diensts PreImport als Eintrag unter Ablaufverfolgung protokolliert.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportProcessor.
2. Suchen Sie unter Dienste den Dienst PreImport, und klicken Sie auf , um den Dienst zu überschreiben.
3. Fügen Sie im Skripteditor den folgenden Code am Ende des Skripts hinzu, um den benutzerdefinierten Dienst PreImport zu aktivieren:
logger.trace("Entering PreImport custom service");
4. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
6. Navigieren Sie zu Überwachung > ScriptLog, und ändern Sie die Protokollebeneneinstellungen zu Ablaufverfolgung. Das Protokoll enthält jetzt unter Ablaufverfolgung einen Eintrag für die Eingabe des benutzerdefinierten Diensts PreImport.
PostImport
Diese Beispielanpassung bewirkt, dass ScriptLog den Start des Diensts PostImport als Eintrag unter Ablaufverfolgung protokolliert.
1. Öffnen Sie in ThingWorx Composer das Ding PTC.SCA.SCO.Common.ImportProcessor.
2. Suchen Sie unter Dienste den Dienst PostImport, und klicken Sie auf , um den Dienst zu überschreiben.
3. Fügen Sie im Skripteditor den folgenden Code am Ende des Skripts hinzu, um den benutzerdefinierten Dienst PostImport zu aktivieren:
logger.trace("Entering PostImport custom service");
4. Klicken Sie auf Fertig, um die Änderung im Dienst zu speichern.
5. Klicken Sie auf Speichern, um das Ding zu speichern.
6. Navigieren Sie zu Überwachung > ScriptLog, und ändern Sie die Protokollebeneneinstellungen zu Ablaufverfolgung. Das Protokoll enthält jetzt unter Ablaufverfolgung einen Eintrag für die Eingabe des benutzerdefinierten Diensts PostImport.