Adición de propiedades personalizadas y definiciones de datos
Adición de propiedades personalizadas y definiciones de datos
El modelo de datos de Operator Advisor se puede extender para añadir datos específicos del negocio al modelo que no se proporciona de fábrica. Esto se consigue de las siguientes maneras:
Añadir propiedades personalizadas a entidades de Operator Advisor existentes mediante la actualización de la definición de datos _AP asociada a la entidad de Operator Advisor.
Añadir entidades nuevas a Operator Advisor creando definiciones de datos personalizadas y los servicios para gestionarlas.
Añadir propiedades personalizadas a las definiciones de datos de _AP
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 pedido de trabajo (PTC.SCA.SCO.JobOrder) tiene una definición de datos PTC.SCA.SCO.JobOrder_AP.
Utilice el siguiente procedimiento para añadir una propiedad personalizada a una entidad de Operator Advisor. En el ejemplo se añade una nueva propiedad de Location a la definición de datos PTC.SCA.SCO.JobOrder_AP.
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.
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.
6. Navegue a la cosa de base de datos configurada para el sistema, por ejemplo, PTC.SCA.SCO.PostgresDatabase.
7. En Servicios, ejecute el servicio AddColumn con los parámetros de entrada siguientes:
Para dataShapeName, busque y seleccione la definición de datos _AP a la que se ha añadido la nueva definición de campo. Para este ejemplo, busque y seleccione PTC.SCA.SCO.JobOrder_AP.
Para fieldName, escriba el nombre de la nueva definición de campo. Para este ejemplo, introduzca Location.
Para dbInfo, introduzca la información de la base de datos para la nueva columna:
name: nombre de la columna que se añade a la base de datos para la nueva propiedad. Obligatorio
length: longitud de columna para la nueva columna, si es distinta de la longitud de columna por defecto de la base de datos.
unique: permite especificar si la columna debe tener un valor único.
notNull: permite especificar si la columna no debe ser nula.
Para este ejemplo, introduzca lo siguiente:
{"name":"Location","length":4000}
El siguiente código es un ejemplo de cómo la propiedad personalizada se puede incluir en un servicio para rellenar el atributo 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 el nuevo atributo 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
});
Inclusión de propiedades personalizadas en un mashup
En los siguientes pasos se proporciona una práctica recomendada para utilizar la inclusión de propiedades en un mashup.
1. Añada una propiedad personalizada a la definición de datos _AP y ejecute el servicio AddColumn, tal como se describe en la sección anterior. En este ejemplo, se continúa con la propiedad Location personalizada añadida a la definición de datos PTC.SCA.SCO.JobOrder_AP de la sección anterior.
2. Cree una nueva definición de datos con definiciones de campo de la definición de datos de entidad principal y la definición de datos _AP.
Para este ejemplo, cree una nueva definición de datos denominada MyJobOrder. Añada definiciones de campo para ID (desde la definición de datos PTC.SCA.SCO.JobOrder) y Location (desde la definición de datos PTC.SCA.SCO.JobOrder_AP).
3. Navegue a la cosa PTC.SCA.SCO.ProductionOrderUtils.
4. En Servicios, añada un nuevo servicio para crear instancias de la definición de datos creada en el paso 2. Para los parámetros de entrada y salida, utilice una infotable de la nueva definición de datos.
Para este ejemplo, se añade un nuevo servicio denominado CreateMyJobOrder, con una infotable de la definición de datos MyJobOrder para los parámetros de entrada y salida. En el editor de servicios, introduzca un código similar al siguiente:
var productionManagerThingName = Things["PTC.Factory.LaunchPointConfigurationThing"].GetProductionOrderManagerThingName();
var newJobOrders = Things[productionManagerThingName].CreateJobOrders({
JobOrders: myJobOrders
});
//Put new job orders in a new info table of MyJobOrder in order to filter the return attribute, this is not required.
var params = {
infoTableName : "InfoTable",
dataShapeName : "MyJobOrder"
};
var result = Resources["InfoTableFunctions"].CreateInfoTableFromDataShape(params);
var tableLength = newJobOrders.rows.length;
for (var x=0; x < tableLength; x++) {
var row = newJobOrders.rows[x];
result.AddRow(row);
}
5. El uso del nuevo servicio en un mashup da lugar a la creación de nuevas instancias de la entidad con la propiedad personalizada presente. En este ejemplo, el uso del servicio CreateMyJobOrder en un mashup tiene como resultado la creación de nuevas órdenes de trabajo con la propiedad ID rellenada en la tabla de base de datos PTC.SCA.SCO.JobOrder y la propiedad Location personalizada rellenada en la tabla de base de datos PTC.SCA.SCO.JobOrder_AP.
Adición de definiciones de datos personalizadas
Para añadir nuevas entidades a Operator Advisor, cree una nueva definición de datos para la entidad con los servicios necesarios para gestionar las instancias de la definición de datos.
1. En ThingWorx Composer, cree una nueva definición de datos. 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.
3. Pulse en Guardar para guardar la nueva definición de datos.
4. Navegue a la cosa de base de datos configurada para el sistema, por ejemplo, PTC.SCA.SCO.PostgresDatabase.
5. En Servicios, ejecute el servicio CreateTable con las entradas siguientes:
Para dataShapeName, busque y seleccione la nueva definición de datos creada en el paso 1.
Para dbInfo, introduzca una matriz JSON que contenga la información de la base de datos para la 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.
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.
unique: permite especificar si la columna debe tener un valor único.
notNull: permite especificar si la columna no debe ser nula.
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.
Para obtener más información, consulte Adición o eliminación de 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
}
]
}
6. Navegue al administrador de órdenes de producción por defecto (PTC.SCA.SCO.DefaultProductionOrderManager).
7. En Servicios, pulse en Añadir y cree los servicios necesarios para gestionar las entidades de la nueva definición de datos. Utilice los servicios CRUD existentes para las entidades de Operator Advisor como modelos.
Un servicio de creación. Para este ejemplo, introduzca CreateMyObjects como nombre de servicio. En el editor de servicios, introduzca el siguiente código:
var insertParams = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Insert(insertParams);
Un servicio de borrado. Para este ejemplo, introduzca DeleteMyObject como nombre de servicio. En el editor de servicios, introduzca el siguiente código:
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Delete(params);
Un servicio de actualización. Para este ejemplo, introduzca UpdateMyObjects como nombre de servicio. En el editor de servicios, introduzca el siguiente código:
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. Para este ejemplo, introduzca GetMyObject como nombre de servicio. En el editor de servicios, introduzca el siguiente código:
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. Para este ejemplo, introduzca GetMyObjects como nombre de servicio. En el editor de servicios, introduzca el siguiente código:
var params = {
filter: filter,
dataShapeName: "MyObject",
offset: offset,
limit: limit
};
var result = Things[me.GetDatabaseThingName()].Query(params);
8. Pulse en Guardar para guardar los nuevos servicios en el administrador de órdenes de producción por defecto (PTC.SCA.SCO.DefaultProductionOrderManager).