SGME - It5 - Análisis y diseño de los Informes

Andrés Moschini

Historial de revisiones
Revisión Entrega008.012007-10-14
Creación del documento.
Revisión Entrega008.022007-10-21
Ultima revisión.

Informes

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.


Sucesos

Los sucesos agrupan una serie de operaciones relacionadas y que ocurrieron en la misma fecha.


Marcadores

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

Operaciones a definir

  1. Ingresar artículo.

  2. Agregar componente a artículo continente.

  3. Quitar componente a artículo continente.

  4. 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í:


IngresarArticulo(nombreEspecificación := 'Monitor', marcadorCreado =: articuloCreado);
CambiarAtributoArticulo(
     idArticulo := articuloCreado,                                                (1)
     nombreAtributo := 'Color',
     valorAnterior := desconocido,                                                (2)
     valorNuevo := 'Negro');     
        

1Debilidades del esquema anterior

(1)
¿Como se definen los atributos si se desea ingresar muchos artículos similares?

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

(2)
El artículo recién creado ya tiene un valor para el atributo indicado, pero no lo conocemos. Eso puede ocurrir en muchos casos.

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.


Schema XML

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


Clases .NET

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 Items de Articulos corresponde a un arreglo de objetos que podrían ser tanto a ints identificadores de Articulo, o strings de referencia a marcador de Articulos o de Articulo.

Así también, el atributo Item de Articulo correspondería a un int identificador de Articulo, o un string de referencia a marcador de Articulo.


Ejecución de los informes

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

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.

Notas

[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.