Paramétrage d'un GTS Spécifique (Notes)
Malheureusement, toutes les images semblent avoir sautées !
Utile pour ne pas bloquer les demandes des utilisateurs lorsqu'un traitement en cours lance de nombreux sous-traitements.
1 - Définir le GTS
Responsabilité :
Administrateur système
Gestionnaire de Traitement Simultanés (GTS) à définir
Gestionnaire de Traitement Simultanés (GTS) à définir
GTS
|
XXZZZ_GTS
|
Application
|
Spécifiques
|
Description
|
GTS Spécifique
ZZZ
|
Type
|
GTS
|
Primaire/Noeud
|
Machine_Serveur
|
Bibliothèque
de programmes
|
FNDLIBR
|
2 - Règles de spécialisation
Inclure les traitements qui sont exclus du GTS standards (important pour éviter un conflit).
Gestionnaire de Traitement Simultanés Définir
(Règles de spécialisation)
Règles de spécialisation : Inclure le traitement spécifique
« Traitement de relance du WF »
Programme :
Traitement de relance du WF
Nom
abrégé : RELANCE_WF
Nom fichier d’exécution : xxXXX_validation_ap_pkg.xxXXX_relance_wf_p
Ø Processus Workflow en arrière-plan
Après duplication
du traitement standard,
Rajout des
paramètres :
- Type
d'élément : Demande d'approvisionnement
-
Traitement différé : Oui
-
Traitement en pause : Oui
- Traitement bloqué : Oui
AS
g_version VARCHAR2(5) := '1.1';
g_retcode NUMBER := 0;
g_request_id NUMBER := fnd_global.conc_request_id;
g_nom_traitement VARCHAR2(60);
g_concurrent_program_name fnd_concurrent_programs.concurrent_program_name%TYPE;
g_date_dif DATE;
g_ins_differe BOOLEAN := FALSE;
g_user_id NUMBER := fnd_global.user_id;
g_login_id NUMBER := fnd_global.login_id;
g_debug INTEGER := 5;
g_ligne VARCHAR2(2000);
g_sob_id NUMBER;
g_org_id NUMBER;
PROCEDURE xxXXX_submit_p (p_type_wf IN VARCHAR2,
p_item_key IN VARCHAR2,
p_notification_id IN NUMBER,
p_value IN VARCHAR2)
IS
l_request_id NUMBER;
BEGIN
l_request_id := apps.fnd_request.submit_request('XXXXX', -- application IN varchar2 default NULL
'XXX_RELANCE_WF', -- program IN varchar2 default NULL
NULL, -- description IN varchar2 default NULL
SYSDATE, -- start_time IN varchar2 default NULL
FALSE, -- sub_request IN boolean default FALSE
p_type_wf, -- argument1 IN varchar2 default CHR(0) - Type de workflow
p_item_key, -- argument2 IN varchar2 default CHR(0) - item_key du workflow
p_notification_id, -- argument3 IN varchar2 default CHR(0) - Identifiant notification
p_value -- argument4 IN varchar2 default CHR(0) - Valeur activité
);
END xxXXX_submit_p;
PROCEDURE xxXXX_relance_wf_p (errbuf OUT NOCOPY VARCHAR2,
retcode OUT NOCOPY NUMBER,
p_type_wf IN VARCHAR2,
p_item_key IN VARCHAR2,
p_notification_id IN NUMBER,
p_value IN VARCHAR2)
IS
l_request_id NUMBER;
l_process_activity NUMBER; -- activité notification
l_pntfstatus VARCHAR2 (500);
l_pntfresult VARCHAR2 (500);
l_recipient_role wf_notifications.recipient_role%TYPE;
BEGIN
SELECT ias.process_activity
INTO l_process_activity
FROM wf_item_activity_statuses ias
WHERE ias.item_type = p_type_wf
AND ias.end_date IS NULL
AND ias.activity_status = 'NOTIFIED'
AND ias.item_key = p_item_key;
SELECT recipient_role
INTO l_recipient_role
FROM wf_notifications
WHERE notification_id = p_notification_id;
wf_engine_util.complete_activity (p_type_wf, p_item_key, l_process_activity, p_value);
-- Relance du workflow
wf_engine_util.execute_post_ntf_function (p_type_wf,
p_item_key,
l_process_activity,
'RUN',
l_pntfstatus,
l_pntfresult
);
-- MAJ du status de la notification
UPDATE wf_notifications wn
SET wn.status = 'CLOSED',
wn.responder = l_recipient_role
WHERE wn.notification_id = p_notification_id;
END xxXXX_relance_wf_p;
PROCEDURE xxXXX_wf_erreur_p (errbuf IN OUT NOCOPY VARCHAR2,
retcode IN OUT NOCOPY NUMBER,
p_date_dif IN VARCHAR2,
p_type_wf IN VARCHAR2)
IS
LV_param XXXXX.XXXXX_PARAMETRES%ROWTYPE;
LV_Ok BOOLEAN;
l_process_activity NUMBER; -- activité notification
l_result VARCHAR2 (500);
BEGIN
retcode := 0;
-- Récupération du nom du traitement agrégé
SELECT prg.concurrent_program_name, lib.USER_CONCURRENT_PROGRAM_NAME
INTO g_concurrent_program_name, g_nom_traitement
FROM fnd_concurrent_programs prg, fnd_concurrent_requests req,
fnd_concurrent_programs_tl lib
WHERE req.concurrent_program_id = prg.concurrent_program_id
AND prg.CONCURRENT_PROGRAM_ID = lib.CONCURRENT_PROGRAM_ID
AND lib.LANGUAGE = 'F'
AND req.request_id = g_request_id;
xxXXX_commun_pkg.log_entete_p(g_nom_traitement, g_version);
BEGIN
g_date_dif := TO_DATE (p_date_dif, 'YYYYMMDD');
EXCEPTION
WHEN OTHERS THEN
retcode := 3;
errbuf := SQLERRM;
xxXXX_commun_pkg.log_trace_p (g_nom_traitement,'Chargement date différé', errbuf, retcode);
g_date_dif := trunc(sysdate);
RAISE;
END;
LV_param.TRAITEMENT := g_concurrent_program_name;
LV_param.ID := p_type_wf;
LV_Ok := xxXXX_traitement_pkg.trait_OK (retcode, g_date_dif, LV_param);
g_debug := LV_param.debug;
IF LV_Ok then
FOR wf in (SELECT * FROM applsys.wf_item_activity_statuses ias
WHERE ias.ITEM_TYPE = p_type_wf
-- and ias.ITEM_KEY = '507277_1'
AND ias.activity_status = 'ERROR')
LOOP
g_ligne:= 'Relance WF :>' || p_type_wf || '-' || wf.item_key || '-' || wf.process_activity || '<';
fnd_file.put_line (1, g_ligne);
wf_engine_util.execute_activity (p_type_wf, wf.item_key,wf.process_activity,'RUN');
END LOOP;
END IF;
IF retcode = 0 THEN
fnd_file.put_line (1, ' Fin du traitement (Ok)');
ELSE
ROLLBACK;
fnd_file.put_line (1, ' Fin du traitement (Ko)');
IF retcode = 1 THEN
INSERT INTO xxXXX.xxXXX_cr_differe
(request_id, nom_traitement
,creation_date, date_differe
,message, statut
)
VALUES (g_request_id, g_concurrent_program_name
,SYSDATE, g_date_dif
,'Problème dans traitement (Voir log)', 'AVE'
);
g_ins_differe := TRUE;
COMMIT;
ELSE
retcode := 1;
INSERT INTO xxXXX.xxXXX_cr_differe
(request_id, nom_traitement
,creation_date, date_differe
,message, statut
)
VALUES (g_request_id, g_concurrent_program_name
,SYSDATE, g_date_dif
,'Problème dans traitement (Voir log)', 'ERR'
);
COMMIT;
END IF;
END IF;
xxXXX_commun_pkg.log_fin_p (g_nom_traitement);
EXEPTION
WHEN OTHERS THEN
ROLLBACK;
--Ajout d'une ligne dans la Log avec un message d'erreur
retcode := 2;
errbuf := SQLERRM;
xxXXX_commun_pkg.log_trace_p (g_nom_traitement, 'Erreur grave dans le traitement', errbuf, retcode);
-- Ajout d'une ligne dans la table des traitements différés avec un message d'erreur
IF not g_ins_differe THEN
INSERT INTO xxXXX.xxXXX_cr_differe
(request_id, nom_traitement
,creation_date, date_differe
,message, statut
)
VALUES (g_request_id, g_concurrent_program_name
,SYSDATE, g_date_dif
,'Problème survenu lors du traitement', 'ERR'
);
END IF;
COMMIT;
xxXXX_commun_pkg.log_fin_p (g_nom_traitement);
retcode := 1;
END xxXXX_wf_erreur_p;
END xxXXX_validation_ap_pkg;
3 - Plage de travail
Gestionnaire de Traitement Simultanés (Plage de travail)4 - Administrer le GTS
Gestionnaire de Traitement Simultanés
Vérifier que le statut est actif sinon utilisation du bouton "Activer".5 - Planification du traitement
Responsabilité : Administrateur du systèmePlanifier le traitement (ici XXX : Processus Workflow en arrière-plan)
Aucun commentaire:
Enregistrer un commentaire