Ejemplos de personalización del servicio de importación
En las secciones siguientes se incluyen ejemplos de personalización para determinados servicios modificables:
GetImportSupportedBaseTypes
El servicio GetImportSupportedBaseTypes permite controlar los tipos base de propiedad que son compatibles con la importación. En este ejemplo de personalización se excluye de la importación un tipo base de propiedad.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportExportEquipmentUtils para editarla.
2. En Servicios, busque GetImportSupportedBaseTypes y pulse en para modificar el servicio.
3. En el editor de scripts, consulte la lista de tipos base compatibles.
var result = ['Boolean', 'DateTime', 'Integer', 'Long', 'JSON', 'Number', 'String'];
4. Para excluir un tipo base de la importación, borre o comente el tipo base que desea excluir de la lista. Por ejemplo, para excluir el tipo base JSON, actualice el servicio de la siguiente manera:
var result = ['Boolean', 'DateTime', 'Integer', 'Long', 'Number', 'String'];
5. Pulse en Terminado para guardar el cambio en el servicio.
6. Pulse en Guardar para guardar la cosa.
Después de este cambio, si hay propiedades con el tipo base JSON en la hoja de cálculo de importación, no se importan. Cuando la hoja de cálculo se carga y se valida, las propiedades con el tipo base JSON se cuentan como no válidas y se omiten durante la importación.
* 
Para ver más detalles de los datos no válidos para la importación, acceda a los registros de scripts:
1. En ThingWorx Composer, pulse en Supervisión en el panel izquierdo.
2. Bajo Registros, pulse en ScriptLog.
3. En la tabla ScriptLog, seleccione una fila para ver la información de Registrar mensajes correspondiente a esa entrada.
ParseImportFile
En este ejemplo se personaliza el proceso de análisis de importación para que los mensajes de análisis se muestren en ScriptLog con el nivel Avisar.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ParseExcelProcessor.
2. En Servicios, busque ParseImportFile y pulse en para modificar el servicio.
3. En el editor de scripts, cambie el nivel del registrador a AVISO, de la siguiente manera:
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. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
ValidateEquipment
En este ejemplo se personaliza la validación del equipo para que el equipo se cree aunque no exista el proyecto especificado en la hoja de cálculo de importación.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportValidator.
2. En Servicios, busque ValidateEquipment y pulse en para modificar el servicio.
3. En el editor de scripts, busque y comente las líneas siguientes:
if (project.length > 0 && !validateProject(project)) {
logger.warn("Import Validation Process: [General Information Tab] [Name: " + name + "] Invalid reason: Project does not exist");
isInformationIncorrect = true;
}
Esto hace que el código omita la validación de la existencia del proyecto especificado para el equipo.
4. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
ValidateEquipmentHierarchyTab
Con esta personalización de ejemplo, ScriptLog registra el inicio del servicio ValidateEquipmentHierarchyTab como entrada de Seguimiento.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportValidator.
2. En Servicios, busque ValidateEquipmentHierarchyTab y pulse en para modificar el servicio.
3. En el editor de scripts, añada el código siguiente al final del script:
logger.trace("Validation complete for EquipmentHierarchyTab custom service");
4. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
6. Vaya a Supervisión > ScriptLog y cambie la configuración del nivel de registro a Seguimiento. El registro ahora incluye una entrada Seguimiento para introducir el servicio personalizado ValidateEquipmentHierarchyTab.
ValidateImportFile
En este ejemplo de personalización, la tabla Resultado de validación muestra el nombre de la ficha de la hoja de trabajo como Jerarquía, en lugar de Jerarquía del equipo.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportValidator.
2. En Servicios, busque ValidateImportFile y pulse en para modificar el servicio.
3. En el editor de scripts, busque y comente las líneas siguientes:
var equipmentHierarchyToken = Resources["RuntimeLocalizationFunctions"].GetEffectiveTokenForLanguage({
language: currentUserLanguage,
token: constants.equipmentHierarchyToken
});
4. Edite la ecuación en la línea inmediatamente posterior al nuevo comentario para cambiar el valor de equipmentHierarchyToken a Hierarchy, como se indica a continuación:
hierarchyReport[workSheetColumn] = Hierarchy;
5. Pulse en Terminado para guardar el cambio en el servicio.
6. Pulse en Guardar para guardar la cosa.
ValidateLocallyBoundProperty
En este ejemplo se personaliza la validación de propiedades enlazadas localmente para que solo la cosa PTC.SCA.SCO.Demo.KepServer especificada pueda utilizarse para las propiedades enlazadas localmente:
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportValidator.
2. En Servicios, busque ValidateLocallyBoundProperty y pulse en para modificar el servicio.
3. En el editor de scripts, busque las siguientes líneas:
// 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 {
Reemplace dichas líneas con el siguiente código:
// 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. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
ValidatePropertiesTab
En este ejemplo se personaliza la validación de la ficha Propiedades de la hoja de cálculo de importación cuando se importan equipos; de este modo, si el nombre de la propiedad no empieza por InternalPrefix, se considera un nombre de propiedad válido.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportValidator.
2. En Servicios, busque ValidatePropertiesTab y pulse en para modificar el servicio.
3. En el editor de scripts, busque la siguiente línea:
var isNameValid = isValidPropertyName(propertyName);
Inserte el siguiente código como línea siguiente:
isNameValid = !propertyName.startsWith("InternalPrefix");
4. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
ValidateProperty
En este ejemplo se personaliza la validación para que cualquier propiedad especificada en la hoja de cálculo de importación con el valor Enlazado remotamente en la columna Enlace se considere no válida, y no se cree ni actualice con el proceso de importación.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportValidator.
2. En Servicios, busque ValidateProperty y pulse en para modificar el servicio.
3. En el editor de scripts, busque y comente las líneas siguientes:
} else if (equalsIgnoreCase(binding, constants.remotelyBound)) {
validationResult = me.ValidateRemotelyBoundProperty({
parsedInfoTable: parsedInfoTable
});
4. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
ValidateRemotelyBoundProperty
En este ejemplo se personaliza la validación para que, si en la hoja de cálculo de importación se modifica el valor Nombre de propiedad remota de una propiedad enlazada remotamente que ya existe, el proceso de validación no reconozca este cambio y el valor de la propiedad no se actualice durante la importación.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportValidator.
2. En Servicios, busque ValidateRemotelyBoundProperty y pulse en para modificar el servicio.
3. En el editor de scripts, busque las siguientes líneas:
if (isRemotePropertyNameDifferent(remotePropertyName, remotePropertyBindingInfo)) {
updated = true;
} else if (isCacheIntervalDifferent(cacheInterval, thingName, name)) {
Comente el código mediante la sentencia else, como se muestra aquí:
/* if (isRemotePropertyNameDifferent(remotePropertyName, remotePropertyBindingInfo)) {
updated = true;
} else */
if (isCacheIntervalDifferent(cacheInterval, thingName, name)) {
4. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
ValidateGeneralInformationTab
En este ejemplo se personaliza la validación para que cualquier equipo definido en la hoja de cálculo cuyo nombre no tenga el prefijo Equipment_ necesario se considere no válido y no se cree durante la importación.
Procedimiento para personalizar la validación de la ficha Información general al importar equipos:
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportValidator.
2. En Servicios, busque ValidateGeneralInformationTab y pulse en para modificar el servicio.
3. En el editor de scripts, busque la siguiente línea de código:
// validate context and network
Justo antes de esa línea de código, inserte el siguiente código:
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. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
Importación
Este ejemplo de personalización impide la ejecución del proceso posterior a la importación.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportProcessor.
2. En Servicios, busque Import y pulse en para modificar el servicio.
3. En el editor de scripts, busque y comente las líneas siguientes:
// Run post-import process
me.PostImport({
parsedInfoTable: parsedInfoTable
});
4. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
ImportEquipmentHierarchy
Con esta personalización de ejemplo, ScriptLog registra el inicio del servicio ImportEquipmentHierarchy como entrada de Seguimiento.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportProcessor.
2. En Servicios, busque ImportEquipmentHierarchy y pulse en para modificar el servicio.
3. En el editor de scripts, añada el código siguiente al final del script:
logger.trace("Entering ImportEquipmentHierarchy custom service");
4. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
6. Vaya a Supervisión > ScriptLog y cambie la configuración del nivel de registro a Seguimiento. El registro ahora incluye una entrada Seguimiento para introducir el servicio personalizado ImportEquipmentHierarchy.
ImportEquipmentInformation
Este ejemplo de personalización añade el prefijo "E_" al nombre mostrado por defecto de cualquier parte de equipo cuyo nombre mostrado no se especifique en la hoja de cálculo de importación. El nombre mostrado por defecto es el nombre e cosa en ThingWorx Composer.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportProcessor.
2. En Servicios, busque ImportEquipmentInformation y pulse en para modificar el servicio.
3. En el editor de scripts, busque el siguiente código:
if (thing != null) {
if (displayName.length > 0) {
thing.displayName = displayName;
}
Después del corchete de cierre, inserte el siguiente código:
else {
thing.displayName = "E_" + name;
}
Ahora el código se muestra de la siguiente manera:
if (thing != null) {
if (displayName.length > 0) {
thing.displayName = displayName;
} else {
thing.displayName = "E_" + name;
}
4. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
ImportGeneralInformation
En esta personalización de ejemplo se muestra información sobre el número de filas procesadas durante la importación en ScriptLog y se cambia el nivel de registro mostrado a Seguimiento.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportProcessor.
2. En Servicios, busque ImportEquipmentInformation y pulse en para modificar el servicio.
3. En el panel de servicios, añada la línea de código siguiente después de la línea 27 para enviar información de registro sobre las filas procesadas:
logger.trace("Import Process: [General Information Tab] Already processed rows: " + (i + 1));
4. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
Procedimiento para cambiar el nivel de registro que se muestra en ScriptLog:
1. En ScriptLog, pulse en Configurar.
2. En la ventana Configurar registro, seleccione el nivel deseado en la lista desplegable Nivel de registro.
3. Pulse en Aplicar.
ImportNoneBoundProperty
En este ejemplo de personalización, las propiedades especificadas en la hoja de cálculo de importación con un valor de Enlace de Ninguno se crean en ThingWorx Composer con un valor de Registrado de verdadero, al margen del valor de Registrado que se especifique en la hoja de cálculo de importación.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportProcessor.
2. En Servicios, busque ImportNoneBoundProperty y pulse en para modificar el servicio.
3. En el editor de scripts, busque la siguiente línea:
var logged = getBooleanValue(equipmentProperty[loggedHeader]);
Edite dicha línea para que quede de la siguiente forma:
var logged = true;
4. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
ImportProperties
Este ejemplo de personalización hace que el proceso de importación no cree ninguna propiedad enlazada localmente, aunque se hayan especificado en la hoja de cálculo de importación. El proceso de validación tampoco las notifica como filas no válidas.
Procedimiento para personalizar la importación de las propiedades al importar equipos:
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportProcessor.
2. En Servicios, busque ImportProperties y pulse en para modificar el servicio.
3. En el editor de scripts, busque y comente las líneas siguientes:
} else if (equalsIgnoreCase(binding, constants.locallyBound)) {
me.ImportLocallyBoundProperty({
equipmentProperty: propertyRowInfoTable
});
4. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
ImportRemotelyBoundProperty
Este ejemplo de personalización hace que cualquier propiedad creada por el proceso de importación especificado en la hoja de cálculo de importación con un valor de Enlace de Enlazado remotamente tenga un valor de Cuando se desconecta de Reunir todos los cambios en un único valor de última modificación en la página Propiedades y alertas de la parte del equipo en ThingWorx Composer.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportProcessor.
2. En Servicios, busque ImportRemotelyBoundProperty y pulse en para modificar el servicio.
3. En el editor de scripts, busque las secciones de código siguientes y, en cada sección, cambie el valor de NONE a FOLD:
if (params.whenDisconnected.length === 0) {
params.whenDisconnected = 'NONE';
}
if (whenDisconnected.length === 0 || whenDisconnected.length > 0 && !isWhenDisconnectedAllowed(whenDisconnected)) {
whenDisconnected = 'NONE';
}
4. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
PreImport
Con esta personalización de ejemplo, ScriptLog registra el inicio del servicio PreImport como entrada de Seguimiento.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportProcessor.
2. En Servicios, busque PreImport y pulse en para modificar el servicio.
3. En el editor de scripts, añada el código siguiente al final del script para activar el servicio personalizado PreImport:
logger.trace("Entering PreImport custom service");
4. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
6. Vaya a Supervisión > ScriptLog y cambie la configuración del nivel de registro a Seguimiento. El registro ahora incluye una entrada Seguimiento para introducir el servicio personalizado PreImport.
PostImport
Con esta personalización de ejemplo, ScriptLog registra el inicio del servicio PostImport como entrada de Seguimiento.
1. En ThingWorx Composer, abra la cosa PTC.SCA.SCO.Common.ImportProcessor.
2. En Servicios, busque PostImport y pulse en para modificar el servicio.
3. En el editor de scripts, añada el código siguiente al final del script para activar el servicio personalizado PostImport:
logger.trace("Entering PostImport custom service");
4. Pulse en Terminado para guardar el cambio en el servicio.
5. Pulse en Guardar para guardar la cosa.
6. Vaya a Supervisión > ScriptLog y cambie la configuración del nivel de registro a Seguimiento. El registro ahora incluye una entrada Seguimiento para introducir el servicio personalizado PostImport.