Ces contrôles sont à la source des messages :
BOP-BBAO0026-Un job est déjà en cours d'exécution avec le même identifiant (BOP ou BI0)
BI0-BBAO0027 Un job est déjà en cours d'exécution avec le même identifiant &1 - traitement forcé
BI0-BBAO0028-Job vérouillé Identifiant &1
Les verrous
- L'information ZO7L sert au verrouillage d'un cycle (et ZO7U : Libération d'un cycle). La table PG70 permet de mémoriser la présence d'un verrou.
- En début de cycle, lors de la soumission du traitement, un contrôle est effectué sur la table PG70 pour le numero de travail soumis. Si aucun verrou n'est présent, alors la soumission est lancée et un verrou est posé.
- En fin de cycle, si la phase s'est exécutée sans anomalie (code retour < 05), le verrou est levé.
A noter :
- En standard les NRA les K22 et en HRv7.0 les K2W posent un verrou. Les chaînes NRB et NRD les lèvent.
- Le contrôle peut bloquer un traitement si un verrou n'a pas été levé. Si vous utilisez un cycle assurez vous donc d'avoir demandé la libération du verrou dans la demande NRB/NRD (onglet "Libération du cycle") et que les deux demandes ont bien le même numéro de travail,
- Pour ne pas être bloquée, une soumission de NRA isolée déclenche un traitement BNA AA87L1NA qui passe la ZO7L-TEFORC à 1.
- Organisez les numéros de travail de vos demandes Opération. Si vous ne vous en sortez pas, mécanisez une purge régulière de la PG70 !
Les travaux en cours
Ce contrôle bloque car un dossier de travail ZO est "en cours" depuis moins de 24 heures.- Fermez le en alimentant sa date de fin dans ZO2C par update SQL ou via le lien suivant :
(le javascript associé en profite pour alimenter dans la ZO2C-ZOSOUM la date et le code de l'utilisateur ayant forcé l'horodatage de fin du travail).
- Sinon supprimez le dossier de travail ZO concerné !
- Ou (si le traitement est lancé par un enchaînement) mettez le IDFJOB de la demande NRC à blanc (ou zéro) : BOP va alors l'incrémenter jusqu'à en trouver un libre !
Détails
- Le contrôle des verrous est réalisé par le sous programme BI0 de BOP.
*N06BP. NOTE *Lecture de la PG70. *.
F06BP.
MOVE H-ZO7L-IDENT1 TO H-PG70-IDENT1.
MOVE H-ZO7L-IDENT2 TO H-PG70-IDENT2.
MOVE H-ZO7L-IDENT3 TO H-PG70-IDENT3.
MOVE H-ZO7L-IDENT4 TO H-PG70-IDENT4.
PERFORM F9S THRU F9S-FN.
F06BP-FN. EXIT.
...
EXEC SQL SELECT
IDENT1,
IDENT2,
IDENT3,
IDENT4
INTO
:H-PG70-IDENT1,
:H-PG70-IDENT2,
:H-PG70-IDENT3,
:H-PG70-IDENT4
FROM %1.PG70
WHERE IDENT1 = :H-PG70-IDENT1
AND IDENT2 = :H-PG70-IDENT2
AND IDENT3 = :H-PG70-IDENT3
AND IDENT4 = :H-PG70-IDENT4
END-EXEC.
*N06BS. NOTE *Chaine bloquée *.
F06BS. IF SQLCODE = ZERO
NEXT SENTENCE ELSE GO TO F06BS-FN.
MOVE H-ZO7L-IDENT1 TO WP00-DSIDE1
MOVE H-ZO7L-IDENT2 TO WP00-DSIDE2
MOVE H-ZO7L-IDENT3 TO WP00-DSIDE3
MOVE H-ZO7L-IDENT4 TO WP00-DSIDE4.
*N06BV. NOTE *CAS NON FORCE *.
F06BV. IF H-ZO7L-TEFORC NOT = "1"
NEXT SENTENCE ELSE GO TO F06BV-FN.
MOVE "BBAO0026" TO S-CDDISP
MOVE WP00-DSIDEN TO S-ZOSUB1
PERFORM F97 THRU F97-FN
MOVE "99" TO W-WP00-CDRET
MOVE "1" TO WP00-FT
MOVE ALL "1" TO FT GO TO F20.
- Le contrôle des travaux en cours est fait sur la base des horodatages de début et de fin de traitement en table ZO2C.
Extrait du squelette de BOP :
EXEC SQL SELECT COUNT(*) INTO :H-NOMBRE
FROM %1.£100 A,
%1.£12C B
WHERE A.NUDOSS = B.NUDOSS
AND (A.CDPHAS = :H-CDPHAS
OR A.CDPHAS IN
(SELECT DISTINCT C.CDPH01
FROM %1.£12B C
WHERE C.NUDOSS = :H-NUDOSD ))
AND A.IDFJOB = :H-IDFJOB
AND A.FLGJOB = "1"
AND B.TIMFIN = :H-WM00-TIMFIN
AND B.TIMDEB > :H-WM00-TIMDEB END-EXEC.
Autre cas de figure : en cas de NRC le programme BOP compte les travaux NRC ou ZO2B.CDPH01 de même IDFJOB non clos ...
RépondreSupprimer