Académique Documents
Professionnel Documents
Culture Documents
GUUÍÍAA TEECCNNO
OLLÓ
ÓGGIIC
CAA
ÍÍnnddiiccee
I N T R O D U C C I O N ............................................................................................................3
O B J E T O S .......................................................................................................................4
C L A S E S .........................................................................................................................5
O B J E T O S F L E X A B .........................................................................................................7
R E L A C I O N E S E N T R E O B J E T O S ......................................................................................8
E S T R U C T U R A D E F L E X A B .............................................................................................9
A P L I C A C I O N E S C O N F L E X A B ......................................................................................10
C R E A C I Ó N D E A P L I C A C I O N E S C O N F L E X A B ..............................................................11
U N I V E R S O S E N F L E X A B .............................................................................................12
U N I V E R S O S ................................................................................................................... 12
S I S T E M A S ..................................................................................................................... 12
E S P A C I O S ..................................................................................................................... 13
G R U P O S D E U S U A R I O S .................................................................................................. 13
A P L I C A C I O N E S .............................................................................................................. 13
C L A S E S E N F L E X A B ....................................................................................................... 14
T I P O S D E C L A S E S E N F L E X A B ....................................................................................... 14
R E L A C I Ó N E N F L E X A B ...............................................................................................16
T I P O S D E R E L A C I O N E S E N F L E X A B ............................................................................... 16
M O D E L O D E C L A S E R E A L ............................................................................................19
T I P O S D E A T R I B U T O S E N F L E X A B ................................................................................. 19
E S T A D O S E N F L E X A B .................................................................................................... 21
G R U P O S E N F L E X A B ...................................................................................................... 21
T I P O S E N F L E X A B ......................................................................................................... 22
T I P O S D E I D E N T I F I C A D O R E S E N F L E X A B ....................................................................... 24
D E F I N I C I Ó N D E M É T O D O S E N F L E X A B .......................................................................... 24
C L A S E R E A L ( V I S T A S ) .................................................................................................27
F O R M U L A R I O S D E U N A C L A S E R E A L ............................................................................... 27
R E P O R T E S D E U N A C L A S E R E A L ..................................................................................... 28
C L A S E R E A L ( M I S C E L Á N E A ) .......................................................................................29
R E G L A S D E S E G U R I D A D ................................................................................................. 29
C O N F I G U R A C I Ó N D E A Y U D A .......................................................................................... 30
F I L T R O S .....................................................................................................................30
E V E N T O S D E F L E X A B .................................................................................................31
E V E N T O S D E U S U A R I O .................................................................................................. 32
R E F E R E N C I A D E L O S G R A F I C O S .................................................................................32
En una aplicación típica no orientada a objetos, usted tiene dos cosas: Código y Datos.
En una aplicación típica orientada a objetos usted tiene una cosa, y solo una cosa: OBJETOS.
FlexAB nos permite crear objetos y manejarlos de una manera sencilla, sin necesidad de
preocuparnos en como se almacenan los datos.
Debido a que todas las Aplicaciones que se desarrollen con FlexAB se realizan sobre la misma
base o plataforma, y con la misma estructura de datos TODOS los objetos que se creen pueden
ser utilizados en cualquier Aplicación.
Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor. Digamos que
para leer esta guía lo hacemos a través del monitor y una computadora, ambos son objetos, al
igual que nuestro teléfono celular, un árbol o un automóvil.
Analicemos un poco más a un objeto del mundo real, como la computadora. No necesitamos ser
expertos en hardware para saber que una computadora está compuesta internamente por
varios componentes: la placa madre, el procesador, un disco duro, una placa de video, y otras
partes más. El trabajo en conjunto de todos estos componentes hace operar a una
computadora.
Internamente, cada uno de estos componentes puede ser sumamente complicado y puede ser
fabricado por diversas compañías con diversos métodos de diseño. Pero nosotros no
necesitamos saber cómo trabajan cada uno de estos componentes, como saber que hace cada
chips de la placa madre, o cómo funciona internamente el procesador. Cada componente es una
unidad autónoma, y todo lo que necesitamos saber de adentro es cómo interactúan entre sí los
componentes, saber por ejemplo si el procesador y las memorias son compatibles con la placa
madre, o conocer donde se coloca la placa de video. Cuando conocemos como interaccionan los
componentes entre sí, podremos armar fácilmente una computadora.
Un sistema en FlexAB está construido en base a diferentes componentes (Objetos), cada uno
tiene un rol específico y todos los componentes pueden comunicarse entre ellos de formas
predefinidas.
Todo objeto del mundo real tiene 2 componentes: características y comportamientos. Por
ejemplo, los automóviles tienen características (marca, modelo, color, velocidad máxima) y
comportamiento (frenar, acelerar, retroceder, llenar combustible, cambiar llantas).
Los Objetos de FlexAB, al igual que los objetos del mundo real, también tienen características
y comportamientos. Son entidades complejas provistas de datos (propiedades, atributos) y
comportamiento (funcionalidad, programas, métodos). Corresponden a los objetos reales del
mundo que nos rodea.
Cada objeto es una estructura compleja en cuyo interior hay atributos y métodos, todos ellos
relacionados entre sí, como si estuvieran encerrados conjuntamente en una cápsula. Esta
propiedad (encapsulamiento), es una de las características fundamentales en la Orientación a
Objetos.
Las peticiones de información a un objeto, deben realizarse a través de mensajes dirigidos a él,
con la orden de realizar la operación pertinente. La respuesta a estas órdenes será la
información requerida, siempre que el objeto considere que quien envía el mensaje está
autorizado para obtenerla.
El hecho de que cada objeto sea una cápsula facilita enormemente que un objeto
determinado pueda ser transportado a otro punto de la organización, o incluso a otra
organización totalmente diferente que precise de él. Si el objeto ha sido bien construido, sus
métodos seguirán funcionando en el nuevo entorno sin problemas. Esta cualidad hace que la
Orientación a Objetos sea muy apta para la reutilización de aplicaciones.
Los objetos FlexAB son la representación de cualquier objeto de la vida real (toda entidad
única que se la pueda identificar con un nombre y que posea atributos o propiedades que lo
definan) dentro del sistema de desarrollo de aplicaciones. En función de la vida real, si es un
objeto en la vida real seguramente será un objeto FlexAB, ahora puede haber objetos que
no existen en la vida real que también son objetos FlexAB.
En el mundo real, normalmente tenemos muchos objetos del mismo tipo. Por ejemplo, nuestro
teléfono celular es sólo uno de los miles que hay en el mundo. Si hablamos en términos de la
orientación a objetos, podemos decir que nuestro objeto celular es una instancia de una
clase conocida como "celular". Los celulares tienen características (marca, modelo, sistema
operativo, pantalla, teclado, etc.) y comportamientos (hacer y recibir llamadas, enviar mensajes
multimedia, transmisión de datos, etc.). Un mensaje en un objeto es la acción de efectuar una
llamada a un método. Por ejemplo, cuando le decimos a un objeto celular que haga una llamada
estamos pasándole el mensaje “hacer llamada”, el cual se ejecuta a través de un evento. El
evento es una acción determinada que genera la ejecución de un método en un objeto, en el
caso del celular un evento sería apretar el botón send en la pantalla para enviar un mensaje.
Cuando se fabrican los celulares, los fabricantes aprovechan el hecho de que los celulares
comparten esas características comunes y construyen modelos o plantillas comunes, para que a
partir de esas se puedan crear muchos equipos celulares del mismo modelo. A ese modelo o
plantilla lo llamamos CLASE, y a los equipos que sacamos a partir de ella la llamamos
OBJETOS (instancia de una clase).
La clase es un modelo o prototipo que define las variables y métodos comunes a todos los
objetos de cierta clase. También se puede decir que una clase es una plantilla genérica para un
conjunto de objetos de similares características.
Por otro lado, una instancia de una clase es otra forma de llamar a un objeto. En realidad
no existe diferencia entre un objeto y una instancia. Sólo que el objeto es un término más
general, pero los objetos y las instancias son ambas representación de una clase. Es decir, una
instancia es un objeto de una clase en particular.
Las clases de objetos de FlexAB tienen las mismas características de los objetos del
paradigma de sistemas orientados a objetos, más algunas características particulares para la
relación entre ellos.
Se puede pensar en una CLASE como en un molde para un objeto. A partir de la clase, se
pueden crear o instanciar objetos con propiedades especificas.
Además, dentro de una misma Clase los objetos pueden estar agrupados según alguna
característica. Como sabemos los celulares poseen una marca, por lo tanto un grupo posible
podría ser: marca A, marca B, marca C. A este agrupamiento lo llamamos GRUPOS de una
Clase. El identificador de objeto puede depender del grupo al que pertenezca el objeto. Uno de
los objetivos fundamentales del Grupo es poder generar identificadores con mayor flexibilidad.
Otro concepto a tener en cuenta, son los ESTADOS, cada clase se define en un árbol de
valores (estados) en los que puede estar cada uno de los Objetos de la Clase. Mediante los
estados se definen y se administran los distintos estados por los que puede pasar un Objeto.
Por ejemplo, la clase Celular puede pasar por estado operativo, estado reparación, estado
desuso.
Por otro lado, podemos definir una clase Batería. Las baterías tienen características (tensión,
tamaño, tipo de batería, etc.) y comportamientos (cargar batería). Como sabemos, para que un
celular funcione es necesario el uso de una batería, por lo tanto la clase Batería tiene que estar
representada dentro de la clase celular para una definición completa de Celular, ya que la
misma lo constituye. Por lo tanto, la clase batería la debemos incluir en la clase Celular para
agrupar lógicamente las dos clases relacionadas físicamente. Entre la clase Celular y la clase
Batería existe una relación de inclusión. Los objetos de la clase Celular tienen acceso, a los
atributos y comportamientos de la clase Batería sin necesidad de redefinirlos.
Por otro lado, la clase Batería es una clase independiente la cual tiene características y
comportamientos, a parte de ser una clase incluida de celular, puede tener una relación
Sistema de Inventarios
Inventario 2005
Inventario 2006
Como sabemos, los objetos siempre tienen relación con otros objetos, por lo que pueden tener
distintas relaciones estructurales de acuerdo al ámbito (espacio) en el que se encuentren.
1- Espacio EN USO:
CELULAR DUEÑO
Tiene un
2- Espacio EN REPARACION:
CELULAR TECNICO
Reparado por
Los objetos FlexAB son la representación de cualquier objeto de la vida real dentro del
sistema de desarrollo de aplicaciones. ¿Cómo defino un objeto FlexAB?
Por ejemplo una cuenta corriente puede ser definida como un objeto FlexAB, cuando en la
realidad no existe. Lo importante es que los objetos que se definan tengan sus
atributos y su relación con los demás. Esta relación puede ser estructural, es decir en el
universo de objetos de quien es “hijo”, o relacional, es decir, como depende ese objeto, o
alguno de sus atributos del resto del universo.
Además se debe definir para cada objeto sus reglas de validación y métodos,
relacionados con los eventos del objeto (al editarlo, al crearlo, al borrarlo). También es
necesario definir como es la vida de cada objeto, es decir una vez que se crea que sucede
con él: cambia, crece. Se define el flujo de vida del objeto, especificando cuales serán los
estados en los que cada objeto se puede encontrar, y cuales son los eventos que lo llevan de
una transición a otra.
Todo lo que se define en el espacio de las definiciones, tiene su contraparte en el espacio de las
Instancias como entidades independiente, y autónomas que comparten características comunes.
Las entidades que tienen características comunes se las define en este espacio en términos de
Clases. Por ejemplo la Clase Personas, podrá tener las instancias de las entidades u Objetos
Juan, Pedro, y Manuel.
Dado un proceso de la vida real que se desea informatizar se define el Sistema de información
dentro del espacio que estamos describiendo. El Sistema esta determinado por las diferentes
Clase de Objetos existentes, y la conformación de cada una de estas Clases, en términos de
Atributos, Métodos, Eventos, Mensajes, y Relaciones. Se pueden definir distintos
Sistemas de manera de dividir la complejidad de la vida real en diferentes partes que puedan
ser tratadas debido a sus características como semi autónomas. Es decir que tiene una gran
parte de las definiciones propias y comparten solo algunas partes con otros Sistemas. Todos
los Sistemas residen en el Universo, donde son válidas todas las definiciones de Clases, de
esta manera una Clase puede instanciar Objetos en más de un Sistema.
Las Clases dentro del Sistema que se esta modelizando son válidas dentro del Universo. Este
es el espacio donde residen todas los Sistemas. Debido a que las Clases son Universales,
compartir información entre Aplicaciones dentro del modelo es una de sus características
directas por definición.
Los Objetos como sus relaciones se definen o clasifican en el Espacio de las Definiciones, y se
crean, existen, o se instancian en las Aplicaciones.
Objetos
Relacionados o
Vinculados a las
Aparte de este manejo de objetos, que se basa en una Base de Datos Relacional Orientada a
Objetos más las funciones COM de acceso a los objetos (OrDBC), la suite de FlexAB entrega
una Interface Estándar de manera de crear aplicaciones lo más rápido posible. Esta interface
puede o no ser utilizada por el configurador, en función de cómo quiera resolver la interacción
con el usuario. Entendemos que el 90% de las aplicaciones se pueden resolver con esta
interface, lo que hace que los tiempos y costos de desarrollo se vean reducidos.
Un punto importante relacionado con lo descrito en el punto anterior, es que debido a que el
FrontEnd de la aplicación puede ser cualquiera, NO EXISTE LOGICA en los FrontEnd. Toda la
lógica del sistema reside en los objetos, por lo tanto no importa como o quien programa el
ingreso de los datos o la interacción con el usuario, eso no afectara la forma en que guarda u
obtiene la información.
Por último, una vez que se crean objetos, y se los hace interrelacionar dentro de una aplicación
es muy fácil usarlos en cualquier otra aplicación de la familia FlexAB. La escalabilidad es directa,
es decir si se necesita la información de un objeto en otra aplicación que se ha creado con
FlexAB simplemente vínculo ese objeto a la nueva aplicación, en el caso que necesito la
información y no solo la definición del objeto, permite exportar o importar la información en la
nueva aplicación. No pierdo el trabajo de definición del objeto, de su flujo de vida (que
seguramente adaptaré a la nueva aplicación), y de sus atributos.
Vincular
Si tengo una aplicación ya en uso y encuentro que necesito agregar una nueva información a un
objeto, simplemente lo edito y le agrego el nuevo atributo. No tengo que tocar código, rehacer
pantallas, verificar que no dañe la estructura de datos. Todo es directo y simple. Agrego lo que
necesito en cualquier momento.
Es mas, si lo que necesito es agregarle información a mi aplicación, defino el nuevo objeto, sus
atributos, funciones, eventos, flujo de vida, y lo agrego a mi definición de la aplicación FlexAB.
Listo. No tengo que hacer nada más. La nueva funcionalidad ya esta integrada al sistema y
andando. No hay necesidad de reescribir código, definir tablas, vincular registros. Nada! Esto es
flexibilidad y escalabilidad de FlexAB.
La siguiente figura muestra como funciona la familia de aplicaciones FlexAB y como es posible
compartir objetos (información) entre ellas y entre distintos universos. Se muestran cuatro
aplicaciones distintas, todas usando tecnología FlexAB, y como es posible compartir un mismo
objeto que fue creado en la aplicación EGP como objeto vinculado en la aplicación RCM y como
una copia del mismo objeto en la aplicación PIM.
FlexAB nos permite crear objetos y manejarlos de una manera sencilla, sin necesidad
de preocuparnos en como se almacenan los datos (en que tablas, y con que registros). El
creador de la aplicación solo se preocupa sobre qué tienen que hacer los objetos, y cómo se
deben relacionar entre sí.
La pregunta sería: ¿Si no hay código como genero los procesos que de los datos extraen
información?.
La respuesta es, cada objeto tiene la capacidad de definir como interactúan su
propios datos, y como interactúa él con los demás objetos. Esta funcionalidad se traduce
en consultas FQL (SQL + XQL), es decir consultas SQL orientadas al manejo de
información de objetos.
Toda la lógica de la aplicación se hace por medio de FQLs. Además se pueden definir
operaciones que toman datos de los resultados del FQL y lo operan según se le indique en la
configuración de las clases. También de manera similar se cargan las validaciones de integridad
de cada objeto.
Universo
tiene 1..n <DBName, LoginType, tiene 1..n
FSServerName>
tiene 1 n
define 0..n
tiene 1..n
Aplicación 1..n
FQL
es definida
0..n por
Clase
UNIVERSOS EN FLEXAB
SISTEMAS
ESPACIOS
GRUPOS DE USUARIOS
FlexAB permite definir usuarios y grupos de usuarios para restringir los permisos de operación
sobre los objetos desde cualquier interfaz de usuario. Un Grupo de usuario está definido por los
atributos:
• IdUserGroup: Identificador del universo
• Description: Nombre descriptivo del universo.
Las operaciones permitidas para el grupo se configuran de manera independiente en cada
aplicación (ver siguiente apartado).
Un usuario se define por los atributos:
• IdUser: Nombre de usuario para el inicio de sesión.
• Username: Nombre descriptivo del usuario.
• PassWord: clave de acceso para el inicio de sesión
• Login Try: Cantidad de intentos disponibles antes de iniciar sesión.
• State: Habilitado o no habilitado
• User Language: Idioma configurado para utilizar desde la Interface de usuario.
• Email: Cuenta de correo electrónico donde reportar los mensajes de error
• SMTP Server: Servidor SMTP a usar en el envío de los reportes de error.
APLICACIONES
Una aplicación es una instancia de un sistema, es decir que agrupa un conjunto de objetos que
son instancias de clases que pertenecen a dicho sistema. La definición de aplicaciones permite
especificar los permisos de los grupos de usuario para acceder a los objetos (en termino de los
espacios del universo).
Una aplicación se define mediante:
• IdApplication: Identificador numérico interno de la aplicación.
• Description: Nombre descriptivo de la aplicación.
• idSystem: Identificador del sistema sobre el cual se define la aplicación.
• preFixDoc: Prefijo que se incorporará en el nombre de cada documento de la aplicación.
• State: Estado en el que se encuentra la aplicación: Enabled (Habilitado) o Disabled
(Deshabilitado).
• Configuraciones de acceso:
CLASES EN FLEXAB
Una clase encapsula las abstracciones de datos y métodos que se requieren para describir el
contenido y comportamiento de alguna entidad del mundo real. La clase es un modelo o
prototipo que define los atributos y métodos comunes a todos los objetos de cierta clase.
C
Clases Reales
Son clases que permiten generar una instancia de un objeto real. La relación estructural
entre clases reales puede verse en el árbol estructural.
C
Clases Virtuales
Estas clases se definen como vistas sobre las clases reales. La estructura de objeto que
define una Clase Virtual se compone de información proveniente de objetos de otras
clases. Por este motivo, estas clases no pueden ser instanciadas ni sus objetos pueden
verse en el árbol estructural.
Las clases virtuales se definen a nivel del universo (es decir, valen para todos los
sistemas), y no a nivel de cada sistema-espacio como en el caso de las clases reales.
Relación
Atributo
Espacio
Relation
vale en 1..1
Relación Relación Relación
Definida por 1..1
vale en 1..1 Estructural Inclusión Funcional
relationType={object, link,..} relationType={1-1, 1-N} {1-1}
(1)
Relación Padre 1..n Clase destino 1..n
Relación
R de Inclusión
La relación de inclusión es aquella que verifica que sus componentes no pueden existir
fuera del objeto compuesto. Su principal característica es que cualquier objeto
componente está completamente encapsulado. En consecuencia, si se tiene una relación
de inclusión, los objetos componentes sólo podrán ser accedidos a través del objeto
compuesto.
La relación de inclusión es una relación entre dos Clases Reales: una clase contenedora
y una clase componente, teniendo la clase contenedora una relación estructural.
El tipo de relación puede ser: 1-1 (uno a uno) o 1-N (uno a muchos), especifica cuántos
objetos componentes pueden relacionarse con un único objeto contenedor. Un objeto
contenedor hace que se trate de forma atómica o encapsulada a las los objetos
componentes. Además, una clase real puede tener relaciones de inclusión con más de una
clase (ver gráfico de Relaciones).
Relación
R Estructural
Es la relación entre clases reales dentro de un sistema. Una clase real puede participar
en más de una Relación estructural, es decir que puede tener uno ó más padres
estructurales.
En la relación estructural se distinguen dos roles: una clase padre y una clase hijo,
donde los objetos relacionados tienen comportamiento independiente el uno del otro
(diferencia con respecto a la relación).
Restricciones de creación/eliminación
• Si se crea una relación estructural entre dos clases, luego se instancia la relación
(creando un nodo hijo) y finalmente se elimina la relación (desde la SCI), la
relación entre instancias sigue existiendo.
• Al instanciar una relación estructural no se puede utilizar un hijo existente, solo se
puede relacionar con un objeto nuevo (creado a partir del form correspondiente).
• Una relación estructural de tipo object sólo puede eliminarse cuando no existen
relaciones de tipo link a ese objeto. Esta restricción tampoco permite borrar
ancestros del objeto referenciado mediante relación Link.
• Cuando se borra un objeto padre se eliminan los objetos hijos en cascada.
• No es posible eliminar un objeto que esté referenciado funcionalmente desde otro
objeto.
(1) La cardinalidad del conector clase destino es 1..n dado que el FQL puede retornar
un conjunto heterogéneo de tuplas de la forma (IdInternal, IdApplication, IdObject,
<campo> as Value), o sea, dichas tuplas pueden pertenecer a distintas clases. Notar
que la cardinalidad de este conector es a nivel de Clases y no de Objetos. La relación
funcional tiene cardinalidad (a nivel de Objetos) 1..1.
define 0..n
tiene regla 0..n Estado
define de 1..n
Atributo
Filtro define 0..n
Estado Grupo Clase Real depende de
(regla)
Filtro FQL
es definido por es definido por
Tipo
tiene 0..n
Filtro tiene filtro 1..1
Método es disparado por
Evento
gotoNo calcula
Método método invocado 1..1
gotoYes
puede cargar
Validación Programa Excel / Word Operación
Macro Mensaje
/ Project
especifica 0..n
aplica 1..n
es definido por
FQL es definido por
Los atributos son las características o propiedades de las clases de objetos, es la información de
interés que las describen. Todo objeto puede tener cierto número de propiedades, cada una de
las cuales tendrá, a su vez, uno o varios valores.
En Orientación a Objetos, las propiedades corresponden a las clásicas "variables" de la
programación estructurada. Son, por lo tanto, datos encapsulados dentro del objeto, junto con
los métodos y las relaciones (punteros a otros objetos).
Las propiedades de un objeto pueden tener un valor único o pueden contener un conjunto de
valores más o menos estructurados.
Real
R
Se define este tipo de atributo cuando estamos dando de alta un atributo simple, que
puede llevar cualquier tipo de dato:
• · Boolean
• · integer
• · long
Relation
R
Se define este tipo de atributo cuando el mismo necesita traer un dato de un atributo que
se encuentra en otro objeto (ver relaciones funcionales).
Virtual
V
Este tipo de atributo cambia de valor dependiendo de la información de otras Clases en el
Universo, es la forma en que los Objetos se nutren de lo que pasa en el Universo, de la
información que brindan las demás Clases. Todos los objetos pueden acceder a la
información de los demás objetos, solo deben suscribir a la información de las Clases que
le interesa. Este tipo de atributo tiene asociado una lista de clases, cualquier objeto que
modifique alguna de las clases de esta lista, va a generar la actualización del valor del
atributo virtual. Queda guardado en la base de datos, pero es el resultado de un cálculo.
Sea la clase A, con un atributo virtual v asociado a los cambios en la clase B (B está
listado en "Virtual: idCLASSVirtual").
• El fql asociado a v debe tener al menos un campo de nombre value y un
campo de nombre idInternal. La consulta a definir debe asociar un
resultado de un cálculo (campo value) a cada valor de idInternal de la clase A,
para que internamente FlexAB actualice cada objeto de A mediante el
correspondiente idInternal.
• El DataType del atributo v debe ser un tipo compatible con el valor devuelto en
el campo value de la consulta fql
• La actualización del v se lleva a cabo en el evento Save de los objetos de clase
A, solo si previamente hubo un cambio en algún objeto de B. En ese momento,
v toma el valor definido por el campo value de la consulta FQL.
Si el código sql es:
SELECT nue.idInternal,res.value
FROM CLASSNUEVA NUE,
(SELECT count(idInternal) AS VALUE
FROM CLASSLIBRO) as res
Visual
V
Se define este tipo de atributo cuando es necesario que el usuario de la aplicación,
observe alguna información de otras clases, por ejemplo la descripción del campo y no el
id del mismo, es decir no lo guarda en la base de datos, solo muestra esa información al
usuario.
Para la definición de un atributo Visual es necesario:
• · Definir un método de tipo operation asociado a un evento cualquiera y que
cargue algún valor en el atributo visual.
• · Los valores calculados no se guardan en la BD
ESTADOS EN FLEXAB
FlexAB permite definir un conjunto de estados por los que puede pasar un objeto durante su
ciclo de vida. Dicho conjunto de estados y la relación entre ellos conforman un grafo que se
define en la solapa State de la ventana de edición de la clase.
Cuando se crea el objeto, su estado siempre es INITIAL.
- Definición del grafo de Estados: El grafo de estados tiene una estructura visual de
árbol, por lo que deben repetirse los nodos para representar un ciclo de grafo. En esta
estructura de árbol no se especifica cuando ni como se realizan las transiciones.
Para cada estado es posible definir un conjunto de reglas (ver filtro de estado) y un
conjunto de métodos que se ejecuten en respuesta a un determinado evento solo cuando
el objeto se encuentre en un dicho estado.
- Filtro de Estado (Regla): Indica las condiciones que deben cumplirse para llegar a un
determinado estado.
GRUPOS EN FLEXAB
La configuración de grupos para una clase permite representar subconjuntos de los elementos
de la clase. La pertenencia de un objeto a un grupo es estática y se establece en el momento de
la creación del objeto.
La definición de un grupo requiere:
• idGroup: Nombre unívoco para el grupo
• preFixId: Prefijo que se utilizará como parte del idObject del objeto.
• postFixId: Postfijo que se utilizará como parte del idObject del objeto.
Si se definen grupos en la clase, el IdObject se forma como sigue:
<idClass><preFixId><type><postFixId>
Donde <type> depende de las reglas de tipo definidas para el grupo del objeto (ver Tipos)
De esta manera, se establece un límite en la cantidad máxima de objetos a crear para ese
grupo.
TIPOS EN FLEXAB
Todo objeto debe poseer un identificador único. Una regla de definición de tipo de una
clase especifica el formato del identificador único de los objetos de la clase (denominado
idObject). La regla a aplicar puede variar para una misma clase de objetos según el Grupo al
que pertenezca un objeto. Las reglas se definen a partir de propiedades que se usan como
filtros para generar la clave del objeto. El idObject puede incluir información del objeto con el
que posee relación estructural o puede ser auto construido.
Ejemplos de Uso
Ejemplo 1:
Sean las clases
• [Nueva] (Sin definición de types y con idCLA = (Nue))
• [Hija] (Sin definición de types y con idCLA = [Hi])
Ejemplo 2:
Sean las clases
• [Nueva] (Sin definición de types y con idCLA = (Nue))
• [Hija] (Con idCLA = [Hi] y con type: Autokey=NO)
3. Se crea un objeto de clase Hija, con tag 222 entonces el IdObject es: [Hi]222.
Ejemplo 3:
Sean las clases
• [Nueva] (Sin definición de types y con idCLA = (Nue))
• [Hija] (Con idCLA = [Hi] y con type: Autokey=NO, FatherKey=yes,
FatherIdAttribute=Key)
4. Se crea un objeto de clase Hija, con tag 333 entonces el IdObject es: [HI]333aaa.
Ejemplo 4:
Sean las clases
• [Nueva] (Sin definición de types y con idCLA = (Nue))
• [Hija] (Con idCLA = [Hi] y con type: Autokey=NO, FatherKey=yes, FatherIdAttribute=idObject)
5. Se crea un objeto de clase Hija, con tag 444 entonces el IdObject es: [HI]333444.
Ejemplo 5:
Sean las clases
• [Nueva] (Sin definición de types y con idCLA = (Nue))
• [Hija] (Con idCLA = [Hi] y con type: Autokey=NO, FatherKey=yes, FatherIdAttribute=tag,
FatherAhead=yes)
6. Se crea un objeto de clase Hija, con tag 555 entonces el IdObject es: [HI]aaa555.
Ejemplo 6:
Sean las clases
• [Nueva] (Sin definición de types y con idCLA = (Nue))
• [Hija] (Con idCLA = [Hi] y con type: Autokey=NO, FatherKey=yes, FatherIdAttribute=tag,
FatherAhead=yes, FatherDelimiterChar=_)
7. Se crea un objeto de clase Hija, con tag 666 entonces el IdObject es: [HI]aaa_666.
Ejemplo 7:
Sean las clases
• [Nueva] (Sin definición de types y con idCLA = (Nue))
• [Hija] (Con idCLA = [Hi] y con type: Autokey=NUMUNIC)
8. Se crea un objeto de clase Hija, con tag 000 entonces el IdObject es: [HI]779.
- Filtro de Tipo: Dado que es posible especificar más de una definición de tipo por clase,
es necesario desambiguar en que caso utilizar cada definición. Para esto se utilizan los
filtros de tipo que deben ser disjuntos.
M
Método Operación
Método Validación
Este método permite realizar validaciones sobre los atributos del objeto al que se aplica
así como los atributos de cualquier otro objeto en el universo.
Una validación verifica que el resultado de una consulta FQL cumpla una cierta condición
y en función de este resultado puede configurarse la lógica del objeto. Para esto, la
configuración de un método validación requiere:
- FQL: es una consulta cualquiera sobre cualquier clase de objetos
- Condición: Es una conjunción de expresiones {c1..cn} donde cada ci es una
FlexAB–TG: Guía Tecnológica 24
v22 – 1_(DOC)TEG.pdf
comparación entre un valor del resultado del FQL con un valor
constante.
Cada ci se especifica:
• El campo <numColumn> indica el dato que se analizará, mediante el
correspondiente número de columna (en el resultado de la consulta).
• El campo <cmpType> indica el tipo del dato a analizar, pudiendo ser TXT (si es
un dato de tipo string), NUM (si es de tipo numérico) o REC. En el caso de
indicarse REC, se considerará la cantidad de registros del resultado de la
consulta, por lo que se trata como un dato numérico.
• El campo <CMPSign> indica el operador binario de comparación a usar
• El campo <CMPValueNum> indica el valor numérico constante a utilizar en la
comparación. Se utiliza solo si <cmpType>є{NUM,REC}.
• El campo <CMPValueTxt> indica el valor de texto constante a utilizar en la
comparación. Se utiliza solo si <cmpType>=TXT.
De esta manera, la expresión ci a evaluar es:
resultado[<numColumn>] <CMPSign> <CMPValueTxt>, si <cmpType>=TXT
resultado[<numColumn>] <CMPSign> <CMPValueTxt>, si <cmpType>€{NUM,REC}.
Método Macro
M
Los métodos macro permiten ejecutar una secuencia de funciones COM de FlexAB sobre
el resultado de una consulta FQL. Estos métodos permiten llevar a cabo operaciones tales
como modificar las relaciones con otros objetos, bloqueo, versionado y empaquetado de
objetos, entre otras. Estas operaciones permiten modificar atributos del xml de un objeto
que no pueden modificarse desde un método operación. Para esto, el método macro
mantiene un XML de trabajo sobre el cual se llevan a cabo modificaciones intermedias.
El esquema resultante de la consulta FQL debe incluir los campos requeridos en la
primera función que se utilice. Es decir que si la función f tiene una lista de parámetros
(recRes!nom1,…,recRes!nomk) entonces el esquema de la consulta FQL debe incluir al
menos los campos nom1 … nomk.
Las funciones disponibles son:
Método Mensaje
M
MMétodo Programa
El método permite la ejecución de un programa externo.
- Filtro de Método: Indica el conjunto de restricciones que se deben cumplir para que,
al dispararse el evento asociado, el método pueda ser ejecutado
Clase Real
Filtro Reporte
Tiene Filtro 1..1
Un formulario define la vista estándar de los objetos de una determinada clase. Esta vista se
divide en dos sub-vistas: el encabezado (Header) y el detalle (Detail). Ambas sub-vistas se
definen utilizando HTML y pueden editarse en modo WYSIWYG (What You See Is What You
Get) o en modo texto.
El encabezado puede mostrar las siguientes propiedades predefinidas:
• IdObject: es un identificador único dentro de la aplicación. Se genera de acuerdo a los
tipos definidos en su clase (ver definición de tipos).
• IdState: es el estado actual del objeto, un estado entre los estados definidos en la
clase (ver definición de estados).
• IdGroup: es uno de los grupos definidos para la clase (ver definición de grupos)
• Tag: (ver definición de tipos).
Para cualquiera de estos datos, en la solapa common del class editor, se permite configurar:
• En que seccion del form se muestra, header o detail (frmPositionField)
• Si es editable o no (frmActive)
• Si es visible o no (frmVisible)
• El texto de la etiqueta correspondiente en el form
Un reporte permite generar vistas alternativas del sistema. Los datos mostrados en el reporte se
obtienen mediante un FQL asociado a cada reporte. A pesar que un reporte está definido en
una clase en particular, la consulta FQL puede recuperar información de objetos de cualquier
clase del sistema, y no solo de los objetos de dicha clase.
La definición de un reporte consiste de:
• idReport: identificador unívoco para el reporte
• idClassFather, idState: Restricciones para ejecutar el reporte (ver Filtros de Reporte).
• Description: texto descriptivo
• FQL: Consulta de la cual se obtienen los datos a mostrar.
Clase Real
utiliza 1..1
Seccion
<idioma,titulo,
define 1..n
contenido>
REGLAS DE SEGURIDAD
Las reglas de seguridad permiten restringir las operaciones aplicables a los objetos mediante un
Filtro de Seguridad. Las operaciones se pueden restringir por medio de los siguientes permisos:
1. deny: implica la negación de todos los otros permisos.
2. new: permite la operación de creación de objetos de esta clase.
3. read: permite la operación de edición de los objetos de esta clase.
4. change:
5. delete: permite la eliminación de los objetos de esta clase
6. del link: permite eliminar un link a un objeto de esta clase
7. copy: permite la copia de un objeto de esta clase
8. cut: permite mover un objeto de esta clase.
9. link, permite crear un link a un objeto de esta clase.
10. print, permite ejecutar reportes (vista previa)
11. version, permite crear una nueva revisión
12. version edit, permite visualizar versiones existentes para el objeto
13. user events, Ejecutar los eventos definidos por el usuario
14. pack, permite crear un paquete de objetos
15. pack up, permite actualizar el sistema con los datos de un paquete
16. import, permite ejecutar la importación/exportación de listas
17. trails, permite trabajar con recorridos
18. full control: implica la validez de los demás permisos (excepto el deny).
La ayuda de una clase es un texto descriptivo de la clase, que el usuario puede querer mostrar
al pararse sobre un objeto. Dicho texto (denominado Label en FlexAB) está compuesto por una
o mas secciones dependientes de un Filtro de Ayuda.
De esta manera, una clase puede definir distintos Labels para distintas condiciones del objeto
sobre el cual se pide el help.
La definición de un Label requiere:
1. Un texto por cada idioma que se desee configurar. De esta manera, el contenido a
visualizar es relativo al idioma configurado para el usuario actualmente conectado. Los
idiomas disponibles son : Ingles, Español, Frances, Potugues, Aleman e Italiano. El
texto se compone de una o mas secciones de la forma:
<title>unTitulo</title> <section>unTexto</section>
2. Un identificador de la forma:
[HELP] textoDescriptivo
FILTROS
Aplicación FILTRO
clase padre 0..1 (2)
idClassfather
Filtro Filtro especifica 0..1 especifica 0..1 Filtro Filtro Estado Filtro Regla Filtro
Ayuda Método (idApplication) (idApplication) Tipo (Regla) de Seguridad Reporte
espec 0..1
(idApp)
espec 0..1
Aplicación (idApp)
espec 0..1
(idApp)
espec 0..1
espec 0..1
(idAtt)
espec 0..1 (idAtt)
espec 0..1
(idAtt) Atributo
(idAtt)
espec 0..1
espec 0..1 (idGroup)
(idGroup) espec 0..1 espec 0..1
espec 0..1 (idGroup) Grupo de (idGroup)
(idGroup) Grupo
Usuarios
(2) La cardinalidad de los conectores especifica es 0..1 pues al no especificar alguno de los
parámetros (clase padre, estado, grupo de usuarios, atributo o aplicación) no se está
restringiendo los permisos definidos a un valor en particular, es decir que valen para cualquier
valor (lo que en la interfase se especifica con *).
EVENTOS EN FLEXAB
EVENTO
Evento Evento de
Usuario
FlexAB
<nombreEvento>
EVENTOS DE USUARIO
CONCEPTO
Describe un Concepto
Elemental en FlexAB
C1 C2
Describe relación ternaria. Es decir, para
relación un determinado valor del concepto C1 y
para un determinado valor del concepto
C2, se define un determinado valor del
concepto C3.
C3