| Historial de revisiones | ||
|---|---|---|
| Revisión Entrega008.01 | 2007-10-14 | |
| Creación del documento. | ||
| Revisión Entrega008.02 | 2007-10-21 | |
| Ultima revisión. | ||
Los informes deberán permitir describir, mediante la operaciones, cualquier cambio de estado en el dominio del sistema, de manera que se vean reflejados en el estado interno del mismo.
Deberán tenerse en cuenta, las fechas de recepción, de carga efectiva en el sistema y las fechas de sucedido de las operaciones. En próximas iteraciones también deberán tenerse en cuenta las personas responsables.
Los sucesos agrupan una serie de operaciones relacionadas y que ocurrieron en la misma fecha.
Llamaremos marcadores a las referencias a los parámetros de salida de las operaciones, de esa manera, una operación podrá asociarse a los resultados de una operación anterior.
Operaciones a definir
Ingresar artículo.
Agregar componente a artículo continente.
Quitar componente a artículo continente.
Cambiar atributo de artículo.
Primera aproximación
Operación: IngresarArticulo
Parámetros Entrada: nombrePlantilla
Parámetros Salida: marcadorCreado
Operación: AgregarComponente
Parámetros Entrada: idContinente, nombreParte, idContenible
Parámetros Salida: -
Operación: QuitarComponente
Parámetros Entrada: idContinente, nombreParte, idContenible
Parámetros Salida: -
Operación: CambiarAtributoArticulo
Parámetros Entrada: idArticulo, nombreAtributo, valorAnterior,
valorNuevo
Parámetros Salida: -
En la operación IngresarArticulo se
observa que es necesario contar con parámetros de salida y también
aceptar el uso de variables en nuestros informes; Contemplemos el
caso de que decidamos crear un artículo y modificar el valor de algunos de sus
atributos, el informe sería algo mas o menos así:
1Debilidades del esquema anterior

Si los artículos no se crean en linea, es imposible obtener el identificador para etiquetar el artículo físicamente.

Operaciones corregidas
Operación: IngresarArticulos
Parámetros Entrada: nombrePlantilla, {cantidad}
[1]
, {idArticulo}
Parámetros Salida: marcadorCreados
Descripción: Crea los artículos según la plantilla indicada. Si no
se especifica la cantidad, se crea solo un artículo. Si se
especifica el idArticulo de ingreso, el artículo creado
tendrá el identificador especificado, si se crea mas de un
artículo, se les asignarán identificadores secuenciales desde
el especificado, si alguno de los identificadores ya existe, se
cancelará la operación.
Operación: AgregarComponentes
Parámetros Entrada: idContinente, nombreParte, idContenible[]
[2]
Parámetros Salida: -
Descripción: Asigna el o los artículos contenibles a la parte del continente.
Operación: QuitarComponentes
Parámetros Entrada: idContenible[]
Parámetros Salida: marcadorContinentes
Descripción: Libera los contenibles indicados de los continentes a los que estén asignados, devuelve el listado de continentes de los que se extraen los contenibles.
Operación: QuitarComponentes
Parámetros Entrada: idContinente, nombreParte
Parámetros Salida: marcadorContenibles
Descripción: Libera los contenibles asignados a la parte y continente indicados, devuelve el listado de los contenibles liberados.
Operación: CambiarAtributoArticulos
Parámetros Entrada: idArticulo[], nombreAtributo, {valorAnterior},
valorNuevo
Parámetros Salida: -
Descripción: Cambia el valor del atributo de los artículos indicados, si se especifica el valor anterior y esté no coincide con el valor del atributo de alguno de los artículos, se cancela la operación.
El schema XML informe.xsd [PDF] describe el formato y las restricciones para la redacción XML de los informes.
Puede apreciarse un ejemplo de informe en formato XML en el archivo informe1.xml [PDF] .
Algunas aclaraciones
Los artículos, valores, partes y plantillas son declarados como complexType y no simplemente como nombres o identificadores, previendo que en un futuro puedan referenciarse de otras maneras, no solamente por nombre o id.
Los artículos (Articulo y
Articulos) pueden indicarse
(además de por id o por lista de ids) por referencia a
marcadores de resultados de operaciones ejecutadas
previamente.
La validez de las referencias a los marcadores no puede ser controlada por el parser XML, de manera será verificada al intentar asentar los datos del informe en la base de datos.
La materialización de los informes se realizará en la
siguiente estructura de clases en el espacio de nombres
PF.DbMm.Usuario.Informes.

Nota: Cabe aclarar que el atributo
ItemsdeArticuloscorresponde a un arreglo de objetos que podrían ser tanto aints identificadores deArticulo, ostrings de referencia a marcador deArticuloso deArticulo.Así también, el atributo
ItemdeArticulocorrespondería a unintidentificador deArticulo, o unstringde referencia a marcador deArticulo.
Puede observarse que las clases heredan de
PF.DbMm.ComandoDb. Esto se debe a que las
clases del espacio de nombres
PF.DbMm.Usuario.Informes no solo
representan los datos de los informes, sino que también se
encargan de "realizar" las operaciones en el estado
interno del sistema, es decir, realizan los cambios en la base de
datos. A este proceso llamaremos
ejecutar.
La ejecución de un informe consiste en la ejecución sucesiva de los sucesos descriptos en dicho informe. La ejecución de un suceso consiste en la ejecución de sus operaciones. La ejecución de una operación consiste en almacenar en la base de datos los cambios correspondientes a dicha operación y obtener los valores de salida para almacenarlos en la "tabla de marcadores".
La tabla de marcadores será un objeto auxiliar en la ejecución de los informes y permitirá a las operaciones acceder a los resultados de las operaciones anteriores.
Consiste básicamente en una tabla hash en la que cada operación al ejecutarse almacenará sus resultados asociados al nombres de la referencia al marcador indicada en la operación.
También se almacenará otra información útil para el procesado de los informes como pueda ser el informe y suceso actuales.
Al devolver listas de entidades (por ahora solo ids de artículos), se encargará de no devolver duplicados.
| [1] | Los parámetros encerrados entre símbolos { } son opcionales. |
| [2] | Los símbolos [] representan un conjunto, o arreglo, de por lo menos un objeto del tipo de objetos que los preceden. |