IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

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 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)

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

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()
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



Copyright © 2005 SheikYerbouti. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.