Modernisation Oracle Forms

Comment exécuter une commande du système d'exploitation depuis Oracle Reports

S'APPLIQUE À

Oracle Reports Developer - Version 9.0.4.0 à 11.1.1.4.0 [Version Oracle9i à 11g]
Les informations de ce document s'appliquent à toutes les plateformes.

OBJECTIF

Dans Oracle Forms, la fonction intégrée HOST permet d'exécuter une commande donnée du système d'exploitation.

Cette note explique comment utiliser Java dans Oracle Reports pour obtenir une fonction semblable.

Mise en garde

Les exemples de programmes de cet article sont fournis à des fins pédagogiques seulement et ne sont PAS pris en charge par Oracle Support Services. Ils ont toutefois été testés à l'interne et fonctionnent comme décrit. Nous ne garantissons pas qu'ils fonctionneront chez vous : testez-les donc dans votre environnement avant de vous y fier.

CORRECTIF

Importez la classe Java : java.lang.Runtime

  1. Menu Program -> Import Java Classes ...
  2. Saisissez 'java.lang.Runtime' dans le champ 'Import Classes:'
  3. Appuyez sur

Utilisez la fonction exec (pour appeler cette fonction, il faut récupérer l'objet "runtime")
Exemple :

function BeforeReport return boolean is
  rt ORA_JAVA.JOBJECT;
  proc ORA_JAVA.JOBJECT;
begin
  rt := RUNTIME.GetRuntime();
  proc := RUNTIME.exec(rt,'cmd /c set > e:\temp\getruntime.txt');

  return (TRUE);
end;

Cet exemple renvoie les paramètres d'environnement d'un environnement Windows.

Si vous voulez attendre la fin de la "commande du système d'exploitation", importez la classe Java java.lang.Process et utilisez la méthode waitfor (c'est nécessaire si vous voulez lire le fichier généré par la commande du système d'exploitation) :

function BeforeReport return boolean is 
  rt ORA_JAVA.JOBJECT; 
  proc ORA_JAVA.JOBJECT; 
  l_rc NUMBER;
begin 
  rt := RUNTIME.GetRuntime(); 
  proc := RUNTIME.exec(rt,'cmd /c set > e:\temp\getruntime.txt'); 
  l_rc := PROCESS.waitfor (proc); 

  return (TRUE); 
end;

Voici ci-dessous un exemple pour les systèmes UNIX qui récupère les paramètres d'environnement :

 function BeforeReport return boolean is   
  rt ORA_JAVA.JOBJECT;   
  proc ORA_JAVA.JOBJECT;   
  cmdarray ORA_JAVA.JOBJECT;   
  l_temp_outfile VARCHAR2(2048);   
  l_rc NUMBER;   
BEGIN   
-- java.lang.Runtime and java.lang.Process must be imported.   

begin   
l_temp_outfile := SRW.CREATE_TEMPORARY_FILENAME;   

rt := RUNTIME.GetRuntime();   

-- Create a STRING ARRAY to pass to the method exec   

cmdarray := ORA_JAVA.NEW_STRING_ARRAY(3);   
ORA_JAVA.SET_STRING_ARRAY_ELEMENT (cmdarray, 0, '/bin/sh');   
ORA_JAVA.SET_STRING_ARRAY_ELEMENT (cmdarray, 1, '-c');   
ORA_JAVA.SET_STRING_ARRAY_ELEMENT (cmdarray, 2, 'env >' || l_temp_outfile || ' 2>&1');   

proc := RUNTIME.exec(rt,cmdarray);   

-- Wait for the process completion   
l_rc := PROCESS.waitfor (proc);   

exception   
when others then null;   
end;   

return(TRUE);   
end;