Réalisé avec OpenOffice 1.1.3 Dernière Mise à Jour le : 11/03/05 Présentation des Editions PastelV3 avec OpenOffice.org Auteur: Xavier Poirier xpoirier@ch-bourg01.fr Présentation des Editions PastelV3 avec OpenOffice SOMMAIRE : 1- Introduction 2- Comment faire et avec quoi ? 3- Schéma 4- Explications de Fusion.exe 5- Explications de Fusion.java 6- Conclusion 2 Présentation des Editions PastelV3 avec OpenOffice Introduction : Le but de ce projet à été de montrer qu'il est possible de faire cohabiter les logiciel commerciaux propriétaires avec les logiciels libres Opensources. Le changement d' application de gestion administrative des Patients PASTELV2 (filière MIPIH) en PASTELV3 exigeait que nous installions le logiciel bureautique et applicatif WORD sur tous les postes d' accueils. Les éditions d' états à champs variables se faisait jusque là par un programme situé sur un serveur et qui transmettait le fichier d' impression à l' imprimante connue sur le serveur. Dans la nouvelle version (Pastelv3) les éditions sont gérées comme éditions bureautique à l' aide de modèles WORD avec des champs variables et un programme écrit spécifiquement qui s' interface avec WORD à l' aide de macros,etc... L' idée m' est donc venue d' utiliser les API fournies du logiciel Ooo (l' abréviation Ooo sera utilisée tout au long de ce document pour faire référence à la suite bureautique OpenOffice.org) pour interfacer les éditions bureautiques d' états variables avec PASTELV3 (Planches d' étiquettes, Bulletins de situation,Fiche individuelle,Quittances,... - une douzaine de modèles en tout environ). Quel challenge !! J' ai d' abord perdu du temps car je voulais faire le développement en langage C (ou C++) , je pensais alors que cela serait plus rapide en terme de temps de réponse. Je me suis ensuite rendu compte que mon effort était vain, SUN privilégiant le langage JAVA pour les développements autour de Ooo et les exemples fournis étaient la plupart en JAVA. J' avais déjà perdu plus de 1 semaine ! Il était temps de démarrer ! Voici donc ce dont j' allais avoir besoin : 3 Présentation des Editions PastelV3 avec OpenOffice Comment Faire ? 1- Ecrire une DLL qui sera l' interface entre PASTELV3 et le Programme d' édition fusion.exe. Son seul but est en fait de lancer le programme Fusion.exe en mode détaché, pour rendre la main à l' utilisateur et ne pas le pénaliser. 2- Ecrire un programme en C,C++ (fusion.exe) qui sera lié au programme JAVA et plus précisément qui contrôlera que l' édition à l' aide du programme JAVA n' est lancée qu' une seule fois en même temps (fichier témoin) . Mais c' est lui aussi qui est chargé de faire la conversion du code barre IEP en code 128 à l' aide de la DLL Hyperbar. A noter que un mini Parsing du fichier de fusion est effectué à ce moment là pour récupérer le numéro IEP dans le fichier de fusion (020* ou 001*).Il lance le programme JAVA en mode Attente pour récupérer les Handle d' erreurs et renvoyer un message à l' utilisateur si une erreur se produit. 3- Ecrire un programme JAVA qui sera l' interface avec Ooo pour traiter l' édition P.O.S.F.I (voir schéma pg 8) 4 Présentation des Editions PastelV3 avec OpenOffice Avec quoi ? Les outils utilisés sont les suivants : DEV-CPP : outil de développement FANTASTIQUE ! en C C++ dernière version (A utiliser sans modération !) 5 Présentation des Editions PastelV3 avec OpenOffice Avec quoi ? Environnement de développement JAVA avec si possible un éditeur JAVA comme FORTE A noter ici que l' on peut utiliser les composants Netbeans disponibles pour Ooo. JAVA NETBEANS 6 Présentation des Editions PastelV3 avec OpenOffice Avec quoi ? 7 OpenOffice bien sûr !! www.openoffice.org Versions 1.0.x en Français ou versions 1.1.x en Français A noter ici que cela fonctionne également dans le cas d' une installation réseau de OpenOffice.org ce qui est notre cas Présentation des Editions PastelV3 avec OpenOffice PastelV3 Fusappel.dll Fusion.exe Fusion.java Ooo Appel de l' édition à partir des menus PastelV3 Un fichier texte à plat est généré dans c:\noyau\travail : 020* pour les étiquettes 001* pour étiquettes dégradées DLL principale appelée par le programme PASTEL avec le paramètre suivant : nom du fichier de fusion dans c:\noyau\travail Appel du programme Fusion.exe en Mode NOWAIT (en mode détaché) On traite le cas des étiquettes (si 020* ou 001*) pour transformer les numéro IEP en code barre 128 par la DLL Hyperbar (hb_dll32.dll) Ceci pour ensuite appeler le programme Fusion.java avec le paramètre de code barre comme il faut. Ce programme positionne un fichier Temoin dans c:\noyau\travail pour spécifier qu' un programme Fusion.exe est en cours et on ne lance qu' une seule édition à la fois. Il lance ensuite le programme « Fusion.java » en mode WAIT (attente du retour du prog. JAVA pour tester les erreus) avec 2 paramètres : 1- Fichier de fusion 2- Code 128 IEP P.O.S.F.I Pour : P : Parsing du fichier de fusion qui est à un format d' éditions pour WORD. Ce format est complètement absurde et très complexe à lire car il ne s' agit pas d' un format d' échange standard normalisé avec les colonnes identifiées. Ce travail a représenté 70% du temps passé sur ce projet ! Ce qui est incroyable car il n' aurait fallu que très peu de temps pour analyser un fichier d' échange standard. O : Ouverture du fichier Ooo modèle S : Sous-états, traitement des sous-états du modèle, ceux-ci sont en fait gérés comme des tableaux de valeurs F : Fusion , Insertion des valeurs dans les champs du modèle I : Impression , impression de l' état fusionné 8 Présentation des Editions PastelV3 avec OpenOffice Programme Fusion.exe : inclus : strsep.h hb_dll.h fusion.cpp Fonctions de Chaînes de caractères Utilisée pour récupérer une chaîne de caractères entre deux délimiteurs Déclarations Externes de la DLL hb_dll32.dll HYPERBAR Programme Principal 9 Présentation des Editions PastelV3 avec OpenOffice 10 Le programme Fusion.java est le programme principal des éditions avec Ooo.Je ne reproduirais pas ici le code complet du programme car il est trop long et, est suffisamment commenté. Pour fonctionner , il faut positionner la variable d' environnement suivante : CLASSPATH = c:\noyau\ijinconv\fusion;c:\ooo\program\classes\unoil.jar;c:\ooo\program\classes\java_uno.jar;c:\ooo\program\classes\ridl.jar;c:\ooo\progra m\classes\jurt.jar;c:\ooo\program\classes\juh.jar;c:\ooo\program\classes\jut.jar;c:\ooo\program\classes\sandbox.jar;c:\ooo\program\classes\ classes.jar Il est constitué de différents Blocs de tâches que j' ai nommé P.O.S.F.I pour : P : Parsing du fichier de fusion qui est à un format d' éditions pour WORD. Ce format est complètement absurde et très complexe à lire car il ne s' agit pas d' un format d' échange standard normalisé avec les colonnes identifiées. Ce travail a représenté 70% du temps passé sur ce projet ! Ce qui est incroyable car il n' aurait fallu que très peu de temps pour analyser un fichier d' échange standard. O : Ouverture du fichier Ooo modèle S : Sous-états, traitement des sous-états du modèle, ceux-ci sont en fait gérés comme des tableaux de valeurs F : Fusion , Insertion des valeurs dans les champs du modèle I : Impression , impression de l' état fusionné Le programme est lancé par défaut à la mode JAVA Windows, çad par le programme javaw.exe , et non pas par le programme java.exe . Ceci pour cacher à l' utilisateur les fenêtres java. Par contre , on peut très bien le lancer manuellement par la commande suivante : java Fusion « paramètre1 » « paramètre2 » On verra alors les différentes étapes se dérouler à l' écran : P.O.S.F.I , pour le mode debug. Présentation des Editions PastelV3 avec OpenOffice 11 A noter ici que le programme peut être activé en mode TRACE. Un fichier est alors généré sous c:\ nommé : Fusion.sxw Tout ce qui se passe dans le programme est alors inscrit dans le fichier, pour faciliter le debogage en cas de problème. Présentation des Editions PastelV3 avec OpenOffice 12 P.O.S.F.I P Parsing Le parcours du fichier de fusion envoyé par PASTELV3 n' a pas été une tâche facile ! (c' est le moins que je puisse dire) Il a occupé environ 70% de mon temps sur ce projet (étant donné certains changements de dernière minute par le MIPIH dans les fichiers de Fusions) Pourquoi parcourir le fichier d' échange ? 1- Pour récupérer le nom du modèle WORD : Par ex. c:\noyau\pastel\editions\modèles\word\dabulsit.doc devient : c:\noyau\pastel\editions\modèles\ooo\dabulsit.sxw (format Ooo) Attention ! Par contre : il a fallu auparavant réenregistrer les modèles Word au format Ooo. Bien sûr à ce moment là on perd la notion de champs utilisateurs. Donc, je les ai ajoutés en tant que champ variable utilisateur : Voir diapo suivante , copie écran 13 Présentation des Editions PastelV3 avec OpenOffice 14 P.O.S.F.I P Parsing Pourquoi parcourir le fichier d' échange (suite) ? Pour récupérer le nombre de copies à éditer ! Pour récupérer le nom de l' imprimante! Pour récupérer les noms de Champs et les valeurs de ces champs. Pour récupérer les noms des Champs des sous-états et les valeurs de ces champs. Présentation des Editions PastelV3 avec OpenOffice 15 P.O.S.F.I O Ouverture L' ouverture du modèle Ooo se présente de la manière suivante : Ooo doit être démarré en mode Quickstart, çad que l' icône à coté de l' heure dans la barre des tâches doit être présent. ATTENTION : A noter ici que OpenOffice est installé impérativement sous c:\ooo (quelle que soit la version de Ooo) , pour des raisons encore de normalité, de simplification de la variable d' environnement CLASSPATH . Pourquoi ? Ooo écoute sur un port particulier pour répondre aux requêtes qui lui sont formulées.Par défaut le 8100. Pour mettre cette fonctionnalité en route il faut modifier le fichier qui se trouve sous : c:/ooo/share/config/registry/instance/org/openoffice/Setup.xml Remplacer : <ooSetupConnectionURL cfg:type="string"/> Avec : <ooSetupConnectionURLcfg:type="string">socket,host=localhost,port=8100;urp;StarOffice.NamingService</ooSetupConnectionURL > Pour vérifier , lancer la commande suivante en mode Prompt : netstat -a résultat : TCP pc-inf-xp:8100 pc-inf-xp:0 LISTENING L' ouverture du document se fait en mode 'silencieuse', tout se fait sans rien voir à l' écran.Cette option est désactivable pour le mode debug. Présentation des Editions PastelV3 avec OpenOffice 16 P.O.S.F.I S Sous-Etats ou Tableaux de valeurs On parcours le fichier de fusion pour retrouver le nom des sous-états et récupérer les champs et les valeurs de ces sous états. On considère qu' il peut y avoir deux sous-états au maximum par modèle.Donc deux tableaux. Les valeurs sont insérées dans le premier , puis le deuxième tableau. Ceci permet une gestion assez souple des modèles. Il n' y a que le modèle « DABULSIT.sxw » qui est particulier à cause des débiteurs, ceux-ci sont affichés non pas comme une liste de valeurs (comme les quittances) mais comme du texte formaté d' une certaine manière : On inclus donc 3 sous-modèles au modèle principal, çad qu' ils sont liés au Modèle. Présentation des Editions PastelV3 avec OpenOffice 17 P.O.S.F.I F Fusion Insertion des valeurs des champs dans le modèle Ooo, ainsi que des valeurs des champs des tableaux de valeurs. Dans l' ordre , on fusionne d' abord les champs utilisateurs puis les champs utilisateurs des tableaux. Le programme parle de lui même ! Présentation des Editions PastelV3 avec OpenOffice 18 P.O.S.F.I I Impression Impression du document avec la prise en compte des copies multiples, du nom de l' imprimante , et sortie du modèle sans enregistrement. Présentation des Editions PastelV3 avec OpenOffice 19 P.O.S.F.I Exemple de sortie en mode Commande : Debut du programme JAVA a :Wed Mar 26 09:15:59 CET 2003 Traitement Edition en cours ... Veuillez Patienter SVP Debut Parsing a :Wed Mar 26 09:16:00 CET 2003 P FIN = 52 FIN = 48 O Debut Ouverture Modele a :Wed Mar 26 09:16:00 CET 2003 Debut Sous Etats - Tableaux a :Wed Mar 26 09:16:05 CET 2003 SE1 CHAMP_DEB Pas de sous-etat No2 F Debut Fusion a :Wed Mar 26 09:16:08 CET 2003 I Debut Impression a :Wed Mar 26 09:16:10 CET 2003 FIN Programme JAVA a :Wed Mar 26 09:16:11 CET 2003 Présentation des Editions PastelV3 avec OpenOffice 20 CONCLUSION Une efficacité, une qualité, des performances, qui sont sans appel. Présentation des Editions PastelV3 avec OpenOffice 21 CONCLUSION Environ 4 secondes pour une édition comprenant plus de 150 champs, sur un PC équipé de Win2000 pro avec 256 Mo cadencé à 1,8Ghz, et ce sans perturber l' utilisateur !! Réalisé avec OpenOffice 1.1.3 Dernière Mise à Jour le : 11/03/05 Fin de la Présentation des Editions PastelV3 avec OpenOffice Auteur: Xavier Poirier xpoirier@ch-bourg01.fr