Title: Migrando VFP a .NET Tips y Sugerencias
1Migrando VFP a .NETTips y Sugerencias
- Experiencia de una migración en la
- Aduana de Costa Rica
- Enrique Almeida Concepto
- ealmeida_at_concepto.com.uy
- Gustavo Morales Aduana de Costa Rica
moralescg_at_hacienda.go.cr
2El proyecto
- Adaptación del sistema a la realidad de Costa
Rica. - Transferencia tecnológica de Concepto al grupo de
desarrollo de la Aduana de Costa Rica. - Migración de GeneXus 7.5 generando Visual FoxPro
(Windows) y C/SQL (Web y WebServices) a GeneXus
8.0 y full .NET - 400 Tablas y 3200 objetos
3Quienes somos?.
- CONCEPTO
- 12 años trabajando con GeneXus.
- Pertenecientes a la GxAlliance.
- 2001 y 2002 Mejor BetaTester
- 2001 Early adopter of new tecnologies .NET
- Sistema de Calidad ISO-90012000
4Quienes somos?
- ADUANA DE COSTA RICA.
- - 650 funcionarios.
- - Recaudación
- US 1.029.000.000
- 6 PBI de Costa Rica.
-
5Porque .NET y Tres Capas?
- Directiva de Ministerio de Hacienda de Costa
Rica. - Seguridad
- Escalabilidad
- Necesidad de integración con otros organismos
- Pensado para mantener la misma tecnología por los
próximos 5 años.
6Que teníamos?
Cliente/ Servidor
- Cambios en
- En generador WIN y WEB
- La arquitectura de la aplicación
- La base de datos
- Lo cual implicaba además
- La versión de GeneXus (7.5 a 8.0)
- La forma de Acceso a datos (ODBC ADO.NET)
7Etapas.
8Sugerencia IPlanificar la migración!!
- Etapas
- Pasos simples y comprobables
- Si se presenta un problema, siempre es fácil
detectarlo y compararlo con algo que funcione
bien. - Recursos
- Definir los recursos necesarios para cada etapa
9Sugerencia IIGrupo de trabajo focalizado en la
migración
- Equipo dedicado a la migración
- Se adelanta a los problemas
- Evalúa nuevas versiones
- Encontrar soluciones a problemas tipo
- Comunicar soluciones al resto del grupo de
trabajo - Resto del equipo dedicado a programar nuevas
funcionalidades.
10Sugerencia III Estudiar la plataforma destino
- Si vamos a generar C, que alguien en el grupo
sepa programar en C. - Armar un laboratorio con la plataforma destino
para poder hacer pruebas y poder aprender
11Sugerencia IV Borrar todo lo que no sea necesario
- Eliminar todo lo que no se use!!
- Buscar todos los objetos no alcanzables desde
mains y borrarlos.
12TIP I Como consigo el conjunto de objetos usados
en mi aplicación?
- Distribuir
- Todas las transacciones y Data Views
- Todos los mains usados (Facil en 8.0)
- Todos los objetos referenciados por esos main
(ADD CALLED) - Objetos invocados en forma dinámica
13Que me puede ocasionar problemas?
- Estudiar la KB buscando cosas raras
- Programas Externos y Stored Procedures
- Comandos SQL, JAVA, DBASE, CSHARP, VB
- Funciones NO STANDARD
- DataViews con otras bases de datos
- Imágenes/Archivos leídos
- Componentes ActiveX, DLL, etc.
- Calls entre objetos que no son del mismo
generador/environment. - Tablas DBF
14Programas Externos
- Racionalizar su uso
- Unificar lo que hacen cosas parecidas
- Ver si no hay alguna función de GeneXus para
hacerlo. - Reprogramarlos en el nuevo lenguaje (C)
- Probarlos en el nuevo lenguaje y plataformas
15TIP II Como ver programas externos usados en mi
KB?
16Programas externos
- En la migración a C tuvimos que agregar
parámetros utilizado por GeneXus pero no por la
aplicación. - Versiones diferentes para Windows/WEB, por los
parámetros.
17Stored Procedures
- En ADO.NET la llamada a SP hay que hacerla con el
nombre de variable del parámetro. - Cambiar la programación.
18Comandos DBASE
- Buscar todos los objetos que tienen DBASE en el
código GeneXus. - Por ejemplo
- DBASE wait window 'Presione ltESCgt para
cancelar' TIMEOUT 5 - if lastkey()27
- SALGO'S'
- return
- Endif
- Tratar de evitar esta forma de programar.
- Sustituir DBASE por CSHARP, y programar código
equivalente
19TIP III Que objetos usan el comando DBASE?
20Sugerencia VUsar los archivos XPZ (Distribute)
- Estudiar el formato de los archivos XML de
distribución (dentro del XPZ) - Herramienta de Search and Replace con
expresiones regulares - Grep
- (SR) www.funduc.com.
- Usarlas para buscar que objetos que contienen un
string determinado
21Funciones
- Conocer la lista de funciones soportadas en la
plataforma destino. - Detectar cuales son las funciones no soportadas o
que cambiaron su significado en la plataforma
destino. - Buscar funciones NO STANDARD, o no nativas de
GeneXus, para buscarle una alternativa.
22TIP IV Como encontrar que objetos usan funciones
no standard?
- Consolidarlo en una KB vacía, con la propiedad
Function para que no acepte funciones no standard
DISEÑO
PROTOTIPO
- Revisar todo lo que da errores y warnings
- Arreglarlo
23Sugerencia VI Estudiar las Releases Notes de los
Upgrades
- Buscar errores corregidos
- Funcionalidades nuevas
- Cambios en
- Funciones
- Propiedades
- Comandos
- Configuración
24Controles ActiveX
- No están soportados en el generador .NET
- Reprogramarlos con controles nativos.
- Mantener algunos programas en Visual FoxPro.
25Proceso propuesto
- Borrar todo lo que no se necesite migrar
- Distribuir modelo original.
- Consolidar en una KB vacía y arreglar problemas
- Especificar y arreglar problemas
- Generar, Compilar y arreglar problemas
- Comparar ejecución con modelo anterior y arreglar
diferencias - Documentar errores y reportarlos
26Conclusiones
- Migrar es inevitable
- Pero
- Da trabajo
- Hay que planificar
- Consume recursos
- Posibilita la incorporación de nuevas
funcionalidades
27Migrando VFP a .NETTips y Sugerencias
- Preguntas?
- Enrique Almeida Concepto
- ealmeida_at_concepto.com.uy
- Gustavo Morales Aduana de Costa Rica
- Moralescg_at_hacienda.go.cr
28Pedidos a Artech
- Incorporar a los programas externos como objetos
genexus - Search and Replace Global
- Comparador de navegaciones
- Comparador de LOGs de performance
29Funciones no standard
- En el código VFP había funciones no standard,
como son ADIR() que devuelve el contenido de un
directorio en un array. - Esas fueron migradas y utilizadas con programas
externos.
30Tablas DBF.
- En el modelo Visual FoxPro teníamos algunas
tablas marcadas como locales que generaban DBF - Estas tablas fueron migradas a utilizar tablas
temporales en la base de datos.