Bloques de creación > Extensión del modelo de datos > Adición de propiedades personalizadas a entidades del modelo de datos
Adición de propiedades personalizadas a entidades del modelo de datos
Muchas de las entidades del modelo de datos del bloque de creación 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.JobOrder.JobOrder) tiene una definición de datos PTC.JobOrder.JobOrder_AP asociada. En el ejemplo de este tema se añade una nueva propiedad City a la definición de datos PTC.JobOrder.JobOrder_AP.
La adición de propiedades personalizadas al modelo de datos 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 hasta PTC.JobOrder.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 City. El nombre nuevo no puede coincidir con el nombre de ningún campo de la definición de datos original.
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 MyPrimaryCity genera una columna denominada myprimarycity. 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 Icono de marca de verificación. 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. Vaya al administrador de la entidad a la que se añade la nueva propiedad. Para este ejemplo, navegue hasta la cosa PTC.JobOrderImpl.Manager.
2. Cree un duplicado de esa cosa del administrador que se pueda personalizar. Para este ejemplo, asigne un nombre a la cosa del administrador duplicada MyCompany.MyJobOrderImpl.Manager. Para el valor de Proyecto en la cosa del administrador duplicada, utilice el proyecto para un bloque de creación que haya creado. En este ejemplo, se utilizaría un bloque de creación basado en el bloque de creación PTC.JobOrderImpl que tiene un proyecto denominado MyCompany.MyJobOrderImpl. Para obtener más información, consulte Crear un nuevo bloque de creación.
3. Registre el administrador duplicado.
a. Vaya a la cosa PTC.Base.Manager.
b. En Configuración, edite la fila del administrador correspondiente en la tabla de configuración DefaultGlobalManagerConfiguration y defina el valor de managerThingName en la nueva cosa del administrador duplicada que se ha creado en el paso 2. Para este ejemplo, actualice la fila de PTC.JobOrder.Manager para definir MyCompany.MyJobOrderImpl.Manager como managerThingName.
c. Pulse en Guardar para guardar los cambios realizados en la cosa del administrador.
4. Navegue hasta la cosa del administrador duplicada que se ha creado en el paso 2. Para este ejemplo, navegue hasta MyCompany.MyJobOrderImpl.Manager.
5. En Servicios, busque y sustituya el servicio GetDBInfo.
6. 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.JobOrder.JobOrder_AP",
"indexedFields": []
7. 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: nombre de la columna. Obligatorio.
unique: permite especificar si la propiedad debe tener un valor único.
fieldNames: matriz que contiene los nombres de las columnas. Si solo se especifica una columna, se crea un índice único. Si se especifican varias columnas, se crea un índice compuesto.
* 
Se puede crear un índice único especificando name con un valor único que sea el nombre de la columna, en lugar de especificar un valor único para fieldnames. Si se especifican name y fieldnames, se desestima name y el índice se crea con los valores de fieldnames.
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_de_tabla>_<nombre_de_columna1>_<nombre_de_columna2>_<nombre_de_columnaN>_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 una matriz 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.
defaultValue: el valor por defecto de la propiedad.
* 
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 City tiene una longitud de columna de 4000 caracteres y no puede tener un valor nulo, actualice la entrada para la definición de datos PTC.JobOrder.JobOrder_AP tal como se indica a continuación:
{
"dataShapeName": "PTC.JobOrder.JobOrder_AP",
"indexedFields": []
"fields": [{
"name": "City",
"length": 4000
"notNull": true
}]
},
8. 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 que está disponible en cada cosa del administrador del bloque de creación de patrón de diseño de implementación para combinar las definiciones de datos PTC.JobOrder.JobOrder y PTC.JobOrder.JobOrder_AP en una única infotable, y rellena la nueva propiedad City con el valor de Montreal.
var jobOrderDataShapeName = "PTC.JobOrder.JobOrder";
var jobOrderManagerThingName = me.GetJobOrderManager();
var jobOrders = Things[jobOrderManagerThingName ].CreateInfoTable({
dataShapeName: jobOrderDataShapeName
});
var jobOrder = {};
jobOrder.ID = "" + 121;
jobOrder.WorkType = 1;
jobOrder.Description = "test";
jobOrder.City = "Montreal";
jobOrders.AddRow(jobOrder);

var newJobOrders = Things[jobOrderManagerThingName ].CreateJobOrders({
JobOrders: jobOrders
});
¿Fue esto útil?