Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

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