Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUM ORACLE F.A.Q ORACLE TUTORIELS ORACLE TUTORIELS SQL SCRIPTS SQL LIVRES ORACLE QUIZ BLOG ORACLE

Webutil OLE container

Date de publication : Octobre 2005

Par SheikYerbouti (Page d'accueil)
 

Oracle Forms web

Remplacer l'ancienne fonctionnalité C/S (OLE Container) avec la librairie Webutil

en English version


1. Présentation
2. Enregistrer en base un fichier présent sur le poste local
2.1. Sélectionner un fichier sur le poste local avec la fonction WEBUTIL_FILE.FILE_OPEN_DIALOG
2.2. Enregistrer le fichier local dans la base de données avec la fonction WEBUTIL_FILE_TRANSFER.CLIENT_TO_DB
3. Extraire un fichier de la base pour l'éditer sur le poste local
3.1. Extraire un fichier sur le poste local avec la fonction WEBUTIL_FILE_TRANSFER.DB_TO_CLIENT
3.2. Editer le document en local avec la fonction WEBUTIL_HOST.BLOCKING
3.3. Ré-enregistrer le fichier local dans la base de données avec la fonction WEBUTIL_FILE_TRANSFER.CLIENT_TO_DB
3.4. Supprimer la copie temporaire locale avec la fonction WEBUTIL_FILE.DELETE_FILE
4. Appeler le correcteur orthographique de MS Word depuis un item de la forme
5. Ecran de test
6. Conclusion


1. Présentation

info Les versions Web d'Oracle Forms ne supportent plus les objets de type OLE Container
Ce tutoriel présente une solution de contournement en utilisant les fonctions de la librairie Webutil et permettre les actions suivantes:

  • Enregistrer un fichier présent sur le poste local dans la base de données
  • Extraire le fichier de la base pour l'éditer sur le poste local
  • Ré-enregistrer le fichier modifié en base
  • Lancer depuis Forms le correcteur orthographique de MS Word

Cet outil a été testé avec les configurations suivantes:

  • Forms 9i (9.0.2 et 9.0.4) et Database 9i
  • Forms 10g (10.1.2) et Database 10g
info Si vous utilisez toujours une ancienne version, n'oubliez-pas que vous pouvez télécharger gratuitement (pour une utilisation non commerciale) une version plus récente sur OTN.

2. Enregistrer en base un fichier présent sur le poste local


2.1. Sélectionner un fichier sur le poste local avec la fonction WEBUTIL_FILE.FILE_OPEN_DIALOG

  FUNCTION WEBUTIL_FILE.FILE_OPEN_DIALOG
  (
        directory_name,
        file_name,
        file_filter,
        title
  ) return VARCHAR2;
directory_name représente le nom du répertoire de début de recherche (Laisser vide pour démarrer depuis la racine)
file_name Représente le nom du fichier
file_filter contient la liste des types de fichiers à afficher (ex. '|All files|*.*|' ou '|Word Files|*.doc|Excel Files|*.xls|')
title représente le titre de la boite de dialogue



2.2. Enregistrer le fichier local dans la base de données avec la fonction WEBUTIL_FILE_TRANSFER.CLIENT_TO_DB

FUNCTION Webutil_File_Transfer.Client_To_DB
( 
   clientFile       in VARCHAR2, 
   tableName        in VARCHAR2, 
   columnName       in VARCHAR2,
   whereClause      in VARCHAR2,
   asynchronous     in BOOLEAN default FALSE,
   callbackTrigger  in VARCHAR2 default NULL
) return BOOLEAN;
clientFile représente le nom (chemin complet) du fichier à ouvrir
tableName indique le nom de la table de réception
columnName indique le nom d'une colonne de type BLOB de réception du fichier
whereClause indique la clause Where permettant d'identifier une ligne unique dans la table
asynchronous permet à Forms de redessiner l'écran avant la fin du processus
callbackTrigger indique le nom d'un déclencheur nommé (de niveau module) qui sera appelé au retour de la fonction

Exemple

Vous voulez enregistrer le fichier c:\docs\doc.xls dans la colonne DOC de la table DOCUMENTS dont la clé DOC_ID = 10

Declare
   LB$Result  BOOLEAN ;
Begin
LB$Result := Webutil_File_Transfer.Client_To_DB
( 
   ‘c:\docs\doc.xls’, 
   ‘DOCUMENTS’, 
   ‘DOC’,
   ‘DOC_ID = 10’
    ) ;
End ;
warning La fonction Client_To_DB exécute un ordre UPDATE, ce qui implique que la ligne doit être créée préalablement dans la table.

3. Extraire un fichier de la base pour l'éditer sur le poste local



3.1. Extraire un fichier sur le poste local avec la fonction WEBUTIL_FILE_TRANSFER.DB_TO_CLIENT

FUNCTION DB_To_Client
 ( 
   clientFile       in VARCHAR2, 
   tableName        in VARCHAR2, 
   columnName       in VARCHAR2,
   whereClause      in VARCHAR2
) return BOOLEAN;
clientFile spécifie le nom du fichier local
tableName indique le nom de la table
columnName indique le nom de la colonne BLOB contenant le fichier
whereClause spécifie la clause Where qui identifie une ligne dans la table


3.2. Editer le document en local avec la fonction WEBUTIL_HOST.BLOCKING

FUNCTION  Blocking(cmd in VARCHAR2) return PROCESS_ID;
Exemple:

Declare
   LC$Cmd     Varchar2(256) ;
   Ret        WEBUTIL_HOST.PROCESS_ID ;
   LN$Result  Pls_Integer ;
   LC$FicName Varchar2(128) := Name_In( ‘BLOB_TABLE.DOC_NAME’ ) ;
Begin
   LC$Cmd := 'cmd /c start "" /WAIT "' || LC$FicName || '"' ;
   Ret := WEBUTIL_HOST.blocking( LC$Cmd ) ;
   LN$Result := WEBUTIL_HOST.Get_return_Code( Ret ) ;
End ;
info Notez le mot clé /WAIT qui permet d'attendre le retour de la fonction avant de rendre la main


3.3. Ré-enregistrer le fichier local dans la base de données avec la fonction WEBUTIL_FILE_TRANSFER.CLIENT_TO_DB

Voir la section 2.2


3.4. Supprimer la copie temporaire locale avec la fonction WEBUTIL_FILE.DELETE_FILE

Declare
   LB$Ok  Boolean ;
Begin   
   LB$Ok := WEBUTIL_FILE.DELETE_FILE( 'c:\temp\doc.xls' ) ;
End ;

4. Appeler le correcteur orthographique de MS Word depuis un item de la forme

Le code suivant permet d'appeler le correcteur orthographique de MS Word à partir d'un item de la forme

PROCEDURE CheckSpell
      (
            PC$Item in Varchar2
      ) IS
  -------------------------------------------
  --  Call the MSWord CheckSpell function  --
  -------------------------------------------
      MyApplication client_ole2.OBJ_TYPE;
      MyDocuments   client_ole2.OBJ_TYPE;
      MyDocument    client_ole2.OBJ_TYPE;
      MySelection   client_ole2.OBJ_TYPE;
      args          client_ole2.LIST_TYPE;

Begin

      MyApplication:=client_ole2.CREATE_OBJ('Word.Application');
      client_ole2.SET_PROPERTY(MyApplication, 'Visible', 0);
      MyDocuments:=client_ole2.GET_OBJ_PROPERTY(MyApplication, 'Documents');
      MyDocument := CLIENT_OLE2.INVOKE_OBJ(MyDocuments,'add');

      Myselection := CLIENT_OLE2.GET_OBJ_PROPERTY(Myapplication,'Selection');

      client_ole2.SET_PROPERTY(Myselection,'Text',Name_in(PC$item));
      client_ole2.INVOKE(MyDocument,'CheckSpelling');

      MySelection:=client_ole2.GET_OBJ_PROPERTY(MyApplication, 'Selection');
      client_ole2.INVOKE(mYSelection,'WholeStory');
      client_ole2.INVOKE(MYSelection,'Copy');

      COPY( CLIENT_OLE2.GET_CHAR_PROPERTY(Myapplication,'Selection'), PC$Item ) ;

      args := CLIENT_OLE2.CREATE_ARGLIST;
      client_ole2.ADD_ARG(args,0);
      client_ole2.INVOKE(MyDocument,'Close',args);
      client_ole2.DESTROY_ARGLIST(args);
      client_ole2.INVOKE(MyApplication,'Quit');

      client_ole2.RELEASE_OBJ(MySelection);
      client_ole2.RELEASE_OBJ(MyDocument);
      client_ole2.RELEASE_OBJ(MyDocuments);
      client_ole2.RELEASE_OBJ(MyApplication);

      copy(Substr(Replace(Name_in(PC$Item),CHR(13),CHR(10)),1,Length(Name_in(PC$Item))-1), PC$item );

Exception
      When others then
            Null ;
End;
Cette procédure peut être appelée depuis l'item en cours avec le code suivant:

CheckSpell( :system.cursor_item ) ;

5. Ecran de test

L'écran de test WEBUTIL_DOCS.fmb fourni avec le tutoriel permet de mettre en oeuvre toutes ces fonctionalités.

Télécharger l'écran WEBUTIL_DOCS.fmb


Cliquer le bouton Select a local file... pour sélectionner un fichier du poste local


Cliquer le bouton Store local doc to database pour enregistrer le fichier en base.


Le nom du fichier enregistré en base apparait dans la liste des documents.


Pour éditer le fichier, double-cliquer sur le nom ou cliquer le bouton Edit and save



Lancer le correcteur orthographique



Cliquer le bouton Start the Word checkspelling


Cet écran est basé sur la table : BIN_DOCS que vous devez créer avec le script suivant:

CREATE TABLE BIN_DOCS 
 ( 
   DOC_ID  NUMBER(5) PRIMARY KEY, 
   NAME    VARCHAR2(128 BYTE), 
   DOC     BLOB 
 )
/

6. Conclusion

Cet exemple basique peut être le point de départ d'une version plus élaborée de gestion documentaire.

En ajoutant quelques colonnes à la table des documents, il devient facile de mettre en oeuvre un mécanisme de type check-in/check-out.

Chaque utilisateur pouvant visualiser simultanément tous les documents, mais un seul pouvant y apporter des modifications.



Valid XHTML 1.1!Valid CSS!

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'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Responsable bénévole de la rubrique Oracle : Vincent Rogier - Contacter par EMail :
Vos questions techniques : forum d'entraide Oracle - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.