24 juillet 2012

BOP-BBAO0026-Un job est déjà en cours d'exécution avec le même identifiant

Depuis HRv7, le programme BOP contrôle qu'au démarrage une même chaîne n'est pas déjà en cours d'exécution.

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

  1. 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.
  2. 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é.
  3. 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. 
Il est basé sur la table PG70 :


*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.
                                         

1 commentaire:

  1. 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