Vous êtes sur la page 1sur 7

Les états

Définition

Les états sont des modules spécifiques réalisés avec l'outil Oracle Reports.

Le nœud 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 nœud 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

Nœud 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

Vous aimerez peut-être aussi