Personalización de Operator Advisor > Extensión del modelo de datos del Operator Advisor > Adición de propiedades personalizadas a las entidades de Operator Advisor
Adición de propiedades personalizadas a las entidades de Operator Advisor
La mayoría de las entidades del modelo de datos de Operator Advisor tienen una definición de datos _AP relacionada con el propósito de añadir propiedades personalizadas. Por ejemplo, la definición de datos de la orden de trabajo (PTC.SCA.SCO.JobOrder) tiene una definición de datos PTC.SCA.SCO.JobOrder_AP. En el ejemplo de este tema se añade una nueva propiedad Location a la definición de datos PTC.SCA.SCO.JobOrder_AP.
La adición de propiedades personalizadas a Operator Advisor implica varios pasos:
Para obtener un ejemplo en el que se muestra cómo rellenar mediante programación la nueva propiedad personalizada mediante un servicio, consulte Rellenado de una propiedad personalizada.
Añadir un campo a la definición de datos
1. En ThingWorx Composer, navegue a la definición de datos _AP de la entidad. Para este ejemplo, navegue a PTC.SCA.SCO.JobOrder_AP.
2. En Definiciones de campo, pulse en Añadir.
3. En el panel Nueva definición de campo, especifique lo siguiente:
Nombre: el nombre de la propiedad. Para este ejemplo, introduzca Location.
Tipo base: el tipo de datos de la propiedad. Para este ejemplo, seleccione STRING. Se soportan los siguientes tipos de datos:
STRING
NUMBER
INTEGER
BOOLEAN
LONG
TEXT
DATETIME
THINGNAME
THINGSHAPENAME
THINGTEMPLATENAME
USERNAME
SCHEDULE
IMAGELINK
* 
Los nombres de columna de las tablas de base de datos son los nombres de campo de la definición de datos en minúsculas. Por ejemplo, un campo denominado MyPrimaryLocation genera una columna denominada myprimarylocation. Como resultado, los nombres de campo con las mismas letras pero con mayúsculas diferentes, como MyName, myName y myname, no se soportan en la misma definición de datos.
4. Pulse en para añadir la nueva definición de campo.
5. Pulse en Guardar para guardar las actualizaciones de la definición de datos.
Actualizar la información de la base de datos con cualquier restricción de base de datos
Si la nueva propiedad requiere restricciones de base de datos, complete los siguientes pasos:
1. Navegue a la cosa PTC.SCA.SCO.DefaultProductionOrderManager.
2. En Servicios, busque y sustituya el servicio Get<entity>DBInfo para la entidad a la que se está añadiendo la propiedad. Para este ejemplo, busque y sustituya el servicio GetJobOrderDBInfo.
3. En el editor de scripts, desplácese hacia abajo hasta la entrada de la definición de datos a la que se ha añadido la propiedad. En este ejemplo, busque la siguiente entrada:
"dataShapeName": "PTC.SCA.SCO.JobOrder_AP",
"indexedFields": []
4. Actualice la entrada de la definición de datos con la información de la base de datos para la nueva propiedad.
Si la propiedad se va a indexar, añádala a la matriz indexedFields para la definición de datos, con las siguientes propiedades:
name: (obligatorio) nombre de la propiedad .
unique: permite especificar si la propiedad debe tener un valor único.
identifier: el nombre de la entidad en la base de datos. Si no se especifica, el sistema genera automáticamente el valor con el formato <nombre_tabla>_<nombre_de_la_columna>_idx. Si se especifica, el valor debe ser único para los dos valores especificados como para los valores generados automáticamente. La longitud máxima del valor es la longitud máxima permitida por la base de datos para los identificadores.
Si la propiedad va a ser una clave externa, añada un array foreignKeys para la definición de datos con las siguientes propiedades:
name: nombre de la propiedad de la definición de datos actual para que sea una clave externa.
referenceDataShapeName: definición de datos de la tabla de base de datos a la que se hace referencia.
referenceFieldName: nombre del campo que contiene el valor al que se hace referencia.
onDelete: lo que ocurre, en caso de que suceda algo, a las instancias de la definición de datos actual cuando se borran instancias de la definición de datos de referencia.
deleteReference: lo que ocurre, en caso de que suceda algo, a las instancias de la definición de datos de referencia cuando se borran instancias de la definición de datos actual.
Para obtener más información sobre los comportamientos de borrado, consulte Definición del comportamiento de borrado con claves externas.
Para especificar restricciones de base de datos adicionales para la propiedad, añádala como una entrada en una matriz fields:
name: el nombre de la nueva propiedad. Obligatorio.
length: longitud de columna para la nueva propiedad, si es distinta de la longitud de columna por defecto de la base de datos.
notNull: permite especificar si la propiedad no debe ser nula.
* 
Si una columna de base de datos debe tener un valor único, se debe especificar mediante unique en la matriz indexedFields, en lugar de hacerlo en la matriz fields.
Para este ejemplo, para especificar que Location tiene una longitud de columna de 4.000 caracteres y no puede tener un valor nulo, actualice la entrada para la definición de datos PTC.SCA.SCO.JobOrder_AP tal como se indica a continuación:
{
"dataShapeName": "PTC.SCA.SCO.JobOrder_AP",
"indexedFields": []
"fields": [{
"name": "Location",
"length": 4000
"notNull": true
}]
},
5. Pulse en Guardar para guardar los cambios realizados en el servicio.
Sincronizar la información de base de datos y el esquema de base de datos
Sincronice la información de la base de datos con el esquema de base de datos. Para obtener más información, consulte Sincronización de la información de base de datos y el esquema de base de datos.
Rellenado de una propiedad personalizada
El siguiente código es un ejemplo de cómo incluir la propiedad personalizada en un servicio para rellenar la propiedad mediante programación. Este código utiliza el servicio CreateInfoTable para combinar las definiciones de datos PTC.SCA.SCO.JobOrder y PTC.SCA.SCO.JobOrder_AP en una única infotable y rellenar la nueva propiedad Location con el valor de Montreal.
var jobOrderDataShapeName = "PTC.SCA.SCO.JobOrder";
var productionManagerThingName = Things["PTC.Factory.LaunchPointConfigurationThing"].GetProductionOrderManagerThingName();
var jobOrders = Things[productionManagerThingName ].CreateInfoTable({
dataShapeName: jobOrderDataShapeName
});
var jobOrder = {};
jobOrder.ID = "" + 121;
jobOrder.WorkType = 1;
jobOrder.Description = "test";
jobOrder.Location = "Montreal";
jobOrders.AddRow(jobOrder);

var newJobOrders = Things[productionManagerThingName ].CreateJobOrders({
JobOrders: jobOrders
});