La Web del Programador: Comunidad de Programadores
 
    Pregunta:  16405 - PROGRAMACIÓN MULTIUSUARIOS EN RPG DE AS400
Autor:  Enrique Chávez
Lenguaje RPG de AS400

Que instrucciones se pueden utilizar para hacer un programa que trabaje en modo multiusuario.
Ejem: Un programa que lee un archivo con la instruccion READ automaticamente bloquea el registro, cuando otro programa llega a leer el mismo registro este si no tiene la funcion multiusuario truena con el mensaje "Registro en uso por otro usuario".

La pregunta es que instrucciones o rutinas podemos aplicar para que el programa que detecta que un registro este en uso se espere hasta que este sea liberado.

  Respuesta:  Joaquin Nunez
Casualmente pasé por esta pagina y no se desde cuando se formuló esta pregunta, espero aun te sirva mi respuesta.

Cuando un programa RPG intenta leer un registro bloqueado espera el tiempo indicado por el archivo a que dicho registro se desocupe, si al termino de ese periodo aun no se libera, entonces manda el mensaje de error que indicas.

Lo que debes hacer es: Indicarle al programa que tu vas a manejar el error de archivo y despúes cuando detectes que el error enviado es por bloqueo de registro enviarle un mensaje al usuario indicandole que otro usuario esta utilizando el registro y que pulse enter para intentarlo nuevamente. Yo pondría este mensaje en una ventanita.
El código quedaría parecido a esto:

/Free
fSucces = *Off;

DoW fSuccess = *Off;
Read(E) tu_Archivo;
If %Error;
ExFmt WinLock;
Else;
fSucces = *On;
EndIf;
EndDo;
:
:
Continua tu proceso
:
:
*InLR = *On;
/End-Free

El tiempo de espera para un registro por default es de 60 segundos, por lo que si el usuario esta intentando tomar un registro que otro usuario ya tiene ocupado, se quedará con la pantalla bloqueada por 1 minuto antes de que le salga tu ventanita, te recomiendo que cambies esl tiempo de espera de tu archivo a unos 5 segundos, con el siguiente comando:

CHGPF FILE(tu_biblioteca/tu_archivo) WAITRCD(5)

Espero que aun te sea de utilidad.

Saludos!!

  Respuesta:  Gustavo Sagastume
esto solo susede cuando el erchivo esta abiero para actualizacion lo que debes hacer si quieres que el registro no se boquee cada vez que lees (READ O CHAIN) DEBES DE COLOCAR UNA "N" en posision 74 para no bloquear el registo si no la vas a actualizar