JDNet | Solutions | Emploi | Votre high-tech
 
Linternaute | Copainsdavant
Séminaires & Evénements | Etudes
   

Rechercher  

 
Sociétés Prestataires Carnet Formations Progiciels Encyclo Fonds Guide d'achat Comparateur Téléchargement Livres
Actualités
   2003
   2002
   2001
   Livres
Rubriques
   Java/J2EE
   PHP
   XML
   Client Web
   Technos .NET
   Flash
   Algo/Méthodes
   Outils

Dossiers
   Tous les dossiers

   PHP, Flash, SVG
   Perl / CGI - SSI
   Langages Web
   Services Web
   Sécurité
Ressources
   Interviews

   Téléchargement
   Composants
   Documentation
Contacts
   Rédaction
   Webmaster
© Benchmark Group

OLE et les objets automates (Automation Objects)
Présentation de la technologie "OLE Automation" ou comment permettre à une application d'accéder à des objets d'une autre application, le tout en JScript.

Conçue afin de permettre à différents logiciels de communiquer entre eux, la technologie OLE (Object Linking and Embedding) repose sur l'architecture COM. Basés sur ce modèle, on retrouve plusieurs "services" dont celui qui nous intéresse aujourd'hui, "OLE Automation", qui permet de définir des objets automates (Automation Objects). La mise en oeuvre de cette technique est souvent liée à l'utilisation d'un langage de script, comme VBScript par exemple (mais il est également possible d'utiliser d'autres langages comme JScript, la version Microsoft de JavaScript).

Les "objets automates" (Automation Objects)

Ouvrir un tableau Excel au sein d'un document Word relève typiquement de la technologie 'OLE Automation' ou 'ActiveX Automation'. Chaque application supportant ce service dispose de ses propres modèles objets, ce qui ne facilite pas la tâche du programmeur quand la documentation vient à manquer. Les applications "Office" de Microsoft sont cependant bien documentées (exemple : Excel / Visual Basic Applications).

Dans notre exemple, l'application cliente, "Excel", va dialoguer avec un objet automate de "Word" afin de découvrir dynamiquement les objets et méthodes disponibles sur cette application. Afin de mettre en pratique ce type de relations entre deux applications, nous allons utiliser JScript mais sachez que d'autres méthodes existent, il suffit que l'outil utilisé soit "compatible" avec "OLE Automation" pour que cela fonctionne.

Les performances varient selon le type de binding

