Bloques de creación > Extensión del modelo de datos > Adición de entidades personalizadas al modelo de datos
Adición de entidades personalizadas al modelo de datos
La adición de entidades nuevas al modelo de datos implica varios pasos:
Crear un nuevo bloque de creación
Para crear un nuevo bloque de creación, complete los siguientes pasos:
1. Cree un proyecto nuevo. Utilice un prefijo exclusivo para el proyecto, como por ejemplo el nombre de la empresa. El prefijo de PTC está reservado para entidades entregadas por PTC. Para este ejemplo, cree un proyecto denominado MyCompany.MyBuildingBlock. Para cada nueva plantilla de cosa, cosa u otra entidad que se cree para este bloque de creación, se debe añadir el nuevo proyecto como el valor de Proyecto en la página Información general de la entidad.
2. Crear una nueva plantilla de cosa de punto de entrada en el proyecto. En este ejemplo, asigne a la nueva plantilla de cosa el nombre MyCompany.MyBuildingBlock.EntryPoint_TT. La Plantilla de cosa base que se debe utilizar depende del tipo del nuevo bloque de creación:
Si el bloque de creación se extiende desde un bloque de creación de PTC, utilice la plantilla de cosa de punto de entrada del bloque de creación de PTC.
Si el bloque de creación es un bloque de creación abstracto, utilice la plantilla de cosa PTC.Base.ComponentEntryPoint_TT.
Si el bloque de creación es un bloque de creación de implementación, utilice PTC.DefaultConfiguration.EntryPoint_TT.
Plantilla de cosa.
Si el bloque de creación es un bloque de creación estándar, utilice la plantilla de cosa PTC.Base.ComponentEntryPoint_TT.
Si el bloque de creación es un bloque de creación de interfaz de usuario, utilice la plantilla de cosa PTC.Base.ComponentEntryPoint_TT.
3. Cree una nueva cosa en el proyecto que utilice la plantilla de cosa que se ha creado en el paso 2 como Plantilla de cosa base. En este ejemplo, asigne a la nueva cosa el nombre MyCompany.MyBuildingBlock.EntryPoint.
4. Si el bloque de creación no se extiende desde un bloque de creación de PTC, cree una nueva definición de cosa en el proyecto para mantener las definiciones de servicio para la gestión de la nueva entidad. En este ejemplo, asigne un nombre a la nueva definición de cosa MyCompany.MyBuildingBlock.Managment_TS. Si el bloque de creación se extiende desde un bloque de creación de PTC, omita este paso.
5. Si el bloque de creación no se extiende desde un bloque de creación de PTC, cree una nueva plantilla de cosa en el proyecto que utilice PTC.base.CommonManager_TT como Plantilla de cosa base. En este ejemplo, asigne a la nueva plantilla de cosa el nombre MyCompany.MyBuildingBlock.Manager_TT. Si el bloque de creación se extiende desde un bloque de creación de PTC, omita este paso.
6. Si el bloque de creación no se extiende desde un bloque de creación de PTC, añada la definición de cosa que se ha creado en el paso 4 al campo Definiciones implementadas de la plantilla de cosa que se ha creado en el paso 5. Si el bloque de creación se extiende desde un bloque de creación de PTC, omita este paso.
7. Cree una nueva cosa en el proyecto que utilice la plantilla de cosa que se ha creado en el paso 5 como Plantilla de cosa base. En este ejemplo, asigne a la nueva cosa el nombre MyCompany.MyBuildingBlock.Manager y utilice MyCompany.MyBuildingBlock.Manager_TT como Plantilla de cosa base.
8. Si el nuevo bloque de creación se extiende desde un bloque de creación de PTC, añada las configuraciones de la cosa del administrador del bloque de creación original a la cosa del administrador del nuevo bloque de creación.
a. Navegue hasta la cosa del administrador que se ha creado en el paso 7, en este ejemplo MyCompany.MyBuildingBlock.Manager.
b. En Configuración, añada las mismas configuraciones que se encuentran en la página Configuración de la cosa del administrador del bloque de creación original.
9. Registre el administrador personalizado.
a. Vaya a la cosa PTC.Base.Manager.
b. En Configuración, pulse en Añadir para la tabla de configuración DefaultGlobalManagerConfiguration.
En Nombre, introduzca un nombre para el administrador personalizado, por ejemplo, MyCompany.MyBuildingBlock.Manager.
Para Valor, busque y seleccione la cosa del administrador personalizado que se ha creado en el paso 7.
c. Pulse en Añadir para añadir el administrador personalizado a la tabla de configuración.
d. Pulse en Guardar para guardar las actualizaciones de la cosa del administrador.
Crear una definición de datos para la nueva entidad
Para crear una definición de datos para la nueva entidad, complete los siguientes pasos:
1. En ThingWorx Composer, cree una nueva definición de datos. Añada la definición de datos al proyecto para el nuevo bloque de creación. Para este ejemplo, asigne un nombre a la definición de datos MyObject.
2. En Definiciones de campo, pulse en Añadir y especifique nuevas definiciones de campo para cada propiedad que se debe incluir en la definición de datos.
a. Para designar un campo como clave principal, seleccione la casilla Es clave principal para ese campo.
b. Defina el Tipo base del campo de clave principal en LONG. Si el campo de clave principal es un tipo de datos LONG, los valores de este campo se generan automáticamente y la lógica para aumentar el valor se controla mediante la base de datos. Si se selecciona un Tipo base diferente, se debe gestionar la lógica para la exclusividad de la clave principal.
Para alinearse con el modelo de datos del bloque de creación, añada un campo UID, con un Tipo base de LONG, y seleccione la casilla Es clave principal.
3. Pulse en Guardar para guardar la nueva definición de datos.
* 
Cuando se crea la tabla de base de datos para la definición de datos, el nombre de la tabla de base de datos es el nombre de la definición de datos, excepto cualquier prefijo, en minúsculas. Por ejemplo, si la definición de datos se denomina ABC.MyObject, el nombre de tabla de base de datos es myobject. Puesto que los prefijos no se incluyen en los nombres de la tabla de base de datos, no se soportan varios nombres de definición de datos que produzcan los mismos nombres de la tabla de base de datos, tales como ABC.MyObject y PTC.JobOrder.MyObject.
Del mismo modo, los nombres de columna de la tabla 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.
Actualizar la información de la base de datos para incluir la nueva definición de datos
Actualice la información de la base de datos para incluir la nueva definición de datos. Para ello, se puede añadir la información de la base de datos de la entidad al servicio GetDBInfo en la cosa del administrador del nuevo bloque de creación (MyCompany.MyBuildingBlock.Manager).
Para añadir la información de la base de datos para la nueva definición de datos a un servicio GetDBInfo existente:
1. Navegue hasta la cosa del administrador del nuevo bloque de creación (MyCompany.MyBuildingBlock.Manager).
2. En Servicios, navegue hasta el servicio GetDBInfo y sustitúyalo.
3. En el editor de scripts, añada una entrada para la nueva definición de datos como una matriz, de forma similar a las entradas de definición de datos existentes. Incluya la información de la base de datos para su definición de datos:
dataShapeName: nombre de la definición de datos para la que se añade la nueva tabla de base de datos.
indexedFields: columnas que se van a indexar. La indexación ayuda a realizar búsquedas y clasificaciones más rápidas. Se pueden definir varios campos indexados en una matriz. Cada elemento de la matriz puede contener las siguientes propiedades:
name: nombre de la columna. Obligatorio.
unique: permite especificar si la columna 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_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.
fields: cualquier columna para la que sea necesaria una especificación adicional. Se pueden definir varios campos en una matriz. Cada elemento de la matriz puede contener las siguientes propiedades:
name: nombre de la columna. Obligatorio.
length: longitud de la columna, si la columna es un String, y se necesita una longitud distinta de la longitud por defecto de la base de datos.
notNull: permite especificar si la columna no debe ser nula.
defaultValue: el valor por defecto de la propiedad.
* 
Si una columna debe tener un valor único, se debe especificar mediante unique en la matriz indexedFields, en lugar de hacerlo en la matriz fields.
foreignKeys: cualquier definición de columna de clave externa para la nueva tabla de base de datos. Se pueden definir varias claves externas en una matriz. Cada elemento de la matriz debe contener las siguientes propiedades:
name: nombre de la columna 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.
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>_fk. 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.
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.
Por ejemplo, para que la nueva definición de datos MyObject no tenga campos indexados, tanga una clave externa, y defina la longitud del campo Location en 4000 caracteres, introduzca lo siguiente:
{
"dataShapeName": "MyObject",
"indexedFields": [],
"foreignKeys": [{"name":"WorkDefinitionUID", "referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition", "referenceFieldName":"UID"}],
"fields": [
{
"name": "Location",
"length": 4000
}
]
}
4. Pulse en Terminado y, a continuación, en Guardar para guardar el servicio actualizado.
Crear servicios CRUD
Cree los servicios CRUD necesarios para gestionar las instancias de la nueva definición de datos.
1. En la definición de cosa de gestión del bloque de creación (MyCompany.MyBuildingBlock.Managment_TS), en Servicios, pulse en Añadir y cree los servicios necesarios. Utilice los servicios CRUD existentes para las entidades del bloque de creación como modelos.
Un servicio de creación:
Introduzca un nombre de servicio. Para este ejemplo, introduzca AddMyObjects.
Para la entrada de servicio, añada una entrada denominada MyObjects, con un Tipo base de INFOTABLE. Para Definición de datos, seleccione su definición de datos.
Para la salida del servicio, seleccione INFOTABLE y elija su definición de datos.
En el panel de scripts, introduzca un código similar al siguiente:
var insertParams = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Insert(insertParams);
Un servicio de borrado:
Introduzca un nombre de servicio. Para este ejemplo, introduzca DeleteMyObject.
Para la entrada de servicio, añada una entrada denominada UID, con un Tipo base de STRING.
Para la salida del servicio, seleccione INFOTABLE y elija su definición de datos.
En el panel de scripts, introduzca un código similar al siguiente:
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Delete(params);
Un servicio de actualización:
Introduzca un nombre de servicio. Para este ejemplo, introduzca UpdateMyObjects.
Para la entrada de servicio, añada una entrada denominada MyObjects, con un Tipo base de INFOTABLE. Para Definición de datos, seleccione su definición de datos.
Para la salida del servicio, seleccione INFOTABLE y elija su definición de datos.
En el panel de scripts, introduzca un código similar al siguiente:
var params = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Update(params);
Un servicio para recuperar una instancia individual de esta definición de datos:
Introduzca un nombre de servicio. Para este ejemplo, introduzca GetMyObject.
Para la entrada de servicio, añada una entrada denominada UID, con un Tipo base de STRING.
Para la salida del servicio, seleccione INFOTABLE y elija su definición de datos.
En el panel de scripts, introduzca un código similar al siguiente:
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].GetEntity(params);
Un servicio para recuperar varias instancias de esta definición de datos, incluyendo opcionalmente los parámetros de entrada de filtro, desvío y límite. Si no se especifican parámetros de entrada, se devuelven todas las instancias de MyObject:
Introduzca un nombre de servicio. Para este ejemplo, introduzca GetMyObjects.
Para la entrada de servicio:
Añada una entrada denominada filter con un Tipo base de JSON.
Añada una entrada denominada offset con un Tipo base de INTEGER.
Añada una entrada denominada limit con un Tipo base de INTEGER.
Para la salida del servicio, seleccione INFOTABLE y elija su definición de datos.
En el panel de scripts, introduzca un código similar al siguiente:
var params = {
filter: filter,
dataShapeName: "MyObject",
offset: offset,
limit: limit
};
var result = Things[me.GetDatabaseThingName()].Query(params);
2. Pulse en Guardar para guardar los nuevos servicios en la definición de cosa.
Sincronizar la información de base de datos y el esquema de base de datos
Añada la nueva entidad a la base de datos mediante la sincronización de 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.
¿Fue esto útil?