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.

Thursday, April 26, 2012

PROGRAMAS DE SERVICIO- ILE_RPG - Primera Parte










Lo que en ILE se llama Programa de Servicio ha sido concebido en principio, para codificar, en un mismo programa, las utilidades de uso común por parte de los demás programas del sistema. La ventaja de este sistema centralizado es que todas las  versiones y actualizaciones de las utilidades son mucho mas sencillas de controlar.

Un programa de servicio en su concepto fundamental esta constituido por un conjunto de subprocedures que son declarados en el programa. El programa de servicio típico no tiene cuerpo principal. Se coloca en la hoja ‘H’ la plabra clave *NOMAIN para que el sistema operativo entienda que el contenido del código contiene declaraciones y programación de subprocedures.

Por ejemplo las clásicas utilidades desarrolladas en  programas o rutinas en RPG tradicional se han desarrollado tales como:

“Monto Escrito” (para escribir en letras una cantidad en número),
“Días laborables”
“Encriptamiento/Desencriptamiento”
“Impresión de Chequeras”

Pueden ser colocados en un solo programa de servicio como un subprocedure cada uno.

Cada Subprocedure debe tener la declaración de su prototipo PR para los parámetros de entrada y sus respectivos PI para esos mismos parámetros. Sin embargo, la declaración de los PR y PI se realizan en distintas partes del programa.

La declaración de Prototipos o PR permite al sistema operativo crear un punto de entrada o ENTRY POINT de acceso al programa de servicio  por cada PR declarado.
Esto significa que, el subprocedure que tiene un PR o prototipo asociado, puede ser el proceso arranque de un conjunto de programas enlazados y además puede ser invocado por programas y módulos externos.

Sin la declaración del Prototipo PR,  el subprocedure sería solo de uso local dentro del programa que esta declarado y no podría ser accedido por otros programas o módulos. Es importante aclarar esto puesto que muchos programadores no entienden por qué hay que utilizar PR y PI es decir, declarar los parámetros de entrada "dos veces" para cada subprocedure (es un tema mas extenso para una próxima vez).

En el RPG tradicional no existía la posibilidad de multiples ENTRY_POINT para un programa. El RPG tiene un solo conjunto de parámetros de entrada definidos.


En un programa de servicio cada subprocedure puede ser llamado en forma independiente aún cuando este declarado en el mismo programa. Por tanto, hay múltiples puntos de entradas ( o grupo de parámetros de acceso) por la cual se puede acceder al programa de servicio.

Un programa de servicio sin cuerpo principal - como es este caso-no puede ser invocado a través de un CALL, solo se pueden invocar los subprocedures que están codificados internamente.


La declaración de los prototipos de los subprocedures se coloca al principio del programa, uno tras otro. Es decir,  se declara el prototipo de “Monto Escrito”, seguidamente el prototipo de “Dias laborales” y luego el prototipo de “Encriptamiento” , etc, y al culminar con los prototipos se declaran seguidamente cada subprocedures con su código interno correspondiente y su PI.

El comando para crear un programa de servicio es CRTSRVPGM.


En  próximas entregas, continuaremos detallando el tema de los programas de servicio.



Si te pareció interesante, reenvíalo a un amigo haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.


Publicado por: Ing. Liliana Suárez

Tuesday, April 3, 2012

5 W y 1 H para el Diseño de Sistemas de Información
















A lo largo del tiempo se han desarrollado varios métodos, sistemas y estrategias para desarrollar sistemas de información,  que va desde las metodologías Top-Down, Bottom-Up, hasta los modelos estructurados e iterativos.

Independiente de la metodología que elijas para diseñar sistemas de información, la clave para el diseño de sistemas de información es la identificación de los procesos.

Una vez que se han identificado los procesos, es necesario contestar las  5 W y 1 H , para cada proceso diseñado, es decir las  cinco preguntas que los periodistas de los medios de comunicación deben responder cuando redactan una noticia para obtener la historia completa sobre algún evento.

Estas 5 W y 1 H son:


