Tradicionalmente el cuerpo principal del programa en RPG se conformaba con una serie de lazos anidados que llamaban a distintas rutinas encargadas de validar, calcular, actualizar o generar los archivos de salida.
El aspecto del programa era algo como esto:
Exfmt Fmt01
Dow not(*in03)
|
| Exsr Validar
| /* indicador 99 = On hubo error */
|
| Dow not (*in99) and not (*in03)
| |
| | Exfmt Fmt02
| |
| | If *in06
| | Exsr Valida-Incluir
| | Exsr Graba-Incluir
| | Endif
| |
| | If opcion = 2
| | Exsr Valida-Modificar
| | Exsr Act-Modificar.
| |
| | Endif
| |
| |
| | If opcion = 4
| | Exsr Valida-Eliminar
| | Exsr Act-Eliminar
| | Endif
| |
| |
| | Enddo
|
| Exfmt Fmt01
|
| Enddo
Este es un ejemplo relativamente sencillo con dos lazos anidados. Cuando los procesos requieren una navegación por pantalla mucho mas profunda, podemos tener 3, 4,5 y mas lazos anidados, haciéndose engorroso el mantenimiento del programa y difícil el control y seguimiento del mismo.
Actualmente es preferible utilizar una sentencia de control estructurada como cuerpo principal del programa y delegar en una variable, el control de la ejecución del proceso. Al principio este método puede resultar áspero cuando estamos acostumbrados a otras metodologías de trabajo pero a la larga obtenemos un mejor resultado.
El cuerpo principal del programa quedaría así:
Eval Control = 1
Dow Control > 0
Select
When Control = 1
Exsr Show_FMT1
When Control = 2
Exsr Show_FMT2
When Control = 3
Exsr Incluir-Fmt2
When Control = 4
Exsr Modificar-Fmt2
When Control = 5
Exsr Eliminar-Fmt2
EndSl
Enddo
Eval LR = On
A continuación las rutinas:
SHOW_FMT1 BEGSR
Exfmt Fmt01
*Instrucciones de validación…
…
…
Si no hay error,- Eval Control = 2
If *in03
Eval Control = 0
Endif
ENDSR
-----------------------------------
SHOW_FMT2 BEGSR
Exfmt Fmt02
Select
When *in06
Eval Control = 3
When opcion = 2
Eval Control = 4
When opcion = 4
Eval Control = 5
When *in12 (*regresar a la anterior *)
Eval Control = 1
When *in03 (*Fin de programa*)
Eval Control = 0
EndSl
ENDSR
-------------------------------
INCLUIR_FMT2 BEGSR
Instrucciones de validación
…
….
Si todo Okey
Graba
EndIF
Eval Control = 2
ENDSR
MODIFICAR_FMT2 BEGSR
Instrucciones de validación
…
….
Si todo Okey
Actualizar registro
EndIF
Eval Control = 2
ENDSR
----------------------------
ELIMINAR_FMT2 BEGSR
Instrucciones de validación
…
….
Si todo Okey
Elimina Registro
EndIF
Eval Control = 2
ENDSR
Si te pareció interesante, reenvialo a un amigo haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.
Autor: Ing. Liliana Suárez
No comments:
Post a Comment