Personalización de la evaluación del estado del equipo
* 
Esta personalización solo se aplica a los sistemas que utilizan el cálculo de estado basado en el programador. No se puede aplicar a los sistemas que han activado el cálculo de estado basado en suscripciones.
Para determinar el estado de un equipo, el sistema evalúa las expresiones de estado definidas en la página Estado del equipo en Instalación y configuración > Equipo. Las expresiones se evalúan en el orden en que aparecen en la tabla Definir estado. La primera expresión que se evalúa como verdadera determina el estado del equipo.
Las expresiones de estado definidas en cada equipo son la única fuente de información utilizada para evaluar el estado del equipo. La plantilla de cosa de cada tipo de equipo con estado implementa PTC.SCA.SCO.StatusThingShape. A su vez, esta forma de cosa llama a la lógica de evaluación del estado que se implementa mediante el servicio CalculateStatus en la cosa PTC.Factory.StatusExpressionUtils. Cada cosa de equipo y plantilla de cosa de tipo de equipo heredan el servicio CalculateStatus de PTC.SCA.SCO.StatusThingShape. Este servicio evalúa las expresiones de estado definidas en la página Estado del equipo en Instalación y configuración > Equipo. Para obtener más información, consulte Especificación de expresiones de estado.
Se puede sustituir el servicio CalculateStatus en una cosa individual o una plantilla de cosa personalizada para implementar una lógica de evaluación de estado propia. Si se sustituye el servicio CalculateStatus, se debe tener en cuenta lo siguiente:
El resultado de cualquier personalización de CalculateStatus debe definirse en la variable result y debe ser un entero.
Si la personalización no implica los parámetros de entrada thingId ni item, puede reconstruirlos mediante el código siguiente:
var thingId = thingId;
var item = Things["PTC.Factory.StatusExpressionResourceProvider"].GetById({id:thingId});
Las personalizaciones en una plantilla de cosa personalizada son independientes de las personalizaciones en cualquier otra plantilla de cosa.
Las personalizaciones en equipos individuales son independientes unas de otras. Una personalización en un equipo (cosa) individual tiene prioridad sobre cualquier personalización en la plantilla de cosa para ese tipo de equipo.
Si el código personalizado que se utiliza para sustituir el servicio CalculateStatus usa de forma explícita etiquetas de propiedades, dicho código debe comprobar la calidad de los datos, si es preciso.
Detección de datos de mala calidad en código personalizado
Si el código personalizado que se utiliza para sustituir el servicio CalculateStatus utiliza de forma explícita etiquetas de propiedades y desea que se compruebe la calidad de los datos, el código debe permitirlo.
La función IS_DATA_OK que se utiliza en las expresiones de estado también se puede usar para detectar datos de mala calidad en el código personalizado. La función llama al servicio GetPropertyQuality, que comprueba la calidad de los datos. Este servicio está disponible en todas las entidades de cosa y se hereda de la plantilla de cosa GenericThing. Este servicio toma una cadena propertyName como parámetro único, y devuelve uno de los siguientes valores de cadena:
UNKNOWN
GOOD
BAD
OUT_OF_RANGE
UNVERIFIED_SOURCE
Para que se pueda utilizar en el servicio GetPropertyQuality, propertyName debe cumplir dos condiciones:
La propiedad debe existir en la cosa que se utiliza para ejecutar el servicio o ser una propiedad remota vinculada remotamente con la cosa que se utiliza para ejecutar el servicio.
El nombre de propiedad no debe contener puntos, sino solo guiones dobles; por ejemplo, Channel1--DryingMachine--Status. Si el nombre de propiedad contiene puntos, debe gestionarlo el código personalizado, como se muestra en el ejemplo siguiente.
En la mayoría de los casos, una etiqueta de propiedad consta de dos partes: la parte de la cosa de origen y la parte de la propiedad, separadas por dos puntos (:).
La parte de la propiedad debe extraerse de la cadena de etiqueta de propiedad, y luego utilizarse en la ejecución del servicio GetPropertyQuality. Ambas partes son necesarias para implementar la detección de datos de mala calidad cuando se personaliza el servicio CalculateStatus.
Ejemplo de implementación
El código siguiente es un ejemplo de código JavaScript personalizado que utiliza el servicio GetPropertyQuality para detectar datos de mala calidad en una determinada etiqueta.
* 
El código de ejemplo convierte el nombre de propiedad, que usa puntos, para que utilice guiones dobles, como requiere el servicio GetPropertyQuality.
// The property tag to be tested for bad quality data. This tag hypothetically
// points to some value on some server
var propertyTag = "PTC.SCA.SCO.Demo.KepServer:CheeseCake.Fryer.Status";
// Split the property tag into 2 portions:
// 1. The source thing portion
// 2. The property portion
var splitResult = propertyTag.split(":");
var sourceThingName = splitResult[0]; // The source thing portion
var propertyName = splitResult[1]; // The property portion
var sourceThing = Things[sourceThingName]; // Get the source thing that has the property
// Convert the property name to a Thingworx friendly name
var propertyName_friendly = propertyName.replace(/\./g, "--");
var statusEvaluationResult;
if (sourceThing !== null) {
params = {
propertyName: propertyName_friendlyc f /* STRING */
};
var quality = sourceThing.GetPropertyQuality(params); // Calling the service (API) to check the quality
// Here do some processing according to the result of the quality check
if (quality === "GOOD") {
// Set a certain status when the quality is GOOD
statusEvaluationResult = 2; // Status "2" = "Running"
} else if (quality === "BAD") {
// Set a certain status when the quality is BAD
statusEvaluationResult = 4; // Status "4" = "Unplanned Downtime"
} else {
// Set a certain status when the quality is anything other that GOOD or BAD (i.e. UNKNOWN, OUT_OF_RANGE, UNVERIFIED_SOURCE)
statusEvaluationResult = 5; // Status "5" = "Unavailable"
}
}
result = statusEvaluationResult;