En nuestras aplicaciones de gestión, es
habitual encontrar que no se puede acceder a un registro porque otro trabajo ya lo
utiliza.
Con este ejemplo le daremos un aspecto profesional a nuestra aplicación, por qué, cuando
esto suceda, sabremos quien está utilizando el registro y tomar el control de la
aplicación.
Definimos la estructura de datos del programa
D
SDS
D
Trabajo 91
170
Proceso
** Este chain lo vamos a controlar mediante el indicador 50 que nos indicará si el **
registro ha sido encontrado y el 51 que nos indica si el registro al que
** queremos acceder está bloqueado.
C
Campo1CHAIN FICHEROL1
5051
** Si el indicador 51 esá activado hace
C
*in51 ifeq *on
** El campo Trabajo recoje la información del trabajo que bloquea nuestro registro.
** Movemos el contenido del campo Trabajo definido en la estructura de datos ** de
programa a la variable Var1 para poder buscar el nombre del usuario
c
movel
Trabajo Var1
40
** Buscamos la primera barra del campo Var1
c
'/'
scan Var1
X
2 0
** Extraemos la información del campo Var1 desde la primera barra y lo movemos al campo
quienes
c
eval
quienes = %subst(Var1:x+1:40)
** Buscamos la segunda barra en el campo Quienes
c '/'
scan
Quienes
X
2 0
** Movemos Blancos al campo Usuario que será el que recojera la información ** sobre el
usuario que está bloqueando el registro
c
move
*blanks
Usuario
10
** Movemos el nombre del usuario al campo Usuario
c
eval
Usuario = %subst(Quienes:1:barra-1)
** Movemos blancos al campo Quienes
c
move
*blanks Quienes
** Movemos literales al cmpo Quienes
c
eval
Quienes = 'El usuario'
** Movemos al campo Quienes el contenido del campo Usuario
c
Quienes cat Usuario:1
Quienes
** Movemos el resto de literales al campo Quienes
c
Quienes cat 'bloquea
el':1Quienes
c
Quienes cat
'registro':1 Quienes
** Mostramo por pantalla el contenido del campo Quienes. En este ejemplo
**hemos utilizado la
** instrucción DSPLY pero es mas "bonito" sacar el resultado en una
pantalla
**que además nos
** permita preguntarle al usuario si quiere esperar a que el registro deje de estar
** bloqueada o quiere cancelar el proceso.
c
Quienes dsply
c
leave
c
endif
* Este ejemplo ha sido comprobado en un AS/400
con la versión de sistema operativo 3.7

|