Le "binding" est la manière dont le langage de script utilisé par l'application cliente (ou "Automation controller"), va accéder aux objets disponibles sur l'application "destination", aussi appelée "Automation server".
Ces deux notions, "Automation controller" et "Automation server" sont très parlantes. En effet, dans notre exemple, "Word" met à disposition des méthodes, des objets (on peut donc considérer que c'est un serveur), destinés à être utilisés par "Excel", qui représente l'application "contrôleur", celle qui va agir sur l'objet "automate" de "Word".

Avant de pouvoir consulter les propriétes, les méthodes, les événements du modèle objet de "l'automation server", "l'automation controller" doit créer une instance de la classe qu'il souhaite utiliser. Ici, Jscript et VB ne fonctionnent pas de la même manière.

VB et VBScript sont les plus riches et permettent d'utiliser les deux types de binding. Lorsque "l'automation controller" tente d'accéder à des "ressources" de l'application "server", VB doit vérifier si ces objets, méthodes, fonctions, existent et si cette "demande" est correctement formulée. C'est cela aussi que l'on nomme le "binding".

Pour résumer, (la version longue se trouve ici), le "late binding" se déroule lors de l'exécution du programme, il est le moins performant des deux types. Il s'implémente de la façon suivante :

(code VB)
Dim excelApp As Object
Set excelApp = CreateObject("Excel.Application")

Visual Basic doit ici vérifier à chaque fois que l'objet "excelApp" est utilisé si ses méthodes, propriétes, sont employées correctement. Cela implique des contrôles au niveau du système d'exploitation ainsi qu'au niveau de l'application qui fournit l'objet en question. De plus, VB ne connaissant pas le type d'objet auquel fait référence "excelApp" avant l'exécution, il doit prévoir une quantité de mémoire suffisante, donc surevaluée.

L'"early binding" est une solution plus performante, qui intervient lors de la compilation plutôt qu'à l'exécution. Ainsi, lors de l'exécution du code, VB n'a plus à se soucier de l'exactitude des informations liées à l'objet concerné. Cependant, tous les "automation server" ne supportent pas ce type de binding. Il faut en effet que le "serveur" possède une librairie référencant les objets, méthodes et autres propriétés liés à l'objet auquel veut accéder "l'automation controller".
Voici à quoi ressemble la mise en place de ce 'binding" :

(code VB)
Dim excelApp As Excel.Application
Set excelApp = CreateObject("Excel.Application")

Nous ne pourrons hélas pas utiliser ce type de "binding" en JScript. Deux raisons à cela :
- Le JScript est interprété, donc pas d'étape de compilation avant l'exécution.
- Le JScript n'est pas typé, on ne peut pas déclarer une variable comme un type d'objet spécifique.

Il nous faut alors se rabattre sur le "late binding".

Le "constructeur" ActiveXObject()

La fonction ActiveXObject() permet d'établir une interface entre "l'automation controller" et "l'automation server" :

(code JScript)
var excelApp = new ActiveXObject("Excel.Application");

"excelApp" permet de manipuler l'objet instancié. La fonction, ActiveXObjet() prend en paramètre le nom d'une application (ici "Excel") et le type de l'objet à créer (Ici "Application"). Un paramètre facultatif permet de définir un serveur, mais nous n'en parlerons pas ici.

A ne pas oublier, la libération de la mémoire en fin de traitement :

var excelApp = new ActiveXObject("Excel.Application");
excelApp.Quit(); // Libère la mémoire.

Passons maintenant à un petit exercice relatif à "Word" :
Copiez le code suivant dans un fichier "version_word.htm" par exemple, et si vous disposez de cette application, le numéro de version de celle-ci apparaîtra dans un message d'alerte à condition que vous activiez ou acceptiez temporairement (!) le déroulement d'un contrôle ActiveX sur votre poste (les réglages sont à effectuer dans le menu "outils -> options internet -> sécurité" de votre Internet Explorer (v4 et plus)). La fonction JScript employée est la suivante :

(Pour Internet Explorer)
<script language="JScript">
     function getVersion()
     {
          var wordApp = new ActiveXObject("Word.Application");
          alert(wordApp.Version);
     }
</script>

Une fois notre instance créée, nous pouvons la manipuler via la variable locale définie et accéder alors aux propriétés de l'objet.

Enfin, sachez que le nombre d'instances (d'une application) réellement créées n'est pas forcément équivalent au nombre de fois où le constructeur ActiveXObject() a été appelé. En effet, pour résumer, il existe deux sortes d'applications, les SDI (Single Document Interface), par exemple "Homesite", et les MDI (Multiple Document Interface), par exemple "Word". Le nombre d'instances / documents utilisables à la fois pour une même application dépend de ces deux types.

Autre fonction importante disponible en JScript : GetObject(). Elle permet d'accèder à un objet automate situé dans un fichier. Nous ne traiterons pas en détail cette fonction ici, pour plus d'informations, vous pouvez consulter la rubrique adéquate sur MSDN.

Ainsi s'achève cet aperçu de la technologie OLE / ActiveX, appliquée à JScript. Sachez pour finir qu'il est déconseillé d'exécuter un contrôle ActiveX dont vous ignorez la provenance. Si vous avez des doutes, passez votre chemin, il est en effet possible de subir de graves préjudices à la suite de l'exécution sur votre poste d'un script mal intentionné.

[Arnaud Gadal 16 octobre 2001 , JDNet]

Gratuit - Les nouveautés de
JDNet Développeurs
Toutes nos newsletters
 

Quel est le meilleur langage pour aborder la programmation ?
Basic (VB & co...)
C/C++
Java/C#
PHP
Pascal/Delphi
Perl
Python
autre...



Les outils de développement dans le Guide des Solutions
e-business

L'encyclopédie JDNet Toutes les notions pratiques, techniques et économiques relatives à l'e-business.
>> Accès à la rubrique "Développement"

Comparez les prix Matériel, PDA, modems...
Les bonnes affaires de la high-tech avec Kelkoo.
>> Comparateur

Société | Contacts | Publicité | Presse | Recrutement | Tous nos sites | Données personelles
Pour tout problème de consultations, écrivez au Webmaster.
© Benchmark Group, 4 rue diderot 92156 Suresnes Cedex