What à ¿Qué?
Where à ¿Dónde?
When à  ¿Cuándo?
Who  à  ¿Quién?
Why? à ¿Por qué?
How? à ¿Cómo?


Aplicando estas interrogantes a cada proceso tenemos lo siguiente:

¿Qué resultado se desea obtener?
Describimos el resultado detallado de lo que deseamos alcanzar

¿Dónde debe ser implementado este proceso?
Esto se refiere principalmente a dispositivos (móviles o no), en 
un   servidor dedicado, en un main frame, en un servidor remoto, etc.

¿Cuándo debe ejecutarse e instalarse?
            La frecuencia de ejecución: diaria, mensual, semanal, etc. 
        Las  condiciones preexistentes que deben existir para que se 
        ejecute (luego de que x proceso finalice..etc)

¿Quién debe tener acceso?
Establecemos las jerarquías de acceso al proceso para establecer la permisología necesaria que garantice la integridad de la información

¿Por qué es necesario?
Establecemos la necesidad de desarrollar el proceso y las necesidades de información que esta cubriendo para así justificar el desarrollo del mismo.

¿Cómo debe ser elaborado?

En este punto decidimos las estrategias y tácticas que vamos a emplear para el desarrollo del sistema y el control del avance del proceso.

Cabe destacar que, se puede aplicar este método iterativamente para cada respuesta que hemos dado anteriormente a cada pregunta.

Por ejemplo, dentro de la pregunta ¿Quién debe tener acceso? Una vez dada la respuesta correspondiente podemos preguntar: ¿Qué?, ¿Quién?,¿Dónde? , ¿Cuándo?, ¿Por qué? ¿Cómo?

Este procedimiento ayuda a concretar el proyecto y a la vez evaluar la factibilidad de lo que estamos planteándonos. A veces hay maravillosas ideas que no es posible llevar a cabo, bien sea por lo recursos materiales, o por costos, personas o tiempo. Cuando hacemos estas preguntas “aterrizamos” las ideas al punto que descartamos aquello que a la larga no va a ser posible y nos hace perder tiempo y dinero.


Si te pareció interesante, reenvíalo a un amigo haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.


Publicado por: Ing. Liliana Suárez

Sunday, March 11, 2012

Lista de Código de Errores RPG y RPGLE










Lista de Códigos  de Errores en  RPG/RPGLE

Debido a las constantes preguntas y correos recibidos sobre los códigos de error en los comandos MONITOR Group de RPGLE, y en los monitoreos de error con la rutina *PSSR en RPG, a continuación la lista de códigos de error extraída del RPGILE Reference publicado por IBM.

iSeries
WebSphere® Development Studio
ILE RPG Reference Summary

File Error Codes
Normal Conditions
Codes Meaning

00000 No exception/error occurred.
00002 Function key used to end display.
00011 End of file on input.
00012 Record not found.
00013 Subfile is full on a write operation.

Exception-Error Conditions
Codes Meaning
01011 Undefined record type (input record does not match record-identifying
indicator).
01021 Tried to write a record that already exists (file being used has unique
keys and key is duplicate, or attempted to use duplicate relative record
number to a subfile). (RPG IV only)
01022 Referential constraint error detected on file member.
01023 Error in trigger program before file operation performed. (RPG IV only)
01024 Error in trigger program after file operation performed. (RPG IV only)
01031 Match field out of sequence.
01041 Array/table load sequence error.
01042 Array/table load sequence error. Alternate collating sequence used.
01051 Excess entries in array/table file.
01071 Record out of sequence in file.
01121 No indicator on the DDS keyword for Print Key.
01122 No indicator on the DDS keyword for Roll Up Key.
01123 No indicator on the DDS keyword for Roll Down Key.
01124 No indicator on the DDS keyword for Clear Key.
01125 No indicator on the DDS keyword for Help Key.
01126 No indicator on the DDS keyword for Home Key.
01201 Record mismatch detected on input.
01211 I/O operation to a closed file.
01215 OPEN issued to a file already open.
01216 Error on an implicit OPEN/CLOSE operation.
01217 Error on an explicit OPEN/CLOSE operation.
01218 Unable to allocate a record in the file.
01221 Update or delete operation attempted without a prior read.
01222 Unable to allocate record due to referential constraint error. (RPG IV
only)
01231 Error on SPECIAL file.
01235 Error in PRTCTL space or skip entries.
01241 Record number not found. (Record number specified in record address
file is not found in controlled file.)
01251 Permanent I/O error occurred.
01255 Session or device error occurred. Recovery may be possible.
01261 Attempt to exceed maximum number of devices defined for file.
01271 Attempt to acquire unavailable device.
01281 Operation to unacquired or undefined device.
01282 Job ending with controlled option.
01285 Attempt to acquire an allocated device.
01286 Attempt to open shared file with SAVDS or SAVIND options.
01287 Response indicators overlap SAVIND indicators.
01299 I/O error detected.
01331 Wait time exceeded for input operations to WORKSTN file.

