Le guide Oracle Forms 9i/10g


précédentsommairesuivant

XVII. Les états

XVII-A. 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

XVII-B. Mise en œuvre

Attacher la définition d'un état Reports existant

Cliquer le nœud Etats puis l'icône Image non disponible

Une boite de dialogue permet de spécifier le nom du fichier état (*.rdf)

rep_01


Affichons la fenêtre de propriétés de l'état (F4)

rep_02


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 Image non disponible

rep_03

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()
Sélectionnez

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()
Sélectionnez

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()
Sélectionnez

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
Sélectionnez

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()
Sélectionnez

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


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2005 SheikYerbouti. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.