...
Bloc de code |
---|
public function int A5_Proc_Shift_SQL_ (instanceRecordSql, Applic, item, err, txt, f) ; Cette fonction est utilisée pour réserver l'entité "item" après un partage. ; "err" <> 0 provoque le bouclage tant que l'opérateur n'a pas abandonné. ; "err" = 0 n'entraîne que 10 secondes (en interactif) ou 10 minutes (en batch) de bouclage. ; le paramètre "txt" est utilisé en tant que "p3" pour l'affichage du message d'erreur. ; Le paramètre "f" permet de modifier le fonctionnement : ; - si f = nostatus, la fonction ne rend la main que si réservation ok. ; - si f = nowait, la fonction rend immédiatement la main après le premier essai. ; Cas particulier G3 à vérifier : ; si err = 0 et txt = ' ' et f = nostatus, la fonction boucle jusqu'au succès. ; 0 ok ; <> 0 échec de la réservation RecordSqlPtr instanceRecordSql 1 applic >A5DD.dhsd Ap ; Nom de l'application 1 item 256 ; chaîne à partager 1 err 5,0= 0 ; numéro du message d'erreur 1 txt 256= ' ' ; texte complément du message d'erreur 1 f N = 0 ; 0 pour fonctionnement normal ; nostatus pour retour que si ok ; nowait pour retour immédiat si réservé |
Comment appeler - exemple d’appel
L’appel doit se faire via les fonctions de l’objet métier (voir chapitre plus haut)
Ces fonctions encapsulent l’entité et l’appel aux couches communes des fonctions de réservation
Exemple : A5_Proc_Lock_SQL_
ne doit pas être appelé directement, mais on passe par Res_ART_Lock
(qui fait appel au Reservation_ART_Lock
) qui fait appel au GT_Proc_Lock_SQL
et enfin la fonction commune
Voici un exemple d’une fonction de haut niveau qui expose plusieurs modes de réservation
Bloc de code |
---|
;*
Public Procedure Maj_Compteur_article(ref,cpt,ReserverArt)
; Mise à jour d'une comptauer article pour quantité 'cpt'
1 ref >GTFDD.dhsd REF ; référence article
1 cpt >GTFDD.dhsd RESQTE ; quantité
1 ReserverArt 1,0 ; =0 si pas de résevation,= 1 si RES, =2 si shift
1A x X ; retour de fonction
BeginP
if cpt <> 0
; met à jour le compteur article
switch ReserverArt
case 1
x = Res_Art_Lock( ref, 0, NoWait)
if x = H_RESERVED
x = Res_Art_Shift ( ref, 0, NoWait)
ReserverArt = 2 ; Pour remettre en l'état
endif
case 2
x = Res_Art_Shift( ref, 0, NoWait)
default
x = 0
endswitch
if x = 0
if Seek_Article(RS_Article,ref) = 0
RS_Article.CptA = cpt
Update_Article(RS_Article)
endif
switch ReserverArt
case 1
Res_Art_Unlock(ref)
case 2
Res_Art_Share(ref)
endswitch
else
Log_Ano(2269,ref)
endif
endif
EndP
|
Les ouvertures disponibles et erreur signalées
Un programme appelant peut implémenter des ouvertures prévues en standard:
Initialiser_Temps_Time_out
Par défaut, en absence de cette ouverture chez l’appelant, le temps d’attente en interactif est de 10s
L’ouverture permet de retourner une valeur en secondes
La valeur 0 est interdite, remplacée par la valeur par défaut
Initialiser_Temps_Time_out_Batch
Par défaut, , en absence de cette ouverture chez l’appelant, le temps d’attente en interactif est de 600s=10mn
L’ouverture permet de retourner une valeur en secondes
La valeur 0 est interdite, remplacée par la valeur par défaut
ProcLock_arreter_prog
Par défaut, si l’entité est réservée (et le temps d’attente dépassé) l’appelant est “tué”
L’ouverture permet de retourner 'N' pour indiquer de ne pas tuer la tâche
Exemple:
le A5TTICP000.dhsp illustre
ProcLock_arreter_prog
pour ne pas arrêter le synchronisateur inter-compagnie
Bloc de code |
---|
;*
Public function char ProcLock_arreter_prog
;
beginf
;si réservé, on ne veut pas tuer la tache
freturn ('N')
endff |
le GTTTDHB001.dhsp illustre
Initialiser_Temps_Time_out_Batch
pour attendre 10s
Bloc de code |
---|
;*
Public function int Initialiser_Temps_Time_out_Batch
;
beginf
;pour le synchronisateur, on attend max 30s de résa
freturn (30)
endf |