Le guide Oracle Forms 9i/10g
Date de publication : Juin 2005
Les états
Définition
Mise en oeuvre
Les états
Définition
Les états sont des modules spécifiques réalisés avec l'outil Oracle Reports.
Le nud Etats du module Forms ne stocke que les paramètres d'appels de l'état
Mise en oeuvre
Attacher la définition d'un état Reports existant
Cliquer le nud Etats puis l'icône
Une boite de dialogue permet de spécifier le nom du fichier état (*.rdf)
Affichons la fenêtre de propriétés de l'état (F4)
Intégration Oracle Developer
Nom de fichier représente le nom du fichier Reports
Mode d'exécution peut prendre l'une des deux valeurs suivantes
- Batch (aucune interaction possible de l'utilisateur)
- Runtime offre la possibilité d'interaction pendant l'exécution
Mode de communication peut prendre l'une des deux valeurs suivantes
- Synchrone Forms attend la fin de l'exécution de l'état pour rendre la main
- Asynchrone Forms lance l'exécution de l'état et rend immédiatement la main
Bloc de données source représente le bloc Forms qui sera la source des données de l'état
Nom de l'interrogation représente l'ordre SQL qui sera transmis à l'état
Etats
Type d'état cible peut prendre l'une des valeurs suivantes
- Aperçu
- Fichier
- Imprimante
- Envoyer
- Cache
- Ecran
Nom d'état cible indique le nom de la cible
Nom de fichier si la cible est un fichier
Nom de l'imprimante si la cible est Imprimante
Adresse de messagerie si la cible est Envoyer
Format d'état cible peut prendre l'une des valeurs suivantes
- PDF génère un état au format PDF (Acrobat Reader)
- HTML génère un état au format HTML
- HTMLCSS génère un état HTML incluant un fichier de style (CSS)
- HTMLCSSIE génère un état HTML incluant un fichier de style (CSS) pouvant être lu par Microsoft Internet Explorer 3.x
- RTF génère un état au format Rich Text Format
- DELIMITED génère un état au format ASCII délimité
Serveur d'états indique le nom du Report Server activé sur le serveur d'applications
Paramètres dresse la liste des paramètres qui seront transmis à l'état (de type param=valeur)
Créer un état Reports depuis Forms Builder
Vous pouvez attacher et créer un état Reports
Nud Etats puis
Donnez un nom au fichier que Reports va créer
Indiquez (facultatif) le nom du bloc sur lequel l'état sera créé
Cliquez le bouton OK
Forms lance Reports Builder ainsi que ses assistants pour vous permettre de mettre en forme de nouvel état.
Lancement d'un état à l'exécution
Pour lancer l'exécution d'un état il faut utiliser l'instruction : Run_Report_Object()
Syntaxes:
RUN_REPORT_OBJECT( 'nom_etat' | id_etat );
RUN_REPORT_OBJECT( 'nom_etat' | id_etat, 'nom_liste_params' | id_liste_params );
La fonction retourne une variable de type REPORT_OBJECT
RUN_REPORT_OBJECT() Declare
repid REPORT_OBJECT;
v_rep VARCHAR2(100);
rep_status VARCHAR2(20);
Begin
repid := FIND_REPORT_OBJECT('report4');
v_rep := RUN_REPORT_OBJECT(repid);
...
End;
Modifier les parametres d'un état à l'exécution
Il est possible de modifier dynamiquement les paramètres d'un état avec l'instruction:
Set_Report_Object_Property( 'nom_etat' | id_etat, propriete, valeur ) ;
Propriete/valeur peuvent être:
- REPORT_EXECUTION_MODE (BATCH ou RUNTIME)
- REPORT_COMM_MODE (SYNCHRONOUS ou ASYNCHRONOUS)
- REPORT_DESTYPE (PREVIEW, FILE, PRINTER, MAIL, CACHE, ou SCREEN)
- REPORT_FILENAME 'nom du fichier de destination'
- REPORT_SOURCE_BLOCK 'nom_du_bloc_source'
- REPORT_QUERY_NAME 'ordre select'
- REPORT_DESNAME
- REPORT_DESFORMAT
- REPORT_SERVER 'nom_du_report_server'
- REPORT_OTHER 'liste des parameter param=valeur'
Exemple:
SET_REPORT_OBJECT_PROPERTY() Declare
repid REPORT_OBJECT;
report_prop VARCHAR2(20);
Begin
repid := find_report_object('report4');
SET_REPORT_OBJECT_PROPERTY(repid, REPORT_EXECUTION_MODE, BATCH);
SET_REPORT_OBJECT_PROPERTY(repid, REPORT_COMM_MODE, SYNCHRONOUS);
SET_REPORT_OBJECT_PROPERTY(repid, REPORT_DESTYPE, FILE);
End;
Ces valeurs peuvent également être lues avec l'instruction:
Get_Report_Objet_Property('nom_etat' | id_etat, propriete ) ;
Retrouver l'identifiant interne d'un état
REPORT_OBJECT := Find_Report_object( 'nom_etat' ) ;
Lecture du statut de l'état lancé avec Run_Report_Object()
Varchar2 := Report_Object_Status( id_etat ) ;
id_etat correspond à la valeur récupérée à l'appel de Run_Report_Object()
La fonction retourne l'une des valeurs suivantes
- finished
- running
- canceled
- opening_report
- enqueued
- invalid_job
- terminated_with_error
- crashed
REPORT_OBJECT_STATUS() Declare
repid REPORT_OBJECT;
v_rep VARCHAR2(100);
rep_status varchar2(20);
Begin
repid := find_report_object('report4');
v_rep := RUN_REPORT_OBJECT(repid);
rep_status := REPORT_OBJECT_STATUS(v_rep);
If rep_status = 'FINISHED' then
message('Etat achévé');
copy_report_object_output(v_rep,'d:/temp/local.pdf');
host('netscape d:/temp/local.pdf');
Else
message('Erreur d''exécution de l''état.');
End if;
End;
Copie de la sortie d'un état vers un fichier
Copy_Report_Object( id_etat, 'nom_fichier' ) ;
id_etat correspond à la valeur récupérée à l'appel de Run_Report_Object()
Arrêt de l'exécution d'un état lancé en mode asynchrone
Cancel_Report_Object( id_etat ) ;
id_etat correspond à la valeur récupérée à l'appel de Run_Report_Object()
Remarque:
Il n'est pas possible d'arrêter un état lancé en mode synchrone
exemple de procedure de lancement de report:
Procédure de Lancement d'état procedure run_report
(
p_report_name varchar2,
p_param_list paramlist default null ,
p_desType number default CACHE ,
p_desName varchar2 default null ,
p_desFormat varchar2 default 'pdf'
)
is
lMachine varchar2(200);
lRepObj report_object;
lRepServer varchar2(100);
lRepJobId varchar2(100);
lJobId varchar2(100);
lRepStatus varchar2(30);
Begin
lRepServer := 'reportservername';
lRepObj := find_report_object('RP2RRO');
set_report_object_property(lRepObj,report_server,lRepServer);
set_report_object_property(lRepObj,report_execution_mode,RUNTIME);
set_report_object_property(lRepObj,report_comm_mode,ASYNCHRONOUS);
set_report_object_property(lRepObj,report_desType,p_desType);
set_report_object_property(lRepObj,report_desName,p_desName);
set_report_object_property(lRepObj,report_desFormat,p_desFormat);
set_report_object_property(lRepObj,report_fileName,p_report_name);
lRepJobId := run_report_object(report_id => lRepObj,paramlist_id => p_param_list);
If p_desType = cache then
lJobId := substr(lRepJobId,length(lRepServer)+2);
If lJobId != 0 then
lRepStatus := REPORT_OBJECT_STATUS(lRepJobId);
If lRepStatus = 'FINISHED' then
WEB.SHOW_DOCUMENT('http://youservername/reports/rwservlet/getjobid'||lJobId||'?server='||lRepServer,'_blank');
End if;
End if;
End if;
End;
Lancement d'un état avec la commande : Web.Show_Document()
Il est possible de lancer l'exécution d'un état sans la présence d'un objet Etat dans la forme.
Cette fonctionnalité est intéressante lorsque vous voulez lancer un état depuis un menu ou depuis une url saisie dans le navigateur.
La commande Web.Show_Document() permet de réaliser cela
Il suffit de lui transmettre l'url du Report Server ainsi que les paramètre requis
Web.Show_Document() Declare
LC$Repserver Varchar2(128) := 'http://nom_machine:port/reports/rwservlet' ;
LC$Cmd varchar2(256) ;
Begin
LC$Cmd := LC$Repserver || '?nom_section_config&report=nom_etat.rdf'
|| '&P_1=' || name_in('PARAMETER.P_1') ) ;
Web.show_document(LC$Cmd, '_blank') ;
End ;
nom_section_config représente le nom d'une des sections de configuration ajoutée dans le fichier:
<ORACLE_HOME>reports\conf\cgicmd.dat
L'ajout de section dans ce fichier permet d'indiquer les paramètres confidentiels qui n'apparaîtront donc pas dans l'url du navigateur.
Extrait du fichier cgicmd.dat:
Section1: userid="scott/tiger@dbtest" destype=cache desformat=pdf server=repserver %*
Section2: userid=" scott/tiger@dbtest " destype=cache desformat=pdf server=repserver %* %P
Dans l'appel de la commande Web.Show_Document(), il suffit de spécifier le nom de la section dans l'url après le ? afin de ne pas afficher le userid dans l'url
|