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.

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

Saturday, March 10, 2012

CALL, CALLB, CALLP ¿Significan lo mismo?






  

 CALL, CALLB, CALLP      


CALL

Esta conocida instrucción se utiliza para invocar un programa tradicional en OPM o un programa RPGLE, CLP, CLLE. No es necesario explicar mucho más de este comando.

Cabe destacar que en RPGLE utilizando la facilidad de declarar los programas o procedures externos en la hoja ‘D’, no es necesario utilizar CALL cuando estamos programando en FREE. Con el nombre del procedure declarado en la hoja ‘D’, es suficiente invocar el nombre del programa en el cuerpo del programa se puede omitir el CALL:

PROGRAMA MODELO

DPGMNAME         PR        EXTPGM(‘PGMNAME’)
D                                           10 A
D                                           20 A

/Free

PGMNAME(PARM1:PAMR2);

*inlr = *ON

//End-Free

El código expuesto anteriormente corresponde a una “llamada dinámica”. Puede llamarse un Procedure o Programa sin que hayan sido enlazados previamente mediante un CRTPM.
PGMNAME se refiere al nombre del programa que queremos invocar desde este Programa Modelo.


CALLB

Se utiliza para llamar a un módulo que ha sido enlazado (Binded) con el programa llamador. Con el comando CRTPGM se crea  un programa en ILE que puede ser enlazado con uno o varios módulos (programas a quienes se les ha aplicado el CRTRPGMOD). Estos módulos enlazados pueden ser llamados con un  CALLB.

Puntos a tomar en cuenta:

Ø      El segundo factor del CALLB, debe ser un módulo enlazado con el programa “llamador”. Tambien puede ser un Subprocedure dentro del programa llamador.

Ø      El segundo factor debe ser: una constante, un literal o un apuntador a un procedure. Ejemplo:
     CALL ‘PGM1’. NO Puede ser una variable ni el campo de un archivo.

CALLP

Se utiliza para llamar a un procedure o subprocedure con prototipo en Ile o programa Externo OPM.
UN procedure con “prototipo” tiene en su hoja ‘D’ una línea que tiene estas características.

PROGRAMA MAIN

DMAIN         PR       
D                10 A
D                20 A


El programa MAIN no tiene *entry para declarar sus parámetros de entrada o Entry Points.
La declaración del prototipo hace que el compilador reconozca que se trata de un procedure “prototyped”.
En un nivel elemental,  Programa o Procedure es lo mismo. Hay sin embargo diferencias:
 En el Procedure, la declaración del prototipo y su enlace con módulos (o su capacidad de ser enlazado con módulos) es lo que lo distingue de un programa “normal”.  Cuando se enlazan varios módulos, la declaración del prototipo hace posible que el procedure pueda ser un modulo de entrada o “programa principal” de todo el conjunto de procedures enlazados.



Puntos a tomar en Cuenta:

Ø      El CALLP puede utilizarse para llamar a un programa, o a un procedure o subprocedure.

Ø      Si el procedure retorna un valor no puedes utilizar CALLP. Debe llamarlo como se llama  a las funciones Built-In en Ile-Rpg.

Ø      Usa el CALLP(E) para llamar a un programa o procedure  cuando quieras monitorear el error en la llamada con if %error



CALLP es el operador más amplio de los tres operadores de llamadas que hemos visto en este artículo. Puede utilizarse para llamar programas, procedure y subprocedures. Además tiene código extendido E para monitoreo de errores de llamada.


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.


Autor: Ing. Liliana Suárez