Bienvenidos a Iseries Venezuela

Las mejores prácticas, recursos, tips, enlaces, videos y artículos para informáticos relacionados con el Iseries y el As/400 lenguajes de programación RPG, ILE RPG y SQL.

The best practices, resources, tips, links, videoes and articles for computer related to the Iseries and the As/400 languages of programming RPG, ILE RPG and SQL.

Tuesday, April 28, 2009

Mejores Prácticas en RPG. Control Estructurado de Procesos.









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: