gx-l |
| gxchecar | |
Buen Día Foro ¡ En mi compañía estamos evaluando comprar Genexus para mejorar la atención a nuestros usuarios. Estuve evaluando y me di con un problema de nuestro modelo de datos que no sé cómo plasmarlo en Genexus En mi trabajo, nuestro sistema core tiene, en la mayoría de las tablas de nuestro *modelo de datos*, el campo “*Fecha de Validez*”. Ese campo es actualizado *manualmente* e indica desde cuando es VALIDO ese registro. Este campo forma parte de la PK (ID y FechaValidez), pero para acceder al registro SOLO se accede por la ID y (internamente) se busca el mayor valor del campo “*FechaValidez**”* que sea menor a la fecha del día. Es decir, para Obtener UN registro o grupo de registros se le pasa como parámetro una fecha de proceso o de comparación ( Fecha del Día, etc.) y se devuelve el registro que tenga la mayor fecha y que sea menor a la fecha de proceso. Ej: En la BD Tabla de Clientes Id (PK) *FechaValidez *(PK) Nombre Código X 1 15-Nov-2001 Juan 100 1 24-May-2018 Juan 101 1 20-Ago-2021 Juan 101 2 13-Ene-2001 Pedro 200 2 17-Jun-2010 Pedro 201 2 22-Ene-2017 Pedro 202 2 12-Set-2022 Pedro 202 3 23-Ago-2009 Matías 300 Si deseo obtener el ID “1”, “2” o “3”, para el día de hoy (*24-Ene-2020*), me tiene que devolver el registro sombreado en amarillo El SELECT para obtener el registro que se usa internamente es el siguiente: (Este es el estándar para todas las tablas de nuestro modelo de datos) SELECT codigoX FROM CLIENTES C WHERE id = 1 AND *FechaValidez* = (SELECT MAX( *FechaValidez* ) FROM CLIENTES Max WHERE Max.id = 1 AND Max.*FechaValidez* <= SYSDATE) Mi pregunta es: ¿ Cómo hago en GX para replicar esta misma forma de trabajo?, …como debo crear los TRN o reglas ,etc. para que obtener el mismo comportamiento?? Espero haberme hecho entender. Cordialmente, -- Carlos Cevallos Castro ----------------------------------------- Para Suscribirse/Desuscribirse: http://www.gxtechnical.com/cgi-bin/hforum.exe?2,3,30,1 Por consultas owner-gx-l@gxtech.com.uy |
|
|
| | |
Google | |
Buenas tardes,
Cuando se opta por una herramienta de desarrollo
Casi nunca se juzga si la herramienta podría o no
Replicar el modelo de dato de la compañía,
Simplemente se asume que la herramienta lo puede hacer,
En este sentido, Genexus no es la diferencia.
Podrías tener el modelo que quieras trabajando
Con el ide directamente, ahora bien los pattern son otra cosa,
No digo que te obligue a desviar mucho el camino,
Pero te exige ciertas atenciones que de entrada
Un programador experto podría verlos.
En tu caso, si bien explicaste lo que quieres hacer,
No dijiste “porque lo quieres hacer así”,
Ya que desde mi punto de vista, podrías
Perfectamente tener un campo Autonumerico y nada más,
Lo demás Campos los podrías ir almacenando de
Acuerdo al criterio que más te apetezca,
Y en este punto es donde se juzga el: PARA QUE.
Resumiendo, Genexus puede asimilar tu modelo de datos,
Y también lo puede mejorar si a si se lo permites,
Tendrías que invertir un poco más de tiempo si eres nuevo,
Y no tanto si tienes experiencia.
Saludos,
Alberto
Sent from my iPhone
> On Jan 27, 2020, at 1:30 PM, Carlos Cevallos Castro |
|
|
leandro79337933 | |
Hola Carlos, muy buenos días!
No tengo a mano mis libros de bases de datos, pero creo que ese modelo de
datos no respeta la tercera forma normal. GeneXus es una herramienta que
modela los datos según esa forma, por lo que en principio, estaríamos
complicados. Se me ocurren algunas opciones, dentro de GX con procedures o
incluso data providers. Y por fuera de GX armando vistas y luego creando
los data views correspondientes dentro de GX. En GeneXus 16 hay un tipo de
transacción nueva que se denomina "dinámica", no he tenido tiempo de
investigarla pero la idea es poder armar una "vista" de una tabla física
dentro de GeneXus. Quizás pueda ser útil.
Sinceramente, es un modelo de datos medio "extraño", me imagino que los
JOINs con el resto de las tablas se las traen... pero bueno, es una
herencia...
Slds
On Mon, Jan 27, 2020 at 5:31 PM Carlos Cevallos Castro <
carlos.cevallos.castro@gmail.com> |
|
|
Enrique Almeida | |
El modelo que planteas es el habitual en las bases de datos que necesitan
soporte temporal (temporal databases, no confundir con base de datos
temporaria).
Con Genexus puede implementarse , y se puede programar los casos aunque
no es todo lo elegante que seria deseable.
Para un conjunto limitados de atributos, podes usar la función find() y
atributos formula para recuperar aquellos registros que estén vigentes, por
ejemplo para buscar el precio de un producto en la lista de precios
,correspondiente a la fecha de la venta.
Se que en genexus están estudiando el escenario de bases de datos
temporales y bitemporales, pero desconozco su grado de avance.
Seria notable contar con soporte nativo para estos casos, donde se le puede
decir que un atributo o rango es el que maneja la vigencia.
Co transacciones dinámicas creo que se puede implementar, pero debería
probarlo.
Enrique
El lun., 27 de enero de 2020 12:25, Carlos Cevallos Castro <
carlos.cevallos.castro@gmail.com> |
|
|
mmvarios | |
Hola Carlos, no se si te entendí bien, pero capaz que algo así te podria
andar:
*Clientes*:
ClienteId *
ClienteNombre
ClientePrdFechaValido - Formula -> Max( ProductoFechaValidez,
ProductoFechaValidez< servernow() ,, ProductoFechaValidez )
ClientePrdCodigoValido Formula -> Max( ProductoFechaValidez,
ProductoFechaValidez< servernow() ,, ProductoCodigo )
( ProductoFechaValidez *
ProductoCodigo
)
Tal vez te sirva.
Salu2
.
El mar., 28 ene. 2020 a las 14:33, Carlos Cevallos Castro (<
carlos.cevallos.castro@gmail.com>) |
|
|
|
|
Back to gx-l |
|