Table 2. Program Status Codes
Normal Conditions
Codes Meaning

00000 No exception/error occurred.
00001 Called program returned with the LR indicator on.
00050 Conversion resulted in substitution. (RPG IV only)
Exception-Error Conditions
Codes Meaning
00100 Value out of range for string operation.
00101 Negative square root.
00102 Divide by zero.
00103 An intermediate result is not large enough to contain the result. (RPG
IV only)
00104 Float underflow. An intermediate value is too small to be to contained
in the intermediate result field. (RPG IV only)
00105 Invalid characters in character to numeric conversion functions.
00112 Invalid Date, Time or Timestamp value. (RPG IV only)
00113 Date overflow or underflow. (For example, when the result of a Date
calculation results in a number greater than *Hival or less than *Loval.)
(RPG IV only)
00114 Date mapping errors, where a Date is mapped from a 4 character year
to a 2 character year and the date range is not 1940-2039. (RPG IV only)
00115 Variable length character or graphic field has a current length that is
not valid. (RPG IV only)
00120 Table or array out of sequence.
00121 Invalid array index.
00122 OCCUR value is out of range.
00123 RESET attempted during initialization.
00202 Call to program or procedure ended in error.
00211 Error occurred while calling program or procedure.
00221 Called program tried to use a parameter not passed to it. (RPG III only)
00222 Pointer or parameter error. (RPG IV only)
00231 Called program returned with halt indicator on.
00232 Halt indicator on in this program.
00233 Halt indicator on when RETURN operation run.
00299 RPG dump failed.
00301 Class or method not found for a method call, or error in method call.
00302 Error while converting a Java array to an RPG parameter on entry to a
Java native method.
00303 Error converting RPG parameter to Java array on exit from an RPG
native method.
00304 Error converting RPG parameter to Java array in preparation for a Java
method call.
00305 Error converting Java array to RPG parameter or return value after a
Java method.
00306 Error converting RPG return value to Java array.
00333 Error on DSPLY operation.
00401 Data area not found.
00402 *PDA not valid for non-prestart job.
00411 Data area types or lengths do not match.
00412 Data area not allocated for output.
00413 An I/O error occurred while processing data area.
00414 User not authorized to use data area.
00415 User not authorized to change data area.
|00421 Error while unlocking data area.
00425 Length requested for storage allocation is out of range. (RPG IV only)
00426 Error encountered during storage management operation. (RPG IV
only)
00431 Data area previously allocated to another process.
00432 *LOCK for data area not granted.
00450 Character field not entirely enclosed by SO and SI. (RPG IV only)
00501 Failure to retrieve sort sequence.
00502 Failure to convert sort sequence.
00802 Commitment control not active.
00803 Rollback operation failed.
00804 Error occurred on COMMIT operation.
00805 Error occurred on ROLBK operation.
00907 Decimal data error (invalid digit or sign).
00970 The level numbers of the generating compiler and the run-time
subroutines do not match.
09998 Internal failure in RPG compiler or in run-time subroutines.
09999 Program exception in system routine.

Si te pareció interesante, reenvíalo a un amigo haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.


Publicado por: Ing. Liliana Suárez