<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wurzel</id>
	<title>Apache OpenOffice Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wurzel"/>
	<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/wiki/Special:Contributions/Wurzel"/>
	<updated>2026-10-19T02:34:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Database/FR/Database&amp;diff=71896</id>
		<title>Database/FR/Database</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Database/FR/Database&amp;diff=71896"/>
		<updated>2008-03-27T23:49:37Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: New page: = OpenOffice.org Base =  Cette page sert comme page d&amp;#039;accueil pour de la documentation sur l&amp;#039;utilisation du module Base de la suite bureautique OpenOffice.org.  Comme tout n&amp;#039;est pas encore...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenOffice.org Base =&lt;br /&gt;
&lt;br /&gt;
Cette page sert comme page d&amp;#039;accueil pour de la documentation sur l&amp;#039;utilisation du module Base de la suite bureautique OpenOffice.org.&lt;br /&gt;
&lt;br /&gt;
Comme tout n&amp;#039;est pas encore traduit, il y a pour l&amp;#039;instant de nombreux pages encore en anglais. Ceci devrait changer au fur et à mesure de la progression de la traduction.&lt;br /&gt;
&lt;br /&gt;
La page sera essentiellement constitué de liens vers des documents existants ou vers d&amp;#039;autres pages du projet de documentation française.&lt;br /&gt;
&lt;br /&gt;
Ressources realtifs à OpenOffice.org Base:&lt;br /&gt;
&lt;br /&gt;
== Manuels ==&lt;br /&gt;
=== Général ===&lt;br /&gt;
* Base&lt;br /&gt;
: [http://wiki.services.openoffice.org/wiki/Base Base]&lt;br /&gt;
: Description de Base (synthèse) &lt;br /&gt;
&lt;br /&gt;
* Guides d&amp;#039;Utilisateur (Getting started with Base) - &amp;#039;&amp;#039;PDF&amp;#039;&amp;#039;&lt;br /&gt;
: [http://documentation.openoffice.org/manuals/oooauthors2/0110GS-GettingStartedWithBase.pdf  Getting started with Base] &lt;br /&gt;
: Apprendre comment créer une base de données, des requêtes, des formulaires, et des rapports et se connecter à, et utiliser, d&amp;#039;autres sources de données dans le module OOo-Base.&lt;br /&gt;
&lt;br /&gt;
* Manuel OpenOffice.org Base&lt;br /&gt;
: [http://nothickmanuals.info/doku.php/articles:ooobaseprimer OpenOffice.org Base Primer]&lt;br /&gt;
: Initial Authors: Andre &amp;#039;Drew&amp;#039; Jensen, Frank Schoenheit, et al.&lt;br /&gt;
: Un bref résumé avec captures d&amp;#039;écran sur l&amp;#039;utilisation de Base.&lt;br /&gt;
&lt;br /&gt;
* Débutants - Base de Données Exemple - Tutoriel Base &lt;br /&gt;
: [http://www.oooforum.org/forum/viewtopic.phtml?t=25060 Example]&lt;br /&gt;
: Initial author: Andrew &amp;#039;Drew&amp;#039; Jensen &lt;br /&gt;
: Ce tutoriel couvre la création d&amp;#039;une première base de données avec OOoBase. Il est destiné à ceux qui n&amp;#039;ont jamais utilisé OOoBase ou qui n&amp;#039;ont jamais utilisé de gestionnaire de base de données. &lt;br /&gt;
&lt;br /&gt;
* Tutoriel OOoBase de Niveau Moyen&lt;br /&gt;
: [http://wiki.services.openoffice.org/wiki/Documentation/Dashboard/Tutorials/Base_%28Mariano%29 Base Tutorial]&lt;br /&gt;
: Initial author: Mariano&lt;br /&gt;
: &amp;#039;&amp;#039;-- en cours d&amp;#039;édition --&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Base et Macros&lt;br /&gt;
: [http://www.pitonyak.org/database/ Pitonyak&amp;#039;s document]&lt;br /&gt;
: Initial author: Andrew Pitonyak&lt;br /&gt;
: Cette documentation traite du pilotage d&amp;#039;une base de données avec des macros OpenOffice.org.&lt;br /&gt;
&lt;br /&gt;
*  Database: &amp;quot;ooBase&amp;quot;, aka &amp;quot;Base&amp;quot;&lt;br /&gt;
: [http://sheepdogguides.com/fdb/fdb1main.htm Base Tutorial by Sheepdogguides.com]&lt;br /&gt;
: Initial author: TK Boyd&lt;br /&gt;
: Après une courte introduction, ce document explique comment faire des taches courantes telles qu&amp;#039;importer des données depuis d&amp;#039;autres tables.&lt;br /&gt;
&lt;br /&gt;
*  Importer des données dans le module de Base de Données OpenOffice 2.0&lt;br /&gt;
: [http://searchenterpriselinux.techtarget.com/tip/0,289483,sid39_gci1222186,00.html Database]&lt;br /&gt;
: Initial author: Solveig Haugland&lt;br /&gt;
: Tutoriel avec captures d&amp;#039;écran sur l&amp;#039;importation de données dans OOoBase.&lt;br /&gt;
&lt;br /&gt;
=== Tables ===&lt;br /&gt;
&lt;br /&gt;
* [[Standard Distributed Schema]]&lt;br /&gt;
&lt;br /&gt;
=== Requêtes ===&lt;br /&gt;
* [[Built-in functions and Stored Procedures]]&lt;br /&gt;
&lt;br /&gt;
=== Rapports ===&lt;br /&gt;
* [[SUN Report Builder]]&lt;br /&gt;
Il existe un assistant de création de rapports intégré directement dans la suite bureautique au niveau du module Base, mais celui-ci provient d&amp;#039;une programmation assez ancienne (du temps de StarOffice, c&amp;#039;est-à-dire avant la naissance du projet OpenOffice.org) et ne permet pas une grande flexibilité dans la réalisation de rapports. Toutefois, il peut servir pour des rapports simples dont la présentation est peu variable ou sophistiquée.&lt;br /&gt;
&lt;br /&gt;
Sun a ainsi développé un outil supplémentaire, qui s&amp;#039;installe dans la suite comme une extension et dont les origines se trouvent dans les projets FreeReport et Pentaho, basés sur Java. Vous aurez compris qu&amp;#039;il est nécessaire, comme d&amp;#039;ailleurs pour d&amp;#039;autres fonctions du module Base, que votre système ait au préalable un environnement Java installé et fonctionnel compatible avec OpenOffice.org. Pour la plupart des systèmes d&amp;#039;exploitation, l&amp;#039;environnement Java qui convient le mieux est celui fourni par Sun et disponible en téléchargement gratuitement. &lt;br /&gt;
&lt;br /&gt;
L&amp;#039;extension développé par Sun s&amp;#039;appelle Sun Report Builder (ou SRB). Il est disponible en libre téléchargement ici&lt;br /&gt;
&lt;br /&gt;
Son utilisation est expliquée ici&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Sun Report Builder (Reference)&lt;br /&gt;
: [http://wiki.pentaho.org/display/Reporting/Pentaho+Reporting+Latest Reference] &lt;br /&gt;
&lt;br /&gt;
* Fonctions dans le Générateur de Rapports&lt;br /&gt;
: [http://wiki.pentaho.org/display/Reporting/08.+Functions+and+Expressions Functions and Expressions]&lt;br /&gt;
&lt;br /&gt;
* Fonctions dans les Rapports&lt;br /&gt;
: [http://wiki.services.openoffice.org/wiki/Base/Reports/Functions Funktions]&lt;br /&gt;
&lt;br /&gt;
=== Développeur ===&lt;br /&gt;
* Base de travail pour améliorer le guide d&amp;#039;utilisateur &lt;br /&gt;
: [http://wiki.services.openoffice.org/wiki/Documentation/OOoAuthors_User_Manual/Getting_Started/Getting_Started_with_Base Getting_Started/Getting_Started_with_Base] &lt;br /&gt;
&lt;br /&gt;
* Utilisation de Macros dans des Fichiers de Bases de Données&lt;br /&gt;
: [http://wiki.services.openoffice.org/wiki/Macros_in_Database_Documents Macros_in_Database_Documents]&lt;br /&gt;
: &amp;#039;Specification to develop this functionality&lt;br /&gt;
&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
* Tâches courantes&lt;br /&gt;
: [http://wiki.services.openoffice.org/wiki/Common_tasks Common_tasks]&lt;br /&gt;
: Initial author: Andrew &amp;#039;Drew&amp;#039; Jensen&lt;br /&gt;
: Beaucoup de questions, peu de réponses. &lt;br /&gt;
&lt;br /&gt;
=== Divers ===&lt;br /&gt;
* HSQLDB Trucs et Astuces&lt;br /&gt;
: [http://wiki.services.openoffice.org/wiki/HSQLDB:Tips_and_Tricks Tips_and_Tricks] &lt;br /&gt;
: &amp;#039;&amp;#039;description followed&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* [http://nothickmanuals.info/doku.php/articles:ooobaseprimer http://nothickmanuals.info/doku.php/articles:ooobaseprimer] &lt;br /&gt;
&lt;br /&gt;
* [http://www.baseusers.com/index.html http://www.baseusers.com/index.html]&lt;br /&gt;
&lt;br /&gt;
== Connexions ==&lt;br /&gt;
* Nouveau Tutoriel OOoBase&lt;br /&gt;
&lt;br /&gt;
[http://wiki.services.openoffice.org/wiki/Base_New_Driver_Tutorial http://wiki.services.openoffice.org/wiki/Base_New_Driver_Tutorial] &lt;br /&gt;
&lt;br /&gt;
Initial author: Robert Vojta&lt;br /&gt;
&lt;br /&gt;
This small How-To contains a simple step-by-step introduction on how to put your driver inside the connectivity module. The second part of this document covers differences between a driver in connectivity module and a driver in an UNO package.&lt;br /&gt;
&lt;br /&gt;
* Amélioration des Pilotes de Bases de Données &lt;br /&gt;
&lt;br /&gt;
[http://wiki.services.openoffice.org/wiki/BetterDatabaseDrivers http://wiki.services.openoffice.org/wiki/BetterDatabaseDrivers] &lt;br /&gt;
&lt;br /&gt;
Initial author:Eric Bischoff&lt;br /&gt;
&lt;br /&gt;
Quelques idées pour une infrastructure améliorée et plus simple pour des pilotes améliorés&lt;br /&gt;
&lt;br /&gt;
* Connexion aux Bases de Données Microsoft Access&lt;br /&gt;
&lt;br /&gt;
[http://wiki.services.openoffice.org/wiki/Connecting_to_Microsoft_Access http://wiki.services.openoffice.org/wiki/Connecting_to_Microsoft_Access] &lt;br /&gt;
&lt;br /&gt;
Initial author: Regina Henschel&lt;br /&gt;
&lt;br /&gt;
Ces articles décrivent comment se connecter à un fichier de base de données Access, si vous utilisez un système d&amp;#039;exploitation Windows.&lt;br /&gt;
&lt;br /&gt;
* OpenOffice.org Base - Pilotes de Bases de Données&lt;br /&gt;
&lt;br /&gt;
[http://dba.openoffice.org/drivers/ http://dba.openoffice.org/drivers/] &lt;br /&gt;
&lt;br /&gt;
* Connexion aux Bases MySQL&lt;br /&gt;
&lt;br /&gt;
[http://wiki.services.openoffice.org/wiki/Connect_MySQLandBase http://wiki.services.openoffice.org/wiki/Connect_MySQLandBase]&lt;br /&gt;
&lt;br /&gt;
Sommaire&lt;br /&gt;
&lt;br /&gt;
* Pilote PostgreSQL &lt;br /&gt;
&lt;br /&gt;
[http://dba.openoffice.org/drivers/postgresql/index.html http://dba.openoffice.org/drivers/postgresql/index.html] &lt;br /&gt;
&lt;br /&gt;
* Pilote SQL-lite&lt;br /&gt;
&lt;br /&gt;
http://dba.openoffice.org/drivers/sqlite/index.html&lt;br /&gt;
&lt;br /&gt;
* Pilote mdb&lt;br /&gt;
&lt;br /&gt;
[http://dba.openoffice.org/drivers/mdb/index.html http://dba.openoffice.org/drivers/mdb/index.html]&lt;br /&gt;
&lt;br /&gt;
Initial author: Wind Li (yl146652 [at] openoffice [dot] org)&lt;br /&gt;
&lt;br /&gt;
Il s&amp;#039;agit d&amp;#039;une tentative de créer un pilote sous Linux pour se connecter à une base de données MS Access. Le développement a été arrêté.&lt;br /&gt;
&lt;br /&gt;
* Page de Travail&lt;br /&gt;
&lt;br /&gt;
[http://wiki.services.openoffice.org/wiki/MDB_Driver_Integration http://wiki.services.openoffice.org/wiki/MDB_Driver_Integration]&lt;br /&gt;
&lt;br /&gt;
* FAQ MSA-Base&lt;br /&gt;
&lt;br /&gt;
[http://wiki.services.openoffice.org/wiki/MSA-Base_Faq http://wiki.services.openoffice.org/wiki/MSA-Base_Faq]&lt;br /&gt;
&lt;br /&gt;
* Pilote Firebird&lt;br /&gt;
[http://jaybirdwiki.firebirdsql.org/jaybird/doku.php?id=config:oobase Jaybird OpenOffice.org Base support]&lt;br /&gt;
&lt;br /&gt;
== Exemples ==&lt;br /&gt;
=== Général ===&lt;br /&gt;
* Base Exemple (Overview)&lt;br /&gt;
&lt;br /&gt;
[http://wiki.services.openoffice.org/wiki/Category:Base_Example http://wiki.services.openoffice.org/wiki/Category:Base_Example]&lt;br /&gt;
&lt;br /&gt;
Initial author: Frank Schönheit&lt;br /&gt;
&lt;br /&gt;
* Standard Distributed Schema&lt;br /&gt;
&lt;br /&gt;
[http://wiki.services.openoffice.org/wiki/Standard_Distributed_Schema http://wiki.services.openoffice.org/wiki/Standard_Distributed_Schema]&lt;br /&gt;
&lt;br /&gt;
=== Exemples Concrets ===&lt;br /&gt;
* Base de Données Membres d&amp;#039;un Club / Association&lt;br /&gt;
&lt;br /&gt;
[http://wiki.services.openoffice.org/wiki/A_club_membership_database http://wiki.services.openoffice.org/wiki/A_club_membership_database]&lt;br /&gt;
&lt;br /&gt;
Initial author: Andrew &amp;#039;Drew&amp;#039; Jensen&lt;br /&gt;
&lt;br /&gt;
Description de la création d&amp;#039;une base de données d&amp;#039;exemple&lt;br /&gt;
&lt;br /&gt;
* OpenOffice.org API - Code snippets: [http://codesnippets.services.openoffice.org/Database/index.xml http://codesnippets.services.openoffice.org/Database/index.xml] &amp;lt;br/&amp;gt; Useful code snippets solving frequently asked questions.&lt;br /&gt;
&lt;br /&gt;
* Exemple de Base de Données&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Help_Files&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Standard_Distributed_Schema&lt;br /&gt;
&lt;br /&gt;
== Divers ==&lt;br /&gt;
== Tests ==&lt;br /&gt;
* [http://wiki.services.openoffice.org/wiki/Database_Automatic_Testing http://wiki.services.openoffice.org/wiki/Database_Automatic_Testing] &lt;br /&gt;
* [http://wiki.services.openoffice.org/wiki/Documentation/OOoAuthors_User_Manual/Base_Guide/Planning http://wiki.services.openoffice.org/wiki/Documentation/OOoAuthors_User_Manual/Base_Guide/Planning]&lt;br /&gt;
* [http://wiki.services.openoffice.org/wiki/FAQ_%28Base%29 http://wiki.services.openoffice.org/wiki/FAQ_%28Base%29] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.services.openoffice.org/wiki/OOoHelpOutline#Base_and_Database http://wiki.services.openoffice.org/wiki/OOoHelpOutline#Base_and_Database]&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
* [http://ericzander.com/Publications/OO_MySQL_Tutorial/index.htm http://ericzander.com/Publications/OO_MySQL_Tutorial/index.htm] &lt;br /&gt;
Connecting OpenOffice.org To A Remote MySQL Database] (event. 1.x)&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/Dashboard/Tutorials/Base_(Mariano)&amp;diff=68222</id>
		<title>Documentation/Dashboard/Tutorials/Base (Mariano)</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/Dashboard/Tutorials/Base_(Mariano)&amp;diff=68222"/>
		<updated>2008-02-26T16:46:21Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Scope */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Scope==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;The tutorial is aimed at persons that have little or no knowledge in&lt;br /&gt;
database design and that need to develop a functional application of&lt;br /&gt;
mid-level complexity. This application would stand alone in their&lt;br /&gt;
computers (as opposed to becoming a front end for a MySQL application&lt;br /&gt;
harbored in some server with multiple users, for example).&amp;lt;/cite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The tutorial is centered on the problem of establishing and using primary keys for populating and retrieving records in several tables. Of course, this requires understanding the concept of functional dependency and data normalization and how to implement them in an application.&lt;br /&gt;
&lt;br /&gt;
Other concepts that are relevant to understanding these topics are also summarily reviewed.&lt;br /&gt;
&lt;br /&gt;
The following is a draft proposal for this tutorial:&lt;br /&gt;
&lt;br /&gt;
1. Introduction: some words to calm the anxiety of the reader and offer an overview of the paper.&lt;br /&gt;
&lt;br /&gt;
1.1 Working with Base: advantages, feel and the implications of an integrated suite&lt;br /&gt;
&lt;br /&gt;
1.2 Description and definition of a relational database&lt;br /&gt;
&lt;br /&gt;
1.3 Purpose and goals of appropriate database design&lt;br /&gt;
&lt;br /&gt;
1.4 The importance of functional dependency and the primary key&lt;br /&gt;
&lt;br /&gt;
1.5 The importance of normalized data entry&lt;br /&gt;
&lt;br /&gt;
1.6 The importance of proper design in forms and reports&lt;br /&gt;
&lt;br /&gt;
1.7 Why you can expect to spend more time thinking about your database design that actually implementing it (and why this is a good thing!)&lt;br /&gt;
&lt;br /&gt;
2. Tools of the trade:&lt;br /&gt;
&lt;br /&gt;
2.1 Elements of UML&lt;br /&gt;
&lt;br /&gt;
2.2 Phases in database design&lt;br /&gt;
&lt;br /&gt;
2.3 Brief -brief- approximation to first, second and third normal form&lt;br /&gt;
&lt;br /&gt;
2.4 Using OOo during design phase&lt;br /&gt;
&lt;br /&gt;
3. Putting it all together: Working example in OOo Base&lt;br /&gt;
&lt;br /&gt;
3.1 Presenting problem and possible solution&lt;br /&gt;
&lt;br /&gt;
3.2 The tables and their relationships&lt;br /&gt;
&lt;br /&gt;
3.3 Making sure that records are properly linked&lt;br /&gt;
&lt;br /&gt;
3.4 Entering data for one subject in several tables&lt;br /&gt;
&lt;br /&gt;
3.5 Entering data for one subject in several records in another table&lt;br /&gt;
&lt;br /&gt;
3.6 Masking data entry and other ways to check data entry&lt;br /&gt;
&lt;br /&gt;
3.7 Using drop-down lists for data entry&lt;br /&gt;
&lt;br /&gt;
3.7.1 Dynamically populating drop down-lists from fields in another table&lt;br /&gt;
&lt;br /&gt;
3.8 Timestamping data entry&lt;br /&gt;
&lt;br /&gt;
3.9 Retrieving data from one table&lt;br /&gt;
&lt;br /&gt;
3.10 Updating data for one record showing previously entered data&lt;br /&gt;
&lt;br /&gt;
3.11 Retrieving data for one subject spread in several tables&lt;br /&gt;
&lt;br /&gt;
3.12 Retrieving individual data from a collection of subjects&lt;br /&gt;
&lt;br /&gt;
3.13 Retrieving summary data from a collection of subjects&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/Dashboard/Tutorials/Base_(Mariano)&amp;diff=68219</id>
		<title>Documentation/Dashboard/Tutorials/Base (Mariano)</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/Dashboard/Tutorials/Base_(Mariano)&amp;diff=68219"/>
		<updated>2008-02-26T16:45:29Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Scope */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Scope==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;The tutorial is aimed at persons that have little or no knowledge in&lt;br /&gt;
database design and that need to develop a functional application of&lt;br /&gt;
mid-level complexity. This application would stand alone in their&lt;br /&gt;
computers (as opposed to becoming a front end for a MySQL application&lt;br /&gt;
harbored in some server with multiple users, for example).&amp;lt;/cite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The tutorial is centered on the problem of establishing and using primary keys for populating and retrieving records in several tables. Of course, this requires understanding the concept of functional dependency and data normalization and how to implement them in an application.&lt;br /&gt;
&lt;br /&gt;
Other concepts that are relevant to understanding these topics are also summarily reviewed.&lt;br /&gt;
&lt;br /&gt;
The following is a draft proposal for this tutorial:&lt;br /&gt;
&lt;br /&gt;
1. Introduction: some words to calm the anxiety of the reader and offer an overview of the paper.&lt;br /&gt;
&lt;br /&gt;
1.1 Working with Base: advantages, feel and the implications of an integrated suite&lt;br /&gt;
1.2 Description and definition of a relational database&lt;br /&gt;
1.3 Purpose and goals of appropriate database design&lt;br /&gt;
1.4 The importance of functional dependency and the primary key&lt;br /&gt;
1.5 The importance of normalized data entry&lt;br /&gt;
1.6 The importance of proper design in forms and reports&lt;br /&gt;
1.7 Why you can expect to spend more time thinking about your database design that actually implementing it (and why this is a good thing!)&lt;br /&gt;
&lt;br /&gt;
2. Tools of the trade:&lt;br /&gt;
&lt;br /&gt;
2.1 Elements of UML&lt;br /&gt;
2.2 Phases in database design&lt;br /&gt;
2.3 Brief -brief- approximation to first, second and third normal form&lt;br /&gt;
2.4 Using OOo during design phase&lt;br /&gt;
&lt;br /&gt;
3. Putting it all together: Working example in OOo Base&lt;br /&gt;
&lt;br /&gt;
3.1 Presenting problem and possible solution&lt;br /&gt;
3.2 The tables and their relationships&lt;br /&gt;
3.3 Making sure that records are properly linked&lt;br /&gt;
3.4 Entering data for one subject in several tables&lt;br /&gt;
3.5 Entering data for one subject in several records in another table&lt;br /&gt;
3.6 Masking data entry and other ways to check data entry&lt;br /&gt;
3.7 Using drop-down lists for data entry&lt;br /&gt;
3.7.1 Dynamically populating drop down-lists from fields in another table&lt;br /&gt;
3.8 Timestamping data entry&lt;br /&gt;
3.9 Retrieving data from one table&lt;br /&gt;
3.10 Updating data for one record showing previously entered data&lt;br /&gt;
3.11 Retrieving data for one subject spread in several tables&lt;br /&gt;
3.12 Retrieving individual data from a collection of subjects&lt;br /&gt;
3.13 Retrieving summary data from a collection of subjects&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=68134</id>
		<title>FR/Documentation/Base/SUN Report Builder</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=68134"/>
		<updated>2008-02-26T09:50:19Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Syntaxe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/FR}}&lt;br /&gt;
== Sun Report Builder ==&lt;br /&gt;
Vous trouverez ce module complémentaire en téléchargement [http://extensions.services.openoffice.org/project/reportdesign ici]. C&amp;#039;est une extension qui s&amp;#039;installe de la même manière que les autres.&lt;br /&gt;
&lt;br /&gt;
== Expression d&amp;#039;Impression Conditionnelle ==&lt;br /&gt;
Une expression d&amp;#039;impression conditionnelle permet à l&amp;#039;utilisateur de limiter les données qui sont visibles lorsqu&amp;#039;on génère un rapport. Si la condition est remplie, alors l&amp;#039;élément (par exemple, une section ou un élément individuel) sera imprimé dans le rapport. La syntaxe d&amp;#039;utilisation est identique à celle des fonctions.&lt;br /&gt;
&lt;br /&gt;
== Fonctions ==&lt;br /&gt;
Une fonction peut être créée lors de l&amp;#039;ouverture du navigateur de rapport. Dans le menu contextuel de l&amp;#039;entrée &amp;#039;&amp;#039;&amp;#039;Fonctions&amp;#039;&amp;#039;&amp;#039;, il vous est possible de créer une fonction. &lt;br /&gt;
&lt;br /&gt;
Cette fonction peut être soit globale dans le contexte du rapport, soit particulière à un regroupement.&lt;br /&gt;
&lt;br /&gt;
Le schéma ci-dessous montre comment créer des champs de sous-total dans le Report Builder, en utilisant des fonctions :&lt;br /&gt;
&lt;br /&gt;
[[Image:SumFieldInReportBuilder.jpg]]&lt;br /&gt;
&lt;br /&gt;
La table constituant la source de données est illustrée en haut à gauche de l&amp;#039;image.&lt;br /&gt;
 &lt;br /&gt;
L&amp;#039;agencement du rapport est illustré en-dessous de la table. Un regroupement a été défini pour le champ plProductType. Le champ Somme a été créé au pied du regroupement. La partie la plus à droite de l&amp;#039;image montre la définition de la fonction, qui sert à générer la source de données pour le champ Somme.&lt;br /&gt;
&lt;br /&gt;
== Champs Calculés ==&lt;br /&gt;
Les champs calculés peuvent être créés en entrant la formule correspondante directement dans le champ de données.&lt;br /&gt;
&lt;br /&gt;
Exemple : 100*[Population]/[PopulationCount], pour obtenir le pourcentage de la population actuelle&lt;br /&gt;
&lt;br /&gt;
== Syntaxe ==&lt;br /&gt;
&lt;br /&gt;
* lorsqu&amp;#039;on veut citer &amp;quot;[&amp;quot; on utilise &amp;quot;\&amp;quot;&lt;br /&gt;
* \\&lt;br /&gt;
* [] pour indiquer une référence de formule ou un nom de champ&lt;br /&gt;
* les guillemets doubles &amp;quot;&amp;quot; de part et d&amp;#039;autre de la chaîne de caractères pour la citer&lt;br /&gt;
* le point &amp;quot;.&amp;quot; en tant que séparateur décimal&lt;br /&gt;
* date, conformément aux spécifications Java&lt;br /&gt;
* le séparateur de paramètres est le point-virgule &amp;quot;;&amp;quot;. Il est possible de laisser certains paramètres vides, par exemple : XYZ(;kk;;kkb)&lt;br /&gt;
&lt;br /&gt;
== Fonctions Supportées ==&lt;br /&gt;
De manière générale, toutes les fonctions définies dans [http://wiki.oasis-open.org/office/About_OpenFormula OpenFormula] devraient être supportées. Toutefois, l&amp;#039;étendue de ce support peut évoluer avec le temps, car l&amp;#039;équipe de développement continue à travailler dessus. Du coup, le nombre et types de fonctions supportés peuvent changer en fonction des versions du Sun Report Builder.&lt;br /&gt;
&lt;br /&gt;
Le Sun Report Builder Verson 1.0.x intègre des fonctions appartenant aux catégories suivantes:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Date/Temps&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Date, Datetime, Day, Hour, Month, Now, Year, Today, Weekday, Time, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Finances&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Financial&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Informations&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Choose, HasChanged, Information, IsBlank, IsErr, IsError, IsEven, IsLogical, IsNA, IsNonText, IsNumber, IsOdd, IsRef, IsText, Na&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logiques&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
And, False, If, Not, Or, True, Xor&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Maths&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Abs, Average, Even, Odd, Sum&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Arrondir&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Int&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Textes&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Exact, Find, Left, Len, Lower, Mid, Replace, Rept, Right, Substitute, Text, T, Trim, Upper, URL&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Définies par l&amp;#039;Utilisateur&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Mapped, Null&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée peut être trouvée [http://wiki.services.openoffice.org/wiki/Documentation/FR/Base/Rapports/Fonctions ici.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Project]][[Category: Documentation]]&lt;br /&gt;
&lt;br /&gt;
{{Documentation/Hook}}&lt;br /&gt;
{{PDL1}}&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=68133</id>
		<title>FR/Documentation/Base/SUN Report Builder</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=68133"/>
		<updated>2008-02-26T09:47:03Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Fonctions Supportées */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/FR}}&lt;br /&gt;
== Sun Report Builder ==&lt;br /&gt;
Vous trouverez ce module complémentaire en téléchargement [http://extensions.services.openoffice.org/project/reportdesign ici]. C&amp;#039;est une extension qui s&amp;#039;installe de la même manière que les autres.&lt;br /&gt;
&lt;br /&gt;
== Expression d&amp;#039;Impression Conditionnelle ==&lt;br /&gt;
Une expression d&amp;#039;impression conditionnelle permet à l&amp;#039;utilisateur de limiter les données qui sont visibles lorsqu&amp;#039;on génère un rapport. Si la condition est remplie, alors l&amp;#039;élément (par exemple, une section ou un élément individuel) sera imprimé dans le rapport. La syntaxe d&amp;#039;utilisation est identique à celle des fonctions.&lt;br /&gt;
&lt;br /&gt;
== Fonctions ==&lt;br /&gt;
Une fonction peut être créée lors de l&amp;#039;ouverture du navigateur de rapport. Dans le menu contextuel de l&amp;#039;entrée &amp;#039;&amp;#039;&amp;#039;Fonctions&amp;#039;&amp;#039;&amp;#039;, il vous est possible de créer une fonction. &lt;br /&gt;
&lt;br /&gt;
Cette fonction peut être soit globale dans le contexte du rapport, soit particulière à un regroupement.&lt;br /&gt;
&lt;br /&gt;
Le schéma ci-dessous montre comment créer des champs de sous-total dans le Report Builder, en utilisant des fonctions :&lt;br /&gt;
&lt;br /&gt;
[[Image:SumFieldInReportBuilder.jpg]]&lt;br /&gt;
&lt;br /&gt;
La table constituant la source de données est illustrée en haut à gauche de l&amp;#039;image.&lt;br /&gt;
 &lt;br /&gt;
L&amp;#039;agencement du rapport est illustré en-dessous de la table. Un regroupement a été défini pour le champ plProductType. Le champ Somme a été créé au pied du regroupement. La partie la plus à droite de l&amp;#039;image montre la définition de la fonction, qui sert à générer la source de données pour le champ Somme.&lt;br /&gt;
&lt;br /&gt;
== Champs Calculés ==&lt;br /&gt;
Les champs calculés peuvent être créés en entrant la formule correspondante directement dans le champ de données.&lt;br /&gt;
&lt;br /&gt;
Exemple : 100*[Population]/[PopulationCount], pour obtenir le pourcentage de la population actuelle&lt;br /&gt;
&lt;br /&gt;
== Syntaxe ==&lt;br /&gt;
&lt;br /&gt;
* lorsqu&amp;#039;on veut citer &amp;quot;[&amp;quot; on utilise &amp;quot;\&amp;quot;&lt;br /&gt;
* \\&lt;br /&gt;
* [] pour indiquer une référence de formule ou un nom de champ&lt;br /&gt;
* les guillemets doubles &amp;quot;&amp;quot; pour mettre des chaînes to quote strings&lt;br /&gt;
* le point &amp;quot;.&amp;quot; en tant que séparateur décimal&lt;br /&gt;
* date, conformément aux spécifications Java&lt;br /&gt;
* le séparateur de paramètres est le point-virgule &amp;quot;;&amp;quot;. Il est possible de laisser certains paramètres vides, par exemple : XYZ(;kk;;kkb)&lt;br /&gt;
&lt;br /&gt;
== Fonctions Supportées ==&lt;br /&gt;
De manière générale, toutes les fonctions définies dans [http://wiki.oasis-open.org/office/About_OpenFormula OpenFormula] devraient être supportées. Toutefois, l&amp;#039;étendue de ce support peut évoluer avec le temps, car l&amp;#039;équipe de développement continue à travailler dessus. Du coup, le nombre et types de fonctions supportés peuvent changer en fonction des versions du Sun Report Builder.&lt;br /&gt;
&lt;br /&gt;
Le Sun Report Builder Verson 1.0.x intègre des fonctions appartenant aux catégories suivantes:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Date/Temps&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Date, Datetime, Day, Hour, Month, Now, Year, Today, Weekday, Time, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Finances&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Financial&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Informations&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Choose, HasChanged, Information, IsBlank, IsErr, IsError, IsEven, IsLogical, IsNA, IsNonText, IsNumber, IsOdd, IsRef, IsText, Na&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logiques&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
And, False, If, Not, Or, True, Xor&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Maths&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Abs, Average, Even, Odd, Sum&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Arrondir&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Int&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Textes&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Exact, Find, Left, Len, Lower, Mid, Replace, Rept, Right, Substitute, Text, T, Trim, Upper, URL&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Définies par l&amp;#039;Utilisateur&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Mapped, Null&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée peut être trouvée [http://wiki.services.openoffice.org/wiki/Documentation/FR/Base/Rapports/Fonctions ici.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Project]][[Category: Documentation]]&lt;br /&gt;
&lt;br /&gt;
{{Documentation/Hook}}&lt;br /&gt;
{{PDL1}}&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=68131</id>
		<title>FR/Documentation/Base/SUN Report Builder</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=68131"/>
		<updated>2008-02-26T09:44:49Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Fonctions Supportées */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/FR}}&lt;br /&gt;
== Sun Report Builder ==&lt;br /&gt;
Vous trouverez ce module complémentaire en téléchargement [http://extensions.services.openoffice.org/project/reportdesign ici]. C&amp;#039;est une extension qui s&amp;#039;installe de la même manière que les autres.&lt;br /&gt;
&lt;br /&gt;
== Expression d&amp;#039;Impression Conditionnelle ==&lt;br /&gt;
Une expression d&amp;#039;impression conditionnelle permet à l&amp;#039;utilisateur de limiter les données qui sont visibles lorsqu&amp;#039;on génère un rapport. Si la condition est remplie, alors l&amp;#039;élément (par exemple, une section ou un élément individuel) sera imprimé dans le rapport. La syntaxe d&amp;#039;utilisation est identique à celle des fonctions.&lt;br /&gt;
&lt;br /&gt;
== Fonctions ==&lt;br /&gt;
Une fonction peut être créée lors de l&amp;#039;ouverture du navigateur de rapport. Dans le menu contextuel de l&amp;#039;entrée &amp;#039;&amp;#039;&amp;#039;Fonctions&amp;#039;&amp;#039;&amp;#039;, il vous est possible de créer une fonction. &lt;br /&gt;
&lt;br /&gt;
Cette fonction peut être soit globale dans le contexte du rapport, soit particulière à un regroupement.&lt;br /&gt;
&lt;br /&gt;
Le schéma ci-dessous montre comment créer des champs de sous-total dans le Report Builder, en utilisant des fonctions :&lt;br /&gt;
&lt;br /&gt;
[[Image:SumFieldInReportBuilder.jpg]]&lt;br /&gt;
&lt;br /&gt;
La table constituant la source de données est illustrée en haut à gauche de l&amp;#039;image.&lt;br /&gt;
 &lt;br /&gt;
L&amp;#039;agencement du rapport est illustré en-dessous de la table. Un regroupement a été défini pour le champ plProductType. Le champ Somme a été créé au pied du regroupement. La partie la plus à droite de l&amp;#039;image montre la définition de la fonction, qui sert à générer la source de données pour le champ Somme.&lt;br /&gt;
&lt;br /&gt;
== Champs Calculés ==&lt;br /&gt;
Les champs calculés peuvent être créés en entrant la formule correspondante directement dans le champ de données.&lt;br /&gt;
&lt;br /&gt;
Exemple : 100*[Population]/[PopulationCount], pour obtenir le pourcentage de la population actuelle&lt;br /&gt;
&lt;br /&gt;
== Syntaxe ==&lt;br /&gt;
&lt;br /&gt;
* lorsqu&amp;#039;on veut citer &amp;quot;[&amp;quot; on utilise &amp;quot;\&amp;quot;&lt;br /&gt;
* \\&lt;br /&gt;
* [] pour indiquer une référence de formule ou un nom de champ&lt;br /&gt;
* les guillemets doubles &amp;quot;&amp;quot; pour mettre des chaînes to quote strings&lt;br /&gt;
* le point &amp;quot;.&amp;quot; en tant que séparateur décimal&lt;br /&gt;
* date, conformément aux spécifications Java&lt;br /&gt;
* le séparateur de paramètres est le point-virgule &amp;quot;;&amp;quot;. Il est possible de laisser certains paramètres vides, par exemple : XYZ(;kk;;kkb)&lt;br /&gt;
&lt;br /&gt;
== Fonctions Supportées ==&lt;br /&gt;
De manière générale, toutes les fonctions définies dans [http://wiki.oasis-open.org/office/About_OpenFormula OpenFormula] devraient être supportées. Toutefois, l&amp;#039;étendue de ce support peut évoluer avec le temps, car l&amp;#039;équipe de développement continue à travailler dessus. Du coup, le nombre et types de fonctions supportés peuvent changer en fonction des versions du Sun Report Builder.&lt;br /&gt;
&lt;br /&gt;
Le Sun Report Builder Verson 1.0.x intègre des fonctions appartenant aux catégories suivantes:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Date/Temps&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Date, Datetime, Day, Hour, Month, Now, Year, Today, Weekday, Time, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Finances&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Financial&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Informations&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Choose, HasChanged, Information, IsBlank, IsErr, IsError, IsEven, IsLogical, IsNA, IsNonText, IsNumber, IsOdd, IsRef, IsText, Na&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logiques&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
And, False, If, Not, Or, True, Xor&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Maths&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Abs, Average, Even, Odd, Sum&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Arrondir&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Int&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Textes&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Exact, Find, Left, Len, Lower, Mid, Replace, Rept, Right, Substitute, Text, T, Trim, Upper, URL&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Définies par l&amp;#039;Utilisateur&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Mapped, Null&lt;br /&gt;
&lt;br /&gt;
Une [[Base/Rapports/Fonctions|explication]] détaillée peut être trouvée [[Base/Rapports/Fonctions|ici.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Project]][[Category: Documentation]]&lt;br /&gt;
&lt;br /&gt;
{{Documentation/Hook}}&lt;br /&gt;
{{PDL1}}&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=58708</id>
		<title>FR/Documentation/Base/SUN Report Builder</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=58708"/>
		<updated>2007-12-22T22:48:13Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/FR}}&lt;br /&gt;
== Sun Report Builder ==&lt;br /&gt;
Vous trouverez ce module complémentaire en téléchargement [http://extensions.services.openoffice.org/project/reportdesign ici]. C&amp;#039;est une extension qui s&amp;#039;installe de la même manière que les autres.&lt;br /&gt;
&lt;br /&gt;
== Expression d&amp;#039;Impression Conditionnelle ==&lt;br /&gt;
Une expression d&amp;#039;impression conditionnelle permet à l&amp;#039;utilisateur de limiter les données qui sont visibles lorsqu&amp;#039;on génère un rapport. Si la condition est remplie, alors l&amp;#039;élément (par exemple, une section ou un élément individuel) sera imprimé dans le rapport. La syntaxe d&amp;#039;utilisation est identique à celle des fonctions.&lt;br /&gt;
&lt;br /&gt;
== Fonctions ==&lt;br /&gt;
Une fonction peut être créée lors de l&amp;#039;ouverture du navigateur de rapport. Dans le menu contextuel de l&amp;#039;entrée &amp;#039;&amp;#039;&amp;#039;Fonctions&amp;#039;&amp;#039;&amp;#039;, il vous est possible de créer une fonction. &lt;br /&gt;
&lt;br /&gt;
Cette fonction peut être soit globale dans le contexte du rapport, soit particulière à un regroupement.&lt;br /&gt;
&lt;br /&gt;
Le schéma ci-dessous montre comment créer des champs de sous-total dans le Report Builder, en utilisant des fonctions :&lt;br /&gt;
&lt;br /&gt;
[[Image:SumFieldInReportBuilder.jpg]]&lt;br /&gt;
&lt;br /&gt;
La table constituant la source de données est illustrée en haut à gauche de l&amp;#039;image.&lt;br /&gt;
 &lt;br /&gt;
L&amp;#039;agencement du rapport est illustré en-dessous de la table. Un regroupement a été défini pour le champ plProductType. Le champ Somme a été créé au pied du regroupement. La partie la plus à droite de l&amp;#039;image montre la définition de la fonction, qui sert à générer la source de données pour le champ Somme.&lt;br /&gt;
&lt;br /&gt;
== Champs Calculés ==&lt;br /&gt;
Les champs calculés peuvent être créés en entrant la formule correspondante directement dans le champ de données.&lt;br /&gt;
&lt;br /&gt;
Exemple : 100*[Population]/[PopulationCount], pour obtenir le pourcentage de la population actuelle&lt;br /&gt;
&lt;br /&gt;
== Syntaxe ==&lt;br /&gt;
&lt;br /&gt;
* lorsqu&amp;#039;on veut citer &amp;quot;[&amp;quot; on utilise &amp;quot;\&amp;quot;&lt;br /&gt;
* \\&lt;br /&gt;
* [] pour indiquer une référence de formule ou un nom de champ&lt;br /&gt;
* les guillemets doubles &amp;quot;&amp;quot; pour mettre des chaînes to quote strings&lt;br /&gt;
* le point &amp;quot;.&amp;quot; en tant que séparateur décimal&lt;br /&gt;
* date, conformément aux spécifications Java&lt;br /&gt;
* le séparateur de paramètres est le point-virgule &amp;quot;;&amp;quot;. Il est possible de laisser certains paramètres vides, par exemple : XYZ(;kk;;kkb)&lt;br /&gt;
&lt;br /&gt;
== Fonctions Supportées ==&lt;br /&gt;
De manière générale, toutes les fonctions définies dans [http://wiki.oasis-open.org/office/About_OpenFormula OpenFormula] devraient devraient être supportées. Toutefois, l&amp;#039;étendue de ce support peut évoluer avec le temps, car l&amp;#039;équipe de développement continue à travailler dessus. Du coup, le nombre et types de fonctions supportés peuvent changer en fonction des versions du Sun Report Builder.&lt;br /&gt;
&lt;br /&gt;
Le Sun Report Builder Verson 1.0.x intègre des fonctions appartenant aux catégories suivantes:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Date/Temps&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Date, Datetime, Day, Hour, Month, Now, Year, Today, Weekday, Time, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Finances&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Financial&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Informations&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Choose, HasChanged, Information, IsBlank, IsErr, IsError, IsEven, IsLogical, IsNA, IsNonText, IsNumber, IsOdd, IsRef, IsText, Na&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logiques&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
And, False, If, Not, Or, True, Xor&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Maths&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Abs, Average, Even, Odd, Sum&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Arrondir&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Int&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Textes&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Exact, Find, Left, Len, Lower, Mid, Replace, Rept, Right, Substitute, Text, T, Trim, Upper, URL&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Définies par l&amp;#039;Utilisateur&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Mapped, Null&lt;br /&gt;
&lt;br /&gt;
Une [[Base/Reports/Functions|explanation]] détaillée peut être trouvée [[Base/Reports/Functions|ici.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Project]][[Category: Documentation]]&lt;br /&gt;
&lt;br /&gt;
{{Documentation/Hook}}&lt;br /&gt;
{{PDL1}}&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=58707</id>
		<title>FR/Documentation/Base/SUN Report Builder</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=58707"/>
		<updated>2007-12-22T22:45:41Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/FR}}&lt;br /&gt;
== Sun Report Builder ==&lt;br /&gt;
Vous trouverez ce module complémentaire en téléchargement [http://extensions.services.openoffice.org/project/reportdesign ici]. C&amp;#039;est une extension qui s&amp;#039;installe de la même manière que les autres.&lt;br /&gt;
&lt;br /&gt;
== Expression d&amp;#039;Impression Conditionnelle ==&lt;br /&gt;
Une expression d&amp;#039;impression conditionnelle permet à l&amp;#039;utilisateur de limiter les données qui sont visibles lorsqu&amp;#039;on génère un rapport. Si la condition est remplie, alors l&amp;#039;élément (par exemple, une section ou un élément individuel) sera imprimé dans le rapport. La syntaxe d&amp;#039;utilisation est identique à celle des fonctions.&lt;br /&gt;
&lt;br /&gt;
== Fonctions ==&lt;br /&gt;
Une fonction peut être créée lors de l&amp;#039;ouverture du navigateur de rapport. Dans le menu contextuel de l&amp;#039;entrée &amp;#039;&amp;#039;&amp;#039;Fonctions&amp;#039;&amp;#039;&amp;#039;, il vous est possible de créer une fonction. &lt;br /&gt;
&lt;br /&gt;
Cette fonction peut être soit globale dans le contexte du rapport, soit particulière à un regroupement.&lt;br /&gt;
&lt;br /&gt;
Le schéma ci-dessous montre comment créer des champs de sous-total dans le Report Builder, en utilisant des fonctions :&lt;br /&gt;
&lt;br /&gt;
[[Image:SumFieldInReportBuilder.jpg]]&lt;br /&gt;
&lt;br /&gt;
La table constituant la source de données est illustrée en haut à gauche de l&amp;#039;image.&lt;br /&gt;
 &lt;br /&gt;
L&amp;#039;agencement du rapport est illustré en-dessous de la table. Un regroupement a été défini pour le champ plProductType. Le champ Somme a été créé au pied du regroupement. La partie la plus à droite de l&amp;#039;image montre la définition de la fonction, qui sert à générer la source de données pour le champ Somme.&lt;br /&gt;
&lt;br /&gt;
== Champs Calculés ==&lt;br /&gt;
Les champs calculés peuvent être créés en entrant la formule correspondante directement dans le champ de données.&lt;br /&gt;
&lt;br /&gt;
Exemple : 100*[Population]/[PopulationCount], pour obtenir le pourcentage de la population actuelle&lt;br /&gt;
&lt;br /&gt;
== Syntaxe ==&lt;br /&gt;
&lt;br /&gt;
* lorsqu&amp;#039;on veut citer &amp;quot;[&amp;quot; on utilise &amp;quot;\&amp;quot;&lt;br /&gt;
* \\&lt;br /&gt;
* [] pour indiquer une référence de formule ou un nom de champ&lt;br /&gt;
* les guillemets doubles &amp;quot;&amp;quot; pour mettre des chaînes to quote strings&lt;br /&gt;
* le point &amp;quot;.&amp;quot; en tant que séparateur décimal&lt;br /&gt;
* date, conformément aux spécifications Java&lt;br /&gt;
* le séparateur de paramètres est le point-virgule &amp;quot;;&amp;quot;. Il est possible de laisser certains paramètres vides, par exemple : XYZ(;kk;;kkb)&lt;br /&gt;
&lt;br /&gt;
== Fonctions Supportées ==&lt;br /&gt;
De manière générale, toutes les fonctions définies dans [http://wiki.oasis-open.org/office/About_OpenFormula OpenFormula] devraient devraient être supportées. Toutefois, l&amp;#039;étendue de ce support peut évoluer avec le temps, car l&amp;#039;équipe de développement continue à travailler dessus. Du coup, le nombre et types de fonctions supportés peuvent changer en fonction des versions du Sun Report Builder.&lt;br /&gt;
&lt;br /&gt;
Le Sun Report Builder Verson 1.0.x intègre des fonctions appartenant aux catégories suivantes:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Date/Temps&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Date, Datetime, Day, Hour, Month, Now, Year, Today, Weekday, Time, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Finances&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Financial&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Informations&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Choose, HasChanged, Information, IsBlank, IsErr, IsError, IsEven, IsLogical, IsNA, IsNonText, IsNumber, IsOdd, IsRef, IsText, Na&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logiques&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
And, False, If, Not, Or, True, Xor&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Maths&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Abs, Average, Even, Odd, Sum&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Arrondir&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Int&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Textes&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Exact, Find, Left, Len, Lower, Mid, Replace, Rept, Right, Substitute, Text, T, Trim, Upper, URL&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Définis par l&amp;#039;Utilisateur&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Mapped, Null&lt;br /&gt;
&lt;br /&gt;
Une [[Base/Reports/Functions|explanation]] détaillée peut être trouvée [[Base/Reports/Functions|ici.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Project]][[Category: Documentation]]&lt;br /&gt;
&lt;br /&gt;
{{Documentation/Hook}}&lt;br /&gt;
{{PDL1}}&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=58706</id>
		<title>FR/Documentation/Base/SUN Report Builder</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=58706"/>
		<updated>2007-12-22T22:41:44Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/FR}}&lt;br /&gt;
== Sun Report Builder ==&lt;br /&gt;
Vous trouverez ce module complémentaire en téléchargement [http://extensions.services.openoffice.org/project/reportdesign ici]. C&amp;#039;est une extension qui s&amp;#039;installe de la même manière que les autres.&lt;br /&gt;
&lt;br /&gt;
== Expression d&amp;#039;Impression Conditionnelle ==&lt;br /&gt;
Une expression d&amp;#039;impression conditionnelle permet à l&amp;#039;utilisateur de limiter les données qui sont visibles lorsqu&amp;#039;on génère un rapport. Si la condition est remplie, alors l&amp;#039;élément (par exemple, une section ou un élément individuel) sera imprimé dans le rapport.La syntaxe d&amp;#039;utilisation est identique à celle des fonctions.&lt;br /&gt;
&lt;br /&gt;
== Fonctions ==&lt;br /&gt;
Une fonction peut être créée lors de l&amp;#039;ouverture du navigateur de rapport. Dans le menu contextuel de l&amp;#039;entrée &amp;#039;&amp;#039;&amp;#039;Fonctions&amp;#039;&amp;#039;&amp;#039;, il vous est possible de créer une fonction. &lt;br /&gt;
&lt;br /&gt;
Cette fonction peut être soit globale dans le contexte du rapport, soit particulière à un regroupement.&lt;br /&gt;
&lt;br /&gt;
Le schéma ci-dessous montre comment créer des champs de sous-total dans le Report Builder, en utilisant des fonctions :&lt;br /&gt;
&lt;br /&gt;
[[Image:SumFieldInReportBuilder.jpg]]&lt;br /&gt;
&lt;br /&gt;
La table constituant la source de données est illustrée en haut à gauche de l&amp;#039;image.&lt;br /&gt;
 &lt;br /&gt;
L&amp;#039;agencement du rapport est illustré en-dessous de la table. Un regroupement a été défini pour le champ plProductType. Le champ Somme a été créé au pied du regroupement. La partie la plus à droite de l&amp;#039;image montre la définition de la fonction, qui sert à générer la source de données pour le champ Somme.&lt;br /&gt;
&lt;br /&gt;
== Champs Calculés ==&lt;br /&gt;
Les champs calculés peuvent être créés en entrant la formule correspondante directement dans le champ de données.&lt;br /&gt;
&lt;br /&gt;
Exemple : 100*[Population]/[PopulationCount], pour obtenir le pourcentage de la population actuelle&lt;br /&gt;
&lt;br /&gt;
== Syntaxe ==&lt;br /&gt;
&lt;br /&gt;
* lorsqu&amp;#039;on veut citer &amp;quot;[&amp;quot; on utilise &amp;quot;\&amp;quot;&lt;br /&gt;
* \\&lt;br /&gt;
* [] pour indiquer une référence de formule ou un nom de champ&lt;br /&gt;
* les guillemets doubles &amp;quot;&amp;quot; pour mettre des chaînes to quote strings&lt;br /&gt;
* le point &amp;quot;.&amp;quot; en tant que séparateur décimal&lt;br /&gt;
* date, conformément aux spécifications Java&lt;br /&gt;
* le séparateur de paramètres est le point-virgule &amp;quot;;&amp;quot;. Il est possible de laisser certains paramètres vides, par exemple : XYZ(;kk;;kkb)&lt;br /&gt;
&lt;br /&gt;
== Fonctions Supportées ==&lt;br /&gt;
De manière générale, toutes les fonctions définies dans [http://wiki.oasis-open.org/office/About_OpenFormula OpenFormula] devraient devraient être supportées. Toutefois, l&amp;#039;étendue de ce support peut évoluer avec le temps, car l&amp;#039;équipe de développement continue à travailler dessus. Du coup, le nombre et types de fonctions supportés peuvent changer en fonction des versions du Sun Report Builder.&lt;br /&gt;
&lt;br /&gt;
Le Sun Report Builder Verson 1.0.x intègre des fonctions appartenant aux catégories suivantes:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Date/Temps&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Date, Datetime, Day, Hour, Month, Now, Year, Today, Weekday, Time, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Finances&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Financial&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Informations&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Choose, HasChanged, Information, IsBlank, IsErr, IsError, IsEven, IsLogical, IsNA, IsNonText, IsNumber, IsOdd, IsRef, IsText, Na&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logiques&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
And, False, If, Not, Or, True, Xor&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Maths&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Abs, Average, Even, Odd, Sum&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Arrondir&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Int&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Textes&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Exact, Find, Left, Len, Lower, Mid, Replace, Rept, Right, Substitute, Text, T, Trim, Upper, URL&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Définis par l&amp;#039;Utilisateur&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Mapped, Null&lt;br /&gt;
&lt;br /&gt;
Une [[Base/Reports/Functions|explanation]] détaillée peut être trouvée [[Base/Reports/Functions|ici.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Project]][[Category: Documentation]]&lt;br /&gt;
&lt;br /&gt;
{{Documentation/Hook}}&lt;br /&gt;
{{PDL1}}&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/Rapports/Fonctions&amp;diff=58705</id>
		<title>FR/Documentation/Base/Rapports/Fonctions</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/Rapports/Fonctions&amp;diff=58705"/>
		<updated>2007-12-22T22:18:01Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/Candidate}}&lt;br /&gt;
&lt;br /&gt;
Le Sun Report Builder intègre les fonctions suivantes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Arrondir&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom de la Fonction&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Exemple &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| INT&lt;br /&gt;
| Cette fonction renvoit une valeur correspondant à l&amp;#039;entier inférieur le plus proche&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Informations&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom de la Fonction&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Exemple &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| CHOOSE&lt;br /&gt;
| Cette fonction utilise un indexe pour renvoyer une valeur à partir d&amp;#039;une liste de valeurs.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| HASCHANGED&lt;br /&gt;
| Cette fonction vérifie si les colonnes spécifiées par le nom donné ont changé.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISBLANK&lt;br /&gt;
| Cette fonction vérifie si la valeur est indéfinie (null).&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISERR&lt;br /&gt;
| Cette fonction vérifie si le paramètre est du type &amp;quot;Erreur&amp;quot;, mais renvoit &amp;quot;Faux&amp;quot; si l&amp;#039;erreur est du type &amp;quot;NA&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISERROR&lt;br /&gt;
| Cette fonction vérifie si le paramètre est du type &amp;quot;Erreur&amp;quot; et renvoit &amp;quot;Faux&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISEVEN&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur qui est un nombre pair.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISLOGICAL&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur de type &amp;quot;Logique&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISNA&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une erreur de type &amp;quot;NA&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISNONTEXT&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur qui n&amp;#039;est pas du type &amp;quot;Texte&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISNUMBER&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur qui n&amp;#039;est pas du type &amp;quot;Nombre&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISODD&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur qui est un nombre impair.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISREF&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur qui est une référence.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISTEXT&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur est du type &amp;quot;Texte&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NA&lt;br /&gt;
| Cette fonction renvoit la constante d&amp;#039;erreur NA.&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Date/Temps&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom de la Fonction&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Exemple &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DATE&lt;br /&gt;
| Cette fonction renvoit le nombre de jours écoulé depuis le 01.01.1900&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Month&lt;br /&gt;
| Mois&lt;br /&gt;
|-&lt;br /&gt;
| Day&lt;br /&gt;
| Jour&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DATEDIF&lt;br /&gt;
| Cette fonction renvoit le nombre de jours entre une première date et une deuxième date.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Date2&lt;br /&gt;
| Deuxième date.&lt;br /&gt;
|-&lt;br /&gt;
| Format&lt;br /&gt;
| Code de Formatage.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DATEVALUE&lt;br /&gt;
| Cette fonction renvoit un numéro de série correspondant à une date à partir d&amp;#039;un texte donné.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DAY&lt;br /&gt;
| Cette fonction renvoit le jour d&amp;#039;une date donnée&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| HOUR&lt;br /&gt;
| Cette fonction renvoit l&amp;#039;heure (de 0 jusqu&amp;#039;à 23) à partir d&amp;#039;une heure donnée.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MONTH&lt;br /&gt;
| Cette fonction renvoit le mois d&amp;#039;une date donnée&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NOW&lt;br /&gt;
| Cette fonction renvoit l&amp;#039;heure actuelle&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TIME&lt;br /&gt;
| Cette fonction renvoit l&amp;#039;heure&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Minute.&lt;br /&gt;
| Minutes&lt;br /&gt;
|-&lt;br /&gt;
| Second&lt;br /&gt;
| Secondes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TODAY&lt;br /&gt;
| Cette fonction renvoit la date actuelle&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| WEEKDAY&lt;br /&gt;
| Cette fonction renvoit le jour de la semaine à partir d&amp;#039;une date.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Type&lt;br /&gt;
| Cette fonction définit le type de résultat (de 1 à 3)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| YEAR&lt;br /&gt;
| Cette fonction renvoit l&amp;#039;année à partir d&amp;#039;une date donnée&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Text&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom de la Fonction&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Exemple &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXACT&lt;br /&gt;
| Cette fonction indique si deux valeurs de texte sont identiques en effectuant une comparaison sensible à la casse.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Text2&lt;br /&gt;
| Le deuxième texte.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FIND&lt;br /&gt;
| Returns the starting position of a given text.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Text&lt;br /&gt;
| Le texte d&amp;#039;origine.&lt;br /&gt;
|-&lt;br /&gt;
| Index&lt;br /&gt;
| L&amp;#039;indexe de départ.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| LEFT&lt;br /&gt;
| Cette fonction renvoit une chaîne de caractères en partant du caractère numéro &amp;quot;n&amp;quot; vers la gauche, où &amp;quot;n&amp;quot; est la position du caractère à partir duquel s&amp;#039;applique la fonction.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Length&lt;br /&gt;
| Cette fonction renvoit la longueur d&amp;#039;une chaîne de caractères.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| LEN&lt;br /&gt;
| Cette fonction renvoit la longueur de la chaîne de caractères qui lui est passée.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| LOWER&lt;br /&gt;
| Cette fonction renvoit la chaîne en minuscules.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MID&lt;br /&gt;
| Cette fonction renvoit une chaîne de caractère, à partir d&amp;#039;une chaîne initiale, de la position de départ, et de la longueur de la chaîne.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Start&lt;br /&gt;
| L&amp;#039;indexe de départ.&lt;br /&gt;
|-&lt;br /&gt;
| Length&lt;br /&gt;
| La longueur de la chaîne.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| REPLACE&lt;br /&gt;
| Remplace une chaîne de caractères d&amp;#039;origine par une autre chaîne passé en paramètre, et dans l&amp;#039;indexe de départ et la fourchette de longueur.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Start&lt;br /&gt;
| L&amp;#039;indexe de départ.&lt;br /&gt;
|-&lt;br /&gt;
| Len&lt;br /&gt;
| La longueur.&lt;br /&gt;
|-&lt;br /&gt;
| New&lt;br /&gt;
| La nouvelle chaîne à insérer.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| REPT&lt;br /&gt;
| Cette fonction renvoit un texte répété par un nombre de fois défini par &amp;quot;Count&amp;quot;.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Count&lt;br /&gt;
| Le nombre de fois à répéter le texte.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| RIGHT&lt;br /&gt;
| Cette fonction renvoit une chaîne de caractères en partant du caractère &amp;quot;Count&amp;quot; vers la droite, où &amp;quot;Count&amp;quot; est la position du caractère à partir duquel s&amp;#039;applique la fonction.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Count&lt;br /&gt;
| Le numéro de la position du caractère de départ.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SUBSTITUTE&lt;br /&gt;
| Remplace une chaîne de texte par une nouvelle chaîne. Par défaut chaque fois que la chaîne est rencontrée, elle sera remplacée par la nouvelle chaîne. Autrement, on peut préciser le nombre de remplacements par le paramètre &amp;quot;Which&amp;quot;.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Old&lt;br /&gt;
| La chaîne de caractères à remplacer.&lt;br /&gt;
|-&lt;br /&gt;
| New&lt;br /&gt;
| La chaîne de caractères à insérer.&lt;br /&gt;
|-&lt;br /&gt;
| Which&lt;br /&gt;
| Le nombre de fois que la chaîne à remplacer doit être recherchée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| T&lt;br /&gt;
| Cette fonction renvoit la valeur du texte recherché ou bien une chaîne de longueur zéro pour des valeurs qui ne sont pas des chaînes de caractères de type &amp;quot;Texte&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TEXT&lt;br /&gt;
| Renvoit la valeur passée en tant que texte.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TRIM&lt;br /&gt;
| Renvoit la chaîne de caractères passée en enlevant tous les espaces devant et après la chaîne. Des espaces multiples sont remplacés par une seule espace.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| UPPER&lt;br /&gt;
| Renvoit la chaîne de caractères passée en majuscules.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| URLENCODE&lt;br /&gt;
| Applique l&amp;#039;encodage URL à une chaîne de caractères passée en premier paramètre en utilisant l&amp;#039;encodage indiqué en deuxième paramètre. Si aucun encodage n&amp;#039;est précisé, ISO-8859-1 est appliqué.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Encoding&lt;br /&gt;
| L&amp;#039;encodage à utiliser.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Mathematical&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom de la Fonction&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Exemple &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ABS&lt;br /&gt;
| Renvoit la valeur absolue (non négative) de la valeur à laquelle est appliquée la fonction.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| AVERAGE&lt;br /&gt;
| Renvoit la moyenne d&amp;#039;une liste de valeurs numériques.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Even&lt;br /&gt;
| Renvoit une valeur arrondie au nombre entier pair supérieur.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MAX&lt;br /&gt;
| Renvoit la valeur maximale à partir d&amp;#039;un ensemble de valeurs.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MIN&lt;br /&gt;
| Renvoit la valeur minimale à partir d&amp;#039;un ensemble de valeurs.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MOD&lt;br /&gt;
| Renvoit le modulo lorsqu&amp;#039;un nombre est divisé par un autre.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Divisor&lt;br /&gt;
| Le diviseur.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ODD&lt;br /&gt;
| Renvoit une valeur arrondie au nombre entier impair supérieur.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SUM&lt;br /&gt;
| Faire la somme d&amp;#039;une liste de valeurs.&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logical&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom de la Fonction&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Exemple &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| AND&lt;br /&gt;
| ET logique&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FALSE&lt;br /&gt;
| FAUX logique&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| IF&lt;br /&gt;
| Exécution Conditionnelle&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nom du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description du Paramètre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Une expression qui est évaluée si la condition est remplie.&lt;br /&gt;
| True-Term&lt;br /&gt;
|-&lt;br /&gt;
| Une expression qui est évaluée si la condition n&amp;#039;est pas remplie.&lt;br /&gt;
| False-Term&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| AND&lt;br /&gt;
| ET logique&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| OR&lt;br /&gt;
| OU logique&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TRUE&lt;br /&gt;
| VRAI logique&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| XOR&lt;br /&gt;
| XOR logique&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Code nécessaire pour obtenir la fonction à partir du fichier jar libformula&lt;br /&gt;
&amp;lt;code&amp;gt;[java]&lt;br /&gt;
import java.util.Locale;&lt;br /&gt;
import org.jfree.formula.DefaultFormulaContext;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Si vous voulez changer ce modèle, choisissez Outils | Modèles&lt;br /&gt;
 * et ouvrez le modèle dans l&amp;#039;éditeur.&lt;br /&gt;
 */&lt;br /&gt;
import org.jfree.formula.function.FunctionCategory;&lt;br /&gt;
import org.jfree.formula.function.FunctionDescription;&lt;br /&gt;
import org.jfree.formula.function.FunctionRegistry;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 *&lt;br /&gt;
 * @author Ocke Janssen&lt;br /&gt;
 */&lt;br /&gt;
public class NewMain {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param args the command line arguments&lt;br /&gt;
     */&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        DefaultFormulaContext obj = new DefaultFormulaContext();&lt;br /&gt;
        FunctionRegistry func = obj.getFunctionRegistry();&lt;br /&gt;
        FunctionCategory[] categories = func.getCategories();&lt;br /&gt;
        for ( int i = 0 ; i &amp;lt; categories.length;++i)&lt;br /&gt;
        {&lt;br /&gt;
            String display = categories[i].getDisplayName(Locale.ENGLISH);&lt;br /&gt;
            System.out.println( &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; + display +&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
            System.out.println( &amp;quot;{| class=\&amp;quot;prettytable\&amp;quot; cellpadding=\&amp;quot;10\&amp;quot; border=\&amp;quot;1\&amp;quot;&amp;quot;);&lt;br /&gt;
            System.out.println( &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Function Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;);&lt;br /&gt;
            System.out.println( &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &amp;quot;);&lt;br /&gt;
            System.out.println( &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Example &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            String[] functions = func.getFunctionNamesByCategory(categories[i]);&lt;br /&gt;
            for(int j= 0; j &amp;lt; functions.length;++j)&lt;br /&gt;
            {&lt;br /&gt;
                FunctionDescription desc = func.getMetaData(functions[j]);&lt;br /&gt;
                System.out.println( &amp;quot;&amp;quot;);&lt;br /&gt;
                System.out.println( &amp;quot;|-&amp;quot;);&lt;br /&gt;
                System.out.println(&amp;quot;| &amp;quot;+ desc.getDisplayName(Locale.ENGLISH));&lt;br /&gt;
                System.out.println(&amp;quot;| &amp;quot;+ desc.getDescription(Locale.ENGLISH));&lt;br /&gt;
                int count = desc.getParameterCount();&lt;br /&gt;
                if ( count &amp;gt; 1 ){&lt;br /&gt;
                    System.out.println( &amp;quot;{| class=\&amp;quot;prettytable\&amp;quot; cellpadding=\&amp;quot;10\&amp;quot; border=\&amp;quot;1\&amp;quot;&amp;quot;);&lt;br /&gt;
                    System.out.println( &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &amp;quot;);&lt;br /&gt;
                    System.out.println( &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &amp;quot;);&lt;br /&gt;
                    System.out.println( &amp;quot;&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                for(int k= 1;k &amp;lt; count;++k){&lt;br /&gt;
                    try{&lt;br /&gt;
                        System.out.println( &amp;quot;|-&amp;quot;);&lt;br /&gt;
                        System.out.println(&amp;quot;| &amp;quot; + desc.getParameterDisplayName(k,Locale.ENGLISH) );&lt;br /&gt;
                        System.out.println(&amp;quot;| &amp;quot; + desc.getParameterDescription(k,Locale.ENGLISH) );&lt;br /&gt;
                    } catch(Exception e){&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( count &amp;gt; 1 ){&lt;br /&gt;
                    System.out.println(&amp;quot;|}&amp;quot;);&lt;br /&gt;
                    System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
                }                    &lt;br /&gt;
                &lt;br /&gt;
                System.out.println(&amp;quot;| &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            System.out.println(&amp;quot;|}&amp;quot;);&lt;br /&gt;
            System.out.println(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Database]]&lt;br /&gt;
[[Category: Base Documentation]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/Reports/Functions&amp;diff=58704</id>
		<title>FR/Documentation/Base/Reports/Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/Reports/Functions&amp;diff=58704"/>
		<updated>2007-12-22T22:04:59Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: Documentation/FR/Base/Reports/Functions moved to Documentation/FR/Base/Rapports/Fonctions: Correcting from English to French&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Documentation/FR/Base/Rapports/Fonctions]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/Rapports/Fonctions&amp;diff=58703</id>
		<title>FR/Documentation/Base/Rapports/Fonctions</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/Rapports/Fonctions&amp;diff=58703"/>
		<updated>2007-12-22T22:04:59Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: Documentation/FR/Base/Reports/Functions moved to Documentation/FR/Base/Rapports/Fonctions: Correcting from English to French&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/Candidate}}&lt;br /&gt;
&lt;br /&gt;
Le Sun Report Builder intègre les fonctions suivantes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Rounding&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Function Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Example &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| INT&lt;br /&gt;
| Cette fonction renvoit une valeur correspondant à l&amp;#039;entier inférieur le plus proche&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Information&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Function Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Example &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| CHOOSE&lt;br /&gt;
| Cette fonction utilise un indexe pour renvoyer une valeur à partir d&amp;#039;une liste de valeurs.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| HASCHANGED&lt;br /&gt;
| Cette fonction vérifie si les colonnes spécifiées par le nom donné ont changé.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISBLANK&lt;br /&gt;
| Cette fonction vérifie si la valeur est indéfinie (null).&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISERR&lt;br /&gt;
| Cette fonction vérifie si le paramètre est du type &amp;quot;Erreur&amp;quot;, mais renvoit &amp;quot;Faux&amp;quot; si l&amp;#039;erreur est du type &amp;quot;NA&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISERROR&lt;br /&gt;
| Cette fonction vérifie si le paramètre est du type &amp;quot;Erreur&amp;quot; et renvoit &amp;quot;Faux&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISEVEN&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur qui est un nombre pair.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISLOGICAL&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur de type &amp;quot;Logique&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISNA&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une erreur de type &amp;quot;NA&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISNONTEXT&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur qui n&amp;#039;est pas du type &amp;quot;Texte&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISNUMBER&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur qui n&amp;#039;est pas du type &amp;quot;Nombre&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISODD&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur qui est un nombre impair.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISREF&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur qui est une référence.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISTEXT&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur est du type &amp;quot;Texte&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NA&lt;br /&gt;
| Cette fonction renvoit la constante d&amp;#039;erreur NA.&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Date/Time&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Function Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Example &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DATE&lt;br /&gt;
| Cette fonction renvoit le nombre de jours écoulé depuis le 01.01.1900&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Month&lt;br /&gt;
| Month&lt;br /&gt;
|-&lt;br /&gt;
| Day&lt;br /&gt;
| Day&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DATEDIF&lt;br /&gt;
| Cette fonction renvoit le nombre de jours entre une première date et une deuxième date.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Date2&lt;br /&gt;
| Deuxième date.&lt;br /&gt;
|-&lt;br /&gt;
| Format&lt;br /&gt;
| Code de Formatage.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DATEVALUE&lt;br /&gt;
| Cette fonction renvoit un numéro de série correspondant à une date à partir d&amp;#039;un texte donné.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DAY&lt;br /&gt;
| Cette fonction renvoit le jour d&amp;#039;une date donnée&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| HOUR&lt;br /&gt;
| Cette fonction renvoit l&amp;#039;heure (de 0 jusqu&amp;#039;à 23) à partir d&amp;#039;une heure donnée.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MONTH&lt;br /&gt;
| Cette fonction renvoit le mois d&amp;#039;une date donnée&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NOW&lt;br /&gt;
| Cette fonction renvoit l&amp;#039;heure actuelle&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TIME&lt;br /&gt;
| Cette fonction renvoit l&amp;#039;heure&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Minute.&lt;br /&gt;
| Minutes&lt;br /&gt;
|-&lt;br /&gt;
| Second&lt;br /&gt;
| Secondes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TODAY&lt;br /&gt;
| Cette fonction renvoit la date actuelle&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| WEEKDAY&lt;br /&gt;
| Cette fonction renvoit le jour de la semaine à partir d&amp;#039;une date.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Type&lt;br /&gt;
| Cette fonction définit le type de résultat (de 1 à 3)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| YEAR&lt;br /&gt;
| Cette fonction renvoit l&amp;#039;année à partir d&amp;#039;une date donnée&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Text&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Function Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Example &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXACT&lt;br /&gt;
| Cette fonction indique si deux valeurs de texte sont identiques en effectuant une comparaison sensible à la casse.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Text2&lt;br /&gt;
| Le deuxième texte.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FIND&lt;br /&gt;
| Returns the starting position of a given text.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Text&lt;br /&gt;
| Le texte d&amp;#039;origine.&lt;br /&gt;
|-&lt;br /&gt;
| Index&lt;br /&gt;
| L&amp;#039;indexe de départ.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| LEFT&lt;br /&gt;
| Cette fonction renvoit une chaîne de caractères en partant du caractère numéro &amp;quot;n&amp;quot; vers la gauche, où &amp;quot;n&amp;quot; est la position du caractère à partir duquel s&amp;#039;applique la fonction.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Length&lt;br /&gt;
| Cette fonction renvoit la longueur d&amp;#039;une chaîne de caractères.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| LEN&lt;br /&gt;
| Cette fonction renvoit la longueur de la chaîne de caractères qui lui est passée.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| LOWER&lt;br /&gt;
| Cette fonction renvoit la chaîne en minuscules.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MID&lt;br /&gt;
| Cette fonction renvoit une chaîne de caractère, à partir d&amp;#039;une chaîne initiale, de la position de départ, et de la longueur de la chaîne.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Start&lt;br /&gt;
| L&amp;#039;indexe de départ.&lt;br /&gt;
|-&lt;br /&gt;
| Length&lt;br /&gt;
| La longueur de la chaîne.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| REPLACE&lt;br /&gt;
| Remplace une chaîne de caractères d&amp;#039;origine par une autre chaîne passé en paramètre, et dans l&amp;#039;indexe de départ et la fourchette de longueur.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Start&lt;br /&gt;
| L&amp;#039;indexe de départ.&lt;br /&gt;
|-&lt;br /&gt;
| Len&lt;br /&gt;
| La longueur.&lt;br /&gt;
|-&lt;br /&gt;
| New&lt;br /&gt;
| La nouvelle chaîne à insérer.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| REPT&lt;br /&gt;
| Cette fonction renvoit un texte répété par un nombre de fois défini par &amp;quot;Count&amp;quot;.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Count&lt;br /&gt;
| Le nombre de fois à répéter le texte.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| RIGHT&lt;br /&gt;
| Cette fonction renvoit une chaîne de caractères en partant du caractère &amp;quot;Count&amp;quot; vers la droite, où &amp;quot;Count&amp;quot; est la position du caractère à partir duquel s&amp;#039;applique la fonction.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Count&lt;br /&gt;
| Le numéro de la position du caractère de départ.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SUBSTITUTE&lt;br /&gt;
| Remplace une chaîne de texte par une nouvelle chaîne. Par défaut chaque fois que la chaîne est rencontrée, elle sera remplacée par la nouvelle chaîne. Autrement, on peut préciser le nombre de remplacements par le paramètre &amp;quot;Which&amp;quot;.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Old&lt;br /&gt;
| La chaîne de caractères à remplacer.&lt;br /&gt;
|-&lt;br /&gt;
| New&lt;br /&gt;
| La chaîne de caractères à insérer.&lt;br /&gt;
|-&lt;br /&gt;
| Which&lt;br /&gt;
| Le nombre de fois que la chaîne à remplacer doit être recherchée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| T&lt;br /&gt;
| Cette fonction renvoit la valeur du texte recherché ou bien une chaîne de longueur zéro pour des valeurs qui ne sont pas des chaînes de caractères de type &amp;quot;Texte&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TEXT&lt;br /&gt;
| Renvoit la valeur passée en tant que texte.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TRIM&lt;br /&gt;
| Renvoit la chaîne de caractères passée en enlevant tous les espaces devant et après la chaîne. Des espaces multiples sont remplacés par une seule espace.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| UPPER&lt;br /&gt;
| Renvoit la chaîne de caractères passée en majuscules.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| URLENCODE&lt;br /&gt;
| Applique l&amp;#039;encodage URL à une chaîne de caractères passée en premier paramètre en utilisant l&amp;#039;encodage indiqué en deuxième paramètre. Si aucun encodage n&amp;#039;est précisé, ISO-8859-1 est appliqué.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Encoding&lt;br /&gt;
| L&amp;#039;encodage à utiliser.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Mathematical&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Function Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Example &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ABS&lt;br /&gt;
| Renvoit la valeur absolue (non négative) de la valeur à laquelle est appliquée la fonction.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| AVERAGE&lt;br /&gt;
| Renvoit la moyenne d&amp;#039;une liste de valeurs numériques.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Even&lt;br /&gt;
| Renvoit une valeur arrondie au nombre entier pair supérieur.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MAX&lt;br /&gt;
| Renvoit la valeur maximale à partir d&amp;#039;un ensemble de valeurs.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MIN&lt;br /&gt;
| Renvoit la valeur minimale à partir d&amp;#039;un ensemble de valeurs.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MOD&lt;br /&gt;
| Renvoit le modulo lorsqu&amp;#039;un nombre est divisé par un autre.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Divisor&lt;br /&gt;
| Le diviseur.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ODD&lt;br /&gt;
| Renvoit une valeur arrondie au nombre entier impair supérieur.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SUM&lt;br /&gt;
| Faire la somme d&amp;#039;une liste de valeurs.&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logical&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Function Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Example &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| AND&lt;br /&gt;
| ET logique&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FALSE&lt;br /&gt;
| FAUX logique&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| IF&lt;br /&gt;
| Exécution Conditionnelle&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Une expression qui est évaluée si la condition est remplie.&lt;br /&gt;
| True-Term&lt;br /&gt;
|-&lt;br /&gt;
| Une expression qui est évaluée si la condition n&amp;#039;est pas remplie.&lt;br /&gt;
| False-Term&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| AND&lt;br /&gt;
| ET logique&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| OR&lt;br /&gt;
| OU logique&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TRUE&lt;br /&gt;
| VRAI logique&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| XOR&lt;br /&gt;
| XOR logique&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Code nécessaire pour obtenir la fonction à partir du fichier jar libformula&lt;br /&gt;
&amp;lt;code&amp;gt;[java]&lt;br /&gt;
import java.util.Locale;&lt;br /&gt;
import org.jfree.formula.DefaultFormulaContext;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Si vous voulez changer ce modèle, choisissez Outils | Modèles&lt;br /&gt;
 * et ouvrez le modèle dans l&amp;#039;éditeur.&lt;br /&gt;
 */&lt;br /&gt;
import org.jfree.formula.function.FunctionCategory;&lt;br /&gt;
import org.jfree.formula.function.FunctionDescription;&lt;br /&gt;
import org.jfree.formula.function.FunctionRegistry;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 *&lt;br /&gt;
 * @author Ocke Janssen&lt;br /&gt;
 */&lt;br /&gt;
public class NewMain {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param args the command line arguments&lt;br /&gt;
     */&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        DefaultFormulaContext obj = new DefaultFormulaContext();&lt;br /&gt;
        FunctionRegistry func = obj.getFunctionRegistry();&lt;br /&gt;
        FunctionCategory[] categories = func.getCategories();&lt;br /&gt;
        for ( int i = 0 ; i &amp;lt; categories.length;++i)&lt;br /&gt;
        {&lt;br /&gt;
            String display = categories[i].getDisplayName(Locale.ENGLISH);&lt;br /&gt;
            System.out.println( &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; + display +&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
            System.out.println( &amp;quot;{| class=\&amp;quot;prettytable\&amp;quot; cellpadding=\&amp;quot;10\&amp;quot; border=\&amp;quot;1\&amp;quot;&amp;quot;);&lt;br /&gt;
            System.out.println( &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Function Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;);&lt;br /&gt;
            System.out.println( &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &amp;quot;);&lt;br /&gt;
            System.out.println( &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Example &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            String[] functions = func.getFunctionNamesByCategory(categories[i]);&lt;br /&gt;
            for(int j= 0; j &amp;lt; functions.length;++j)&lt;br /&gt;
            {&lt;br /&gt;
                FunctionDescription desc = func.getMetaData(functions[j]);&lt;br /&gt;
                System.out.println( &amp;quot;&amp;quot;);&lt;br /&gt;
                System.out.println( &amp;quot;|-&amp;quot;);&lt;br /&gt;
                System.out.println(&amp;quot;| &amp;quot;+ desc.getDisplayName(Locale.ENGLISH));&lt;br /&gt;
                System.out.println(&amp;quot;| &amp;quot;+ desc.getDescription(Locale.ENGLISH));&lt;br /&gt;
                int count = desc.getParameterCount();&lt;br /&gt;
                if ( count &amp;gt; 1 ){&lt;br /&gt;
                    System.out.println( &amp;quot;{| class=\&amp;quot;prettytable\&amp;quot; cellpadding=\&amp;quot;10\&amp;quot; border=\&amp;quot;1\&amp;quot;&amp;quot;);&lt;br /&gt;
                    System.out.println( &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &amp;quot;);&lt;br /&gt;
                    System.out.println( &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &amp;quot;);&lt;br /&gt;
                    System.out.println( &amp;quot;&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                for(int k= 1;k &amp;lt; count;++k){&lt;br /&gt;
                    try{&lt;br /&gt;
                        System.out.println( &amp;quot;|-&amp;quot;);&lt;br /&gt;
                        System.out.println(&amp;quot;| &amp;quot; + desc.getParameterDisplayName(k,Locale.ENGLISH) );&lt;br /&gt;
                        System.out.println(&amp;quot;| &amp;quot; + desc.getParameterDescription(k,Locale.ENGLISH) );&lt;br /&gt;
                    } catch(Exception e){&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( count &amp;gt; 1 ){&lt;br /&gt;
                    System.out.println(&amp;quot;|}&amp;quot;);&lt;br /&gt;
                    System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
                }                    &lt;br /&gt;
                &lt;br /&gt;
                System.out.println(&amp;quot;| &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            System.out.println(&amp;quot;|}&amp;quot;);&lt;br /&gt;
            System.out.println(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Database]]&lt;br /&gt;
[[Category: Base Documentation]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/Rapports/Fonctions&amp;diff=58702</id>
		<title>FR/Documentation/Base/Rapports/Fonctions</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/Rapports/Fonctions&amp;diff=58702"/>
		<updated>2007-12-22T22:04:26Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/Candidate}}&lt;br /&gt;
&lt;br /&gt;
Le Sun Report Builder intègre les fonctions suivantes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Rounding&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Function Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Example &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| INT&lt;br /&gt;
| Cette fonction renvoit une valeur correspondant à l&amp;#039;entier inférieur le plus proche&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Information&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Function Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Example &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| CHOOSE&lt;br /&gt;
| Cette fonction utilise un indexe pour renvoyer une valeur à partir d&amp;#039;une liste de valeurs.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| HASCHANGED&lt;br /&gt;
| Cette fonction vérifie si les colonnes spécifiées par le nom donné ont changé.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISBLANK&lt;br /&gt;
| Cette fonction vérifie si la valeur est indéfinie (null).&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISERR&lt;br /&gt;
| Cette fonction vérifie si le paramètre est du type &amp;quot;Erreur&amp;quot;, mais renvoit &amp;quot;Faux&amp;quot; si l&amp;#039;erreur est du type &amp;quot;NA&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISERROR&lt;br /&gt;
| Cette fonction vérifie si le paramètre est du type &amp;quot;Erreur&amp;quot; et renvoit &amp;quot;Faux&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISEVEN&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur qui est un nombre pair.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISLOGICAL&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur de type &amp;quot;Logique&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISNA&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une erreur de type &amp;quot;NA&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISNONTEXT&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur qui n&amp;#039;est pas du type &amp;quot;Texte&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISNUMBER&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur qui n&amp;#039;est pas du type &amp;quot;Nombre&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISODD&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur qui est un nombre impair.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISREF&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur qui est une référence.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ISTEXT&lt;br /&gt;
| Cette fonction vérifie s&amp;#039;il s&amp;#039;agit d&amp;#039;une valeur est du type &amp;quot;Texte&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NA&lt;br /&gt;
| Cette fonction renvoit la constante d&amp;#039;erreur NA.&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Date/Time&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Function Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Example &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DATE&lt;br /&gt;
| Cette fonction renvoit le nombre de jours écoulé depuis le 01.01.1900&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Month&lt;br /&gt;
| Month&lt;br /&gt;
|-&lt;br /&gt;
| Day&lt;br /&gt;
| Day&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DATEDIF&lt;br /&gt;
| Cette fonction renvoit le nombre de jours entre une première date et une deuxième date.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Date2&lt;br /&gt;
| Deuxième date.&lt;br /&gt;
|-&lt;br /&gt;
| Format&lt;br /&gt;
| Code de Formatage.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DATEVALUE&lt;br /&gt;
| Cette fonction renvoit un numéro de série correspondant à une date à partir d&amp;#039;un texte donné.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DAY&lt;br /&gt;
| Cette fonction renvoit le jour d&amp;#039;une date donnée&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| HOUR&lt;br /&gt;
| Cette fonction renvoit l&amp;#039;heure (de 0 jusqu&amp;#039;à 23) à partir d&amp;#039;une heure donnée.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MONTH&lt;br /&gt;
| Cette fonction renvoit le mois d&amp;#039;une date donnée&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NOW&lt;br /&gt;
| Cette fonction renvoit l&amp;#039;heure actuelle&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TIME&lt;br /&gt;
| Cette fonction renvoit l&amp;#039;heure&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Minute.&lt;br /&gt;
| Minutes&lt;br /&gt;
|-&lt;br /&gt;
| Second&lt;br /&gt;
| Secondes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TODAY&lt;br /&gt;
| Cette fonction renvoit la date actuelle&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| WEEKDAY&lt;br /&gt;
| Cette fonction renvoit le jour de la semaine à partir d&amp;#039;une date.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Type&lt;br /&gt;
| Cette fonction définit le type de résultat (de 1 à 3)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| YEAR&lt;br /&gt;
| Cette fonction renvoit l&amp;#039;année à partir d&amp;#039;une date donnée&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Text&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Function Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Example &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXACT&lt;br /&gt;
| Cette fonction indique si deux valeurs de texte sont identiques en effectuant une comparaison sensible à la casse.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Text2&lt;br /&gt;
| Le deuxième texte.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FIND&lt;br /&gt;
| Returns the starting position of a given text.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Text&lt;br /&gt;
| Le texte d&amp;#039;origine.&lt;br /&gt;
|-&lt;br /&gt;
| Index&lt;br /&gt;
| L&amp;#039;indexe de départ.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| LEFT&lt;br /&gt;
| Cette fonction renvoit une chaîne de caractères en partant du caractère numéro &amp;quot;n&amp;quot; vers la gauche, où &amp;quot;n&amp;quot; est la position du caractère à partir duquel s&amp;#039;applique la fonction.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Length&lt;br /&gt;
| Cette fonction renvoit la longueur d&amp;#039;une chaîne de caractères.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| LEN&lt;br /&gt;
| Cette fonction renvoit la longueur de la chaîne de caractères qui lui est passée.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| LOWER&lt;br /&gt;
| Cette fonction renvoit la chaîne en minuscules.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MID&lt;br /&gt;
| Cette fonction renvoit une chaîne de caractère, à partir d&amp;#039;une chaîne initiale, de la position de départ, et de la longueur de la chaîne.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Start&lt;br /&gt;
| L&amp;#039;indexe de départ.&lt;br /&gt;
|-&lt;br /&gt;
| Length&lt;br /&gt;
| La longueur de la chaîne.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| REPLACE&lt;br /&gt;
| Remplace une chaîne de caractères d&amp;#039;origine par une autre chaîne passé en paramètre, et dans l&amp;#039;indexe de départ et la fourchette de longueur.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Start&lt;br /&gt;
| L&amp;#039;indexe de départ.&lt;br /&gt;
|-&lt;br /&gt;
| Len&lt;br /&gt;
| La longueur.&lt;br /&gt;
|-&lt;br /&gt;
| New&lt;br /&gt;
| La nouvelle chaîne à insérer.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| REPT&lt;br /&gt;
| Cette fonction renvoit un texte répété par un nombre de fois défini par &amp;quot;Count&amp;quot;.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Count&lt;br /&gt;
| Le nombre de fois à répéter le texte.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| RIGHT&lt;br /&gt;
| Cette fonction renvoit une chaîne de caractères en partant du caractère &amp;quot;Count&amp;quot; vers la droite, où &amp;quot;Count&amp;quot; est la position du caractère à partir duquel s&amp;#039;applique la fonction.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Count&lt;br /&gt;
| Le numéro de la position du caractère de départ.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SUBSTITUTE&lt;br /&gt;
| Remplace une chaîne de texte par une nouvelle chaîne. Par défaut chaque fois que la chaîne est rencontrée, elle sera remplacée par la nouvelle chaîne. Autrement, on peut préciser le nombre de remplacements par le paramètre &amp;quot;Which&amp;quot;.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Old&lt;br /&gt;
| La chaîne de caractères à remplacer.&lt;br /&gt;
|-&lt;br /&gt;
| New&lt;br /&gt;
| La chaîne de caractères à insérer.&lt;br /&gt;
|-&lt;br /&gt;
| Which&lt;br /&gt;
| Le nombre de fois que la chaîne à remplacer doit être recherchée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| T&lt;br /&gt;
| Cette fonction renvoit la valeur du texte recherché ou bien une chaîne de longueur zéro pour des valeurs qui ne sont pas des chaînes de caractères de type &amp;quot;Texte&amp;quot;.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TEXT&lt;br /&gt;
| Renvoit la valeur passée en tant que texte.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TRIM&lt;br /&gt;
| Renvoit la chaîne de caractères passée en enlevant tous les espaces devant et après la chaîne. Des espaces multiples sont remplacés par une seule espace.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| UPPER&lt;br /&gt;
| Renvoit la chaîne de caractères passée en majuscules.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| URLENCODE&lt;br /&gt;
| Applique l&amp;#039;encodage URL à une chaîne de caractères passée en premier paramètre en utilisant l&amp;#039;encodage indiqué en deuxième paramètre. Si aucun encodage n&amp;#039;est précisé, ISO-8859-1 est appliqué.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Encoding&lt;br /&gt;
| L&amp;#039;encodage à utiliser.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Mathematical&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Function Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Example &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ABS&lt;br /&gt;
| Renvoit la valeur absolue (non négative) de la valeur à laquelle est appliquée la fonction.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| AVERAGE&lt;br /&gt;
| Renvoit la moyenne d&amp;#039;une liste de valeurs numériques.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Even&lt;br /&gt;
| Renvoit une valeur arrondie au nombre entier pair supérieur.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MAX&lt;br /&gt;
| Renvoit la valeur maximale à partir d&amp;#039;un ensemble de valeurs.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MIN&lt;br /&gt;
| Renvoit la valeur minimale à partir d&amp;#039;un ensemble de valeurs.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MOD&lt;br /&gt;
| Renvoit le modulo lorsqu&amp;#039;un nombre est divisé par un autre.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Divisor&lt;br /&gt;
| Le diviseur.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ODD&lt;br /&gt;
| Renvoit une valeur arrondie au nombre entier impair supérieur.&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SUM&lt;br /&gt;
| Faire la somme d&amp;#039;une liste de valeurs.&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logical&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Function Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Example &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| AND&lt;br /&gt;
| ET logique&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FALSE&lt;br /&gt;
| FAUX logique&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| IF&lt;br /&gt;
| Exécution Conditionnelle&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Une expression qui est évaluée si la condition est remplie.&lt;br /&gt;
| True-Term&lt;br /&gt;
|-&lt;br /&gt;
| Une expression qui est évaluée si la condition n&amp;#039;est pas remplie.&lt;br /&gt;
| False-Term&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| AND&lt;br /&gt;
| ET logique&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| OR&lt;br /&gt;
| OU logique&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TRUE&lt;br /&gt;
| VRAI logique&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| XOR&lt;br /&gt;
| XOR logique&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Code nécessaire pour obtenir la fonction à partir du fichier jar libformula&lt;br /&gt;
&amp;lt;code&amp;gt;[java]&lt;br /&gt;
import java.util.Locale;&lt;br /&gt;
import org.jfree.formula.DefaultFormulaContext;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Si vous voulez changer ce modèle, choisissez Outils | Modèles&lt;br /&gt;
 * et ouvrez le modèle dans l&amp;#039;éditeur.&lt;br /&gt;
 */&lt;br /&gt;
import org.jfree.formula.function.FunctionCategory;&lt;br /&gt;
import org.jfree.formula.function.FunctionDescription;&lt;br /&gt;
import org.jfree.formula.function.FunctionRegistry;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 *&lt;br /&gt;
 * @author Ocke Janssen&lt;br /&gt;
 */&lt;br /&gt;
public class NewMain {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * @param args the command line arguments&lt;br /&gt;
     */&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        DefaultFormulaContext obj = new DefaultFormulaContext();&lt;br /&gt;
        FunctionRegistry func = obj.getFunctionRegistry();&lt;br /&gt;
        FunctionCategory[] categories = func.getCategories();&lt;br /&gt;
        for ( int i = 0 ; i &amp;lt; categories.length;++i)&lt;br /&gt;
        {&lt;br /&gt;
            String display = categories[i].getDisplayName(Locale.ENGLISH);&lt;br /&gt;
            System.out.println( &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; + display +&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
            System.out.println( &amp;quot;{| class=\&amp;quot;prettytable\&amp;quot; cellpadding=\&amp;quot;10\&amp;quot; border=\&amp;quot;1\&amp;quot;&amp;quot;);&lt;br /&gt;
            System.out.println( &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Function Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;);&lt;br /&gt;
            System.out.println( &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &amp;quot;);&lt;br /&gt;
            System.out.println( &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Example &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            String[] functions = func.getFunctionNamesByCategory(categories[i]);&lt;br /&gt;
            for(int j= 0; j &amp;lt; functions.length;++j)&lt;br /&gt;
            {&lt;br /&gt;
                FunctionDescription desc = func.getMetaData(functions[j]);&lt;br /&gt;
                System.out.println( &amp;quot;&amp;quot;);&lt;br /&gt;
                System.out.println( &amp;quot;|-&amp;quot;);&lt;br /&gt;
                System.out.println(&amp;quot;| &amp;quot;+ desc.getDisplayName(Locale.ENGLISH));&lt;br /&gt;
                System.out.println(&amp;quot;| &amp;quot;+ desc.getDescription(Locale.ENGLISH));&lt;br /&gt;
                int count = desc.getParameterCount();&lt;br /&gt;
                if ( count &amp;gt; 1 ){&lt;br /&gt;
                    System.out.println( &amp;quot;{| class=\&amp;quot;prettytable\&amp;quot; cellpadding=\&amp;quot;10\&amp;quot; border=\&amp;quot;1\&amp;quot;&amp;quot;);&lt;br /&gt;
                    System.out.println( &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Name&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &amp;quot;);&lt;br /&gt;
                    System.out.println( &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Parameter Description&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &amp;quot;);&lt;br /&gt;
                    System.out.println( &amp;quot;&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                for(int k= 1;k &amp;lt; count;++k){&lt;br /&gt;
                    try{&lt;br /&gt;
                        System.out.println( &amp;quot;|-&amp;quot;);&lt;br /&gt;
                        System.out.println(&amp;quot;| &amp;quot; + desc.getParameterDisplayName(k,Locale.ENGLISH) );&lt;br /&gt;
                        System.out.println(&amp;quot;| &amp;quot; + desc.getParameterDescription(k,Locale.ENGLISH) );&lt;br /&gt;
                    } catch(Exception e){&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( count &amp;gt; 1 ){&lt;br /&gt;
                    System.out.println(&amp;quot;|}&amp;quot;);&lt;br /&gt;
                    System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
                }                    &lt;br /&gt;
                &lt;br /&gt;
                System.out.println(&amp;quot;| &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            System.out.println(&amp;quot;|}&amp;quot;);&lt;br /&gt;
            System.out.println(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Database]]&lt;br /&gt;
[[Category: Base Documentation]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/BAse/SUN_Report_Builder&amp;diff=58701</id>
		<title>FR/Documentation/BAse/SUN Report Builder</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/BAse/SUN_Report_Builder&amp;diff=58701"/>
		<updated>2007-12-22T20:52:23Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: Documentation/FR/BAse/SUN Report Builder moved to Documentation/FR/Base/SUN Report Builder: Correcting link to remove capital letter in Base subsection&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Documentation/FR/Base/SUN Report Builder]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=58700</id>
		<title>FR/Documentation/Base/SUN Report Builder</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=58700"/>
		<updated>2007-12-22T20:52:23Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: Documentation/FR/BAse/SUN Report Builder moved to Documentation/FR/Base/SUN Report Builder: Correcting link to remove capital letter in Base subsection&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/Candidate}}&lt;br /&gt;
== Sun Report Builder ==&lt;br /&gt;
Vous trouverez ce module complémentaire en téléchargement [http://extensions.services.openoffice.org/project/reportdesign ici]. C&amp;#039;est une extension qui s&amp;#039;installe de la même manière que les autres.&lt;br /&gt;
&lt;br /&gt;
== Expression d&amp;#039;Impression Conditionnelle ==&lt;br /&gt;
Une expression d&amp;#039;impression conditionnelle permet à l&amp;#039;utilisateur de limiter les données qui sont visibles lorsqu&amp;#039;on génère un rapport. Si la condition est remplie, alors l&amp;#039;élément (par exemple, une section ou un élément individuel) sera imprimé dans le rapport.La syntaxe d&amp;#039;utilisation est identique à celle des fonctions.&lt;br /&gt;
&lt;br /&gt;
== Fonctions ==&lt;br /&gt;
Une fonction peut être créée lors de l&amp;#039;ouverture du navigateur de rapport. Dans le menu contextuel de l&amp;#039;entrée &amp;#039;&amp;#039;&amp;#039;Fonctions&amp;#039;&amp;#039;&amp;#039;, il vous est possible de créer une fonction. &lt;br /&gt;
&lt;br /&gt;
Cette fonction peut être soit globale dans le contexte du rapport, soit particulière à un regroupement.&lt;br /&gt;
&lt;br /&gt;
Le schéma ci-dessous montre comment créer des champs de sous-total dans le Report Builder, en utilisant des fonctions :&lt;br /&gt;
&lt;br /&gt;
[[Image:SumFieldInReportBuilder.jpg]]&lt;br /&gt;
&lt;br /&gt;
La table constituant la source de données est illustrée en haut à gauche de l&amp;#039;image.&lt;br /&gt;
 &lt;br /&gt;
L&amp;#039;agencement du rapport est illustré en-dessous de la table. Un regroupement a été défini pour le champ plProductType. Le champ Somme a été créé au pied du regroupement. La partie la plus à droite de l&amp;#039;image montre la définition de la fonction, qui sert à générer la source de données pour le champ Somme.&lt;br /&gt;
&lt;br /&gt;
== Champs Calculés ==&lt;br /&gt;
Les champs calculés peuvent être créés en entrant la formule correspondante directement dans le champ de données.&lt;br /&gt;
&lt;br /&gt;
Exemple : 100*[Population]/[PopulationCount], pour obtenir le pourcentage de la population actuelle&lt;br /&gt;
&lt;br /&gt;
== Syntaxe ==&lt;br /&gt;
&lt;br /&gt;
* lorsqu&amp;#039;on veut citer &amp;quot;[&amp;quot; on utilise &amp;quot;\&amp;quot;&lt;br /&gt;
* \\&lt;br /&gt;
* [] pour indiquer une référence de formule ou un nom de champ&lt;br /&gt;
* les guillemets doubles &amp;quot;&amp;quot; pour mettre des chaînes to quote strings&lt;br /&gt;
* le point &amp;quot;.&amp;quot; en tant que séparateur décimal&lt;br /&gt;
* date, conformément aux spécifications Java&lt;br /&gt;
* le séparateur de paramètres est le point-virgule &amp;quot;;&amp;quot;. Il est possible de laisser certains paramètres vides, par exemple : XYZ(;kk;;kkb)&lt;br /&gt;
&lt;br /&gt;
== Fonctions Supportées ==&lt;br /&gt;
De manière générale, toutes les fonctions définies dans [http://wiki.oasis-open.org/office/About_OpenFormula OpenFormula] devraient devraient être supportées. Toutefois, l&amp;#039;étendue de ce support peut évoluer avec le temps, car l&amp;#039;équipe de développement continue à travailler dessus. Du coup, le nombre et types de fonctions supportés peuvent changer en fonction des versions du Sun Report Builder.&lt;br /&gt;
&lt;br /&gt;
Le Sun Report Builder Verson 1.0.x intègre des fonctions appartenant aux catégories suivantes:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Date/Temps&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Date, Datetime, Day, Hour, Month, Now, Year, Today, Weekday, Time, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Finances&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Financial&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Informations&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Choose, HasChanged, Information, IsBlank, IsErr, IsError, IsEven, IsLogical, IsNA, IsNonText, IsNumber, IsOdd, IsRef, IsText, Na&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logiques&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
And, False, If, Not, Or, True, Xor&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Maths&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Abs, Average, Even, Odd, Sum&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Arrondir&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Int&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Textes&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Exact, Find, Left, Len, Lower, Mid, Replace, Rept, Right, Substitute, Text, T, Trim, Upper, URL&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Définis par l&amp;#039;Utilisateur&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Mapped, Null&lt;br /&gt;
&lt;br /&gt;
Une [[Base/Reports/Functions|explanation]] détaillée peut être trouvée [[Base/Reports/Functions|ici.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Database]]&lt;br /&gt;
[[Category: Base Documentation]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/SUN_Report_Builder&amp;diff=58698</id>
		<title>FR/Documentation/SUN Report Builder</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/SUN_Report_Builder&amp;diff=58698"/>
		<updated>2007-12-22T20:50:39Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: Documentation/FR/SUN Report Builder moved to Documentation/FR/BAse/SUN Report Builder: Déplacement dans un sous-répertoire Base&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Documentation/FR/BAse/SUN Report Builder]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=58697</id>
		<title>FR/Documentation/Base/SUN Report Builder</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=58697"/>
		<updated>2007-12-22T20:50:39Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: Documentation/FR/SUN Report Builder moved to Documentation/FR/BAse/SUN Report Builder: Déplacement dans un sous-répertoire Base&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/Candidate}}&lt;br /&gt;
== Sun Report Builder ==&lt;br /&gt;
Vous trouverez ce module complémentaire en téléchargement [http://extensions.services.openoffice.org/project/reportdesign ici]. C&amp;#039;est une extension qui s&amp;#039;installe de la même manière que les autres.&lt;br /&gt;
&lt;br /&gt;
== Expression d&amp;#039;Impression Conditionnelle ==&lt;br /&gt;
Une expression d&amp;#039;impression conditionnelle permet à l&amp;#039;utilisateur de limiter les données qui sont visibles lorsqu&amp;#039;on génère un rapport. Si la condition est remplie, alors l&amp;#039;élément (par exemple, une section ou un élément individuel) sera imprimé dans le rapport.La syntaxe d&amp;#039;utilisation est identique à celle des fonctions.&lt;br /&gt;
&lt;br /&gt;
== Fonctions ==&lt;br /&gt;
Une fonction peut être créée lors de l&amp;#039;ouverture du navigateur de rapport. Dans le menu contextuel de l&amp;#039;entrée &amp;#039;&amp;#039;&amp;#039;Fonctions&amp;#039;&amp;#039;&amp;#039;, il vous est possible de créer une fonction. &lt;br /&gt;
&lt;br /&gt;
Cette fonction peut être soit globale dans le contexte du rapport, soit particulière à un regroupement.&lt;br /&gt;
&lt;br /&gt;
Le schéma ci-dessous montre comment créer des champs de sous-total dans le Report Builder, en utilisant des fonctions :&lt;br /&gt;
&lt;br /&gt;
[[Image:SumFieldInReportBuilder.jpg]]&lt;br /&gt;
&lt;br /&gt;
La table constituant la source de données est illustrée en haut à gauche de l&amp;#039;image.&lt;br /&gt;
 &lt;br /&gt;
L&amp;#039;agencement du rapport est illustré en-dessous de la table. Un regroupement a été défini pour le champ plProductType. Le champ Somme a été créé au pied du regroupement. La partie la plus à droite de l&amp;#039;image montre la définition de la fonction, qui sert à générer la source de données pour le champ Somme.&lt;br /&gt;
&lt;br /&gt;
== Champs Calculés ==&lt;br /&gt;
Les champs calculés peuvent être créés en entrant la formule correspondante directement dans le champ de données.&lt;br /&gt;
&lt;br /&gt;
Exemple : 100*[Population]/[PopulationCount], pour obtenir le pourcentage de la population actuelle&lt;br /&gt;
&lt;br /&gt;
== Syntaxe ==&lt;br /&gt;
&lt;br /&gt;
* lorsqu&amp;#039;on veut citer &amp;quot;[&amp;quot; on utilise &amp;quot;\&amp;quot;&lt;br /&gt;
* \\&lt;br /&gt;
* [] pour indiquer une référence de formule ou un nom de champ&lt;br /&gt;
* les guillemets doubles &amp;quot;&amp;quot; pour mettre des chaînes to quote strings&lt;br /&gt;
* le point &amp;quot;.&amp;quot; en tant que séparateur décimal&lt;br /&gt;
* date, conformément aux spécifications Java&lt;br /&gt;
* le séparateur de paramètres est le point-virgule &amp;quot;;&amp;quot;. Il est possible de laisser certains paramètres vides, par exemple : XYZ(;kk;;kkb)&lt;br /&gt;
&lt;br /&gt;
== Fonctions Supportées ==&lt;br /&gt;
De manière générale, toutes les fonctions définies dans [http://wiki.oasis-open.org/office/About_OpenFormula OpenFormula] devraient devraient être supportées. Toutefois, l&amp;#039;étendue de ce support peut évoluer avec le temps, car l&amp;#039;équipe de développement continue à travailler dessus. Du coup, le nombre et types de fonctions supportés peuvent changer en fonction des versions du Sun Report Builder.&lt;br /&gt;
&lt;br /&gt;
Le Sun Report Builder Verson 1.0.x intègre des fonctions appartenant aux catégories suivantes:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Date/Temps&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Date, Datetime, Day, Hour, Month, Now, Year, Today, Weekday, Time, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Finances&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Financial&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Informations&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Choose, HasChanged, Information, IsBlank, IsErr, IsError, IsEven, IsLogical, IsNA, IsNonText, IsNumber, IsOdd, IsRef, IsText, Na&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logiques&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
And, False, If, Not, Or, True, Xor&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Maths&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Abs, Average, Even, Odd, Sum&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Arrondir&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Int&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Textes&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Exact, Find, Left, Len, Lower, Mid, Replace, Rept, Right, Substitute, Text, T, Trim, Upper, URL&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Définis par l&amp;#039;Utilisateur&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Mapped, Null&lt;br /&gt;
&lt;br /&gt;
Une [[Base/Reports/Functions|explanation]] détaillée peut être trouvée [[Base/Reports/Functions|ici.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Database]]&lt;br /&gt;
[[Category: Base Documentation]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=58695</id>
		<title>FR/Documentation/Base/SUN Report Builder</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/Base/SUN_Report_Builder&amp;diff=58695"/>
		<updated>2007-12-22T20:49:03Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/Candidate}}&lt;br /&gt;
== Sun Report Builder ==&lt;br /&gt;
Vous trouverez ce module complémentaire en téléchargement [http://extensions.services.openoffice.org/project/reportdesign ici]. C&amp;#039;est une extension qui s&amp;#039;installe de la même manière que les autres.&lt;br /&gt;
&lt;br /&gt;
== Expression d&amp;#039;Impression Conditionnelle ==&lt;br /&gt;
Une expression d&amp;#039;impression conditionnelle permet à l&amp;#039;utilisateur de limiter les données qui sont visibles lorsqu&amp;#039;on génère un rapport. Si la condition est remplie, alors l&amp;#039;élément (par exemple, une section ou un élément individuel) sera imprimé dans le rapport.La syntaxe d&amp;#039;utilisation est identique à celle des fonctions.&lt;br /&gt;
&lt;br /&gt;
== Fonctions ==&lt;br /&gt;
Une fonction peut être créée lors de l&amp;#039;ouverture du navigateur de rapport. Dans le menu contextuel de l&amp;#039;entrée &amp;#039;&amp;#039;&amp;#039;Fonctions&amp;#039;&amp;#039;&amp;#039;, il vous est possible de créer une fonction. &lt;br /&gt;
&lt;br /&gt;
Cette fonction peut être soit globale dans le contexte du rapport, soit particulière à un regroupement.&lt;br /&gt;
&lt;br /&gt;
Le schéma ci-dessous montre comment créer des champs de sous-total dans le Report Builder, en utilisant des fonctions :&lt;br /&gt;
&lt;br /&gt;
[[Image:SumFieldInReportBuilder.jpg]]&lt;br /&gt;
&lt;br /&gt;
La table constituant la source de données est illustrée en haut à gauche de l&amp;#039;image.&lt;br /&gt;
 &lt;br /&gt;
L&amp;#039;agencement du rapport est illustré en-dessous de la table. Un regroupement a été défini pour le champ plProductType. Le champ Somme a été créé au pied du regroupement. La partie la plus à droite de l&amp;#039;image montre la définition de la fonction, qui sert à générer la source de données pour le champ Somme.&lt;br /&gt;
&lt;br /&gt;
== Champs Calculés ==&lt;br /&gt;
Les champs calculés peuvent être créés en entrant la formule correspondante directement dans le champ de données.&lt;br /&gt;
&lt;br /&gt;
Exemple : 100*[Population]/[PopulationCount], pour obtenir le pourcentage de la population actuelle&lt;br /&gt;
&lt;br /&gt;
== Syntaxe ==&lt;br /&gt;
&lt;br /&gt;
* lorsqu&amp;#039;on veut citer &amp;quot;[&amp;quot; on utilise &amp;quot;\&amp;quot;&lt;br /&gt;
* \\&lt;br /&gt;
* [] pour indiquer une référence de formule ou un nom de champ&lt;br /&gt;
* les guillemets doubles &amp;quot;&amp;quot; pour mettre des chaînes to quote strings&lt;br /&gt;
* le point &amp;quot;.&amp;quot; en tant que séparateur décimal&lt;br /&gt;
* date, conformément aux spécifications Java&lt;br /&gt;
* le séparateur de paramètres est le point-virgule &amp;quot;;&amp;quot;. Il est possible de laisser certains paramètres vides, par exemple : XYZ(;kk;;kkb)&lt;br /&gt;
&lt;br /&gt;
== Fonctions Supportées ==&lt;br /&gt;
De manière générale, toutes les fonctions définies dans [http://wiki.oasis-open.org/office/About_OpenFormula OpenFormula] devraient devraient être supportées. Toutefois, l&amp;#039;étendue de ce support peut évoluer avec le temps, car l&amp;#039;équipe de développement continue à travailler dessus. Du coup, le nombre et types de fonctions supportés peuvent changer en fonction des versions du Sun Report Builder.&lt;br /&gt;
&lt;br /&gt;
Le Sun Report Builder Verson 1.0.x intègre des fonctions appartenant aux catégories suivantes:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Date/Temps&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Date, Datetime, Day, Hour, Month, Now, Year, Today, Weekday, Time, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Finances&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Financial&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Informations&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Choose, HasChanged, Information, IsBlank, IsErr, IsError, IsEven, IsLogical, IsNA, IsNonText, IsNumber, IsOdd, IsRef, IsText, Na&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logiques&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
And, False, If, Not, Or, True, Xor&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Maths&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Abs, Average, Even, Odd, Sum&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Arrondir&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Int&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Textes&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Exact, Find, Left, Len, Lower, Mid, Replace, Rept, Right, Substitute, Text, T, Trim, Upper, URL&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Définis par l&amp;#039;Utilisateur&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Mapped, Null&lt;br /&gt;
&lt;br /&gt;
Une [[Base/Reports/Functions|explanation]] détaillée peut être trouvée [[Base/Reports/Functions|ici.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Database]]&lt;br /&gt;
[[Category: Base Documentation]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Connect_MySQL_and_Base&amp;diff=58093</id>
		<title>Connect MySQL and Base</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Connect_MySQL_and_Base&amp;diff=58093"/>
		<updated>2007-12-15T21:23:14Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Using JDBC on Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a tutorial to connect MySQL database with OpenOffice.org Base. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using JDBC on Windows ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using ODBC on Windows ==&lt;br /&gt;
&lt;br /&gt;
== Using JDBC on Linux ==&lt;br /&gt;
OpenOffice.org comes directly with support of JDBC connectivity to multiple databases. OpenOffice.org needs [http://www.java.com/en/download/index.jsp Java Runtime Environment] to be able to use JDBC. Verify that you have JRE on your OOo by going to &amp;#039;&amp;#039;&amp;#039;Tools - Options - OpenOffice.org General - Java&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
Next step is to download the [http://www.mysql.com/products/connector/j/ mysql-connector-J] which you can download from the [http://www.mysql.com MySQL website]. [http://www.mysql.com/products/connector/j/ MySQL Connector/J] adds JDBC connectivity to MySQL. Unpack, untar or unzip the downloaded file anywhere where you can access it as a normal user, for example, to your desktop. On KDE, you can use Ark, on Gnome FileRoller, or even the Nautilus scripts that are included in some Linux distributions, or the usual &amp;quot;tar -zvf&amp;quot; from a console. A directory is created at the desired location named mysql-connector-java-x.x.x, where the x.x.x represents the version number of the JDBC connector you have downloaded. Inside this directory, you will find a file called mysql-connector-x.x.x-java-bin.jar.&lt;br /&gt;
&lt;br /&gt;
Start OpenOffice.org and go to the menu &amp;#039;&amp;#039;&amp;#039;Tools - Options - OpenOffice.org General Java&amp;#039;&amp;#039;&amp;#039;. Click on the button &amp;#039;&amp;#039;&amp;#039;Add Archive&amp;#039;&amp;#039;&amp;#039; and navigate to where the mysql-connector-x.x.x-java-bin.jar file is located. Click on &amp;#039;&amp;#039;&amp;#039;Open&amp;#039;&amp;#039;&amp;#039;, and the file should then appear in the list of &amp;#039;&amp;#039;&amp;#039;Assigned folders and Archives&amp;#039;&amp;#039;&amp;#039;. You can then click on &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039; and close OpenOffice.org completely. You may receive a message indicating that you have to do that anyway in order for OpenOffice.org to be able recognize your changes correctly. If the OpenOffice.org quickstarter is running, you should close that application as well.&lt;br /&gt;
&lt;br /&gt;
Instead of downloading the connector from the MySQL download site, you can also use the corresponding packages of your distribution like&lt;br /&gt;
* libmysql-java for debian and ubuntu&lt;br /&gt;
&lt;br /&gt;
When you restart OpenOffice.org, you should now be able to create a new database document that can connect to your existing mysql database, i.e. you need to have created your database first on your mysql server, for example with the CREATE DATABASE command from the mysql command line client or from within PHPMyAdmin if you are using that graphical user interface to administer your mysql server. &lt;br /&gt;
&lt;br /&gt;
Now do the following :&lt;br /&gt;
&lt;br /&gt;
1) &amp;#039;&amp;#039;&amp;#039;File &amp;gt; New &amp;gt; Database&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
2) Click on the radio button &amp;#039;&amp;#039;&amp;#039;Connect&amp;#039;&amp;#039;&amp;#039; to an existing database and choose &amp;#039;&amp;#039;&amp;#039;MySQL&amp;#039;&amp;#039;&amp;#039; from the dropdown menu. Click on &amp;#039;&amp;#039;&amp;#039;Next&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
3) In the next dialog, you should accept the default choice of &amp;#039;&amp;#039;&amp;#039;Connect using JDBC&amp;#039;&amp;#039;&amp;#039;, and then click on &amp;#039;&amp;#039;&amp;#039;Next&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
4) In the following dialog, enter the name of your mysql database as it is called on the mysql server, paying attention to the spelling. In the &amp;#039;&amp;#039;&amp;#039;Address&amp;#039;&amp;#039;&amp;#039; field, enter either the fully qualified internet domain name of the server on which your mysql server is running, or its IP address or, if you are running the mysql server locally on your own computer, simply type localhost. Click on &amp;#039;&amp;#039;&amp;#039;Test Class&amp;#039;&amp;#039;&amp;#039; just to make sure that you have correctly set up the access to the JDBC connector as detailed above. If the connector has been set up correctly, you will get a message that says &amp;#039;&amp;#039;&amp;#039;The JDBC driver was loaded correctly&amp;#039;&amp;#039;&amp;#039;. Now click on &amp;#039;&amp;#039;&amp;#039;Next&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
5) Now enter the name of the user and the password (if required by the mysql server) that you have previously created for use of the database on the mysql server. If you click on &amp;#039;&amp;#039;&amp;#039;Test Connection&amp;#039;&amp;#039;&amp;#039;, you will be asked for a password if you have ticked the password box beforehand. If the connection to the database succeeds, you will get a message &amp;#039;&amp;#039;&amp;#039;The connection was established successfully&amp;#039;&amp;#039;&amp;#039;. Click on &amp;#039;&amp;#039;&amp;#039;Next&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
6) On the final screen of the database wizard dialog, you can in general leave the default settings as they are, i.e. &amp;#039;&amp;#039;&amp;#039;Yes, register the database for me&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;Open the database for editing&amp;#039;&amp;#039;&amp;#039;. Click on &amp;#039;&amp;#039;&amp;#039;Finish&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
7) You will be asked for a file name to give to your database document. Once you have done this and clicked on &amp;#039;&amp;#039;&amp;#039;Save&amp;#039;&amp;#039;&amp;#039;, the database document will open, and the Forms button on the left will be highlighted. Congratulations, you have now connected to your MySQL database via the JDBC connector.&lt;br /&gt;
&lt;br /&gt;
== Using ODBC on Linux ==&lt;br /&gt;
OpenOffice.org also support ODBC connectivity to MySQL, you will need [http://www.unixodbc.org/ Unix-ODBC] in order to make a connection through it.&lt;br /&gt;
&lt;br /&gt;
== Recommendations settings ==&lt;br /&gt;
&lt;br /&gt;
Known issues regarding MySQL and OpenOffice.org can be avoided by having specific settings here are some of those:&lt;br /&gt;
&lt;br /&gt;
=== MySQL settings ===&lt;br /&gt;
&lt;br /&gt;
* Make sure that MySQL is using TCP/IP as opposed to sockets. Edit the my.cnf file at /etc/ and comment &amp;#039;&amp;#039;&amp;#039;skip-networking&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== OpenOffice.org settings ===&lt;br /&gt;
&lt;br /&gt;
* OpenOffice.org uses Java for JDBC, please make sure you have JRE at Tools - Options - OpenOffice.org General - Java&lt;br /&gt;
* Declare the &amp;#039;&amp;#039;&amp;#039;mysql-connector-j.bin&amp;#039;&amp;#039;&amp;#039; at the classpath at Tools - Options - OpenOFfice.org General - Java&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Database]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Connect_MySQL_and_Base&amp;diff=58092</id>
		<title>Connect MySQL and Base</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Connect_MySQL_and_Base&amp;diff=58092"/>
		<updated>2007-12-15T21:19:52Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Using JDBC on Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a tutorial to connect MySQL database with OpenOffice.org Base. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using JDBC on Windows ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using ODBC on Windows ==&lt;br /&gt;
&lt;br /&gt;
== Using JDBC on Linux ==&lt;br /&gt;
OpenOffice.org comes directly with support of JDBC connectivity to multiple databases. OpenOffice.org needs [http://www.java.com/en/download/index.jsp Java Runtime Environment] to be able to use JDBC. Verify that you have JRE on your OOo by going to &amp;#039;&amp;#039;&amp;#039;Tools - Options - OpenOffice.org General - Java&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
Next step is to download the [http://www.mysql.com/products/connector/j/ mysql-connector-J] which you can download from the [http://www.mysql.com MySQL website]. [http://www.mysql.com/products/connector/j/ MySQL Connector/J] adds JDBC connectivity to MySQL. Unpack, untar or unzip the downloaded file anywhere where you can access it as a normal user, for example, to your desktop. On KDE, you can use Ark, on Gnome FileRoller, or even the Nautilus scripts that are included in some Linux distributions, or the usual &amp;quot;tar -zvf&amp;quot; from a console. A directory is created at the desired location named mysql-connector-java-x.x.x, where the x.x.x represents the version number of the JDBC connector you have downloaded. Inside this directory, you will find a file called mysql-connector-x.x.x-java-bin.jar.&lt;br /&gt;
&lt;br /&gt;
Start OpenOffice.org and go to the menu &amp;#039;&amp;#039;&amp;#039;Tools - Options - OpenOffice.org General Java&amp;#039;&amp;#039;&amp;#039;. Click on the button Add Archive and navigate to where the mysql-connector-x.x.x-java-bin.jar file is located. Click on Open, and the file should then appear in the list of Assigned folders and Archives. You can then click on OK and close OpenOffice.org completely. You may receive a message indicating that you have to do that anyway in order for OpenOffice.org to be able recognize your changes correctly. If the OpenOffice.org quickstarter is running, you should close that application as well.&lt;br /&gt;
&lt;br /&gt;
Instead of downloading the connector from the MySQL download site, you can also use the corresponding packages of your distribution like&lt;br /&gt;
* libmysql-java for debian and ubuntu&lt;br /&gt;
&lt;br /&gt;
When you restart OpenOffice.org, you should now be able to create a new database document that can connect to your existing mysql database, i.e. you need to have created your database first on your mysql server, for example with the CREATE DATABASE command from the mysql command line client or from within PHPMyAdmin if you are using that graphical user interface to administer your mysql server. &lt;br /&gt;
&lt;br /&gt;
Now do the following :&lt;br /&gt;
&lt;br /&gt;
1) File &amp;gt; New &amp;gt; Database&lt;br /&gt;
&lt;br /&gt;
2) Click on the radio button Connect to an existing database and choose MySQL from the dropdown menu. Click on Next.&lt;br /&gt;
&lt;br /&gt;
3) In the next dialog, you should accept the default choice of Connect using JDBC, and then click on Next.&lt;br /&gt;
&lt;br /&gt;
4) In the following dialog, enter the name of your mysql database as it is called on the mysql server, paying attention to the spelling. In the address field, enter either the fully qualified internet domain name of the server on which your mysql server is running, or its IP address or, if you are running the mysql server locally on your own computer, simply type localhost. Click on Test Class just to make sure that you have correctly set up the access to the JDBC connector as detailed above. If the connector has been set up correctly, you will get a message that says &amp;#039;&amp;#039;&amp;#039;The JDBC driver was loaded correctly&amp;#039;&amp;#039;&amp;#039;. Now click on Next.&lt;br /&gt;
&lt;br /&gt;
5) Now enter the name of the user and the password (if required by the mysql server) that you have previously created for use of the database on the mysql server. If you click on Test Connection, you will be asked for a password if you have ticked the password box beforehand. If the connection to the database succeeds, you will get a message &amp;#039;&amp;#039;&amp;#039;The connection was established successfully&amp;#039;&amp;#039;&amp;#039;. Click on Next.&lt;br /&gt;
&lt;br /&gt;
6) On the final screen of the database wizard dialog, you can in general leave the default settings as they are, i.e. &amp;#039;&amp;#039;&amp;#039;Yes, register the database for me&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;Open the database for editing&amp;#039;&amp;#039;&amp;#039;. Click on Finish.&lt;br /&gt;
&lt;br /&gt;
7) You will be asked for a file name to give to your database document. Once you have done this and clicked on Save, the database document will open, and the Forms button on the left will be highlighted. Congratulations, you have now connected to your MySQL database via the JDBC connector.&lt;br /&gt;
&lt;br /&gt;
== Using ODBC on Linux ==&lt;br /&gt;
OpenOffice.org also support ODBC connectivity to MySQL, you will need [http://www.unixodbc.org/ Unix-ODBC] in order to make a connection through it.&lt;br /&gt;
&lt;br /&gt;
== Recommendations settings ==&lt;br /&gt;
&lt;br /&gt;
Known issues regarding MySQL and OpenOffice.org can be avoided by having specific settings here are some of those:&lt;br /&gt;
&lt;br /&gt;
=== MySQL settings ===&lt;br /&gt;
&lt;br /&gt;
* Make sure that MySQL is using TCP/IP as opposed to sockets. Edit the my.cnf file at /etc/ and comment &amp;#039;&amp;#039;&amp;#039;skip-networking&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== OpenOffice.org settings ===&lt;br /&gt;
&lt;br /&gt;
* OpenOffice.org uses Java for JDBC, please make sure you have JRE at Tools - Options - OpenOffice.org General - Java&lt;br /&gt;
* Declare the &amp;#039;&amp;#039;&amp;#039;mysql-connector-j.bin&amp;#039;&amp;#039;&amp;#039; at the classpath at Tools - Options - OpenOFfice.org General - Java&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Database]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Connect_MySQL_and_Base&amp;diff=58090</id>
		<title>Connect MySQL and Base</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Connect_MySQL_and_Base&amp;diff=58090"/>
		<updated>2007-12-15T21:01:58Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Using JDBC on Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a tutorial to connect MySQL database with OpenOffice.org Base. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using JDBC on Windows ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using ODBC on Windows ==&lt;br /&gt;
&lt;br /&gt;
== Using JDBC on Linux ==&lt;br /&gt;
OpenOffice.org comes directly with support of JDBC connectivity to multiple databases. OpenOffice.org needs [http://www.java.com/en/download/index.jsp Java Runtime Environment] to be able to use JDBC. Verify that you have JRE on your OOo by going to &amp;#039;&amp;#039;&amp;#039;Tools - Options - OpenOffice.org General - Java&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
Next step is to download the [http://www.mysql.com/products/connector/j/ mysql-connector-J] which you can download from the [http://www.mysql.com MySQL website]. [http://www.mysql.com/products/connector/j/ MySQL Connector/J] adds JDBC connectivity to MySQL. Unpack, untar or unzip the downloaded file anywhere where you can access it as a normal user, for example, to your desktop. On KDE, you can use Ark, on Gnome FileRoller, or even the Nautilus scripts that are included in some Linux distributions, or the usual &amp;quot;tar -zvf&amp;quot; from a console. A directory is created at the desired location named mysql-connector-java-x.x.x, where the x.x.x represents the version number of the JDBC connector you have downloaded. Inside this directory, you will find a file called mysql-connector-x.x.x-java-bin.jar.&lt;br /&gt;
&lt;br /&gt;
Start OpenOffice.org and go to the menu &amp;#039;&amp;#039;&amp;#039;Tools - Options - OpenOffice.org General Java&amp;#039;&amp;#039;&amp;#039;. Click on the button Add Archive and navigate to where the mysql-connector-x.x.x-java-bin.jar file is located. Click on Open, and the file should then appear in the list of Assigned folders and Archives. You can then click on OK and close OpenOffice.org completely. You may receive a message indicating that you have to do that anyway in order for OpenOffice.org to be able recognize your changes correctly. If the OpenOffice.org quickstarter is running, you should close that application as well.&lt;br /&gt;
&lt;br /&gt;
Instead of downloading the connector from the MySQL download site, you can also use the corresponding packages of your distribution like&lt;br /&gt;
* libmysql-java for debian and ubuntu&lt;br /&gt;
&lt;br /&gt;
When you restart OpenOffice.org, you should now be able to create a new database document that can connect to your existing mysql database, i.e. you need to have created your database first on your mysql server, for example with the CREATE DATABASE command from the mysql command line client or from within PHPMyAdmin if you are using that graphical user interface to administer your mysql server. &lt;br /&gt;
&lt;br /&gt;
Now do the following :&lt;br /&gt;
1) File &amp;gt; New &amp;gt; Database&lt;br /&gt;
&lt;br /&gt;
2) Click on the radio button Connect to an existing database and choose MySQL from the dropdown menu. Click on Next.&lt;br /&gt;
&lt;br /&gt;
3) In the next dialog, you should accept the default choice of Connect using JDBC, and then click on Next.&lt;br /&gt;
&lt;br /&gt;
4) In the following dialog, enter the name of your mysql database as it is called on the mysql server, paying attention to the spelling. In the address field, enter either the fully qualified internet domain name of the server on which your mysql server is running, or its IP address or, if you are running the mysql server locally on your own computer, simply type localhost. Click on Test Class just to make sure that you have correctly set up the access to the JDBC connector as detailed above. If the connector has been set up correctly, you will get a message that says &amp;#039;&amp;#039;&amp;#039;The JDBC driver was loaded correctly&amp;#039;&amp;#039;&amp;#039;. Now click on Next.&lt;br /&gt;
&lt;br /&gt;
5) Now enter the name of the user and the password (if required by the mysql server) that you have previously created for use of the database on the mysql server. If you click on Test Connection, you will be asked for a password if you have ticked the password box beforehand. If the connection to the database succeeds, you will get a message &amp;#039;&amp;#039;&amp;#039;The connection was established successfully&amp;#039;&amp;#039;&amp;#039;. Click on Next.&lt;br /&gt;
&lt;br /&gt;
6) On the final screen of the database wizard dialog, you can in general leave the default settings as they are, i.e. &amp;#039;&amp;#039;&amp;#039;Yes, register the database for me&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;Open the database for editing&amp;#039;&amp;#039;&amp;#039;. Click on Finish.&lt;br /&gt;
&lt;br /&gt;
7) You will be asked for a file name to give to your database document. Once you have done this and clicked on Save, the database document will open, and the Forms button on the left will be highlighted. Congratulations, you have now connected to your MySQL database via the JDBC connector.&lt;br /&gt;
&lt;br /&gt;
== Using ODBC on Linux ==&lt;br /&gt;
OpenOffice.org also support ODBC connectivity to MySQL, you will need [http://www.unixodbc.org/ Unix-ODBC] in order to make a connection through it.&lt;br /&gt;
&lt;br /&gt;
== Recommendations settings ==&lt;br /&gt;
&lt;br /&gt;
Known issues regarding MySQL and OpenOffice.org can be avoided by having specific settings here are some of those:&lt;br /&gt;
&lt;br /&gt;
=== MySQL settings ===&lt;br /&gt;
&lt;br /&gt;
* Make sure that MySQL is using TCP/IP as opposed to sockets. Edit the my.cnf file at /etc/ and comment &amp;#039;&amp;#039;&amp;#039;skip-networking&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== OpenOffice.org settings ===&lt;br /&gt;
&lt;br /&gt;
* OpenOffice.org uses Java for JDBC, please make sure you have JRE at Tools - Options - OpenOffice.org General - Java&lt;br /&gt;
* Declare the &amp;#039;&amp;#039;&amp;#039;mysql-connector-j.bin&amp;#039;&amp;#039;&amp;#039; at the classpath at Tools - Options - OpenOFfice.org General - Java&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Database]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/TableauBord/Organisation&amp;diff=56852</id>
		<title>FR/Documentation/TableauBord/Organisation</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/TableauBord/Organisation&amp;diff=56852"/>
		<updated>2007-12-08T09:24:56Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Utilisation des Categories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Documentation/Banner}}&lt;br /&gt;
{{Documentation/FR/EnCours|[[User:Flepennu|Flepennu]] Decembre 2007 (CEST)}}&lt;br /&gt;
&lt;br /&gt;
Cet article a pour but de vous aider a contribuer a la section Documentation/FR de ce wiki.&lt;br /&gt;
&lt;br /&gt;
=Structure du Wiki Documentation =&lt;br /&gt;
&lt;br /&gt;
==Hiérarchie==&lt;br /&gt;
&lt;br /&gt;
La section Documentation est une partie du Wiki. Le projet doc.oo.o cherche a présenter les informations dans cette section d&amp;#039;une facon accessible et a une structure qui permet la navigation pour les utilisateurs et les contributeurs.&lt;br /&gt;
&lt;br /&gt;
Toutes les pages documentation ne sont pas des sous-pages de la page Documentation principale, certaines renvoient vers des sous pages, d&amp;#039;autres vers des liens de la documentation anglaise.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;arborescence de la page documentation/FR du wiki presente pour l&amp;#039;instant :&lt;br /&gt;
&lt;br /&gt;
 wiki.services.openoffice.org/wiki/Documentation/FR/&lt;br /&gt;
    |&lt;br /&gt;
    +---Foire Aux Questions (FAQ)&lt;br /&gt;
    +---Manuels de l&amp;#039;utilisateur (OOoAuthors) (en)&lt;br /&gt;
    +---How-to&lt;br /&gt;
    +---Chercher/Télécharger&lt;br /&gt;
    +---Guides pour l&amp;#039;administration de OpenOffice.org&lt;br /&gt;
    +---Guide (en anglais) de programmation BASIC&lt;br /&gt;
&lt;br /&gt;
==Utilisation des Categories==&lt;br /&gt;
&lt;br /&gt;
[http://www.mediawiki.org/wiki/Help:Categories/fr Allez voir ici] si vous n&amp;#039;etes pas familier des Categories Wiki.&lt;br /&gt;
&lt;br /&gt;
Quelles exemples simples pour utiliser des Categories dans un Wiki :&lt;br /&gt;
# Creer une Categorie du nom du chapitre courant.&lt;br /&gt;
# Ajouter toutes les pages de ce chapitre dans une Categorie du nom de ce chapître.&lt;br /&gt;
# Ajouter le nom de cette Categorie dans le wiki.&lt;br /&gt;
&lt;br /&gt;
Le lecteur peut ainsi voir la Categorie du livre.  Le livre Categorie indique tous les chapitres du livre.  Si le lecteur clique sur un chapitre Categorie, il verra toutes les pages dans ce chapitre (par ordre alphabétique).&lt;br /&gt;
&lt;br /&gt;
Il ne faut pas ajouter une Categorie et une sous-categorie à la même page du wiki. Pour plus d&amp;#039;informations, consultez la section MediaWiki Help:Category disponible [http://meta.wikimedia.org/wiki/Help:Category#Category_considerations Réflexions sur les Categories].&lt;br /&gt;
&lt;br /&gt;
Il est possible, mais pas recommandé, d&amp;#039;utiliser des Gabarits pour ajouter une Categorie commune à un ensemble important de pages. Cela donnerait l&amp;#039;impression de gagner du temps, mais l&amp;#039;ajout ou la suppression d&amp;#039;un tag de categorie dans le Gabarit n&amp;#039;ajoute, ni supprime les listages à ou de la page Categorie des pages qui utilisent ce Gabarit, jusqu&amp;#039;à ce qu&amp;#039;on édite une page qui utilise ce dernier.  Pour d&amp;#039;autres informations, voir la section MediaWiki Help:Category  [http://meta.wikimedia.org/wiki/Help:Category#Using_templates_to_populate_categories Utilisation de gabarits pour peupler des Categories].&lt;br /&gt;
&lt;br /&gt;
=Utilisation des gabarits (Templates)=&lt;br /&gt;
&lt;br /&gt;
[http://www.mediawiki.org/wiki/Help:Templates/fr allez voir ici] si vous n&amp;#039;êtes pas familier des gabarits (mediawiki templates).&lt;br /&gt;
&lt;br /&gt;
Si vous créer des nouveaux gabarits , nommez les commes des sous-pages de documentation/FR :&lt;br /&gt;
* Mauvais: &amp;#039;&amp;#039;&amp;#039;montemplate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Bon: &amp;#039;&amp;#039;&amp;#039;Documentation/FR/montemplate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Gabarits existants (Templates) ==&lt;br /&gt;
&lt;br /&gt;
{|border=1 style=&amp;quot;border-collapse:collapse;&amp;quot; cellpadding=3 cellspacing=4&lt;br /&gt;
|-&lt;br /&gt;
!Nom!!Usage!!Exemple&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Abstract]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Banner]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/EnCours]]|| ||{{Documentation/FR/EnCours}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Attention]]|| ||{{Documentation/FR/Attention|Ne faite jamais ce qui est écrit ici.}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PertinenceVerifiee]]|| ||{{Documentation/FR/PertinenceVerifiee|Jean Dupond}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PremierJet]]|| || {{Documentation/FR/PremierJet}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/hbar]]|| || {{Documentation/hbar|100}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/AideDemandee]]|| || {{Documentation/FR/AideDemandee|Verifiez le texte et l&amp;#039;orthographe}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Hook]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Imported]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/LastEdited]]|| || Only works after update of mw engine to &amp;gt; 1.8&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Linux]]|| || {{Documentation/Linux}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/MasterTOC]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/EnAttente]]|| || {{Documentation/FR/EnAttente}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Note]]|| || {{Documentation/FR/Note|Information notable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/OOo]]|| || {{Documentation/OOo}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PlusValable]]|| || {{Documentation/FR/PlusValable|0.5}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/PDF]]|| || {{Documentation/PDF}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/PRODUCTNAME]]|| || {{Documentation/PRODUCTNAME}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Astuce]]|| ||{{Documentation/FR/Astuce|Essayez cette astuce.}}&lt;br /&gt;
|-&lt;br /&gt;
|Template:Documentation/*TOC|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Windows]]|| ||{{Documentation/Windows}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Contenu Graphique=&lt;br /&gt;
&lt;br /&gt;
Pour les images , voici quelques principes généraux :&lt;br /&gt;
# Utilisez la page des descriptions des images pour préciser le statut légal de l&amp;#039;image et de son usage.&lt;br /&gt;
# Utilisez une description et un titre unique.&lt;br /&gt;
# Si possible n&amp;#039;adaptez pas le format et la taille de l&amp;#039;image avant de l&amp;#039;envoyer sur le serveur, utilisez la vignette MediaWiki pour faire figurer l&amp;#039;image.&lt;br /&gt;
# Editez l&amp;#039;image si necessaire pour etre sur de ne faire apparaitre que ce qui est important d&amp;#039;une facon claire et visible.&lt;br /&gt;
# Gardez à l&amp;#039;esprit que d&amp;#039;autres personnes pourraient traduire la page où vous mettez une image.  Essayez de ne pas inclure des bulles d&amp;#039;affichage ou d&amp;#039;autre texte supplémentaire sur l&amp;#039;image.&lt;br /&gt;
# Le format JPG est général le mieux adapté pour les photos, SVG, pour des icones, logos etc, et PNG pour des captures d&amp;#039;écran.  Dans la mesure du possible, n&amp;#039;utilisez pas du BMP.&lt;br /&gt;
&lt;br /&gt;
Il est possible d&amp;#039;utiliser la fonction MediaWiki Image thumb pour &amp;quot;emballer&amp;quot; vos illustrations dans un cadre à image.  Ce cadre à image comprend un emplacement pour la légende de l&amp;#039;image.  La syntaxe est la suivante  &amp;#039;&amp;#039;&amp;#039;&amp;lt;nowiki&amp;gt;[[Image:image.png|thumb|position|size|Image caption]]&amp;lt;/nowiki&amp;gt;&amp;#039;&amp;#039;&amp;#039;, où:&lt;br /&gt;
* thumb = mettre en vignette l&amp;#039;image et l&amp;#039;inclure dans un cadre à image&lt;br /&gt;
* position = la position sur la page. &amp;quot;none&amp;quot; met l&amp;#039;image sur la gauche du cadre sans entrelacement du texte. &amp;quot;left&amp;quot; et &amp;quot;right&amp;quot; met l&amp;#039;image respectivement à gauche ou à droite sur la page avec entrelacement complet du texte.&lt;br /&gt;
* size = la largeur maximale en pixels pour l&amp;#039;image.  Si l&amp;#039;image est plus grande que cette valeur, elle est réduite à l&amp;#039;échelle.  Si l&amp;#039;image est plus petite que cette valeur, elle demeure inchangée.&lt;br /&gt;
Si vous ne déclarez ni position ni taille, l&amp;#039;image est transformée en petite vignette, et se met par défaut sur la droite de la page avec un entrelacement complet du texte.&lt;br /&gt;
&lt;br /&gt;
Un exemple d&amp;#039;utilisation &amp;lt;nowiki&amp;gt;[[Image:LoadSaveOptions.png|thumb|none|500px|An example image caption]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:LoadSaveOptions.png|thumb|none|500px|An example image caption]]&lt;br /&gt;
&lt;br /&gt;
=Linking=&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/TableauBord/Organisation&amp;diff=56851</id>
		<title>FR/Documentation/TableauBord/Organisation</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/TableauBord/Organisation&amp;diff=56851"/>
		<updated>2007-12-08T09:24:03Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Utilisation des Categories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Documentation/Banner}}&lt;br /&gt;
{{Documentation/FR/EnCours|[[User:Flepennu|Flepennu]] Decembre 2007 (CEST)}}&lt;br /&gt;
&lt;br /&gt;
Cet article a pour but de vous aider a contribuer a la section Documentation/FR de ce wiki.&lt;br /&gt;
&lt;br /&gt;
=Structure du Wiki Documentation =&lt;br /&gt;
&lt;br /&gt;
==Hiérarchie==&lt;br /&gt;
&lt;br /&gt;
La section Documentation est une partie du Wiki. Le projet doc.oo.o cherche a présenter les informations dans cette section d&amp;#039;une facon accessible et a une structure qui permet la navigation pour les utilisateurs et les contributeurs.&lt;br /&gt;
&lt;br /&gt;
Toutes les pages documentation ne sont pas des sous-pages de la page Documentation principale, certaines renvoient vers des sous pages, d&amp;#039;autres vers des liens de la documentation anglaise.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;arborescence de la page documentation/FR du wiki presente pour l&amp;#039;instant :&lt;br /&gt;
&lt;br /&gt;
 wiki.services.openoffice.org/wiki/Documentation/FR/&lt;br /&gt;
    |&lt;br /&gt;
    +---Foire Aux Questions (FAQ)&lt;br /&gt;
    +---Manuels de l&amp;#039;utilisateur (OOoAuthors) (en)&lt;br /&gt;
    +---How-to&lt;br /&gt;
    +---Chercher/Télécharger&lt;br /&gt;
    +---Guides pour l&amp;#039;administration de OpenOffice.org&lt;br /&gt;
    +---Guide (en anglais) de programmation BASIC&lt;br /&gt;
&lt;br /&gt;
==Utilisation des Categories==&lt;br /&gt;
&lt;br /&gt;
[http://www.mediawiki.org/wiki/Help:Categories/fr Allez voir ici] si vous n&amp;#039;etes pas familier des Categories Wiki.&lt;br /&gt;
&lt;br /&gt;
Quelles exemples simples pour utiliser des Categories dans un Wiki :&lt;br /&gt;
# Creer une Categorie du nom du chapitre courant.&lt;br /&gt;
# Ajouter toutes les pages de ce chapitre dans une Categorie du nom de ce chapître.&lt;br /&gt;
# Ajouter le nom de cette Categorie dans le wiki.&lt;br /&gt;
&lt;br /&gt;
Le lecteur peut ainsi voir la Categorie du livre.  Le livre Categorie indique tous les chapitres du livre.  Si le lecteur clique sur un chapitre Categorie, il verra toutes les pages dans ce chapitre (par ordre alphabétique).&lt;br /&gt;
&lt;br /&gt;
Il ne faut pas ajouter une Categorie et une sous-categorie à la même page du wiki. Pour plus d&amp;#039;informations, consultez la section MediaWiki Help:Category disponible [http://meta.wikimedia.org/wiki/Help:Category#Category_considerations Category considerations].&lt;br /&gt;
&lt;br /&gt;
Il est possible, mais pas recommandé, d&amp;#039;utiliser des Gabarits pour ajouter une Categorie commune à un ensemble important de pages. Cela donnerait l&amp;#039;impression de gagner du temps, mais l&amp;#039;ajout ou la suppression d&amp;#039;un tag de categorie dans le Gabarit n&amp;#039;ajoute, ni supprime les listages à ou de la page Categorie des pages qui utilisent ce Gabarit, jusqu&amp;#039;à ce qu&amp;#039;on édite une page qui utilise ce dernier.  Pour d&amp;#039;autres informations, voir la section MediaWiki Help:Category  [http://meta.wikimedia.org/wiki/Help:Category#Using_templates_to_populate_categories Utilisation de gabarits pour peupler des Categories].&lt;br /&gt;
&lt;br /&gt;
=Utilisation des gabarits (Templates)=&lt;br /&gt;
&lt;br /&gt;
[http://www.mediawiki.org/wiki/Help:Templates/fr allez voir ici] si vous n&amp;#039;êtes pas familier des gabarits (mediawiki templates).&lt;br /&gt;
&lt;br /&gt;
Si vous créer des nouveaux gabarits , nommez les commes des sous-pages de documentation/FR :&lt;br /&gt;
* Mauvais: &amp;#039;&amp;#039;&amp;#039;montemplate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Bon: &amp;#039;&amp;#039;&amp;#039;Documentation/FR/montemplate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Gabarits existants (Templates) ==&lt;br /&gt;
&lt;br /&gt;
{|border=1 style=&amp;quot;border-collapse:collapse;&amp;quot; cellpadding=3 cellspacing=4&lt;br /&gt;
|-&lt;br /&gt;
!Nom!!Usage!!Exemple&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Abstract]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Banner]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/EnCours]]|| ||{{Documentation/FR/EnCours}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Attention]]|| ||{{Documentation/FR/Attention|Ne faite jamais ce qui est écrit ici.}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PertinenceVerifiee]]|| ||{{Documentation/FR/PertinenceVerifiee|Jean Dupond}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PremierJet]]|| || {{Documentation/FR/PremierJet}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/hbar]]|| || {{Documentation/hbar|100}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/AideDemandee]]|| || {{Documentation/FR/AideDemandee|Verifiez le texte et l&amp;#039;orthographe}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Hook]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Imported]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/LastEdited]]|| || Only works after update of mw engine to &amp;gt; 1.8&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Linux]]|| || {{Documentation/Linux}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/MasterTOC]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/EnAttente]]|| || {{Documentation/FR/EnAttente}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Note]]|| || {{Documentation/FR/Note|Information notable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/OOo]]|| || {{Documentation/OOo}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PlusValable]]|| || {{Documentation/FR/PlusValable|0.5}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/PDF]]|| || {{Documentation/PDF}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/PRODUCTNAME]]|| || {{Documentation/PRODUCTNAME}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Astuce]]|| ||{{Documentation/FR/Astuce|Essayez cette astuce.}}&lt;br /&gt;
|-&lt;br /&gt;
|Template:Documentation/*TOC|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Windows]]|| ||{{Documentation/Windows}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Contenu Graphique=&lt;br /&gt;
&lt;br /&gt;
Pour les images , voici quelques principes généraux :&lt;br /&gt;
# Utilisez la page des descriptions des images pour préciser le statut légal de l&amp;#039;image et de son usage.&lt;br /&gt;
# Utilisez une description et un titre unique.&lt;br /&gt;
# Si possible n&amp;#039;adaptez pas le format et la taille de l&amp;#039;image avant de l&amp;#039;envoyer sur le serveur, utilisez la vignette MediaWiki pour faire figurer l&amp;#039;image.&lt;br /&gt;
# Editez l&amp;#039;image si necessaire pour etre sur de ne faire apparaitre que ce qui est important d&amp;#039;une facon claire et visible.&lt;br /&gt;
# Gardez à l&amp;#039;esprit que d&amp;#039;autres personnes pourraient traduire la page où vous mettez une image.  Essayez de ne pas inclure des bulles d&amp;#039;affichage ou d&amp;#039;autre texte supplémentaire sur l&amp;#039;image.&lt;br /&gt;
# Le format JPG est général le mieux adapté pour les photos, SVG, pour des icones, logos etc, et PNG pour des captures d&amp;#039;écran.  Dans la mesure du possible, n&amp;#039;utilisez pas du BMP.&lt;br /&gt;
&lt;br /&gt;
Il est possible d&amp;#039;utiliser la fonction MediaWiki Image thumb pour &amp;quot;emballer&amp;quot; vos illustrations dans un cadre à image.  Ce cadre à image comprend un emplacement pour la légende de l&amp;#039;image.  La syntaxe est la suivante  &amp;#039;&amp;#039;&amp;#039;&amp;lt;nowiki&amp;gt;[[Image:image.png|thumb|position|size|Image caption]]&amp;lt;/nowiki&amp;gt;&amp;#039;&amp;#039;&amp;#039;, où:&lt;br /&gt;
* thumb = mettre en vignette l&amp;#039;image et l&amp;#039;inclure dans un cadre à image&lt;br /&gt;
* position = la position sur la page. &amp;quot;none&amp;quot; met l&amp;#039;image sur la gauche du cadre sans entrelacement du texte. &amp;quot;left&amp;quot; et &amp;quot;right&amp;quot; met l&amp;#039;image respectivement à gauche ou à droite sur la page avec entrelacement complet du texte.&lt;br /&gt;
* size = la largeur maximale en pixels pour l&amp;#039;image.  Si l&amp;#039;image est plus grande que cette valeur, elle est réduite à l&amp;#039;échelle.  Si l&amp;#039;image est plus petite que cette valeur, elle demeure inchangée.&lt;br /&gt;
Si vous ne déclarez ni position ni taille, l&amp;#039;image est transformée en petite vignette, et se met par défaut sur la droite de la page avec un entrelacement complet du texte.&lt;br /&gt;
&lt;br /&gt;
Un exemple d&amp;#039;utilisation &amp;lt;nowiki&amp;gt;[[Image:LoadSaveOptions.png|thumb|none|500px|An example image caption]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:LoadSaveOptions.png|thumb|none|500px|An example image caption]]&lt;br /&gt;
&lt;br /&gt;
=Linking=&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/TableauBord/Organisation&amp;diff=56850</id>
		<title>FR/Documentation/TableauBord/Organisation</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/TableauBord/Organisation&amp;diff=56850"/>
		<updated>2007-12-08T09:22:57Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Utilisation des Categories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Documentation/Banner}}&lt;br /&gt;
{{Documentation/FR/EnCours|[[User:Flepennu|Flepennu]] Decembre 2007 (CEST)}}&lt;br /&gt;
&lt;br /&gt;
Cet article a pour but de vous aider a contribuer a la section Documentation/FR de ce wiki.&lt;br /&gt;
&lt;br /&gt;
=Structure du Wiki Documentation =&lt;br /&gt;
&lt;br /&gt;
==Hiérarchie==&lt;br /&gt;
&lt;br /&gt;
La section Documentation est une partie du Wiki. Le projet doc.oo.o cherche a présenter les informations dans cette section d&amp;#039;une facon accessible et a une structure qui permet la navigation pour les utilisateurs et les contributeurs.&lt;br /&gt;
&lt;br /&gt;
Toutes les pages documentation ne sont pas des sous-pages de la page Documentation principale, certaines renvoient vers des sous pages, d&amp;#039;autres vers des liens de la documentation anglaise.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;arborescence de la page documentation/FR du wiki presente pour l&amp;#039;instant :&lt;br /&gt;
&lt;br /&gt;
 wiki.services.openoffice.org/wiki/Documentation/FR/&lt;br /&gt;
    |&lt;br /&gt;
    +---Foire Aux Questions (FAQ)&lt;br /&gt;
    +---Manuels de l&amp;#039;utilisateur (OOoAuthors) (en)&lt;br /&gt;
    +---How-to&lt;br /&gt;
    +---Chercher/Télécharger&lt;br /&gt;
    +---Guides pour l&amp;#039;administration de OpenOffice.org&lt;br /&gt;
    +---Guide (en anglais) de programmation BASIC&lt;br /&gt;
&lt;br /&gt;
==Utilisation des Categories==&lt;br /&gt;
&lt;br /&gt;
[http://www.mediawiki.org/wiki/Help:Categories/fr Allez voir ici] si vous n&amp;#039;etes pas familier des Categories Wiki.&lt;br /&gt;
&lt;br /&gt;
Quelles exemples simples pour utiliser des Categories dans un Wiki :&lt;br /&gt;
# Creer une Categorie du nom du chapitre courant.&lt;br /&gt;
# Ajouter toutes les pages de ce chapitre dans une Categorie du nom de ce chapître.&lt;br /&gt;
# Ajouter le nom de cette Categorie dans le wiki.&lt;br /&gt;
&lt;br /&gt;
Le lecteur peut ainsi voir la Categorie du livre.  Le livre Categorie indique tous les chapitres du livre.  Si le lecteur clique sur un chapitre Categorie, il verra toutes les pages dans ce chapitre (par ordre alphabétique).&lt;br /&gt;
&lt;br /&gt;
Il ne faut pas ajouter une Categorie et une sous-categorie à la même page du wiki. Pour plus d&amp;#039;informations, consultez la section MediaWiki Help:Category disponible [http://meta.wikimedia.org/wiki/Help:Category#Category_considerations Category considerations].&lt;br /&gt;
&lt;br /&gt;
Il est possible, mais pas recommandé, d&amp;#039;utiliser des Gabarits pour ajouter une Categorie commune à un ensemble important de pages. Cela donnerait l&amp;#039;impression de gagner du temps, mais l&amp;#039;ajout ou la suppression d&amp;#039;un tag de categorie dans le Gabarit n&amp;#039;ajoute, ni supprime les listages à ou de la page Categorie des pages qui utilisent ce Gabarit, jusqu&amp;#039;à ce qu&amp;#039;on édite une page qui utilise ce dernier.  Pour d&amp;#039;autres informations, voir la section MediaWiki Help:Category  [http://meta.wikimedia.org/wiki/Help:Category#Using_templates_to_populate_categories Disponble ici].&lt;br /&gt;
&lt;br /&gt;
=Utilisation des gabarits (Templates)=&lt;br /&gt;
&lt;br /&gt;
[http://www.mediawiki.org/wiki/Help:Templates/fr allez voir ici] si vous n&amp;#039;êtes pas familier des gabarits (mediawiki templates).&lt;br /&gt;
&lt;br /&gt;
Si vous créer des nouveaux gabarits , nommez les commes des sous-pages de documentation/FR :&lt;br /&gt;
* Mauvais: &amp;#039;&amp;#039;&amp;#039;montemplate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Bon: &amp;#039;&amp;#039;&amp;#039;Documentation/FR/montemplate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Gabarits existants (Templates) ==&lt;br /&gt;
&lt;br /&gt;
{|border=1 style=&amp;quot;border-collapse:collapse;&amp;quot; cellpadding=3 cellspacing=4&lt;br /&gt;
|-&lt;br /&gt;
!Nom!!Usage!!Exemple&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Abstract]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Banner]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/EnCours]]|| ||{{Documentation/FR/EnCours}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Attention]]|| ||{{Documentation/FR/Attention|Ne faite jamais ce qui est écrit ici.}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PertinenceVerifiee]]|| ||{{Documentation/FR/PertinenceVerifiee|Jean Dupond}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PremierJet]]|| || {{Documentation/FR/PremierJet}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/hbar]]|| || {{Documentation/hbar|100}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/AideDemandee]]|| || {{Documentation/FR/AideDemandee|Verifiez le texte et l&amp;#039;orthographe}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Hook]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Imported]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/LastEdited]]|| || Only works after update of mw engine to &amp;gt; 1.8&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Linux]]|| || {{Documentation/Linux}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/MasterTOC]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/EnAttente]]|| || {{Documentation/FR/EnAttente}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Note]]|| || {{Documentation/FR/Note|Information notable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/OOo]]|| || {{Documentation/OOo}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PlusValable]]|| || {{Documentation/FR/PlusValable|0.5}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/PDF]]|| || {{Documentation/PDF}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/PRODUCTNAME]]|| || {{Documentation/PRODUCTNAME}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Astuce]]|| ||{{Documentation/FR/Astuce|Essayez cette astuce.}}&lt;br /&gt;
|-&lt;br /&gt;
|Template:Documentation/*TOC|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Windows]]|| ||{{Documentation/Windows}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Contenu Graphique=&lt;br /&gt;
&lt;br /&gt;
Pour les images , voici quelques principes généraux :&lt;br /&gt;
# Utilisez la page des descriptions des images pour préciser le statut légal de l&amp;#039;image et de son usage.&lt;br /&gt;
# Utilisez une description et un titre unique.&lt;br /&gt;
# Si possible n&amp;#039;adaptez pas le format et la taille de l&amp;#039;image avant de l&amp;#039;envoyer sur le serveur, utilisez la vignette MediaWiki pour faire figurer l&amp;#039;image.&lt;br /&gt;
# Editez l&amp;#039;image si necessaire pour etre sur de ne faire apparaitre que ce qui est important d&amp;#039;une facon claire et visible.&lt;br /&gt;
# Gardez à l&amp;#039;esprit que d&amp;#039;autres personnes pourraient traduire la page où vous mettez une image.  Essayez de ne pas inclure des bulles d&amp;#039;affichage ou d&amp;#039;autre texte supplémentaire sur l&amp;#039;image.&lt;br /&gt;
# Le format JPG est général le mieux adapté pour les photos, SVG, pour des icones, logos etc, et PNG pour des captures d&amp;#039;écran.  Dans la mesure du possible, n&amp;#039;utilisez pas du BMP.&lt;br /&gt;
&lt;br /&gt;
Il est possible d&amp;#039;utiliser la fonction MediaWiki Image thumb pour &amp;quot;emballer&amp;quot; vos illustrations dans un cadre à image.  Ce cadre à image comprend un emplacement pour la légende de l&amp;#039;image.  La syntaxe est la suivante  &amp;#039;&amp;#039;&amp;#039;&amp;lt;nowiki&amp;gt;[[Image:image.png|thumb|position|size|Image caption]]&amp;lt;/nowiki&amp;gt;&amp;#039;&amp;#039;&amp;#039;, où:&lt;br /&gt;
* thumb = mettre en vignette l&amp;#039;image et l&amp;#039;inclure dans un cadre à image&lt;br /&gt;
* position = la position sur la page. &amp;quot;none&amp;quot; met l&amp;#039;image sur la gauche du cadre sans entrelacement du texte. &amp;quot;left&amp;quot; et &amp;quot;right&amp;quot; met l&amp;#039;image respectivement à gauche ou à droite sur la page avec entrelacement complet du texte.&lt;br /&gt;
* size = la largeur maximale en pixels pour l&amp;#039;image.  Si l&amp;#039;image est plus grande que cette valeur, elle est réduite à l&amp;#039;échelle.  Si l&amp;#039;image est plus petite que cette valeur, elle demeure inchangée.&lt;br /&gt;
Si vous ne déclarez ni position ni taille, l&amp;#039;image est transformée en petite vignette, et se met par défaut sur la droite de la page avec un entrelacement complet du texte.&lt;br /&gt;
&lt;br /&gt;
Un exemple d&amp;#039;utilisation &amp;lt;nowiki&amp;gt;[[Image:LoadSaveOptions.png|thumb|none|500px|An example image caption]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:LoadSaveOptions.png|thumb|none|500px|An example image caption]]&lt;br /&gt;
&lt;br /&gt;
=Linking=&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/TableauBord/Organisation&amp;diff=56849</id>
		<title>FR/Documentation/TableauBord/Organisation</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/TableauBord/Organisation&amp;diff=56849"/>
		<updated>2007-12-08T09:19:29Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Utilisation des Categories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Documentation/Banner}}&lt;br /&gt;
{{Documentation/FR/EnCours|[[User:Flepennu|Flepennu]] Decembre 2007 (CEST)}}&lt;br /&gt;
&lt;br /&gt;
Cet article a pour but de vous aider a contribuer a la section Documentation/FR de ce wiki.&lt;br /&gt;
&lt;br /&gt;
=Structure du Wiki Documentation =&lt;br /&gt;
&lt;br /&gt;
==Hiérarchie==&lt;br /&gt;
&lt;br /&gt;
La section Documentation est une partie du Wiki. Le projet doc.oo.o cherche a présenter les informations dans cette section d&amp;#039;une facon accessible et a une structure qui permet la navigation pour les utilisateurs et les contributeurs.&lt;br /&gt;
&lt;br /&gt;
Toutes les pages documentation ne sont pas des sous-pages de la page Documentation principale, certaines renvoient vers des sous pages, d&amp;#039;autres vers des liens de la documentation anglaise.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;arborescence de la page documentation/FR du wiki presente pour l&amp;#039;instant :&lt;br /&gt;
&lt;br /&gt;
 wiki.services.openoffice.org/wiki/Documentation/FR/&lt;br /&gt;
    |&lt;br /&gt;
    +---Foire Aux Questions (FAQ)&lt;br /&gt;
    +---Manuels de l&amp;#039;utilisateur (OOoAuthors) (en)&lt;br /&gt;
    +---How-to&lt;br /&gt;
    +---Chercher/Télécharger&lt;br /&gt;
    +---Guides pour l&amp;#039;administration de OpenOffice.org&lt;br /&gt;
    +---Guide (en anglais) de programmation BASIC&lt;br /&gt;
&lt;br /&gt;
==Utilisation des Categories==&lt;br /&gt;
&lt;br /&gt;
[http://www.mediawiki.org/wiki/Help:Categories/fr Allez voir ici] si vous n&amp;#039;etes pas familier des Categories Wiki.&lt;br /&gt;
&lt;br /&gt;
Quelles exemples simples pour utiliser des Categories dans un Wiki :&lt;br /&gt;
# Creer une Categorie du nom du chapitre courant.&lt;br /&gt;
# Ajouter toutes les pages de ce chapitre dans une Categorie du nom de ce chapître.&lt;br /&gt;
# Ajouter le nom de cette Categorie dans le wiki.&lt;br /&gt;
&lt;br /&gt;
Le lecteur peut ainsi voir la Categorie du livre.  Le livre Categorie indique tous les chapitres du livre.  Si le lecteur clique sur un chapitre Categorie, il verra toutes les pages dans ce chapitre (par ordre alphabétique).&lt;br /&gt;
&lt;br /&gt;
Il ne faut pas ajouter une Categorie et une sous-categorie à la même page du wiki. Pour plus d&amp;#039;informations, consultez la section MediaWiki Help:Category disponible [http://meta.wikimedia.org/wiki/Help:Category#Category_considerations Category considerations].&lt;br /&gt;
&lt;br /&gt;
Il est possible, mais pas recommandé, d&amp;#039;utiliser des Gabarits pour ajouter une Categorie commune à un ensemble important de pages. Cela donnerait l&amp;#039;impression de gagner du temps, mais l&amp;#039;ajout ou la suppression d&amp;#039;un tag de categorie dans le Gabarit n&amp;#039;ajoute, ni supprime les listages à ou de la page Categorie des pages qui utilisent ce Gabarit, jusqu&amp;#039;à ce qu&amp;#039;on édite une page qui utilise ce dernier.  Pour d&amp;#039;autres informations, voir la section MediaWiki Help:Category disponible [http://meta.wikimedia.org/wiki/Help:Category#Using_templates_to_populate_categories Using templates to populate categories].&lt;br /&gt;
&lt;br /&gt;
=Utilisation des gabarits (Templates)=&lt;br /&gt;
&lt;br /&gt;
[http://www.mediawiki.org/wiki/Help:Templates/fr allez voir ici] si vous n&amp;#039;êtes pas familier des gabarits (mediawiki templates).&lt;br /&gt;
&lt;br /&gt;
Si vous créer des nouveaux gabarits , nommez les commes des sous-pages de documentation/FR :&lt;br /&gt;
* Mauvais: &amp;#039;&amp;#039;&amp;#039;montemplate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Bon: &amp;#039;&amp;#039;&amp;#039;Documentation/FR/montemplate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Gabarits existants (Templates) ==&lt;br /&gt;
&lt;br /&gt;
{|border=1 style=&amp;quot;border-collapse:collapse;&amp;quot; cellpadding=3 cellspacing=4&lt;br /&gt;
|-&lt;br /&gt;
!Nom!!Usage!!Exemple&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Abstract]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Banner]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/EnCours]]|| ||{{Documentation/FR/EnCours}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Attention]]|| ||{{Documentation/FR/Attention|Ne faite jamais ce qui est écrit ici.}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PertinenceVerifiee]]|| ||{{Documentation/FR/PertinenceVerifiee|Jean Dupond}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PremierJet]]|| || {{Documentation/FR/PremierJet}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/hbar]]|| || {{Documentation/hbar|100}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/AideDemandee]]|| || {{Documentation/FR/AideDemandee|Verifiez le texte et l&amp;#039;orthographe}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Hook]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Imported]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/LastEdited]]|| || Only works after update of mw engine to &amp;gt; 1.8&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Linux]]|| || {{Documentation/Linux}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/MasterTOC]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/EnAttente]]|| || {{Documentation/FR/EnAttente}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Note]]|| || {{Documentation/FR/Note|Information notable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/OOo]]|| || {{Documentation/OOo}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PlusValable]]|| || {{Documentation/FR/PlusValable|0.5}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/PDF]]|| || {{Documentation/PDF}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/PRODUCTNAME]]|| || {{Documentation/PRODUCTNAME}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Astuce]]|| ||{{Documentation/FR/Astuce|Essayez cette astuce.}}&lt;br /&gt;
|-&lt;br /&gt;
|Template:Documentation/*TOC|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Windows]]|| ||{{Documentation/Windows}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Contenu Graphique=&lt;br /&gt;
&lt;br /&gt;
Pour les images , voici quelques principes généraux :&lt;br /&gt;
# Utilisez la page des descriptions des images pour préciser le statut légal de l&amp;#039;image et de son usage.&lt;br /&gt;
# Utilisez une description et un titre unique.&lt;br /&gt;
# Si possible n&amp;#039;adaptez pas le format et la taille de l&amp;#039;image avant de l&amp;#039;envoyer sur le serveur, utilisez la vignette MediaWiki pour faire figurer l&amp;#039;image.&lt;br /&gt;
# Editez l&amp;#039;image si necessaire pour etre sur de ne faire apparaitre que ce qui est important d&amp;#039;une facon claire et visible.&lt;br /&gt;
# Gardez à l&amp;#039;esprit que d&amp;#039;autres personnes pourraient traduire la page où vous mettez une image.  Essayez de ne pas inclure des bulles d&amp;#039;affichage ou d&amp;#039;autre texte supplémentaire sur l&amp;#039;image.&lt;br /&gt;
# Le format JPG est général le mieux adapté pour les photos, SVG, pour des icones, logos etc, et PNG pour des captures d&amp;#039;écran.  Dans la mesure du possible, n&amp;#039;utilisez pas du BMP.&lt;br /&gt;
&lt;br /&gt;
Il est possible d&amp;#039;utiliser la fonction MediaWiki Image thumb pour &amp;quot;emballer&amp;quot; vos illustrations dans un cadre à image.  Ce cadre à image comprend un emplacement pour la légende de l&amp;#039;image.  La syntaxe est la suivante  &amp;#039;&amp;#039;&amp;#039;&amp;lt;nowiki&amp;gt;[[Image:image.png|thumb|position|size|Image caption]]&amp;lt;/nowiki&amp;gt;&amp;#039;&amp;#039;&amp;#039;, où:&lt;br /&gt;
* thumb = mettre en vignette l&amp;#039;image et l&amp;#039;inclure dans un cadre à image&lt;br /&gt;
* position = la position sur la page. &amp;quot;none&amp;quot; met l&amp;#039;image sur la gauche du cadre sans entrelacement du texte. &amp;quot;left&amp;quot; et &amp;quot;right&amp;quot; met l&amp;#039;image respectivement à gauche ou à droite sur la page avec entrelacement complet du texte.&lt;br /&gt;
* size = la largeur maximale en pixels pour l&amp;#039;image.  Si l&amp;#039;image est plus grande que cette valeur, elle est réduite à l&amp;#039;échelle.  Si l&amp;#039;image est plus petite que cette valeur, elle demeure inchangée.&lt;br /&gt;
Si vous ne déclarez ni position ni taille, l&amp;#039;image est transformée en petite vignette, et se met par défaut sur la droite de la page avec un entrelacement complet du texte.&lt;br /&gt;
&lt;br /&gt;
Un exemple d&amp;#039;utilisation &amp;lt;nowiki&amp;gt;[[Image:LoadSaveOptions.png|thumb|none|500px|An example image caption]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:LoadSaveOptions.png|thumb|none|500px|An example image caption]]&lt;br /&gt;
&lt;br /&gt;
=Linking=&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/TableauBord/Organisation&amp;diff=56848</id>
		<title>FR/Documentation/TableauBord/Organisation</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/TableauBord/Organisation&amp;diff=56848"/>
		<updated>2007-12-08T09:15:58Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Contenu Graphique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Documentation/Banner}}&lt;br /&gt;
{{Documentation/FR/EnCours|[[User:Flepennu|Flepennu]] Decembre 2007 (CEST)}}&lt;br /&gt;
&lt;br /&gt;
Cet article a pour but de vous aider a contribuer a la section Documentation/FR de ce wiki.&lt;br /&gt;
&lt;br /&gt;
=Structure du Wiki Documentation =&lt;br /&gt;
&lt;br /&gt;
==Hiérarchie==&lt;br /&gt;
&lt;br /&gt;
La section Documentation est une partie du Wiki. Le projet doc.oo.o cherche a présenter les informations dans cette section d&amp;#039;une facon accessible et a une structure qui permet la navigation pour les utilisateurs et les contributeurs.&lt;br /&gt;
&lt;br /&gt;
Toutes les pages documentation ne sont pas des sous-pages de la page Documentation principale, certaines renvoient vers des sous pages, d&amp;#039;autres vers des liens de la documentation anglaise.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;arborescence de la page documentation/FR du wiki presente pour l&amp;#039;instant :&lt;br /&gt;
&lt;br /&gt;
 wiki.services.openoffice.org/wiki/Documentation/FR/&lt;br /&gt;
    |&lt;br /&gt;
    +---Foire Aux Questions (FAQ)&lt;br /&gt;
    +---Manuels de l&amp;#039;utilisateur (OOoAuthors) (en)&lt;br /&gt;
    +---How-to&lt;br /&gt;
    +---Chercher/Télécharger&lt;br /&gt;
    +---Guides pour l&amp;#039;administration de OpenOffice.org&lt;br /&gt;
    +---Guide (en anglais) de programmation BASIC&lt;br /&gt;
&lt;br /&gt;
==Utilisation des Categories==&lt;br /&gt;
&lt;br /&gt;
[http://www.mediawiki.org/wiki/Help:Categories/fr Allez voir ici] si vous n&amp;#039;etes pas familier des Categories Wiki.&lt;br /&gt;
&lt;br /&gt;
Quelles exemples simples pour utiliser des Categories dans un Wiki :&lt;br /&gt;
# Creer une Categorie du nom du chapitre courant.&lt;br /&gt;
# Ajouter toutes les pages de ce chapitre dans une Categorie du nom de ce chapître.&lt;br /&gt;
# Ajouter le nom de cette Categorie dans le wiki.&lt;br /&gt;
&lt;br /&gt;
Le lecteur peut ainsi voir la Categorie du livre.  Le livre Categorie indique tous les chapitres du livre.  Si le lecteur clique sur un chapitre Categorie, il verra toutes les pages dans ce chapitre (par ordre alphabétique).&lt;br /&gt;
&lt;br /&gt;
Il ne faut pas ajouter une Categorie et une sous-categorie à la même page du wiki. Pour plus d&amp;#039;informations, consultez la section MediaWiki Help:Category disponible [http://meta.wikimedia.org/wiki/Help:Category#Category_considerations Category considerations].&lt;br /&gt;
&lt;br /&gt;
Il est possible, mais pas recommandé, d&amp;#039;utiliser des Templates pour ajouter une Categorie commune à un ensemble important de pages. Cela donnerait l&amp;#039;impression de gagner du temps, mais l&amp;#039;ajout ou la suppression d&amp;#039;un tag de categorie dans le Template n&amp;#039;ajoute, ni supprime les listages à ou de la page Categorie des pages qui utilisent ce Template, jusqu&amp;#039;à ce qu&amp;#039;on édite une page qui utilise ce Template.&amp;quot;  Pour d&amp;#039;autres informations, voir la section MediaWiki Help:Category disponible [http://meta.wikimedia.org/wiki/Help:Category#Using_templates_to_populate_categories Using templates to populate categories].&lt;br /&gt;
&lt;br /&gt;
=Utilisation des gabarits (Templates)=&lt;br /&gt;
&lt;br /&gt;
[http://www.mediawiki.org/wiki/Help:Templates/fr allez voir ici] si vous n&amp;#039;êtes pas familier des gabarits (mediawiki templates).&lt;br /&gt;
&lt;br /&gt;
Si vous créer des nouveaux gabarits , nommez les commes des sous-pages de documentation/FR :&lt;br /&gt;
* Mauvais: &amp;#039;&amp;#039;&amp;#039;montemplate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Bon: &amp;#039;&amp;#039;&amp;#039;Documentation/FR/montemplate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Gabarits existants (Templates) ==&lt;br /&gt;
&lt;br /&gt;
{|border=1 style=&amp;quot;border-collapse:collapse;&amp;quot; cellpadding=3 cellspacing=4&lt;br /&gt;
|-&lt;br /&gt;
!Nom!!Usage!!Exemple&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Abstract]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Banner]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/EnCours]]|| ||{{Documentation/FR/EnCours}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Attention]]|| ||{{Documentation/FR/Attention|Ne faite jamais ce qui est écrit ici.}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PertinenceVerifiee]]|| ||{{Documentation/FR/PertinenceVerifiee|Jean Dupond}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PremierJet]]|| || {{Documentation/FR/PremierJet}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/hbar]]|| || {{Documentation/hbar|100}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/AideDemandee]]|| || {{Documentation/FR/AideDemandee|Verifiez le texte et l&amp;#039;orthographe}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Hook]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Imported]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/LastEdited]]|| || Only works after update of mw engine to &amp;gt; 1.8&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Linux]]|| || {{Documentation/Linux}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/MasterTOC]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/EnAttente]]|| || {{Documentation/FR/EnAttente}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Note]]|| || {{Documentation/FR/Note|Information notable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/OOo]]|| || {{Documentation/OOo}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PlusValable]]|| || {{Documentation/FR/PlusValable|0.5}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/PDF]]|| || {{Documentation/PDF}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/PRODUCTNAME]]|| || {{Documentation/PRODUCTNAME}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Astuce]]|| ||{{Documentation/FR/Astuce|Essayez cette astuce.}}&lt;br /&gt;
|-&lt;br /&gt;
|Template:Documentation/*TOC|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Windows]]|| ||{{Documentation/Windows}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Contenu Graphique=&lt;br /&gt;
&lt;br /&gt;
Pour les images , voici quelques principes généraux :&lt;br /&gt;
# Utilisez la page des descriptions des images pour préciser le statut légal de l&amp;#039;image et de son usage.&lt;br /&gt;
# Utilisez une description et un titre unique.&lt;br /&gt;
# Si possible n&amp;#039;adaptez pas le format et la taille de l&amp;#039;image avant de l&amp;#039;envoyer sur le serveur, utilisez la vignette MediaWiki pour faire figurer l&amp;#039;image.&lt;br /&gt;
# Editez l&amp;#039;image si necessaire pour etre sur de ne faire apparaitre que ce qui est important d&amp;#039;une facon claire et visible.&lt;br /&gt;
# Gardez à l&amp;#039;esprit que d&amp;#039;autres personnes pourraient traduire la page où vous mettez une image.  Essayez de ne pas inclure des bulles d&amp;#039;affichage ou d&amp;#039;autre texte supplémentaire sur l&amp;#039;image.&lt;br /&gt;
# Le format JPG est général le mieux adapté pour les photos, SVG, pour des icones, logos etc, et PNG pour des captures d&amp;#039;écran.  Dans la mesure du possible, n&amp;#039;utilisez pas du BMP.&lt;br /&gt;
&lt;br /&gt;
Il est possible d&amp;#039;utiliser la fonction MediaWiki Image thumb pour &amp;quot;emballer&amp;quot; vos illustrations dans un cadre à image.  Ce cadre à image comprend un emplacement pour la légende de l&amp;#039;image.  La syntaxe est la suivante  &amp;#039;&amp;#039;&amp;#039;&amp;lt;nowiki&amp;gt;[[Image:image.png|thumb|position|size|Image caption]]&amp;lt;/nowiki&amp;gt;&amp;#039;&amp;#039;&amp;#039;, où:&lt;br /&gt;
* thumb = mettre en vignette l&amp;#039;image et l&amp;#039;inclure dans un cadre à image&lt;br /&gt;
* position = la position sur la page. &amp;quot;none&amp;quot; met l&amp;#039;image sur la gauche du cadre sans entrelacement du texte. &amp;quot;left&amp;quot; et &amp;quot;right&amp;quot; met l&amp;#039;image respectivement à gauche ou à droite sur la page avec entrelacement complet du texte.&lt;br /&gt;
* size = la largeur maximale en pixels pour l&amp;#039;image.  Si l&amp;#039;image est plus grande que cette valeur, elle est réduite à l&amp;#039;échelle.  Si l&amp;#039;image est plus petite que cette valeur, elle demeure inchangée.&lt;br /&gt;
Si vous ne déclarez ni position ni taille, l&amp;#039;image est transformée en petite vignette, et se met par défaut sur la droite de la page avec un entrelacement complet du texte.&lt;br /&gt;
&lt;br /&gt;
Un exemple d&amp;#039;utilisation &amp;lt;nowiki&amp;gt;[[Image:LoadSaveOptions.png|thumb|none|500px|An example image caption]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:LoadSaveOptions.png|thumb|none|500px|An example image caption]]&lt;br /&gt;
&lt;br /&gt;
=Linking=&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FR/Documentation/TableauBord/Organisation&amp;diff=56847</id>
		<title>FR/Documentation/TableauBord/Organisation</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FR/Documentation/TableauBord/Organisation&amp;diff=56847"/>
		<updated>2007-12-08T09:02:11Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Utilisation des Categories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Documentation/Banner}}&lt;br /&gt;
{{Documentation/FR/EnCours|[[User:Flepennu|Flepennu]] Decembre 2007 (CEST)}}&lt;br /&gt;
&lt;br /&gt;
Cet article a pour but de vous aider a contribuer a la section Documentation/FR de ce wiki.&lt;br /&gt;
&lt;br /&gt;
=Structure du Wiki Documentation =&lt;br /&gt;
&lt;br /&gt;
==Hiérarchie==&lt;br /&gt;
&lt;br /&gt;
La section Documentation est une partie du Wiki. Le projet doc.oo.o cherche a présenter les informations dans cette section d&amp;#039;une facon accessible et a une structure qui permet la navigation pour les utilisateurs et les contributeurs.&lt;br /&gt;
&lt;br /&gt;
Toutes les pages documentation ne sont pas des sous-pages de la page Documentation principale, certaines renvoient vers des sous pages, d&amp;#039;autres vers des liens de la documentation anglaise.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;arborescence de la page documentation/FR du wiki presente pour l&amp;#039;instant :&lt;br /&gt;
&lt;br /&gt;
 wiki.services.openoffice.org/wiki/Documentation/FR/&lt;br /&gt;
    |&lt;br /&gt;
    +---Foire Aux Questions (FAQ)&lt;br /&gt;
    +---Manuels de l&amp;#039;utilisateur (OOoAuthors) (en)&lt;br /&gt;
    +---How-to&lt;br /&gt;
    +---Chercher/Télécharger&lt;br /&gt;
    +---Guides pour l&amp;#039;administration de OpenOffice.org&lt;br /&gt;
    +---Guide (en anglais) de programmation BASIC&lt;br /&gt;
&lt;br /&gt;
==Utilisation des Categories==&lt;br /&gt;
&lt;br /&gt;
[http://www.mediawiki.org/wiki/Help:Categories/fr Allez voir ici] si vous n&amp;#039;etes pas familier des Categories Wiki.&lt;br /&gt;
&lt;br /&gt;
Quelles exemples simples pour utiliser des Categories dans un Wiki :&lt;br /&gt;
# Creer une Categorie du nom du chapitre courant.&lt;br /&gt;
# Ajouter toutes les pages de ce chapitre dans une Categorie du nom de ce chapître.&lt;br /&gt;
# Ajouter le nom de cette Categorie dans le wiki.&lt;br /&gt;
&lt;br /&gt;
Le lecteur peut ainsi voir la Categorie du livre.  Le livre Categorie indique tous les chapitres du livre.  Si le lecteur clique sur un chapitre Categorie, il verra toutes les pages dans ce chapitre (par ordre alphabétique).&lt;br /&gt;
&lt;br /&gt;
Il ne faut pas ajouter une Categorie et une sous-categorie à la même page du wiki. Pour plus d&amp;#039;informations, consultez la section MediaWiki Help:Category disponible [http://meta.wikimedia.org/wiki/Help:Category#Category_considerations Category considerations].&lt;br /&gt;
&lt;br /&gt;
Il est possible, mais pas recommandé, d&amp;#039;utiliser des Templates pour ajouter une Categorie commune à un ensemble important de pages. Cela donnerait l&amp;#039;impression de gagner du temps, mais l&amp;#039;ajout ou la suppression d&amp;#039;un tag de categorie dans le Template n&amp;#039;ajoute, ni supprime les listages à ou de la page Categorie des pages qui utilisent ce Template, jusqu&amp;#039;à ce qu&amp;#039;on édite une page qui utilise ce Template.&amp;quot;  Pour d&amp;#039;autres informations, voir la section MediaWiki Help:Category disponible [http://meta.wikimedia.org/wiki/Help:Category#Using_templates_to_populate_categories Using templates to populate categories].&lt;br /&gt;
&lt;br /&gt;
=Utilisation des gabarits (Templates)=&lt;br /&gt;
&lt;br /&gt;
[http://www.mediawiki.org/wiki/Help:Templates/fr allez voir ici] si vous n&amp;#039;êtes pas familier des gabarits (mediawiki templates).&lt;br /&gt;
&lt;br /&gt;
Si vous créer des nouveaux gabarits , nommez les commes des sous-pages de documentation/FR :&lt;br /&gt;
* Mauvais: &amp;#039;&amp;#039;&amp;#039;montemplate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Bon: &amp;#039;&amp;#039;&amp;#039;Documentation/FR/montemplate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Gabarits existants (Templates) ==&lt;br /&gt;
&lt;br /&gt;
{|border=1 style=&amp;quot;border-collapse:collapse;&amp;quot; cellpadding=3 cellspacing=4&lt;br /&gt;
|-&lt;br /&gt;
!Nom!!Usage!!Exemple&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Abstract]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Banner]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/EnCours]]|| ||{{Documentation/FR/EnCours}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Attention]]|| ||{{Documentation/FR/Attention|Ne faite jamais ce qui est écrit ici.}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PertinenceVerifiee]]|| ||{{Documentation/FR/PertinenceVerifiee|Jean Dupond}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PremierJet]]|| || {{Documentation/FR/PremierJet}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/hbar]]|| || {{Documentation/hbar|100}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/AideDemandee]]|| || {{Documentation/FR/AideDemandee|Verifiez le texte et l&amp;#039;orthographe}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Hook]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Imported]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/LastEdited]]|| || Only works after update of mw engine to &amp;gt; 1.8&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Linux]]|| || {{Documentation/Linux}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/MasterTOC]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/EnAttente]]|| || {{Documentation/FR/EnAttente}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Note]]|| || {{Documentation/FR/Note|Information notable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/OOo]]|| || {{Documentation/OOo}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/PlusValable]]|| || {{Documentation/FR/PlusValable|0.5}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/PDF]]|| || {{Documentation/PDF}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/PRODUCTNAME]]|| || {{Documentation/PRODUCTNAME}}&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/FR/Astuce]]|| ||{{Documentation/FR/Astuce|Essayez cette astuce.}}&lt;br /&gt;
|-&lt;br /&gt;
|Template:Documentation/*TOC|| ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Template:Documentation/Windows]]|| ||{{Documentation/Windows}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Contenu Graphique=&lt;br /&gt;
&lt;br /&gt;
Pour les images , voici quelques principes généraux :&lt;br /&gt;
# Utilisez la page des descriptions des images pour préciser le status legal de l&amp;#039;image et de son usage.&lt;br /&gt;
# Utilisez une description et un titre unique.&lt;br /&gt;
# Si possible n&amp;#039;adaptez pas le format et la taille de l&amp;#039;image avant de l&amp;#039;envoyer sur le serveur, utilisez la vignette MediaWiki pour faire figurer l&amp;#039;image.&lt;br /&gt;
# Editer l&amp;#039;image si necessaire pour etre sur de ne faire apparaitre que ce qui est important d&amp;#039;une facon claire et visible.&lt;br /&gt;
# Keep in mind that people may be translating the page where you are placing an image.  Try not to include callouts or other extra text on the image.&lt;br /&gt;
# JPG is usually best for photos, SVG, for icons, logos etc, and PNG for screen captures.  Try not to use BMP.&lt;br /&gt;
&lt;br /&gt;
You can use the MediaWiki Image thumb feature to &amp;quot;wrap&amp;quot; your illustrations in an image box.  This image box includes a spot for an image caption.  The syntax is &amp;#039;&amp;#039;&amp;#039;&amp;lt;nowiki&amp;gt;[[Image:image.png|thumb|position|size|Image caption]]&amp;lt;/nowiki&amp;gt;&amp;#039;&amp;#039;&amp;#039;, where:&lt;br /&gt;
* thumb = thumbnail the image and wrap in an image box&lt;br /&gt;
* position = position on page. &amp;quot;none&amp;quot; places the image on the left of the frame with no text wrapping. &amp;quot;left&amp;quot; and &amp;quot;right&amp;quot; places the image on the left or right of the page with full text wrapping.&lt;br /&gt;
* size = max width in pixels for the image.  If the image is larger than this value it is scaled down.  If the image is smaller it is left as is.&lt;br /&gt;
If you do not declare a position and size, the image is scaled to a small thumbnail, and defaults to the right hand side of the page with full text wrapping.&lt;br /&gt;
&lt;br /&gt;
An example using &amp;lt;nowiki&amp;gt;[[Image:LoadSaveOptions.png|thumb|none|500px|An example image caption]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:LoadSaveOptions.png|thumb|none|500px|An example image caption]]&lt;br /&gt;
&lt;br /&gt;
=Linking=&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18655</id>
		<title>Non-code extensions FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18655"/>
		<updated>2006-10-14T12:40:37Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Packages du Gallery */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;traduction en cours ... sur la base de :&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Non-code_extensions&lt;br /&gt;
&lt;br /&gt;
{{Extensions}}&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Packages UNO: Principes de base =&lt;br /&gt;
&lt;br /&gt;
Le concept de déploiement des extensions OpenOffice.org basé sur les packages UNO n&amp;#039;est pas limité au code. Il est également possible d&amp;#039;installer d&amp;#039;autres choses dans des packages faciles d&amp;#039;utilisation, comme des modèles, des autotextes etc. Vous trouverez ci-dessous une explication du fonctionnement de base. Elle est destinée aux utilisateurs avancés et aux administrateurs système. La plupart des points abordés ici sont expliqués de façon plus détaillée et plus compréhensible à d&amp;#039;autres endroits. Le sujet de la documentation ci-dessous est de présenter une vue générale et d&amp;#039;expliquer les principes de base. Si vous souhaitez en savoir plus sur UNO, vous pouvez consulter notre [http://wiki.services.openoffice.org/wiki/Uno wiki UNO] ou les pages web du  [http://udk.openoffice.org project UDK].&lt;br /&gt;
&lt;br /&gt;
Toutes les informations fournies ici se rapportent à OpenOffice.org 2.0.4. Les différences pouvant exister avec des versions plus anciennes ne sont pas expliquées ici, bien que l&amp;#039;on puisse mentionner explicitement les choses apparues pour la première fois dans la 2.0.4.&lt;br /&gt;
&lt;br /&gt;
Les packages UNO ne sont rien d&amp;#039;autre que des dossiers zippés avec des données supplémentaires et des méta-données décrivant le contenu. Il peuvent être déployés par l&amp;#039;interface du Gestionnaire de packages intégré à OOo (&amp;quot;Outils - Gestionnaire de packages&amp;quot;) ou grace à l&amp;#039;outil en ligne de commande “unopkg” qui se trouve dans le répertoire &amp;quot;program&amp;quot; de OOo. Ce dernier permet non seulement le déploiement d&amp;#039;un package pour un utilisateur, mais également pour tous les utilisateurs avec le paramètre optionnel &amp;quot;--shared”. Quand les packages sont installés, leur contenu est recopié à des emplacements privés bien définis sous “share/uno_packages” ou “user/uno_packages”, selon la portée de l&amp;#039;installation du package (installation système ou simple utilisateur). On entend par &amp;quot;Privé&amp;quot; : ne pas écrire de code qui se fie à la structure particulière du composant UNO décompressé, l&amp;#039;accès aux fichiers compressés doit utiliser un API défini qui se charge des détails pour l&amp;#039;appelant. Des fichiers en dehors des dossiers &amp;quot;uno_packages&amp;quot; ne devraient jamais être affectés, à la seule exception dont l&amp;#039;explication se trouve ici [http://www.openoffice.org/issues/show_bug.cgi?id=70283 bug]: Des macros Basic dans des packages UNO doivent toujours être enregistrées dans un fichier xlc se trouvant dans l&amp;#039;un des répertoires &amp;quot;basic&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Extensions comportant des services UNO (code) ==&lt;br /&gt;
&lt;br /&gt;
Si un package UNO comporte un composant écrit en Java, C++ ou Python, ce dernier doit rendre publique sa fonctionnalité afin d&amp;#039;être fonctionnel au sein de OpenOffice.org. Dans les développements basés sur UNO, un ensemble de fonctionnalités défini est appelé un &amp;quot;service&amp;quot;. Ceux-ci sont identifiés et on y accède par leurs noms de service. Un composant qui met en oeuvre de tels services doit informer les autres de son identification. Aujourd&amp;#039;hui tous les composants exportent une fonction qui peut être appélée par unopkg et qui va obliger le composant à écrire toutes les informations nécessaires dans le fichier de registre des services qui est créé et maintenu à l&amp;#039;intérieur d&amp;#039;un dossier „uno_package“. Lorsque OpenOffice.org se sert de son gestionnaire de service pour rechercher des services UNO disponibles, il regardera non seulement dans le registre des services (services.rdb) au sein du répertoire principal du programme (contenant toutes les informations sur les &amp;quot;services internes&amp;quot;), mais également dans tous les fichiers de registre se trouvant dans les dossiers “uno_packages”.&lt;br /&gt;
&lt;br /&gt;
OOo n&amp;#039;est capable d&amp;#039;instancier des services UNO par leurs noms que s&amp;#039;il en connaît l&amp;#039;existence. Ceci est facile pour des services qui remplacent ceux déjà présents en &amp;quot;interne&amp;quot; puisqu&amp;#039;OOo les connaît déjà et s&amp;#039;en sert couramment, mais comme la plupart des composants fournissent de nouveaux services, il doit exister autre chose qui permet à OOo de s&amp;#039;en servir bien que lui étant inconnus lors de la compilation. Pour ces cas précis, les composants UNO doivent fournir des données complémentaires sur le moment auquel le chargement d&amp;#039;un service donné doit s&amp;#039;effectuer. Ces &amp;quot;données de composant additionnelles&amp;quot; sont fournies dans les fichiers de configuration de OOo. &lt;br /&gt;
&lt;br /&gt;
Un exemple serait un composant de filtre de document dans lequel les données complémentaires qui doivent être fournies consistent (entre autres) en le type de fichier que le filtre sait charger. Un composant de filtre précis pourrait se déclarer capable de charger des fichiers WordPerfect. Ainsi, si un utilisateur choisit ce filtre pour charger un ficher dans l&amp;#039;application alors OOo trouverait les données déclarées en recherchant toutes données contenant le type de fichier souhaité (wps), instancierait le composant de filtre par son nom de service tel que découvert dans ces données et ensuite s&amp;#039;en servir pour charger le fichier dans l&amp;#039;application. Chaque filtre déjà présent dans OOo a ses propres données de configuration et les filtres de conversion de documents dans les packages UNO fournissent leurs propres données de configuration de manière à complémenter celles déjà présentes dans le produit.&lt;br /&gt;
&lt;br /&gt;
== Support des Packages dans le Gestionnaire de Configuration ==&lt;br /&gt;
Le Gestionnaire de Configuration d&amp;#039;OpenOffice.org possède également la capacité à rechercher dans un ensemble de dossiers extensibles de la même manière que le Gestionnaire de Services. S&amp;#039;il trouve plusieurs fichiers de configuration dans ces dossiers contenant des données pour les mêmes éléments dans l&amp;#039;arborescence des entrées de configuration, soit il les fusionnera, soit il remplacera des données d&amp;#039;ordre hiérarchique inférieur par des données d&amp;#039;ordre hiérarchique supérieur, selon le type de données de configuration. Les données de configuration &amp;quot;utilisateur&amp;quot; ont toujours précédence sur les données de configuration préinstallées se trouvant dans la couche partagée (&amp;quot;share&amp;quot;). Les données de configuration des packages UNO se situent entre ces deux extrêmes : les données de configuration partagées des packages UNO ont un ordre hiérarchique supérieur à la couche partagée pré-installée, mais un ordre hiérarchique inférieur aux données de configuration &amp;quot;utilisateur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Il demeure la question suivante : quelles données sont fusionnées lorsqu&amp;#039;il y a au moins deux couches de configuration ?&lt;br /&gt;
&lt;br /&gt;
Le Gestionnaire de Configuration a tendance à prendre ses informations dans des fichiers xml (portant l&amp;#039;extension de fichier xcu) avec des éléments typés. Il supporte quelques types de base, des types structurés qui doivent être définis dans des fichiers de schéma (portant l&amp;#039;extension de fichier xcs) et fait une liste de tous ces types. Ceux-ci ne peuvent pas être étendus. Si la configuration découvre des valeurs différentes de celles dans les différentes couches, c&amp;#039;est la valeur de l&amp;#039;ordre hiérarchique supérieur qui est retenue. Pour la fusion d&amp;#039;éléments de configuration et par ce biais l&amp;#039;extension de la fonctionnalité qui en dépend nécessite le type &amp;quot;set&amp;quot;. Pour mieux comprendre son fonctionnement, regardez dans [[Configuration_schema_path_settings|configuration schema]] mentionné dans la section &amp;quot;Configuration des Chemins&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Un composant peut étendre ou modifier la configuration de OpenOffice.org en lui fournissant des fichiers xcu dans son package qui remplaceront ou étendront (fusion) des entrées de configuration dans OpenOffice.org. Il peut également disposer de ses propres entrées de configuration s&amp;#039;il fournit des fichiers de schéma (xcs) dans son package.&lt;br /&gt;
&lt;br /&gt;
Il existe un autre cas d&amp;#039;utilisation (relativement évident) du principe de couches du gestionnaire de configuration : le remplacement des entrées de configuration de OpenOffice.org au niveau de tous les utilisateurs (&amp;quot;all users&amp;quot;). Un administrateur peut personnaliser l&amp;#039;installation de OpenOffice.org dans son propre compte utilisateur, et puis ensuite prendre les fichiers xcu créés contenant les personnalisations et les inclure dans un package qu&amp;#039;il installera par la suite avec &amp;quot;unopkg add --shared&amp;quot; chaque fois qu&amp;#039;il installera, réinstallera ou mettra à jour OpenOffice.org. Il n&amp;#039;y aura ainsi aucun besoin d&amp;#039;éditer les fichiers xcu dans &amp;quot;share/registry&amp;quot; à la main !&lt;br /&gt;
&lt;br /&gt;
Le principe des couches du registre de services et de la configuration sont les principes de base qui rendent le système de packages UNO à la fois solide et flexible.&lt;br /&gt;
&lt;br /&gt;
= Configuration des Chemins =&lt;br /&gt;
Quelques données d&amp;#039;OpenOffice.org ne sont pas stockées dans les fichiers de configuration xcu mais ailleurs dans le système de fichiers, comme, par exemple, les modèles de documents, l&amp;#039;autotexte, le contenu de la galerie, etc. Bien entendu ce contenu doit pouvoir être déployé dans des packages, mais dans ce cas, d&amp;#039;ordinaire, vous ne souhaitez pas remplacer le contenu existant, vous souhaitez lui ajouter quelque chose. Aussi l&amp;#039;accès à ces fichiers doit également respecter un principe de couches. OpenOffice.org dispose de quelques composants qui gèrent l&amp;#039;accès aux fichiers. Nous aurions pu étendre ces composants de la  même façon que nous avons étendu le Gestionnaire de Configuration ou le Gestionnaire de Services (en les rendant capables d&amp;#039;utiliser explicitement des couches), mais nous avons décidé de réutiliser la capacité déjà disponible du Gestionnaire de Configuration.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;endroit où sont recherchés ces fichiers est défini dans la configuration soit comme un simple chemin, soit comme une liste de chemins (&amp;quot;multichemin&amp;quot;). Malheureusement, une telle liste ne peut qu&amp;#039;être remplacée dans les couches les plus hautes et non étendue, aussi avons-nous besoin d&amp;#039;un nouveau schéma de configuration pour les chemins, nouveau schéma qui utilise des &amp;quot;ensembles&amp;quot; au lieu de &amp;quot;listes&amp;quot; comme ils peuvent être étendus par des packages. Nous utilisons ce nouveau schéma pour les chemins à partir d&amp;#039;OpenOffice.org 2.0.4. Nous avons gardé l&amp;#039;ancien schéma et ses données pour des raisons de compatibilité et porterons ces réglages vers les nouvelles données. L&amp;#039;ancien schéma sera supprimé dans OpenOffice.org 3.0.&lt;br /&gt;
&lt;br /&gt;
Si vous jetez un coup d&amp;#039;oeil aux entrées des &amp;quot;Chemins&amp;quot; dans la boîte de dialogue &amp;quot;Options&amp;quot; dans OOo2.0.4 vous remarquerez que toutes les parties des multichemins n&amp;#039;y sont pas montrées. Dans les versions antérieures  d&amp;#039;OOo, vous pouviez voir habituellement deux dossiers pour les modèles par exemple :  $(share)/templates et $(user)/templates, où &amp;quot;$(share)&amp;quot; et &amp;quot;$(user) sont des variables pour les dossiers partage (share) et utilisateur (user) de l&amp;#039;installation particulière. Vous pourriez voir de même tous les dossiers supplémentaires que l&amp;#039;administrateur ou l&amp;#039;utilisateur ont pu ajouter. Dans OOo2.0.4 vous continuerez de voir $(user)/templates et ces dossiers additionnels (si jamais il y en a), mais vous ne verrez plus $(share)/templates à cet endroit-ci. Si des packages contenant des modèles de documents sont installés, leur dossier ne sera pas montré ici non plus, ce dialogue n&amp;#039;est désormais qu&amp;#039;un outil pour permettre à l&amp;#039;utilisateur d&amp;#039;adapter les réglages qui sont sous son contrôle direct.&lt;br /&gt;
&lt;br /&gt;
       [[Image:Dialog_Tools_Options_204.png]]&lt;br /&gt;
&lt;br /&gt;
=Packages de Modèles=&lt;br /&gt;
&lt;br /&gt;
Un package UNO pour les modèles de documents est plutôt simple. Il contient principalement les modèles, organisés en des répertoires qui définissent les catégories de modèles pour le Gestionnaire de Modèles de Documents. De plus, un fichier Paths.xcu doit être fourni, fichier qui enregistre le package dans l&amp;#039;ensemble des dossiers de modèles de documents. Ce fichier contient l&amp;#039;URL du dossier où les modèles du package seront décompressés. Comme il s&amp;#039;agit là d&amp;#039;une inconnue lors de la création du package, une variable est utilisée dans l&amp;#039;URL, remplacée par le gestionnaire de packages quand il copie le fichier xcu à son emplacement final. L&amp;#039;avantage réside en ce que cette variable sera toujours la même pour chaque package de modèles et qu&amp;#039;ainsi le créateur d&amp;#039;un tel package n&amp;#039;aura aucun besoin de la créer lui-même :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Paths.xcu&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;#039;1.0&amp;#039; encoding=&amp;#039;UTF-8&amp;#039;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;oor:component-data oor:package=&amp;quot;org.openoffice.Office&amp;quot; &lt;br /&gt;
    oor:name=&amp;quot;Paths&amp;quot; xmlns:install=&amp;quot;http://openoffice.org/2004/installation&amp;quot; &lt;br /&gt;
    xmlns:oor=&amp;quot;http://openoffice.org/2001/registry&amp;quot; &lt;br /&gt;
    xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;node oor:name=&amp;quot;Paths&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;node oor:name=&amp;quot;Template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;node oor:name=&amp;quot;InternalPaths&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;node oor:name=&amp;quot;%origin%/template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/node&amp;gt;&lt;br /&gt;
		&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/node&amp;gt;&lt;br /&gt;
&amp;lt;/oor:component-data&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exemple de Package ==&lt;br /&gt;
[http://framework.openoffice.org/files/documents/25/3702/TemplatePackage.oxt À cet endroit] se trouve un package vide pour modèles de documents prêt à être rempli de modèles.&lt;br /&gt;
&lt;br /&gt;
Le conteneur au format zip possède un dossier nommé &amp;quot;template&amp;quot;. Tout sous-dossier que vous y créerez apparaîtra comme une catégorie de modèles dans les dialogues de modèles d&amp;#039;OOo. Les modèles peuvent être déposés dans ces sous-dossiers. Le titre du modèle sera emprunté aux métadonnées du document (les propriétés du document) ou au nom du fichier  si le titre n&amp;#039;est pas positionné dans les métadonnées. Si un de vos sous-dossiers a le nom d&amp;#039;une catégorie de modèles déjà présente, les modèles du package seront ajoutés à cette catégorie par le composant des modèles d&amp;#039;OpenOffice.org. Essayez, c&amp;#039;est plus simple à faire qu&amp;#039;à expliquer.&lt;br /&gt;
&lt;br /&gt;
== Localisation des modèles et des catégories de modèles ==&lt;br /&gt;
Les titres des catégories et modèles peuvent être pris aux noms des dossiers et fichiers. Ces noms peuvent être traduits  et utiliser tous les caractères que le conteneur zip et le (ou les) système de fichiers cible autorisent. Il peut arriver que les modèles soient installés sur des systèmes de fichiers où l&amp;#039;on rencontre des problèmes avec les noms  de catégories (les noms de dossiers) traduits. Le composant des Modèles de Documents permet de fournir ces noms traduits dans un fichier différent. Les noms traduits des modèles de documents peuvent être enregistrés dans les métadonnées du document (les propriétés du document) de façon à ce qu&amp;#039;aucun problème ne survienne ici.&lt;br /&gt;
&lt;br /&gt;
Le fichier de localisation s&amp;#039;appelle &amp;quot;groupuinames.xml&amp;quot; et prend place dans le sous-dossier &amp;quot;template&amp;quot; du package. Son contenu s&amp;#039;appréhende directement. Voici un exemple d&amp;#039;adaptation française de quelques dossiers qui utilisent des noms de fichiers en anglais :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;groupuinames.xml&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;groupuinames:template-group-list xmlns:groupuinames=&amp;quot;http://openoffice.org/2006/groupuinames&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;educate&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Éducation&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;layout&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Arrière-plans de présentation&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;misc&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Divers&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;officorr&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Correspondance d&amp;#039;affaires&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;offimisc&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Autres documents d&amp;#039;affaires&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;personal&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Correspondance privée et documents&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;presnt&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Présentations&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/groupuinames:template-group-list&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Packages multilingues de modèles ==&lt;br /&gt;
Des packages multilingues de modèles sont également possibles. Ils nécessitent d&amp;#039;une part une légère modification de la ligne 13 du fichier Paths.xcu :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Paths.xcu&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;#039;1.0&amp;#039; encoding=&amp;#039;UTF-8&amp;#039;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;oor:component-data oor:package=&amp;quot;org.openoffice.Office&amp;quot;&lt;br /&gt;
    oor:name=&amp;quot;Paths&amp;quot; xmlns:install=&amp;quot;http://openoffice.org/2004/installation&amp;quot; &lt;br /&gt;
    xmlns:oor=&amp;quot;http://openoffice.org/2001/registry&amp;quot;&lt;br /&gt;
    xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;node oor:name=&amp;quot;Paths&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;node oor:name=&amp;quot;Template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;node oor:name=&amp;quot;InternalPaths&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;node oor:name=&amp;quot;%origin%/template/$(vlang)&amp;quot; oor:op=&amp;quot;fuse&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/node&amp;gt;&lt;br /&gt;
		&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/oor:component-data&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et, d&amp;#039;autre part, la création de dossiers supplémentaires. Il s&amp;#039;agit des dossiers qui contiendront les modèles, sous-dossiers du dossier &amp;quot;template&amp;quot;, et qui  auront comme nom les codes ISO des langages  fournis par les packs de langues d&amp;#039;OOo. Vous trouverez [http://framework.openoffice.org/files/documents/25/3706/MultiLanguageTemplatePackage.oxt un deuxième package vide] qui fournit l&amp;#039;infrastructure d&amp;#039;un tel package. Utilisez-le et placez les modèles en allemand dans le dossier &amp;quot;de&amp;quot;, ceux en anglais dans le dossier &amp;quot;en-US&amp;quot;, ceux en français dans le dossier &amp;quot;fr&amp;quot; etc.  Des dossiers vides ne posent pas de problème. Chaque fichier de localisation (groupuinames.xml) doit désormais être placé dans le dossier correspondant au langage qu&amp;#039;il utilise et non plus directement dans le dossier  &amp;quot;template&amp;quot; comme dans le cas d&amp;#039;un package monolingue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Packages Autotexte =&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a été expliqué ci-dessus par rapport aux pacakges de modèles s&amp;#039;applique également aux packages autotextes. Le fichier comporte alors, à la place d&amp;#039;une valeur pour le chemin du &amp;quot;Template&amp;quot;, une valeur correspondant au chemin &amp;quot;AutoTexte&amp;quot;. Un exemple d&amp;#039;un tel package se trouve [http://framework.openoffice.org/files/documents/25/3710/AutoTextPackage.oxt ici]. Cet exemple peut être utilisé pour fournir des fichiers autotexte. A l&amp;#039;heure actuelle, il n&amp;#039;existe aucune méthode d&amp;#039;export pour ces fichiers, il est donc aussi simple de copier les fichiers &amp;quot;*.bau&amp;quot; à la main qui ont été créés directement dans le package. De la même manière, on peut créer des packages d&amp;#039;autotextes localisés dans la langue de son choix: il suffit de placer les fichiers dans des sous-dossiers portant des noms conformes aux codes langue ISO, comme cela est indiqué dans le dossier &amp;quot;share/autotext&amp;quot;. Contrairement aux packages de modèles, le chemin de l&amp;#039;autotexte ne nécessite pas d&amp;#039;inclure &amp;quot;$(vlang)&amp;quot; pour obtenir des packages multilingues puisque le composant gérant les autotextes implémente déjà en interne l&amp;#039;accès indépendamment de la langue.&lt;br /&gt;
&lt;br /&gt;
Une remarque toutefois qui pose parfois des problèmes lors du déploiement de packages autotextes: l&amp;#039;interface graphique de l&amp;#039;utilisateur permet à l&amp;#039;heure actuelle d&amp;#039;enregistrer les autotextes dans des endroits arbitraires. Ceci est une erreur de fonctionnement ou [http://www.openoffice.org/issues/show_bug.cgi?id=70410 bug] qui devrai être corrigée dans des versions futures de OpenOffice.org. Tout changement appliqué à des autotextes présents dans un package seront perdus lors de la désinstallation du package. Il n&amp;#039;est pas prévu qu&amp;#039;on puisse changer le contenu des packages!&lt;br /&gt;
&lt;br /&gt;
= Packages du Gallery =&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a été écrit ci-dessus s&amp;#039;applique également aux packages du Gallery. Le fichier Paths.xcu contient cette fois-ci une valeur relative au chemin du &amp;quot;Gallery&amp;quot; à place de celui des &amp;quot;Template&amp;quot;. Un exemple d&amp;#039;un package Gallery se trouve  [http://framework.openoffice.org/files/documents/25/3711/GalleryPackage.oxt ici]. On peut ainsi le remplir avec les thèmes de Gallery qu&amp;#039;on souhaite. Comme cet aspect des choses n&amp;#039;est pas aussi facile à maîtriser que cela puisse paraître, et le code a souvent tendance à provoquer des conflits de noms entre les différents fichiers de thème, il est déconseillé ne pas mettre en oeuvre des packages de Gallery tant que le bug référencé  [http://www.openoffice.org/issues/show_bug.cgi?id=70412 ici] n&amp;#039;est pas résolu.&lt;br /&gt;
&lt;br /&gt;
= Packages pour dictionaires et wordbooks utilisateurs =&lt;br /&gt;
&lt;br /&gt;
Ce travail n&amp;#039;est pas encore achevé parce qu&amp;#039;il nécessite une refonte de l&amp;#039;accès aux fichiers se rapportant aux outils linguistiques. Revenez de temps en temps pour voir où cela en est.&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18654</id>
		<title>Non-code extensions FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18654"/>
		<updated>2006-10-14T12:40:05Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Packages du Gallery */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;traduction en cours ... sur la base de :&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Non-code_extensions&lt;br /&gt;
&lt;br /&gt;
{{Extensions}}&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Packages UNO: Principes de base =&lt;br /&gt;
&lt;br /&gt;
Le concept de déploiement des extensions OpenOffice.org basé sur les packages UNO n&amp;#039;est pas limité au code. Il est également possible d&amp;#039;installer d&amp;#039;autres choses dans des packages faciles d&amp;#039;utilisation, comme des modèles, des autotextes etc. Vous trouverez ci-dessous une explication du fonctionnement de base. Elle est destinée aux utilisateurs avancés et aux administrateurs système. La plupart des points abordés ici sont expliqués de façon plus détaillée et plus compréhensible à d&amp;#039;autres endroits. Le sujet de la documentation ci-dessous est de présenter une vue générale et d&amp;#039;expliquer les principes de base. Si vous souhaitez en savoir plus sur UNO, vous pouvez consulter notre [http://wiki.services.openoffice.org/wiki/Uno wiki UNO] ou les pages web du  [http://udk.openoffice.org project UDK].&lt;br /&gt;
&lt;br /&gt;
Toutes les informations fournies ici se rapportent à OpenOffice.org 2.0.4. Les différences pouvant exister avec des versions plus anciennes ne sont pas expliquées ici, bien que l&amp;#039;on puisse mentionner explicitement les choses apparues pour la première fois dans la 2.0.4.&lt;br /&gt;
&lt;br /&gt;
Les packages UNO ne sont rien d&amp;#039;autre que des dossiers zippés avec des données supplémentaires et des méta-données décrivant le contenu. Il peuvent être déployés par l&amp;#039;interface du Gestionnaire de packages intégré à OOo (&amp;quot;Outils - Gestionnaire de packages&amp;quot;) ou grace à l&amp;#039;outil en ligne de commande “unopkg” qui se trouve dans le répertoire &amp;quot;program&amp;quot; de OOo. Ce dernier permet non seulement le déploiement d&amp;#039;un package pour un utilisateur, mais également pour tous les utilisateurs avec le paramètre optionnel &amp;quot;--shared”. Quand les packages sont installés, leur contenu est recopié à des emplacements privés bien définis sous “share/uno_packages” ou “user/uno_packages”, selon la portée de l&amp;#039;installation du package (installation système ou simple utilisateur). On entend par &amp;quot;Privé&amp;quot; : ne pas écrire de code qui se fie à la structure particulière du composant UNO décompressé, l&amp;#039;accès aux fichiers compressés doit utiliser un API défini qui se charge des détails pour l&amp;#039;appelant. Des fichiers en dehors des dossiers &amp;quot;uno_packages&amp;quot; ne devraient jamais être affectés, à la seule exception dont l&amp;#039;explication se trouve ici [http://www.openoffice.org/issues/show_bug.cgi?id=70283 bug]: Des macros Basic dans des packages UNO doivent toujours être enregistrées dans un fichier xlc se trouvant dans l&amp;#039;un des répertoires &amp;quot;basic&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Extensions comportant des services UNO (code) ==&lt;br /&gt;
&lt;br /&gt;
Si un package UNO comporte un composant écrit en Java, C++ ou Python, ce dernier doit rendre publique sa fonctionnalité afin d&amp;#039;être fonctionnel au sein de OpenOffice.org. Dans les développements basés sur UNO, un ensemble de fonctionnalités défini est appelé un &amp;quot;service&amp;quot;. Ceux-ci sont identifiés et on y accède par leurs noms de service. Un composant qui met en oeuvre de tels services doit informer les autres de son identification. Aujourd&amp;#039;hui tous les composants exportent une fonction qui peut être appélée par unopkg et qui va obliger le composant à écrire toutes les informations nécessaires dans le fichier de registre des services qui est créé et maintenu à l&amp;#039;intérieur d&amp;#039;un dossier „uno_package“. Lorsque OpenOffice.org se sert de son gestionnaire de service pour rechercher des services UNO disponibles, il regardera non seulement dans le registre des services (services.rdb) au sein du répertoire principal du programme (contenant toutes les informations sur les &amp;quot;services internes&amp;quot;), mais également dans tous les fichiers de registre se trouvant dans les dossiers “uno_packages”.&lt;br /&gt;
&lt;br /&gt;
OOo n&amp;#039;est capable d&amp;#039;instancier des services UNO par leurs noms que s&amp;#039;il en connaît l&amp;#039;existence. Ceci est facile pour des services qui remplacent ceux déjà présents en &amp;quot;interne&amp;quot; puisqu&amp;#039;OOo les connaît déjà et s&amp;#039;en sert couramment, mais comme la plupart des composants fournissent de nouveaux services, il doit exister autre chose qui permet à OOo de s&amp;#039;en servir bien que lui étant inconnus lors de la compilation. Pour ces cas précis, les composants UNO doivent fournir des données complémentaires sur le moment auquel le chargement d&amp;#039;un service donné doit s&amp;#039;effectuer. Ces &amp;quot;données de composant additionnelles&amp;quot; sont fournies dans les fichiers de configuration de OOo. &lt;br /&gt;
&lt;br /&gt;
Un exemple serait un composant de filtre de document dans lequel les données complémentaires qui doivent être fournies consistent (entre autres) en le type de fichier que le filtre sait charger. Un composant de filtre précis pourrait se déclarer capable de charger des fichiers WordPerfect. Ainsi, si un utilisateur choisit ce filtre pour charger un ficher dans l&amp;#039;application alors OOo trouverait les données déclarées en recherchant toutes données contenant le type de fichier souhaité (wps), instancierait le composant de filtre par son nom de service tel que découvert dans ces données et ensuite s&amp;#039;en servir pour charger le fichier dans l&amp;#039;application. Chaque filtre déjà présent dans OOo a ses propres données de configuration et les filtres de conversion de documents dans les packages UNO fournissent leurs propres données de configuration de manière à complémenter celles déjà présentes dans le produit.&lt;br /&gt;
&lt;br /&gt;
== Support des Packages dans le Gestionnaire de Configuration ==&lt;br /&gt;
Le Gestionnaire de Configuration d&amp;#039;OpenOffice.org possède également la capacité à rechercher dans un ensemble de dossiers extensibles de la même manière que le Gestionnaire de Services. S&amp;#039;il trouve plusieurs fichiers de configuration dans ces dossiers contenant des données pour les mêmes éléments dans l&amp;#039;arborescence des entrées de configuration, soit il les fusionnera, soit il remplacera des données d&amp;#039;ordre hiérarchique inférieur par des données d&amp;#039;ordre hiérarchique supérieur, selon le type de données de configuration. Les données de configuration &amp;quot;utilisateur&amp;quot; ont toujours précédence sur les données de configuration préinstallées se trouvant dans la couche partagée (&amp;quot;share&amp;quot;). Les données de configuration des packages UNO se situent entre ces deux extrêmes : les données de configuration partagées des packages UNO ont un ordre hiérarchique supérieur à la couche partagée pré-installée, mais un ordre hiérarchique inférieur aux données de configuration &amp;quot;utilisateur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Il demeure la question suivante : quelles données sont fusionnées lorsqu&amp;#039;il y a au moins deux couches de configuration ?&lt;br /&gt;
&lt;br /&gt;
Le Gestionnaire de Configuration a tendance à prendre ses informations dans des fichiers xml (portant l&amp;#039;extension de fichier xcu) avec des éléments typés. Il supporte quelques types de base, des types structurés qui doivent être définis dans des fichiers de schéma (portant l&amp;#039;extension de fichier xcs) et fait une liste de tous ces types. Ceux-ci ne peuvent pas être étendus. Si la configuration découvre des valeurs différentes de celles dans les différentes couches, c&amp;#039;est la valeur de l&amp;#039;ordre hiérarchique supérieur qui est retenue. Pour la fusion d&amp;#039;éléments de configuration et par ce biais l&amp;#039;extension de la fonctionnalité qui en dépend nécessite le type &amp;quot;set&amp;quot;. Pour mieux comprendre son fonctionnement, regardez dans [[Configuration_schema_path_settings|configuration schema]] mentionné dans la section &amp;quot;Configuration des Chemins&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Un composant peut étendre ou modifier la configuration de OpenOffice.org en lui fournissant des fichiers xcu dans son package qui remplaceront ou étendront (fusion) des entrées de configuration dans OpenOffice.org. Il peut également disposer de ses propres entrées de configuration s&amp;#039;il fournit des fichiers de schéma (xcs) dans son package.&lt;br /&gt;
&lt;br /&gt;
Il existe un autre cas d&amp;#039;utilisation (relativement évident) du principe de couches du gestionnaire de configuration : le remplacement des entrées de configuration de OpenOffice.org au niveau de tous les utilisateurs (&amp;quot;all users&amp;quot;). Un administrateur peut personnaliser l&amp;#039;installation de OpenOffice.org dans son propre compte utilisateur, et puis ensuite prendre les fichiers xcu créés contenant les personnalisations et les inclure dans un package qu&amp;#039;il installera par la suite avec &amp;quot;unopkg add --shared&amp;quot; chaque fois qu&amp;#039;il installera, réinstallera ou mettra à jour OpenOffice.org. Il n&amp;#039;y aura ainsi aucun besoin d&amp;#039;éditer les fichiers xcu dans &amp;quot;share/registry&amp;quot; à la main !&lt;br /&gt;
&lt;br /&gt;
Le principe des couches du registre de services et de la configuration sont les principes de base qui rendent le système de packages UNO à la fois solide et flexible.&lt;br /&gt;
&lt;br /&gt;
= Configuration des Chemins =&lt;br /&gt;
Quelques données d&amp;#039;OpenOffice.org ne sont pas stockées dans les fichiers de configuration xcu mais ailleurs dans le système de fichiers, comme, par exemple, les modèles de documents, l&amp;#039;autotexte, le contenu de la galerie, etc. Bien entendu ce contenu doit pouvoir être déployé dans des packages, mais dans ce cas, d&amp;#039;ordinaire, vous ne souhaitez pas remplacer le contenu existant, vous souhaitez lui ajouter quelque chose. Aussi l&amp;#039;accès à ces fichiers doit également respecter un principe de couches. OpenOffice.org dispose de quelques composants qui gèrent l&amp;#039;accès aux fichiers. Nous aurions pu étendre ces composants de la  même façon que nous avons étendu le Gestionnaire de Configuration ou le Gestionnaire de Services (en les rendant capables d&amp;#039;utiliser explicitement des couches), mais nous avons décidé de réutiliser la capacité déjà disponible du Gestionnaire de Configuration.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;endroit où sont recherchés ces fichiers est défini dans la configuration soit comme un simple chemin, soit comme une liste de chemins (&amp;quot;multichemin&amp;quot;). Malheureusement, une telle liste ne peut qu&amp;#039;être remplacée dans les couches les plus hautes et non étendue, aussi avons-nous besoin d&amp;#039;un nouveau schéma de configuration pour les chemins, nouveau schéma qui utilise des &amp;quot;ensembles&amp;quot; au lieu de &amp;quot;listes&amp;quot; comme ils peuvent être étendus par des packages. Nous utilisons ce nouveau schéma pour les chemins à partir d&amp;#039;OpenOffice.org 2.0.4. Nous avons gardé l&amp;#039;ancien schéma et ses données pour des raisons de compatibilité et porterons ces réglages vers les nouvelles données. L&amp;#039;ancien schéma sera supprimé dans OpenOffice.org 3.0.&lt;br /&gt;
&lt;br /&gt;
Si vous jetez un coup d&amp;#039;oeil aux entrées des &amp;quot;Chemins&amp;quot; dans la boîte de dialogue &amp;quot;Options&amp;quot; dans OOo2.0.4 vous remarquerez que toutes les parties des multichemins n&amp;#039;y sont pas montrées. Dans les versions antérieures  d&amp;#039;OOo, vous pouviez voir habituellement deux dossiers pour les modèles par exemple :  $(share)/templates et $(user)/templates, où &amp;quot;$(share)&amp;quot; et &amp;quot;$(user) sont des variables pour les dossiers partage (share) et utilisateur (user) de l&amp;#039;installation particulière. Vous pourriez voir de même tous les dossiers supplémentaires que l&amp;#039;administrateur ou l&amp;#039;utilisateur ont pu ajouter. Dans OOo2.0.4 vous continuerez de voir $(user)/templates et ces dossiers additionnels (si jamais il y en a), mais vous ne verrez plus $(share)/templates à cet endroit-ci. Si des packages contenant des modèles de documents sont installés, leur dossier ne sera pas montré ici non plus, ce dialogue n&amp;#039;est désormais qu&amp;#039;un outil pour permettre à l&amp;#039;utilisateur d&amp;#039;adapter les réglages qui sont sous son contrôle direct.&lt;br /&gt;
&lt;br /&gt;
       [[Image:Dialog_Tools_Options_204.png]]&lt;br /&gt;
&lt;br /&gt;
=Packages de Modèles=&lt;br /&gt;
&lt;br /&gt;
Un package UNO pour les modèles de documents est plutôt simple. Il contient principalement les modèles, organisés en des répertoires qui définissent les catégories de modèles pour le Gestionnaire de Modèles de Documents. De plus, un fichier Paths.xcu doit être fourni, fichier qui enregistre le package dans l&amp;#039;ensemble des dossiers de modèles de documents. Ce fichier contient l&amp;#039;URL du dossier où les modèles du package seront décompressés. Comme il s&amp;#039;agit là d&amp;#039;une inconnue lors de la création du package, une variable est utilisée dans l&amp;#039;URL, remplacée par le gestionnaire de packages quand il copie le fichier xcu à son emplacement final. L&amp;#039;avantage réside en ce que cette variable sera toujours la même pour chaque package de modèles et qu&amp;#039;ainsi le créateur d&amp;#039;un tel package n&amp;#039;aura aucun besoin de la créer lui-même :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Paths.xcu&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;#039;1.0&amp;#039; encoding=&amp;#039;UTF-8&amp;#039;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;oor:component-data oor:package=&amp;quot;org.openoffice.Office&amp;quot; &lt;br /&gt;
    oor:name=&amp;quot;Paths&amp;quot; xmlns:install=&amp;quot;http://openoffice.org/2004/installation&amp;quot; &lt;br /&gt;
    xmlns:oor=&amp;quot;http://openoffice.org/2001/registry&amp;quot; &lt;br /&gt;
    xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;node oor:name=&amp;quot;Paths&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;node oor:name=&amp;quot;Template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;node oor:name=&amp;quot;InternalPaths&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;node oor:name=&amp;quot;%origin%/template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/node&amp;gt;&lt;br /&gt;
		&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/node&amp;gt;&lt;br /&gt;
&amp;lt;/oor:component-data&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exemple de Package ==&lt;br /&gt;
[http://framework.openoffice.org/files/documents/25/3702/TemplatePackage.oxt À cet endroit] se trouve un package vide pour modèles de documents prêt à être rempli de modèles.&lt;br /&gt;
&lt;br /&gt;
Le conteneur au format zip possède un dossier nommé &amp;quot;template&amp;quot;. Tout sous-dossier que vous y créerez apparaîtra comme une catégorie de modèles dans les dialogues de modèles d&amp;#039;OOo. Les modèles peuvent être déposés dans ces sous-dossiers. Le titre du modèle sera emprunté aux métadonnées du document (les propriétés du document) ou au nom du fichier  si le titre n&amp;#039;est pas positionné dans les métadonnées. Si un de vos sous-dossiers a le nom d&amp;#039;une catégorie de modèles déjà présente, les modèles du package seront ajoutés à cette catégorie par le composant des modèles d&amp;#039;OpenOffice.org. Essayez, c&amp;#039;est plus simple à faire qu&amp;#039;à expliquer.&lt;br /&gt;
&lt;br /&gt;
== Localisation des modèles et des catégories de modèles ==&lt;br /&gt;
Les titres des catégories et modèles peuvent être pris aux noms des dossiers et fichiers. Ces noms peuvent être traduits  et utiliser tous les caractères que le conteneur zip et le (ou les) système de fichiers cible autorisent. Il peut arriver que les modèles soient installés sur des systèmes de fichiers où l&amp;#039;on rencontre des problèmes avec les noms  de catégories (les noms de dossiers) traduits. Le composant des Modèles de Documents permet de fournir ces noms traduits dans un fichier différent. Les noms traduits des modèles de documents peuvent être enregistrés dans les métadonnées du document (les propriétés du document) de façon à ce qu&amp;#039;aucun problème ne survienne ici.&lt;br /&gt;
&lt;br /&gt;
Le fichier de localisation s&amp;#039;appelle &amp;quot;groupuinames.xml&amp;quot; et prend place dans le sous-dossier &amp;quot;template&amp;quot; du package. Son contenu s&amp;#039;appréhende directement. Voici un exemple d&amp;#039;adaptation française de quelques dossiers qui utilisent des noms de fichiers en anglais :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;groupuinames.xml&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;groupuinames:template-group-list xmlns:groupuinames=&amp;quot;http://openoffice.org/2006/groupuinames&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;educate&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Éducation&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;layout&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Arrière-plans de présentation&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;misc&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Divers&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;officorr&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Correspondance d&amp;#039;affaires&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;offimisc&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Autres documents d&amp;#039;affaires&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;personal&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Correspondance privée et documents&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;presnt&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Présentations&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/groupuinames:template-group-list&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Packages multilingues de modèles ==&lt;br /&gt;
Des packages multilingues de modèles sont également possibles. Ils nécessitent d&amp;#039;une part une légère modification de la ligne 13 du fichier Paths.xcu :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Paths.xcu&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;#039;1.0&amp;#039; encoding=&amp;#039;UTF-8&amp;#039;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;oor:component-data oor:package=&amp;quot;org.openoffice.Office&amp;quot;&lt;br /&gt;
    oor:name=&amp;quot;Paths&amp;quot; xmlns:install=&amp;quot;http://openoffice.org/2004/installation&amp;quot; &lt;br /&gt;
    xmlns:oor=&amp;quot;http://openoffice.org/2001/registry&amp;quot;&lt;br /&gt;
    xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;node oor:name=&amp;quot;Paths&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;node oor:name=&amp;quot;Template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;node oor:name=&amp;quot;InternalPaths&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;node oor:name=&amp;quot;%origin%/template/$(vlang)&amp;quot; oor:op=&amp;quot;fuse&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/node&amp;gt;&lt;br /&gt;
		&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/oor:component-data&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et, d&amp;#039;autre part, la création de dossiers supplémentaires. Il s&amp;#039;agit des dossiers qui contiendront les modèles, sous-dossiers du dossier &amp;quot;template&amp;quot;, et qui  auront comme nom les codes ISO des langages  fournis par les packs de langues d&amp;#039;OOo. Vous trouverez [http://framework.openoffice.org/files/documents/25/3706/MultiLanguageTemplatePackage.oxt un deuxième package vide] qui fournit l&amp;#039;infrastructure d&amp;#039;un tel package. Utilisez-le et placez les modèles en allemand dans le dossier &amp;quot;de&amp;quot;, ceux en anglais dans le dossier &amp;quot;en-US&amp;quot;, ceux en français dans le dossier &amp;quot;fr&amp;quot; etc.  Des dossiers vides ne posent pas de problème. Chaque fichier de localisation (groupuinames.xml) doit désormais être placé dans le dossier correspondant au langage qu&amp;#039;il utilise et non plus directement dans le dossier  &amp;quot;template&amp;quot; comme dans le cas d&amp;#039;un package monolingue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Packages Autotexte =&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a été expliqué ci-dessus par rapport aux pacakges de modèles s&amp;#039;applique également aux packages autotextes. Le fichier comporte alors, à la place d&amp;#039;une valeur pour le chemin du &amp;quot;Template&amp;quot;, une valeur correspondant au chemin &amp;quot;AutoTexte&amp;quot;. Un exemple d&amp;#039;un tel package se trouve [http://framework.openoffice.org/files/documents/25/3710/AutoTextPackage.oxt ici]. Cet exemple peut être utilisé pour fournir des fichiers autotexte. A l&amp;#039;heure actuelle, il n&amp;#039;existe aucune méthode d&amp;#039;export pour ces fichiers, il est donc aussi simple de copier les fichiers &amp;quot;*.bau&amp;quot; à la main qui ont été créés directement dans le package. De la même manière, on peut créer des packages d&amp;#039;autotextes localisés dans la langue de son choix: il suffit de placer les fichiers dans des sous-dossiers portant des noms conformes aux codes langue ISO, comme cela est indiqué dans le dossier &amp;quot;share/autotext&amp;quot;. Contrairement aux packages de modèles, le chemin de l&amp;#039;autotexte ne nécessite pas d&amp;#039;inclure &amp;quot;$(vlang)&amp;quot; pour obtenir des packages multilingues puisque le composant gérant les autotextes implémente déjà en interne l&amp;#039;accès indépendamment de la langue.&lt;br /&gt;
&lt;br /&gt;
Une remarque toutefois qui pose parfois des problèmes lors du déploiement de packages autotextes: l&amp;#039;interface graphique de l&amp;#039;utilisateur permet à l&amp;#039;heure actuelle d&amp;#039;enregistrer les autotextes dans des endroits arbitraires. Ceci est une erreur de fonctionnement ou [http://www.openoffice.org/issues/show_bug.cgi?id=70410 bug] qui devrai être corrigée dans des versions futures de OpenOffice.org. Tout changement appliqué à des autotextes présents dans un package seront perdus lors de la désinstallation du package. Il n&amp;#039;est pas prévu qu&amp;#039;on puisse changer le contenu des packages!&lt;br /&gt;
&lt;br /&gt;
= Packages du Gallery =&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a été écrit ci-dessus s&amp;#039;applique également aux packages du Gallery. Le fichier Paths.xcu contient cette fois-ci une valeur relative au chemin du &amp;quot;Gallery&amp;quot; à place de celui des &amp;quot;Template&amp;quot;. Un exemple d&amp;#039;un package Gallery se trouve ici: [http://framework.openoffice.org/files/documents/25/3711/GalleryPackage.oxt here]. On peut ainsi le remplir avec les thèmes de Gallery qu&amp;#039;on souhaite. Comme cet aspect des choses n&amp;#039;est pas aussi facile à maîtriser que cela puisse paraître, et le code a souvent tendance à provoquer des conflits de noms entre les différents fichiers de thème, il est déconseillé ne pas mettre en oeuvre des packages de Gallery tant que le bug référencé  [http://www.openoffice.org/issues/show_bug.cgi?id=70412 ici] n&amp;#039;est pas résolu.&lt;br /&gt;
&lt;br /&gt;
= Packages pour dictionaires et wordbooks utilisateurs =&lt;br /&gt;
&lt;br /&gt;
Ce travail n&amp;#039;est pas encore achevé parce qu&amp;#039;il nécessite une refonte de l&amp;#039;accès aux fichiers se rapportant aux outils linguistiques. Revenez de temps en temps pour voir où cela en est.&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18653</id>
		<title>Non-code extensions FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18653"/>
		<updated>2006-10-14T12:39:33Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Packages Autotexte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;traduction en cours ... sur la base de :&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Non-code_extensions&lt;br /&gt;
&lt;br /&gt;
{{Extensions}}&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Packages UNO: Principes de base =&lt;br /&gt;
&lt;br /&gt;
Le concept de déploiement des extensions OpenOffice.org basé sur les packages UNO n&amp;#039;est pas limité au code. Il est également possible d&amp;#039;installer d&amp;#039;autres choses dans des packages faciles d&amp;#039;utilisation, comme des modèles, des autotextes etc. Vous trouverez ci-dessous une explication du fonctionnement de base. Elle est destinée aux utilisateurs avancés et aux administrateurs système. La plupart des points abordés ici sont expliqués de façon plus détaillée et plus compréhensible à d&amp;#039;autres endroits. Le sujet de la documentation ci-dessous est de présenter une vue générale et d&amp;#039;expliquer les principes de base. Si vous souhaitez en savoir plus sur UNO, vous pouvez consulter notre [http://wiki.services.openoffice.org/wiki/Uno wiki UNO] ou les pages web du  [http://udk.openoffice.org project UDK].&lt;br /&gt;
&lt;br /&gt;
Toutes les informations fournies ici se rapportent à OpenOffice.org 2.0.4. Les différences pouvant exister avec des versions plus anciennes ne sont pas expliquées ici, bien que l&amp;#039;on puisse mentionner explicitement les choses apparues pour la première fois dans la 2.0.4.&lt;br /&gt;
&lt;br /&gt;
Les packages UNO ne sont rien d&amp;#039;autre que des dossiers zippés avec des données supplémentaires et des méta-données décrivant le contenu. Il peuvent être déployés par l&amp;#039;interface du Gestionnaire de packages intégré à OOo (&amp;quot;Outils - Gestionnaire de packages&amp;quot;) ou grace à l&amp;#039;outil en ligne de commande “unopkg” qui se trouve dans le répertoire &amp;quot;program&amp;quot; de OOo. Ce dernier permet non seulement le déploiement d&amp;#039;un package pour un utilisateur, mais également pour tous les utilisateurs avec le paramètre optionnel &amp;quot;--shared”. Quand les packages sont installés, leur contenu est recopié à des emplacements privés bien définis sous “share/uno_packages” ou “user/uno_packages”, selon la portée de l&amp;#039;installation du package (installation système ou simple utilisateur). On entend par &amp;quot;Privé&amp;quot; : ne pas écrire de code qui se fie à la structure particulière du composant UNO décompressé, l&amp;#039;accès aux fichiers compressés doit utiliser un API défini qui se charge des détails pour l&amp;#039;appelant. Des fichiers en dehors des dossiers &amp;quot;uno_packages&amp;quot; ne devraient jamais être affectés, à la seule exception dont l&amp;#039;explication se trouve ici [http://www.openoffice.org/issues/show_bug.cgi?id=70283 bug]: Des macros Basic dans des packages UNO doivent toujours être enregistrées dans un fichier xlc se trouvant dans l&amp;#039;un des répertoires &amp;quot;basic&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Extensions comportant des services UNO (code) ==&lt;br /&gt;
&lt;br /&gt;
Si un package UNO comporte un composant écrit en Java, C++ ou Python, ce dernier doit rendre publique sa fonctionnalité afin d&amp;#039;être fonctionnel au sein de OpenOffice.org. Dans les développements basés sur UNO, un ensemble de fonctionnalités défini est appelé un &amp;quot;service&amp;quot;. Ceux-ci sont identifiés et on y accède par leurs noms de service. Un composant qui met en oeuvre de tels services doit informer les autres de son identification. Aujourd&amp;#039;hui tous les composants exportent une fonction qui peut être appélée par unopkg et qui va obliger le composant à écrire toutes les informations nécessaires dans le fichier de registre des services qui est créé et maintenu à l&amp;#039;intérieur d&amp;#039;un dossier „uno_package“. Lorsque OpenOffice.org se sert de son gestionnaire de service pour rechercher des services UNO disponibles, il regardera non seulement dans le registre des services (services.rdb) au sein du répertoire principal du programme (contenant toutes les informations sur les &amp;quot;services internes&amp;quot;), mais également dans tous les fichiers de registre se trouvant dans les dossiers “uno_packages”.&lt;br /&gt;
&lt;br /&gt;
OOo n&amp;#039;est capable d&amp;#039;instancier des services UNO par leurs noms que s&amp;#039;il en connaît l&amp;#039;existence. Ceci est facile pour des services qui remplacent ceux déjà présents en &amp;quot;interne&amp;quot; puisqu&amp;#039;OOo les connaît déjà et s&amp;#039;en sert couramment, mais comme la plupart des composants fournissent de nouveaux services, il doit exister autre chose qui permet à OOo de s&amp;#039;en servir bien que lui étant inconnus lors de la compilation. Pour ces cas précis, les composants UNO doivent fournir des données complémentaires sur le moment auquel le chargement d&amp;#039;un service donné doit s&amp;#039;effectuer. Ces &amp;quot;données de composant additionnelles&amp;quot; sont fournies dans les fichiers de configuration de OOo. &lt;br /&gt;
&lt;br /&gt;
Un exemple serait un composant de filtre de document dans lequel les données complémentaires qui doivent être fournies consistent (entre autres) en le type de fichier que le filtre sait charger. Un composant de filtre précis pourrait se déclarer capable de charger des fichiers WordPerfect. Ainsi, si un utilisateur choisit ce filtre pour charger un ficher dans l&amp;#039;application alors OOo trouverait les données déclarées en recherchant toutes données contenant le type de fichier souhaité (wps), instancierait le composant de filtre par son nom de service tel que découvert dans ces données et ensuite s&amp;#039;en servir pour charger le fichier dans l&amp;#039;application. Chaque filtre déjà présent dans OOo a ses propres données de configuration et les filtres de conversion de documents dans les packages UNO fournissent leurs propres données de configuration de manière à complémenter celles déjà présentes dans le produit.&lt;br /&gt;
&lt;br /&gt;
== Support des Packages dans le Gestionnaire de Configuration ==&lt;br /&gt;
Le Gestionnaire de Configuration d&amp;#039;OpenOffice.org possède également la capacité à rechercher dans un ensemble de dossiers extensibles de la même manière que le Gestionnaire de Services. S&amp;#039;il trouve plusieurs fichiers de configuration dans ces dossiers contenant des données pour les mêmes éléments dans l&amp;#039;arborescence des entrées de configuration, soit il les fusionnera, soit il remplacera des données d&amp;#039;ordre hiérarchique inférieur par des données d&amp;#039;ordre hiérarchique supérieur, selon le type de données de configuration. Les données de configuration &amp;quot;utilisateur&amp;quot; ont toujours précédence sur les données de configuration préinstallées se trouvant dans la couche partagée (&amp;quot;share&amp;quot;). Les données de configuration des packages UNO se situent entre ces deux extrêmes : les données de configuration partagées des packages UNO ont un ordre hiérarchique supérieur à la couche partagée pré-installée, mais un ordre hiérarchique inférieur aux données de configuration &amp;quot;utilisateur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Il demeure la question suivante : quelles données sont fusionnées lorsqu&amp;#039;il y a au moins deux couches de configuration ?&lt;br /&gt;
&lt;br /&gt;
Le Gestionnaire de Configuration a tendance à prendre ses informations dans des fichiers xml (portant l&amp;#039;extension de fichier xcu) avec des éléments typés. Il supporte quelques types de base, des types structurés qui doivent être définis dans des fichiers de schéma (portant l&amp;#039;extension de fichier xcs) et fait une liste de tous ces types. Ceux-ci ne peuvent pas être étendus. Si la configuration découvre des valeurs différentes de celles dans les différentes couches, c&amp;#039;est la valeur de l&amp;#039;ordre hiérarchique supérieur qui est retenue. Pour la fusion d&amp;#039;éléments de configuration et par ce biais l&amp;#039;extension de la fonctionnalité qui en dépend nécessite le type &amp;quot;set&amp;quot;. Pour mieux comprendre son fonctionnement, regardez dans [[Configuration_schema_path_settings|configuration schema]] mentionné dans la section &amp;quot;Configuration des Chemins&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Un composant peut étendre ou modifier la configuration de OpenOffice.org en lui fournissant des fichiers xcu dans son package qui remplaceront ou étendront (fusion) des entrées de configuration dans OpenOffice.org. Il peut également disposer de ses propres entrées de configuration s&amp;#039;il fournit des fichiers de schéma (xcs) dans son package.&lt;br /&gt;
&lt;br /&gt;
Il existe un autre cas d&amp;#039;utilisation (relativement évident) du principe de couches du gestionnaire de configuration : le remplacement des entrées de configuration de OpenOffice.org au niveau de tous les utilisateurs (&amp;quot;all users&amp;quot;). Un administrateur peut personnaliser l&amp;#039;installation de OpenOffice.org dans son propre compte utilisateur, et puis ensuite prendre les fichiers xcu créés contenant les personnalisations et les inclure dans un package qu&amp;#039;il installera par la suite avec &amp;quot;unopkg add --shared&amp;quot; chaque fois qu&amp;#039;il installera, réinstallera ou mettra à jour OpenOffice.org. Il n&amp;#039;y aura ainsi aucun besoin d&amp;#039;éditer les fichiers xcu dans &amp;quot;share/registry&amp;quot; à la main !&lt;br /&gt;
&lt;br /&gt;
Le principe des couches du registre de services et de la configuration sont les principes de base qui rendent le système de packages UNO à la fois solide et flexible.&lt;br /&gt;
&lt;br /&gt;
= Configuration des Chemins =&lt;br /&gt;
Quelques données d&amp;#039;OpenOffice.org ne sont pas stockées dans les fichiers de configuration xcu mais ailleurs dans le système de fichiers, comme, par exemple, les modèles de documents, l&amp;#039;autotexte, le contenu de la galerie, etc. Bien entendu ce contenu doit pouvoir être déployé dans des packages, mais dans ce cas, d&amp;#039;ordinaire, vous ne souhaitez pas remplacer le contenu existant, vous souhaitez lui ajouter quelque chose. Aussi l&amp;#039;accès à ces fichiers doit également respecter un principe de couches. OpenOffice.org dispose de quelques composants qui gèrent l&amp;#039;accès aux fichiers. Nous aurions pu étendre ces composants de la  même façon que nous avons étendu le Gestionnaire de Configuration ou le Gestionnaire de Services (en les rendant capables d&amp;#039;utiliser explicitement des couches), mais nous avons décidé de réutiliser la capacité déjà disponible du Gestionnaire de Configuration.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;endroit où sont recherchés ces fichiers est défini dans la configuration soit comme un simple chemin, soit comme une liste de chemins (&amp;quot;multichemin&amp;quot;). Malheureusement, une telle liste ne peut qu&amp;#039;être remplacée dans les couches les plus hautes et non étendue, aussi avons-nous besoin d&amp;#039;un nouveau schéma de configuration pour les chemins, nouveau schéma qui utilise des &amp;quot;ensembles&amp;quot; au lieu de &amp;quot;listes&amp;quot; comme ils peuvent être étendus par des packages. Nous utilisons ce nouveau schéma pour les chemins à partir d&amp;#039;OpenOffice.org 2.0.4. Nous avons gardé l&amp;#039;ancien schéma et ses données pour des raisons de compatibilité et porterons ces réglages vers les nouvelles données. L&amp;#039;ancien schéma sera supprimé dans OpenOffice.org 3.0.&lt;br /&gt;
&lt;br /&gt;
Si vous jetez un coup d&amp;#039;oeil aux entrées des &amp;quot;Chemins&amp;quot; dans la boîte de dialogue &amp;quot;Options&amp;quot; dans OOo2.0.4 vous remarquerez que toutes les parties des multichemins n&amp;#039;y sont pas montrées. Dans les versions antérieures  d&amp;#039;OOo, vous pouviez voir habituellement deux dossiers pour les modèles par exemple :  $(share)/templates et $(user)/templates, où &amp;quot;$(share)&amp;quot; et &amp;quot;$(user) sont des variables pour les dossiers partage (share) et utilisateur (user) de l&amp;#039;installation particulière. Vous pourriez voir de même tous les dossiers supplémentaires que l&amp;#039;administrateur ou l&amp;#039;utilisateur ont pu ajouter. Dans OOo2.0.4 vous continuerez de voir $(user)/templates et ces dossiers additionnels (si jamais il y en a), mais vous ne verrez plus $(share)/templates à cet endroit-ci. Si des packages contenant des modèles de documents sont installés, leur dossier ne sera pas montré ici non plus, ce dialogue n&amp;#039;est désormais qu&amp;#039;un outil pour permettre à l&amp;#039;utilisateur d&amp;#039;adapter les réglages qui sont sous son contrôle direct.&lt;br /&gt;
&lt;br /&gt;
       [[Image:Dialog_Tools_Options_204.png]]&lt;br /&gt;
&lt;br /&gt;
=Packages de Modèles=&lt;br /&gt;
&lt;br /&gt;
Un package UNO pour les modèles de documents est plutôt simple. Il contient principalement les modèles, organisés en des répertoires qui définissent les catégories de modèles pour le Gestionnaire de Modèles de Documents. De plus, un fichier Paths.xcu doit être fourni, fichier qui enregistre le package dans l&amp;#039;ensemble des dossiers de modèles de documents. Ce fichier contient l&amp;#039;URL du dossier où les modèles du package seront décompressés. Comme il s&amp;#039;agit là d&amp;#039;une inconnue lors de la création du package, une variable est utilisée dans l&amp;#039;URL, remplacée par le gestionnaire de packages quand il copie le fichier xcu à son emplacement final. L&amp;#039;avantage réside en ce que cette variable sera toujours la même pour chaque package de modèles et qu&amp;#039;ainsi le créateur d&amp;#039;un tel package n&amp;#039;aura aucun besoin de la créer lui-même :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Paths.xcu&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;#039;1.0&amp;#039; encoding=&amp;#039;UTF-8&amp;#039;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;oor:component-data oor:package=&amp;quot;org.openoffice.Office&amp;quot; &lt;br /&gt;
    oor:name=&amp;quot;Paths&amp;quot; xmlns:install=&amp;quot;http://openoffice.org/2004/installation&amp;quot; &lt;br /&gt;
    xmlns:oor=&amp;quot;http://openoffice.org/2001/registry&amp;quot; &lt;br /&gt;
    xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;node oor:name=&amp;quot;Paths&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;node oor:name=&amp;quot;Template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;node oor:name=&amp;quot;InternalPaths&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;node oor:name=&amp;quot;%origin%/template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/node&amp;gt;&lt;br /&gt;
		&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/node&amp;gt;&lt;br /&gt;
&amp;lt;/oor:component-data&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exemple de Package ==&lt;br /&gt;
[http://framework.openoffice.org/files/documents/25/3702/TemplatePackage.oxt À cet endroit] se trouve un package vide pour modèles de documents prêt à être rempli de modèles.&lt;br /&gt;
&lt;br /&gt;
Le conteneur au format zip possède un dossier nommé &amp;quot;template&amp;quot;. Tout sous-dossier que vous y créerez apparaîtra comme une catégorie de modèles dans les dialogues de modèles d&amp;#039;OOo. Les modèles peuvent être déposés dans ces sous-dossiers. Le titre du modèle sera emprunté aux métadonnées du document (les propriétés du document) ou au nom du fichier  si le titre n&amp;#039;est pas positionné dans les métadonnées. Si un de vos sous-dossiers a le nom d&amp;#039;une catégorie de modèles déjà présente, les modèles du package seront ajoutés à cette catégorie par le composant des modèles d&amp;#039;OpenOffice.org. Essayez, c&amp;#039;est plus simple à faire qu&amp;#039;à expliquer.&lt;br /&gt;
&lt;br /&gt;
== Localisation des modèles et des catégories de modèles ==&lt;br /&gt;
Les titres des catégories et modèles peuvent être pris aux noms des dossiers et fichiers. Ces noms peuvent être traduits  et utiliser tous les caractères que le conteneur zip et le (ou les) système de fichiers cible autorisent. Il peut arriver que les modèles soient installés sur des systèmes de fichiers où l&amp;#039;on rencontre des problèmes avec les noms  de catégories (les noms de dossiers) traduits. Le composant des Modèles de Documents permet de fournir ces noms traduits dans un fichier différent. Les noms traduits des modèles de documents peuvent être enregistrés dans les métadonnées du document (les propriétés du document) de façon à ce qu&amp;#039;aucun problème ne survienne ici.&lt;br /&gt;
&lt;br /&gt;
Le fichier de localisation s&amp;#039;appelle &amp;quot;groupuinames.xml&amp;quot; et prend place dans le sous-dossier &amp;quot;template&amp;quot; du package. Son contenu s&amp;#039;appréhende directement. Voici un exemple d&amp;#039;adaptation française de quelques dossiers qui utilisent des noms de fichiers en anglais :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;groupuinames.xml&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;groupuinames:template-group-list xmlns:groupuinames=&amp;quot;http://openoffice.org/2006/groupuinames&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;educate&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Éducation&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;layout&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Arrière-plans de présentation&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;misc&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Divers&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;officorr&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Correspondance d&amp;#039;affaires&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;offimisc&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Autres documents d&amp;#039;affaires&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;personal&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Correspondance privée et documents&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;presnt&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Présentations&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/groupuinames:template-group-list&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Packages multilingues de modèles ==&lt;br /&gt;
Des packages multilingues de modèles sont également possibles. Ils nécessitent d&amp;#039;une part une légère modification de la ligne 13 du fichier Paths.xcu :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Paths.xcu&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;#039;1.0&amp;#039; encoding=&amp;#039;UTF-8&amp;#039;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;oor:component-data oor:package=&amp;quot;org.openoffice.Office&amp;quot;&lt;br /&gt;
    oor:name=&amp;quot;Paths&amp;quot; xmlns:install=&amp;quot;http://openoffice.org/2004/installation&amp;quot; &lt;br /&gt;
    xmlns:oor=&amp;quot;http://openoffice.org/2001/registry&amp;quot;&lt;br /&gt;
    xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;node oor:name=&amp;quot;Paths&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;node oor:name=&amp;quot;Template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;node oor:name=&amp;quot;InternalPaths&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;node oor:name=&amp;quot;%origin%/template/$(vlang)&amp;quot; oor:op=&amp;quot;fuse&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/node&amp;gt;&lt;br /&gt;
		&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/oor:component-data&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et, d&amp;#039;autre part, la création de dossiers supplémentaires. Il s&amp;#039;agit des dossiers qui contiendront les modèles, sous-dossiers du dossier &amp;quot;template&amp;quot;, et qui  auront comme nom les codes ISO des langages  fournis par les packs de langues d&amp;#039;OOo. Vous trouverez [http://framework.openoffice.org/files/documents/25/3706/MultiLanguageTemplatePackage.oxt un deuxième package vide] qui fournit l&amp;#039;infrastructure d&amp;#039;un tel package. Utilisez-le et placez les modèles en allemand dans le dossier &amp;quot;de&amp;quot;, ceux en anglais dans le dossier &amp;quot;en-US&amp;quot;, ceux en français dans le dossier &amp;quot;fr&amp;quot; etc.  Des dossiers vides ne posent pas de problème. Chaque fichier de localisation (groupuinames.xml) doit désormais être placé dans le dossier correspondant au langage qu&amp;#039;il utilise et non plus directement dans le dossier  &amp;quot;template&amp;quot; comme dans le cas d&amp;#039;un package monolingue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Packages Autotexte =&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a été expliqué ci-dessus par rapport aux pacakges de modèles s&amp;#039;applique également aux packages autotextes. Le fichier comporte alors, à la place d&amp;#039;une valeur pour le chemin du &amp;quot;Template&amp;quot;, une valeur correspondant au chemin &amp;quot;AutoTexte&amp;quot;. Un exemple d&amp;#039;un tel package se trouve [http://framework.openoffice.org/files/documents/25/3710/AutoTextPackage.oxt ici]. Cet exemple peut être utilisé pour fournir des fichiers autotexte. A l&amp;#039;heure actuelle, il n&amp;#039;existe aucune méthode d&amp;#039;export pour ces fichiers, il est donc aussi simple de copier les fichiers &amp;quot;*.bau&amp;quot; à la main qui ont été créés directement dans le package. De la même manière, on peut créer des packages d&amp;#039;autotextes localisés dans la langue de son choix: il suffit de placer les fichiers dans des sous-dossiers portant des noms conformes aux codes langue ISO, comme cela est indiqué dans le dossier &amp;quot;share/autotext&amp;quot;. Contrairement aux packages de modèles, le chemin de l&amp;#039;autotexte ne nécessite pas d&amp;#039;inclure &amp;quot;$(vlang)&amp;quot; pour obtenir des packages multilingues puisque le composant gérant les autotextes implémente déjà en interne l&amp;#039;accès indépendamment de la langue.&lt;br /&gt;
&lt;br /&gt;
Une remarque toutefois qui pose parfois des problèmes lors du déploiement de packages autotextes: l&amp;#039;interface graphique de l&amp;#039;utilisateur permet à l&amp;#039;heure actuelle d&amp;#039;enregistrer les autotextes dans des endroits arbitraires. Ceci est une erreur de fonctionnement ou [http://www.openoffice.org/issues/show_bug.cgi?id=70410 bug] qui devrai être corrigée dans des versions futures de OpenOffice.org. Tout changement appliqué à des autotextes présents dans un package seront perdus lors de la désinstallation du package. Il n&amp;#039;est pas prévu qu&amp;#039;on puisse changer le contenu des packages!&lt;br /&gt;
&lt;br /&gt;
= Packages du Gallery =&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a été écrit ci-dessus s&amp;#039;applique également aux packages du Gallery. Le fichier Paths.xcu contient cette fois-ci une valeur relative au chemin du &amp;quot;Gallery&amp;quot; à place de celui des &amp;quot;Template&amp;quot;. Un exemple d&amp;#039;un package Gallery se trouve ici: [http://framework.openoffice.org/files/documents/25/3711/GalleryPackage.oxt here]. On peut ainsi le remplir avec les thèmes de Gallery qu&amp;#039;on souhaite. Comme cet aspect des choses n&amp;#039;est pas aussi facile à maîtriser que cela puisse paraître, et le code a souvent tendance à provoquer des conflits de noms entre les différents fichiers de thème, il est déconseillé ne pas mettre en oeuvre des packages de Gallery tant que le bug référencé ici [http://www.openoffice.org/issues/show_bug.cgi?id=70412 bug] n&amp;#039;est pas résolu.&lt;br /&gt;
&lt;br /&gt;
= Packages pour dictionaires et wordbooks utilisateurs =&lt;br /&gt;
&lt;br /&gt;
Ce travail n&amp;#039;est pas encore achevé parce qu&amp;#039;il nécessite une refonte de l&amp;#039;accès aux fichiers se rapportant aux outils linguistiques. Revenez de temps en temps pour voir où cela en est.&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18652</id>
		<title>Non-code extensions FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18652"/>
		<updated>2006-10-14T12:38:03Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;traduction en cours ... sur la base de :&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Non-code_extensions&lt;br /&gt;
&lt;br /&gt;
{{Extensions}}&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Packages UNO: Principes de base =&lt;br /&gt;
&lt;br /&gt;
Le concept de déploiement des extensions OpenOffice.org basé sur les packages UNO n&amp;#039;est pas limité au code. Il est également possible d&amp;#039;installer d&amp;#039;autres choses dans des packages faciles d&amp;#039;utilisation, comme des modèles, des autotextes etc. Vous trouverez ci-dessous une explication du fonctionnement de base. Elle est destinée aux utilisateurs avancés et aux administrateurs système. La plupart des points abordés ici sont expliqués de façon plus détaillée et plus compréhensible à d&amp;#039;autres endroits. Le sujet de la documentation ci-dessous est de présenter une vue générale et d&amp;#039;expliquer les principes de base. Si vous souhaitez en savoir plus sur UNO, vous pouvez consulter notre [http://wiki.services.openoffice.org/wiki/Uno wiki UNO] ou les pages web du  [http://udk.openoffice.org project UDK].&lt;br /&gt;
&lt;br /&gt;
Toutes les informations fournies ici se rapportent à OpenOffice.org 2.0.4. Les différences pouvant exister avec des versions plus anciennes ne sont pas expliquées ici, bien que l&amp;#039;on puisse mentionner explicitement les choses apparues pour la première fois dans la 2.0.4.&lt;br /&gt;
&lt;br /&gt;
Les packages UNO ne sont rien d&amp;#039;autre que des dossiers zippés avec des données supplémentaires et des méta-données décrivant le contenu. Il peuvent être déployés par l&amp;#039;interface du Gestionnaire de packages intégré à OOo (&amp;quot;Outils - Gestionnaire de packages&amp;quot;) ou grace à l&amp;#039;outil en ligne de commande “unopkg” qui se trouve dans le répertoire &amp;quot;program&amp;quot; de OOo. Ce dernier permet non seulement le déploiement d&amp;#039;un package pour un utilisateur, mais également pour tous les utilisateurs avec le paramètre optionnel &amp;quot;--shared”. Quand les packages sont installés, leur contenu est recopié à des emplacements privés bien définis sous “share/uno_packages” ou “user/uno_packages”, selon la portée de l&amp;#039;installation du package (installation système ou simple utilisateur). On entend par &amp;quot;Privé&amp;quot; : ne pas écrire de code qui se fie à la structure particulière du composant UNO décompressé, l&amp;#039;accès aux fichiers compressés doit utiliser un API défini qui se charge des détails pour l&amp;#039;appelant. Des fichiers en dehors des dossiers &amp;quot;uno_packages&amp;quot; ne devraient jamais être affectés, à la seule exception dont l&amp;#039;explication se trouve ici [http://www.openoffice.org/issues/show_bug.cgi?id=70283 bug]: Des macros Basic dans des packages UNO doivent toujours être enregistrées dans un fichier xlc se trouvant dans l&amp;#039;un des répertoires &amp;quot;basic&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Extensions comportant des services UNO (code) ==&lt;br /&gt;
&lt;br /&gt;
Si un package UNO comporte un composant écrit en Java, C++ ou Python, ce dernier doit rendre publique sa fonctionnalité afin d&amp;#039;être fonctionnel au sein de OpenOffice.org. Dans les développements basés sur UNO, un ensemble de fonctionnalités défini est appelé un &amp;quot;service&amp;quot;. Ceux-ci sont identifiés et on y accède par leurs noms de service. Un composant qui met en oeuvre de tels services doit informer les autres de son identification. Aujourd&amp;#039;hui tous les composants exportent une fonction qui peut être appélée par unopkg et qui va obliger le composant à écrire toutes les informations nécessaires dans le fichier de registre des services qui est créé et maintenu à l&amp;#039;intérieur d&amp;#039;un dossier „uno_package“. Lorsque OpenOffice.org se sert de son gestionnaire de service pour rechercher des services UNO disponibles, il regardera non seulement dans le registre des services (services.rdb) au sein du répertoire principal du programme (contenant toutes les informations sur les &amp;quot;services internes&amp;quot;), mais également dans tous les fichiers de registre se trouvant dans les dossiers “uno_packages”.&lt;br /&gt;
&lt;br /&gt;
OOo n&amp;#039;est capable d&amp;#039;instancier des services UNO par leurs noms que s&amp;#039;il en connaît l&amp;#039;existence. Ceci est facile pour des services qui remplacent ceux déjà présents en &amp;quot;interne&amp;quot; puisqu&amp;#039;OOo les connaît déjà et s&amp;#039;en sert couramment, mais comme la plupart des composants fournissent de nouveaux services, il doit exister autre chose qui permet à OOo de s&amp;#039;en servir bien que lui étant inconnus lors de la compilation. Pour ces cas précis, les composants UNO doivent fournir des données complémentaires sur le moment auquel le chargement d&amp;#039;un service donné doit s&amp;#039;effectuer. Ces &amp;quot;données de composant additionnelles&amp;quot; sont fournies dans les fichiers de configuration de OOo. &lt;br /&gt;
&lt;br /&gt;
Un exemple serait un composant de filtre de document dans lequel les données complémentaires qui doivent être fournies consistent (entre autres) en le type de fichier que le filtre sait charger. Un composant de filtre précis pourrait se déclarer capable de charger des fichiers WordPerfect. Ainsi, si un utilisateur choisit ce filtre pour charger un ficher dans l&amp;#039;application alors OOo trouverait les données déclarées en recherchant toutes données contenant le type de fichier souhaité (wps), instancierait le composant de filtre par son nom de service tel que découvert dans ces données et ensuite s&amp;#039;en servir pour charger le fichier dans l&amp;#039;application. Chaque filtre déjà présent dans OOo a ses propres données de configuration et les filtres de conversion de documents dans les packages UNO fournissent leurs propres données de configuration de manière à complémenter celles déjà présentes dans le produit.&lt;br /&gt;
&lt;br /&gt;
== Support des Packages dans le Gestionnaire de Configuration ==&lt;br /&gt;
Le Gestionnaire de Configuration d&amp;#039;OpenOffice.org possède également la capacité à rechercher dans un ensemble de dossiers extensibles de la même manière que le Gestionnaire de Services. S&amp;#039;il trouve plusieurs fichiers de configuration dans ces dossiers contenant des données pour les mêmes éléments dans l&amp;#039;arborescence des entrées de configuration, soit il les fusionnera, soit il remplacera des données d&amp;#039;ordre hiérarchique inférieur par des données d&amp;#039;ordre hiérarchique supérieur, selon le type de données de configuration. Les données de configuration &amp;quot;utilisateur&amp;quot; ont toujours précédence sur les données de configuration préinstallées se trouvant dans la couche partagée (&amp;quot;share&amp;quot;). Les données de configuration des packages UNO se situent entre ces deux extrêmes : les données de configuration partagées des packages UNO ont un ordre hiérarchique supérieur à la couche partagée pré-installée, mais un ordre hiérarchique inférieur aux données de configuration &amp;quot;utilisateur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Il demeure la question suivante : quelles données sont fusionnées lorsqu&amp;#039;il y a au moins deux couches de configuration ?&lt;br /&gt;
&lt;br /&gt;
Le Gestionnaire de Configuration a tendance à prendre ses informations dans des fichiers xml (portant l&amp;#039;extension de fichier xcu) avec des éléments typés. Il supporte quelques types de base, des types structurés qui doivent être définis dans des fichiers de schéma (portant l&amp;#039;extension de fichier xcs) et fait une liste de tous ces types. Ceux-ci ne peuvent pas être étendus. Si la configuration découvre des valeurs différentes de celles dans les différentes couches, c&amp;#039;est la valeur de l&amp;#039;ordre hiérarchique supérieur qui est retenue. Pour la fusion d&amp;#039;éléments de configuration et par ce biais l&amp;#039;extension de la fonctionnalité qui en dépend nécessite le type &amp;quot;set&amp;quot;. Pour mieux comprendre son fonctionnement, regardez dans [[Configuration_schema_path_settings|configuration schema]] mentionné dans la section &amp;quot;Configuration des Chemins&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Un composant peut étendre ou modifier la configuration de OpenOffice.org en lui fournissant des fichiers xcu dans son package qui remplaceront ou étendront (fusion) des entrées de configuration dans OpenOffice.org. Il peut également disposer de ses propres entrées de configuration s&amp;#039;il fournit des fichiers de schéma (xcs) dans son package.&lt;br /&gt;
&lt;br /&gt;
Il existe un autre cas d&amp;#039;utilisation (relativement évident) du principe de couches du gestionnaire de configuration : le remplacement des entrées de configuration de OpenOffice.org au niveau de tous les utilisateurs (&amp;quot;all users&amp;quot;). Un administrateur peut personnaliser l&amp;#039;installation de OpenOffice.org dans son propre compte utilisateur, et puis ensuite prendre les fichiers xcu créés contenant les personnalisations et les inclure dans un package qu&amp;#039;il installera par la suite avec &amp;quot;unopkg add --shared&amp;quot; chaque fois qu&amp;#039;il installera, réinstallera ou mettra à jour OpenOffice.org. Il n&amp;#039;y aura ainsi aucun besoin d&amp;#039;éditer les fichiers xcu dans &amp;quot;share/registry&amp;quot; à la main !&lt;br /&gt;
&lt;br /&gt;
Le principe des couches du registre de services et de la configuration sont les principes de base qui rendent le système de packages UNO à la fois solide et flexible.&lt;br /&gt;
&lt;br /&gt;
= Configuration des Chemins =&lt;br /&gt;
Quelques données d&amp;#039;OpenOffice.org ne sont pas stockées dans les fichiers de configuration xcu mais ailleurs dans le système de fichiers, comme, par exemple, les modèles de documents, l&amp;#039;autotexte, le contenu de la galerie, etc. Bien entendu ce contenu doit pouvoir être déployé dans des packages, mais dans ce cas, d&amp;#039;ordinaire, vous ne souhaitez pas remplacer le contenu existant, vous souhaitez lui ajouter quelque chose. Aussi l&amp;#039;accès à ces fichiers doit également respecter un principe de couches. OpenOffice.org dispose de quelques composants qui gèrent l&amp;#039;accès aux fichiers. Nous aurions pu étendre ces composants de la  même façon que nous avons étendu le Gestionnaire de Configuration ou le Gestionnaire de Services (en les rendant capables d&amp;#039;utiliser explicitement des couches), mais nous avons décidé de réutiliser la capacité déjà disponible du Gestionnaire de Configuration.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;endroit où sont recherchés ces fichiers est défini dans la configuration soit comme un simple chemin, soit comme une liste de chemins (&amp;quot;multichemin&amp;quot;). Malheureusement, une telle liste ne peut qu&amp;#039;être remplacée dans les couches les plus hautes et non étendue, aussi avons-nous besoin d&amp;#039;un nouveau schéma de configuration pour les chemins, nouveau schéma qui utilise des &amp;quot;ensembles&amp;quot; au lieu de &amp;quot;listes&amp;quot; comme ils peuvent être étendus par des packages. Nous utilisons ce nouveau schéma pour les chemins à partir d&amp;#039;OpenOffice.org 2.0.4. Nous avons gardé l&amp;#039;ancien schéma et ses données pour des raisons de compatibilité et porterons ces réglages vers les nouvelles données. L&amp;#039;ancien schéma sera supprimé dans OpenOffice.org 3.0.&lt;br /&gt;
&lt;br /&gt;
Si vous jetez un coup d&amp;#039;oeil aux entrées des &amp;quot;Chemins&amp;quot; dans la boîte de dialogue &amp;quot;Options&amp;quot; dans OOo2.0.4 vous remarquerez que toutes les parties des multichemins n&amp;#039;y sont pas montrées. Dans les versions antérieures  d&amp;#039;OOo, vous pouviez voir habituellement deux dossiers pour les modèles par exemple :  $(share)/templates et $(user)/templates, où &amp;quot;$(share)&amp;quot; et &amp;quot;$(user) sont des variables pour les dossiers partage (share) et utilisateur (user) de l&amp;#039;installation particulière. Vous pourriez voir de même tous les dossiers supplémentaires que l&amp;#039;administrateur ou l&amp;#039;utilisateur ont pu ajouter. Dans OOo2.0.4 vous continuerez de voir $(user)/templates et ces dossiers additionnels (si jamais il y en a), mais vous ne verrez plus $(share)/templates à cet endroit-ci. Si des packages contenant des modèles de documents sont installés, leur dossier ne sera pas montré ici non plus, ce dialogue n&amp;#039;est désormais qu&amp;#039;un outil pour permettre à l&amp;#039;utilisateur d&amp;#039;adapter les réglages qui sont sous son contrôle direct.&lt;br /&gt;
&lt;br /&gt;
       [[Image:Dialog_Tools_Options_204.png]]&lt;br /&gt;
&lt;br /&gt;
=Packages de Modèles=&lt;br /&gt;
&lt;br /&gt;
Un package UNO pour les modèles de documents est plutôt simple. Il contient principalement les modèles, organisés en des répertoires qui définissent les catégories de modèles pour le Gestionnaire de Modèles de Documents. De plus, un fichier Paths.xcu doit être fourni, fichier qui enregistre le package dans l&amp;#039;ensemble des dossiers de modèles de documents. Ce fichier contient l&amp;#039;URL du dossier où les modèles du package seront décompressés. Comme il s&amp;#039;agit là d&amp;#039;une inconnue lors de la création du package, une variable est utilisée dans l&amp;#039;URL, remplacée par le gestionnaire de packages quand il copie le fichier xcu à son emplacement final. L&amp;#039;avantage réside en ce que cette variable sera toujours la même pour chaque package de modèles et qu&amp;#039;ainsi le créateur d&amp;#039;un tel package n&amp;#039;aura aucun besoin de la créer lui-même :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Paths.xcu&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;#039;1.0&amp;#039; encoding=&amp;#039;UTF-8&amp;#039;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;oor:component-data oor:package=&amp;quot;org.openoffice.Office&amp;quot; &lt;br /&gt;
    oor:name=&amp;quot;Paths&amp;quot; xmlns:install=&amp;quot;http://openoffice.org/2004/installation&amp;quot; &lt;br /&gt;
    xmlns:oor=&amp;quot;http://openoffice.org/2001/registry&amp;quot; &lt;br /&gt;
    xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;node oor:name=&amp;quot;Paths&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;node oor:name=&amp;quot;Template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;node oor:name=&amp;quot;InternalPaths&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;node oor:name=&amp;quot;%origin%/template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/node&amp;gt;&lt;br /&gt;
		&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/node&amp;gt;&lt;br /&gt;
&amp;lt;/oor:component-data&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exemple de Package ==&lt;br /&gt;
[http://framework.openoffice.org/files/documents/25/3702/TemplatePackage.oxt À cet endroit] se trouve un package vide pour modèles de documents prêt à être rempli de modèles.&lt;br /&gt;
&lt;br /&gt;
Le conteneur au format zip possède un dossier nommé &amp;quot;template&amp;quot;. Tout sous-dossier que vous y créerez apparaîtra comme une catégorie de modèles dans les dialogues de modèles d&amp;#039;OOo. Les modèles peuvent être déposés dans ces sous-dossiers. Le titre du modèle sera emprunté aux métadonnées du document (les propriétés du document) ou au nom du fichier  si le titre n&amp;#039;est pas positionné dans les métadonnées. Si un de vos sous-dossiers a le nom d&amp;#039;une catégorie de modèles déjà présente, les modèles du package seront ajoutés à cette catégorie par le composant des modèles d&amp;#039;OpenOffice.org. Essayez, c&amp;#039;est plus simple à faire qu&amp;#039;à expliquer.&lt;br /&gt;
&lt;br /&gt;
== Localisation des modèles et des catégories de modèles ==&lt;br /&gt;
Les titres des catégories et modèles peuvent être pris aux noms des dossiers et fichiers. Ces noms peuvent être traduits  et utiliser tous les caractères que le conteneur zip et le (ou les) système de fichiers cible autorisent. Il peut arriver que les modèles soient installés sur des systèmes de fichiers où l&amp;#039;on rencontre des problèmes avec les noms  de catégories (les noms de dossiers) traduits. Le composant des Modèles de Documents permet de fournir ces noms traduits dans un fichier différent. Les noms traduits des modèles de documents peuvent être enregistrés dans les métadonnées du document (les propriétés du document) de façon à ce qu&amp;#039;aucun problème ne survienne ici.&lt;br /&gt;
&lt;br /&gt;
Le fichier de localisation s&amp;#039;appelle &amp;quot;groupuinames.xml&amp;quot; et prend place dans le sous-dossier &amp;quot;template&amp;quot; du package. Son contenu s&amp;#039;appréhende directement. Voici un exemple d&amp;#039;adaptation française de quelques dossiers qui utilisent des noms de fichiers en anglais :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;groupuinames.xml&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;groupuinames:template-group-list xmlns:groupuinames=&amp;quot;http://openoffice.org/2006/groupuinames&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;educate&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Éducation&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;layout&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Arrière-plans de présentation&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;misc&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Divers&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;officorr&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Correspondance d&amp;#039;affaires&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;offimisc&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Autres documents d&amp;#039;affaires&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;personal&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Correspondance privée et documents&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;presnt&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Présentations&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/groupuinames:template-group-list&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Packages multilingues de modèles ==&lt;br /&gt;
Des packages multilingues de modèles sont également possibles. Ils nécessitent d&amp;#039;une part une légère modification de la ligne 13 du fichier Paths.xcu :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Paths.xcu&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;#039;1.0&amp;#039; encoding=&amp;#039;UTF-8&amp;#039;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;oor:component-data oor:package=&amp;quot;org.openoffice.Office&amp;quot;&lt;br /&gt;
    oor:name=&amp;quot;Paths&amp;quot; xmlns:install=&amp;quot;http://openoffice.org/2004/installation&amp;quot; &lt;br /&gt;
    xmlns:oor=&amp;quot;http://openoffice.org/2001/registry&amp;quot;&lt;br /&gt;
    xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;node oor:name=&amp;quot;Paths&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;node oor:name=&amp;quot;Template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;node oor:name=&amp;quot;InternalPaths&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;node oor:name=&amp;quot;%origin%/template/$(vlang)&amp;quot; oor:op=&amp;quot;fuse&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/node&amp;gt;&lt;br /&gt;
		&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/oor:component-data&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et, d&amp;#039;autre part, la création de dossiers supplémentaires. Il s&amp;#039;agit des dossiers qui contiendront les modèles, sous-dossiers du dossier &amp;quot;template&amp;quot;, et qui  auront comme nom les codes ISO des langages  fournis par les packs de langues d&amp;#039;OOo. Vous trouverez [http://framework.openoffice.org/files/documents/25/3706/MultiLanguageTemplatePackage.oxt un deuxième package vide] qui fournit l&amp;#039;infrastructure d&amp;#039;un tel package. Utilisez-le et placez les modèles en allemand dans le dossier &amp;quot;de&amp;quot;, ceux en anglais dans le dossier &amp;quot;en-US&amp;quot;, ceux en français dans le dossier &amp;quot;fr&amp;quot; etc.  Des dossiers vides ne posent pas de problème. Chaque fichier de localisation (groupuinames.xml) doit désormais être placé dans le dossier correspondant au langage qu&amp;#039;il utilise et non plus directement dans le dossier  &amp;quot;template&amp;quot; comme dans le cas d&amp;#039;un package monolingue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Packages Autotexte =&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a été expliqué ci-dessus par rapport aux pacakges de modèles s&amp;#039;applique également aux packages autotextes. Le fichier comporte alors, à la place d&amp;#039;une valeur pour le chemin du &amp;quot;Template&amp;quot;, une valeur correspondant au chemin &amp;quot;AutoTexte&amp;quot;. Un exemple d&amp;#039;un tel package se trouve [http://framework.openoffice.org/files/documents/25/3710/AutoTextPackage.oxt ici]. Cet exemple peut être utilisé pour fournir des fichiers autotexte. A l&amp;#039;heure actuelle, il n&amp;#039;existe aucune méthode d&amp;#039;export pour ces fichiers, il est donc aussi simple de copier les fichiers &amp;quot;*.bau&amp;quot; à la main qui ont été créés directement dans le package. De la même manière, on peut créer des packages d&amp;#039;autotextes localisés dans la langue de son choix: il suffit de placer les fichiers dans des sous-dossiers portant des noms conformes aux codes langue ISO, comme cela est indiqué dans le dossier &amp;quot;share/autotext&amp;quot;. Contrairement aux packages de modèles, le chemin de l&amp;#039;autotexte ne nécessite pas d&amp;#039;inclure &amp;quot;$(vlang)&amp;quot; pour obtenir des packages multilingues puisque le composant gérant les autotextes implémente déjà en interne l&amp;#039;accès indépendamment de la langue.&lt;br /&gt;
&lt;br /&gt;
Une remarque toutefois qui pose parfois des problèmes lors du déploiement de packages autotextes: l&amp;#039;interface graphique de l&amp;#039;utilisateur permet à l&amp;#039;heure actuelle d&amp;#039;enregistrer les autotextes dans des endroits arbitraires. Ceci est une erreur de fonctionnement [http://www.openoffice.org/issues/show_bug.cgi?id=70410 bug] qui devrai être corrigée dans des versions futures de OpenOffice.org. Tout changement appliqué à des autotextes présents dans un package seront perdus lors de la désinstallation du package. Il n&amp;#039;est pas prévu qu&amp;#039;on puisse changer le contenu des packages!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Packages du Gallery =&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a été écrit ci-dessus s&amp;#039;applique également aux packages du Gallery. Le fichier Paths.xcu contient cette fois-ci une valeur relative au chemin du &amp;quot;Gallery&amp;quot; à place de celui des &amp;quot;Template&amp;quot;. Un exemple d&amp;#039;un package Gallery se trouve ici: [http://framework.openoffice.org/files/documents/25/3711/GalleryPackage.oxt here]. On peut ainsi le remplir avec les thèmes de Gallery qu&amp;#039;on souhaite. Comme cet aspect des choses n&amp;#039;est pas aussi facile à maîtriser que cela puisse paraître, et le code a souvent tendance à provoquer des conflits de noms entre les différents fichiers de thème, il est déconseillé ne pas mettre en oeuvre des packages de Gallery tant que le bug référencé ici [http://www.openoffice.org/issues/show_bug.cgi?id=70412 bug] n&amp;#039;est pas résolu.&lt;br /&gt;
&lt;br /&gt;
= Packages pour dictionaires et wordbooks utilisateurs =&lt;br /&gt;
&lt;br /&gt;
Ce travail n&amp;#039;est pas encore achevé parce qu&amp;#039;il nécessite une refonte de l&amp;#039;accès aux fichiers se rapportant aux outils linguistiques. Revenez de temps en temps pour voir où cela en est.&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18651</id>
		<title>Non-code extensions FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18651"/>
		<updated>2006-10-14T12:31:17Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;traduction en cours ... sur la base de :&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Non-code_extensions&lt;br /&gt;
&lt;br /&gt;
{{Extensions}}&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Packages UNO: Principes de base =&lt;br /&gt;
&lt;br /&gt;
Le concept de déploiement des extensions OpenOffice.org basé sur les packages UNO n&amp;#039;est pas limité au code. Il est également possible d&amp;#039;installer d&amp;#039;autres choses dans des packages faciles d&amp;#039;utilisation, comme des modèles, des autotextes etc. Vous trouverez ci-dessous une explication du fonctionnement de base. Elle est destinée aux utilisateurs avancés et aux administrateurs système. La plupart des points abordés ici sont expliqués de façon plus détaillée et plus compréhensible à d&amp;#039;autres endroits. Le sujet de la documentation ci-dessous est de présenter une vue générale et d&amp;#039;expliquer les principes de base. Si vous souhaitez en savoir plus sur UNO, vous pouvez consulter notre [http://wiki.services.openoffice.org/wiki/Uno wiki UNO] ou les pages web du  [http://udk.openoffice.org project UDK].&lt;br /&gt;
&lt;br /&gt;
Toutes les informations fournies ici se rapportent à OpenOffice.org 2.0.4. Les différences pouvant exister avec des versions plus anciennes ne sont pas expliquées ici, bien que l&amp;#039;on puisse mentionner explicitement les choses apparues pour la première fois dans la 2.0.4.&lt;br /&gt;
&lt;br /&gt;
Les packages UNO ne sont rien d&amp;#039;autre que des dossiers zippés avec des données supplémentaires et des méta-données décrivant le contenu. Il peuvent être déployés par l&amp;#039;interface du Gestionnaire de packages intégré à OOo (&amp;quot;Outils - Gestionnaire de packages&amp;quot;) ou grace à l&amp;#039;outil en ligne de commande “unopkg” qui se trouve dans le répertoire &amp;quot;program&amp;quot; de OOo. Ce dernier permet non seulement le déploiement d&amp;#039;un package pour un utilisateur, mais également pour tous les utilisateurs avec le paramètre optionnel &amp;quot;--shared”. Quand les packages sont installés, leur contenu est recopié à des emplacements privés bien définis sous “share/uno_packages” ou “user/uno_packages”, selon la portée de l&amp;#039;installation du package (installation système ou simple utilisateur). On entend par &amp;quot;Privé&amp;quot; : ne pas écrire de code qui se fie à la structure particulière du composant UNO décompressé, l&amp;#039;accès aux fichiers compressés doit utiliser un API défini qui se charge des détails pour l&amp;#039;appelant. Des fichiers en dehors des dossiers &amp;quot;uno_packages&amp;quot; ne devraient jamais être affectés, à la seule exception dont l&amp;#039;explication se trouve ici [http://www.openoffice.org/issues/show_bug.cgi?id=70283 bug]: Des macros Basic dans des packages UNO doivent toujours être enregistrées dans un fichier xlc se trouvant dans l&amp;#039;un des répertoires &amp;quot;basic&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Extensions comportant des services UNO (code) ==&lt;br /&gt;
&lt;br /&gt;
Si un package UNO comporte un composant écrit en Java, C++ ou Python, ce dernier doit rendre publique sa fonctionnalité afin d&amp;#039;être fonctionnel au sein de OpenOffice.org. Dans les développements basés sur UNO, un ensemble de fonctionnalités défini est appelé un &amp;quot;service&amp;quot;. Ceux-ci sont identifiés et on y accède par leurs noms de service. Un composant qui met en oeuvre de tels services doit informer les autres de son identification. Aujourd&amp;#039;hui tous les composants exportent une fonction qui peut être appélée par unopkg et qui va obliger le composant à écrire toutes les informations nécessaires dans le fichier de registre des services qui est créé et maintenu à l&amp;#039;intérieur d&amp;#039;un dossier „uno_package“. Lorsque OpenOffice.org se sert de son gestionnaire de service pour rechercher des services UNO disponibles, il regardera non seulement dans le registre des services (services.rdb) au sein du répertoire principal du programme (contenant toutes les informations sur les &amp;quot;services internes&amp;quot;), mais également dans tous les fichiers de registre se trouvant dans les dossiers “uno_packages”.&lt;br /&gt;
&lt;br /&gt;
OOo n&amp;#039;est capable d&amp;#039;instancier des services UNO par leurs noms que s&amp;#039;il en connaît l&amp;#039;existence. Ceci est facile pour des services qui remplacent ceux déjà présents en &amp;quot;interne&amp;quot; puisqu&amp;#039;OOo les connaît déjà et s&amp;#039;en sert couramment, mais comme la plupart des composants fournissent de nouveaux services, il doit exister autre chose qui permet à OOo de s&amp;#039;en servir bien que lui étant inconnus lors de la compilation. Pour ces cas précis, les composants UNO doivent fournir des données complémentaires sur le moment auquel le chargement d&amp;#039;un service donné doit s&amp;#039;effectuer. Ces &amp;quot;données de composant additionnelles&amp;quot; sont fournies dans les fichiers de configuration de OOo. &lt;br /&gt;
&lt;br /&gt;
Un exemple serait un composant de filtre de document dans lequel les données complémentaires qui doivent être fournies consistent (entre autres) en le type de fichier que le filtre sait charger. Un composant de filtre précis pourrait se déclarer capable de charger des fichiers WordPerfect. Ainsi, si un utilisateur choisit ce filtre pour charger un ficher dans l&amp;#039;application alors OOo trouverait les données déclarées en recherchant toutes données contenant le type de fichier souhaité (wps), instancierait le composant de filtre par son nom de service tel que découvert dans ces données et ensuite s&amp;#039;en servir pour charger le fichier dans l&amp;#039;application. Chaque filtre déjà présent dans OOo a ses propres données de configuration et les filtres de conversion de documents dans les packages UNO fournissent leurs propres données de configuration de manière à complémenter celles déjà présentes dans le produit.&lt;br /&gt;
&lt;br /&gt;
== Support des Packages dans le Gestionnaire de Configuration ==&lt;br /&gt;
Le Gestionnaire de Configuration d&amp;#039;OpenOffice.org possède également la capacité à rechercher dans un ensemble de dossiers extensibles de la même manière que le Gestionnaire de Services. S&amp;#039;il trouve plusieurs fichiers de configuration dans ces dossiers contenant des données pour les mêmes éléments dans l&amp;#039;arborescence des entrées de configuration, soit il les fusionnera, soit il remplacera des données d&amp;#039;ordre hiérarchique inférieur par des données d&amp;#039;ordre hiérarchique supérieur, selon le type de données de configuration. Les données de configuration &amp;quot;utilisateur&amp;quot; ont toujours précédence sur les données de configuration préinstallées se trouvant dans la couche partagée (&amp;quot;share&amp;quot;). Les données de configuration des packages UNO se situent entre ces deux extrêmes : les données de configuration partagées des packages UNO ont un ordre hiérarchique supérieur à la couche partagée pré-installée, mais un ordre hiérarchique inférieur aux données de configuration &amp;quot;utilisateur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Il demeure la question suivante : quelles données sont fusionnées lorsqu&amp;#039;il y a au moins deux couches de configuration ?&lt;br /&gt;
&lt;br /&gt;
Le Gestionnaire de Configuration a tendance à prendre ses informations dans des fichiers xml (portant l&amp;#039;extension de fichier xcu) avec des éléments typés. Il supporte quelques types de base, des types structurés qui doivent être définis dans des fichiers de schéma (portant l&amp;#039;extension de fichier xcs) et fait une liste de tous ces types. Ceux-ci ne peuvent pas être étendus. Si la configuration découvre des valeurs différentes de celles dans les différentes couches, c&amp;#039;est la valeur de l&amp;#039;ordre hiérarchique supérieur qui est retenue. Pour la fusion d&amp;#039;éléments de configuration et par ce biais l&amp;#039;extension de la fonctionnalité qui en dépend nécessite le type &amp;quot;set&amp;quot;. Pour mieux comprendre son fonctionnement, regardez dans [[Configuration_schema_path_settings|configuration schema]] mentionné dans la section &amp;quot;Configuration des Chemins&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Un composant peut étendre ou modifier la configuration de OpenOffice.org en lui fournissant des fichiers xcu dans son package qui remplaceront ou étendront (fusion) des entrées de configuration dans OpenOffice.org. Il peut également disposer de ses propres entrées de configuration s&amp;#039;il fournit des fichiers de schéma (xcs) dans son package.&lt;br /&gt;
&lt;br /&gt;
Il existe un autre cas d&amp;#039;utilisation (relativement évident) du principe de couches du gestionnaire de configuration : le remplacement des entrées de configuration de OpenOffice.org au niveau de tous les utilisateurs (&amp;quot;all users&amp;quot;). Un administrateur peut personnaliser l&amp;#039;installation de OpenOffice.org dans son propre compte utilisateur, et puis ensuite prendre les fichiers xcu créés contenant les personnalisations et les inclure dans un package qu&amp;#039;il installera par la suite avec &amp;quot;unopkg add --shared&amp;quot; chaque fois qu&amp;#039;il installera, réinstallera ou mettra à jour OpenOffice.org. Il n&amp;#039;y aura ainsi aucun besoin d&amp;#039;éditer les fichiers xcu dans &amp;quot;share/registry&amp;quot; à la main !&lt;br /&gt;
&lt;br /&gt;
Le principe des couches du registre de services et de la configuration sont les principes de base qui rendent le système de packages UNO à la fois solide et flexible.&lt;br /&gt;
&lt;br /&gt;
= Configuration des Chemins =&lt;br /&gt;
Quelques données d&amp;#039;OpenOffice.org ne sont pas stockées dans les fichiers de configuration xcu mais ailleurs dans le système de fichiers, comme, par exemple, les modèles de documents, l&amp;#039;autotexte, le contenu de la galerie, etc. Bien entendu ce contenu doit pouvoir être déployé dans des packages, mais dans ce cas, d&amp;#039;ordinaire, vous ne souhaitez pas remplacer le contenu existant, vous souhaitez lui ajouter quelque chose. Aussi l&amp;#039;accès à ces fichiers doit également respecter un principe de couches. OpenOffice.org dispose de quelques composants qui gèrent l&amp;#039;accès aux fichiers. Nous aurions pu étendre ces composants de la  même façon que nous avons étendu le Gestionnaire de Configuration ou le Gestionnaire de Services (en les rendant capables d&amp;#039;utiliser explicitement des couches), mais nous avons décidé de réutiliser la capacité déjà disponible du Gestionnaire de Configuration.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;endroit où sont recherchés ces fichiers est défini dans la configuration soit comme un simple chemin, soit comme une liste de chemins (&amp;quot;multichemin&amp;quot;). Malheureusement, une telle liste ne peut qu&amp;#039;être remplacée dans les couches les plus hautes et non étendue, aussi avons-nous besoin d&amp;#039;un nouveau schéma de configuration pour les chemins, nouveau schéma qui utilise des &amp;quot;ensembles&amp;quot; au lieu de &amp;quot;listes&amp;quot; comme ils peuvent être étendus par des packages. Nous utilisons ce nouveau schéma pour les chemins à partir d&amp;#039;OpenOffice.org 2.0.4. Nous avons gardé l&amp;#039;ancien schéma et ses données pour des raisons de compatibilité et porterons ces réglages vers les nouvelles données. L&amp;#039;ancien schéma sera supprimé dans OpenOffice.org 3.0.&lt;br /&gt;
&lt;br /&gt;
Si vous jetez un coup d&amp;#039;oeil aux entrées des &amp;quot;Chemins&amp;quot; dans la boîte de dialogue &amp;quot;Options&amp;quot; dans OOo2.0.4 vous remarquerez que toutes les parties des multichemins n&amp;#039;y sont pas montrées. Dans les versions antérieures  d&amp;#039;OOo, vous pouviez voir habituellement deux dossiers pour les modèles par exemple :  $(share)/templates et $(user)/templates, où &amp;quot;$(share)&amp;quot; et &amp;quot;$(user) sont des variables pour les dossiers partage (share) et utilisateur (user) de l&amp;#039;installation particulière. Vous pourriez voir de même tous les dossiers supplémentaires que l&amp;#039;administrateur ou l&amp;#039;utilisateur ont pu ajouter. Dans OOo2.0.4 vous continuerez de voir $(user)/templates et ces dossiers additionnels (si jamais il y en a), mais vous ne verrez plus $(share)/templates à cet endroit-ci. Si des packages contenant des modèles de documents sont installés, leur dossier ne sera pas montré ici non plus, ce dialogue n&amp;#039;est désormais qu&amp;#039;un outil pour permettre à l&amp;#039;utilisateur d&amp;#039;adapter les réglages qui sont sous son contrôle direct.&lt;br /&gt;
&lt;br /&gt;
       [[Image:Dialog_Tools_Options_204.png]]&lt;br /&gt;
&lt;br /&gt;
=Packages de Modèles=&lt;br /&gt;
&lt;br /&gt;
Un package UNO pour les modèles de documents est plutôt simple. Il contient principalement les modèles, organisés en des répertoires qui définissent les catégories de modèles pour le Gestionnaire de Modèles de Documents. De plus, un fichier Paths.xcu doit être fourni, fichier qui enregistre le package dans l&amp;#039;ensemble des dossiers de modèles de documents. Ce fichier contient l&amp;#039;URL du dossier où les modèles du package seront décompressés. Comme il s&amp;#039;agit là d&amp;#039;une inconnue lors de la création du package, une variable est utilisée dans l&amp;#039;URL, remplacée par le gestionnaire de packages quand il copie le fichier xcu à son emplacement final. L&amp;#039;avantage réside en ce que cette variable sera toujours la même pour chaque package de modèles et qu&amp;#039;ainsi le créateur d&amp;#039;un tel package n&amp;#039;aura aucun besoin de la créer lui-même :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Paths.xcu&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;#039;1.0&amp;#039; encoding=&amp;#039;UTF-8&amp;#039;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;oor:component-data oor:package=&amp;quot;org.openoffice.Office&amp;quot; &lt;br /&gt;
    oor:name=&amp;quot;Paths&amp;quot; xmlns:install=&amp;quot;http://openoffice.org/2004/installation&amp;quot; &lt;br /&gt;
    xmlns:oor=&amp;quot;http://openoffice.org/2001/registry&amp;quot; &lt;br /&gt;
    xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;node oor:name=&amp;quot;Paths&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;node oor:name=&amp;quot;Template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;node oor:name=&amp;quot;InternalPaths&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;node oor:name=&amp;quot;%origin%/template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/node&amp;gt;&lt;br /&gt;
		&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/node&amp;gt;&lt;br /&gt;
&amp;lt;/oor:component-data&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exemple de Package ==&lt;br /&gt;
[http://framework.openoffice.org/files/documents/25/3702/TemplatePackage.oxt À cet endroit] se trouve un package vide pour modèles de documents prêt à être rempli de modèles.&lt;br /&gt;
&lt;br /&gt;
Le conteneur au format zip possède un dossier nommé &amp;quot;template&amp;quot;. Tout sous-dossier que vous y créerez apparaîtra comme une catégorie de modèles dans les dialogues de modèles d&amp;#039;OOo. Les modèles peuvent être déposés dans ces sous-dossiers. Le titre du modèle sera emprunté aux métadonnées du document (les propriétés du document) ou au nom du fichier  si le titre n&amp;#039;est pas positionné dans les métadonnées. Si un de vos sous-dossiers a le nom d&amp;#039;une catégorie de modèles déjà présente, les modèles du package seront ajoutés à cette catégorie par le composant des modèles d&amp;#039;OpenOffice.org. Essayez, c&amp;#039;est plus simple à faire qu&amp;#039;à expliquer.&lt;br /&gt;
&lt;br /&gt;
== Localisation des modèles et des catégories de modèles ==&lt;br /&gt;
Les titres des catégories et modèles peuvent être pris aux noms des dossiers et fichiers. Ces noms peuvent être traduits  et utiliser tous les caractères que le conteneur zip et le (ou les) système de fichiers cible autorisent. Il peut arriver que les modèles soient installés sur des systèmes de fichiers où l&amp;#039;on rencontre des problèmes avec les noms  de catégories (les noms de dossiers) traduits. Le composant des Modèles de Documents permet de fournir ces noms traduits dans un fichier différent. Les noms traduits des modèles de documents peuvent être enregistrés dans les métadonnées du document (les propriétés du document) de façon à ce qu&amp;#039;aucun problème ne survienne ici.&lt;br /&gt;
&lt;br /&gt;
Le fichier de localisation s&amp;#039;appelle &amp;quot;groupuinames.xml&amp;quot; et prend place dans le sous-dossier &amp;quot;template&amp;quot; du package. Son contenu s&amp;#039;appréhende directement. Voici un exemple d&amp;#039;adaptation française de quelques dossiers qui utilisent des noms de fichiers en anglais :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;groupuinames.xml&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;groupuinames:template-group-list xmlns:groupuinames=&amp;quot;http://openoffice.org/2006/groupuinames&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;educate&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Éducation&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;layout&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Arrière-plans de présentation&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;misc&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Divers&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;officorr&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Correspondance d&amp;#039;affaires&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;offimisc&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Autres documents d&amp;#039;affaires&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;personal&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Correspondance privée et documents&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;presnt&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Présentations&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/groupuinames:template-group-list&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Packages multilingues de modèles ==&lt;br /&gt;
Des packages multilingues de modèles sont également possibles. Ils nécessitent d&amp;#039;une part une légère modification de la ligne 13 du fichier Paths.xcu :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Paths.xcu&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;#039;1.0&amp;#039; encoding=&amp;#039;UTF-8&amp;#039;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;oor:component-data oor:package=&amp;quot;org.openoffice.Office&amp;quot;&lt;br /&gt;
    oor:name=&amp;quot;Paths&amp;quot; xmlns:install=&amp;quot;http://openoffice.org/2004/installation&amp;quot; &lt;br /&gt;
    xmlns:oor=&amp;quot;http://openoffice.org/2001/registry&amp;quot;&lt;br /&gt;
    xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;node oor:name=&amp;quot;Paths&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;node oor:name=&amp;quot;Template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;node oor:name=&amp;quot;InternalPaths&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;node oor:name=&amp;quot;%origin%/template/$(vlang)&amp;quot; oor:op=&amp;quot;fuse&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/node&amp;gt;&lt;br /&gt;
		&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/oor:component-data&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et, d&amp;#039;autre part, la création de dossiers supplémentaires. Il s&amp;#039;agit des dossiers qui contiendront les modèles, sous-dossiers du dossier &amp;quot;template&amp;quot;, et qui  auront comme nom les codes ISO des langages  fournis par les packs de langues d&amp;#039;OOo. Vous trouverez [http://framework.openoffice.org/files/documents/25/3706/MultiLanguageTemplatePackage.oxt un deuxième package vide] qui fournit l&amp;#039;infrastructure d&amp;#039;un tel package. Utilisez-le et placez les modèles en allemand dans le dossier &amp;quot;de&amp;quot;, ceux en anglais dans le dossier &amp;quot;en-US&amp;quot;, ceux en français dans le dossier &amp;quot;fr&amp;quot; etc.  Des dossiers vides ne posent pas de problème. Chaque fichier de localisation (groupuinames.xml) doit désormais être placé dans le dossier correspondant au langage qu&amp;#039;il utilise et non plus directement dans le dossier  &amp;quot;template&amp;quot; comme dans le cas d&amp;#039;un package monolingue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Packages Autotexte =&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a été expliqué ci-dessus par rapport aux pacakges de modèles s&amp;#039;applique également aux packages autotextes. Le fichier comporte alors, à la place d&amp;#039;une valeur pour le chemin du &amp;quot;Template&amp;quot;, une valeur correspondant au chemin &amp;quot;AutoTexte&amp;quot;. Un exemple d&amp;#039;un tel package se trouve ici : [http://framework.openoffice.org/files/documents/25/3710/AutoTextPackage.oxt here]. Cet exemple peut être utilisé pour fournir des fichiers autotexte. A l&amp;#039;heure actuelle, il n&amp;#039;existe aucune méthode d&amp;#039;export pour ces fichiers, il est donc aussi simple de copier les fichiers &amp;quot;*.bau&amp;quot; à la main qui ont été créés directement dans le package. De la même manière, on peut créer des packages d&amp;#039;autotextes localisés dans la langue de son choix: il suffit de placer les fichiers dans des sous-dossiers portant des noms conformes aux codes langue ISO, comme cela est indiqué dans le dossier &amp;quot;share/autotext&amp;quot;. Contrairement aux packages de modèles, le chemin de l&amp;#039;autotexte ne nécessite pas d&amp;#039;inclure &amp;quot;$(vlang)&amp;quot; pour obtenir des packages multilingues puisque le composant gérant les autotextes implémente déjà en interne l&amp;#039;accès indépendamment de la langue.&lt;br /&gt;
&lt;br /&gt;
Une remarque toutefois qui pose parfois des problèmes lors du déploiement de packages autotextes: l&amp;#039;interface graphique de l&amp;#039;utilisateur permet à l&amp;#039;heure actuelle d&amp;#039;enregistrer les autotextes dans des endroits arbitraires. Ceci est une erreur de fonctionnement [http://www.openoffice.org/issues/show_bug.cgi?id=70410 bug] qui devrai être corrigée dans des versions futures de OpenOffice.org. Tout changement appliqué à des autotextes présents dans un package seront perdus lors de la désinstallation du package. Il n&amp;#039;est pas prévu qu&amp;#039;on puisse changer le contenu des packages!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Packages du Gallery =&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a été écrit ci-dessus s&amp;#039;applique également aux packages du Gallery. Le fichier Paths.xcu contient cette fois-ci une valeur relative au chemin du &amp;quot;Gallery&amp;quot; à place de celui des &amp;quot;Template&amp;quot;. Un exemple d&amp;#039;un package Gallery se trouve ici: [http://framework.openoffice.org/files/documents/25/3711/GalleryPackage.oxt here]. On peut ainsi le remplir avec les thèmes de Gallery qu&amp;#039;on souhaite. Comme cet aspect des choses n&amp;#039;est pas aussi facile à maîtriser que cela puisse paraître, et le code a souvent tendance à provoquer des conflits de noms entre les différents fichiers de thème, il est déconseillé ne pas mettre en oeuvre des packages de Gallery tant que le bug référencé ici [http://www.openoffice.org/issues/show_bug.cgi?id=70412 issue] n&amp;#039;est pas résolu.&lt;br /&gt;
&lt;br /&gt;
= Packages pour dictionaires et wordbooks utilisateurs =&lt;br /&gt;
&lt;br /&gt;
Ce travail n&amp;#039;est pas encore achevé parce qu&amp;#039;il nécessite une refonte de l&amp;#039;accès aux fichiers se rapportant aux outils linguistiques. Revenez de temps en temps pour voir où cela en est.&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18642</id>
		<title>Non-code extensions FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18642"/>
		<updated>2006-10-14T10:25:35Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;traduction en cours ... sur la base de :&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Non-code_extensions&lt;br /&gt;
&lt;br /&gt;
{{Extensions}}&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Packages UNO: Principes de base =&lt;br /&gt;
&lt;br /&gt;
Le concept de déploiement des extensions OpenOffice.org basé sur les packages UNO n&amp;#039;est pas limité au code. Il est également possible d&amp;#039;installer d&amp;#039;autres choses dans des packages faciles d&amp;#039;utilisation, comme des modèles, des autotextes etc. Vous trouverez ci-dessous une explication du fonctionnement de base. Elle est destinée aux utilisateurs avancés et aux administrateurs système. La plupart des points abordés ici sont expliqués de façon plus détaillée et plus compréhensible à d&amp;#039;autres endroits. Le sujet de la documentation ci-dessous est de présenter une vue générale et d&amp;#039;expliquer les principes de base. Si vous souhaitez en savoir plus sur UNO, vous pouvez consulter notre [http://wiki.services.openoffice.org/wiki/Uno wiki UNO] ou les pages web du  [http://udk.openoffice.org project UDK].&lt;br /&gt;
&lt;br /&gt;
Toutes les informations fournies ici se rapportent à OpenOffice.org 2.0.4. Les différences pouvant exister avec des versions plus anciennes ne sont pas expliquées ici, bien que l&amp;#039;on puisse mentionner explicitement les choses apparues pour la première fois dans la 2.0.4.&lt;br /&gt;
&lt;br /&gt;
Les packages UNO ne sont rien d&amp;#039;autre que des dossiers zippés avec des données supplémentaires et des méta-données décrivant le contenu. Il peuvent être déployés par l&amp;#039;interface du Gestionnaire de packages intégré à OOo (&amp;quot;Outils - Gestionnaire de packages&amp;quot;) ou grace à l&amp;#039;outil en ligne de commande “unopkg” qui se trouve dans le répertoire &amp;quot;program&amp;quot; de OOo. Ce dernier permet non seulement le déploiement d&amp;#039;un package pour un utilisateur, mais également pour tous les utilisateurs avec le paramètre optionnel &amp;quot;--shared”. Quand les packages sont installés, leur contenu est recopié à des emplacements privés bien définis sous “share/uno_packages” ou “user/uno_packages”, selon la portée de l&amp;#039;installation du package (installation système ou simple utilisateur). On entend par &amp;quot;Privé&amp;quot; : ne pas écrire de code qui se fie à la structure particulière du composant UNO décompressé, l&amp;#039;accès aux fichiers compressés doit utiliser un API défini qui se charge des détails pour l&amp;#039;appelant. Des fichiers en dehors des dossiers &amp;quot;uno_packages&amp;quot; ne devraient jamais être affectés, à la seule exception dont l&amp;#039;explication se trouve ici [http://www.openoffice.org/issues/show_bug.cgi?id=70283 bug]: Des macros Basic dans des packages UNO doivent toujours être enregistrées dans un fichier xlc se trouvant dans l&amp;#039;un des répertoires &amp;quot;basic&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Extensions comportant des services UNO (code) ==&lt;br /&gt;
&lt;br /&gt;
Si un package UNO comporte un composant écrit en Java, C++ ou Python, ce dernier doit rendre publique sa fonctionnalité afin d&amp;#039;être fonctionnel au sein de OpenOffice.org. Dans les développements basés sur UNO, un ensemble de fonctionnalités défini est appelé un &amp;quot;service&amp;quot;. Ceux-ci sont identifiés et on y accède par leurs noms de service. Un composant qui met en oeuvre de tels services doit informer les autres de son identification. Aujourd&amp;#039;hui tous les composants exportent une fonction qui peut être appélée par unopkg et qui va obliger le composant à écrire toutes les informations nécessaires dans le fichier de registre des services qui est créé et maintenu à l&amp;#039;intérieur d&amp;#039;un dossier „uno_package“. Lorsque OpenOffice.org se sert de son gestionnaire de service pour rechercher des services UNO disponibles, il regardera non seulement dans le registre des services (services.rdb) au sein du répertoire principal du programme (contenant toutes les informations sur les &amp;quot;services internes&amp;quot;), mais également dans tous les fichiers de registre se trouvant dans les dossiers “uno_packages”.&lt;br /&gt;
&lt;br /&gt;
OOo n&amp;#039;est capable d&amp;#039;instancier des services UNO par leurs noms que s&amp;#039;il en connaît l&amp;#039;existence. Ceci est facile pour des services qui remplacent ceux déjà présents en &amp;quot;interne&amp;quot; puisqu&amp;#039;OOo les connaît déjà et s&amp;#039;en sert couramment, mais comme la plupart des composants fournissent de nouveaux services, il doit exister autre chose qui permet à OOo de s&amp;#039;en servir bien que lui étant inconnus lors de la compilation. Pour ces cas précis, les composants UNO doivent fournir des données complémentaires sur le moment auquel le chargement d&amp;#039;un service donné doit s&amp;#039;effectuer. Ces &amp;quot;données de composant additionnelles&amp;quot; sont fournies dans les fichiers de configuration de OOo. &lt;br /&gt;
&lt;br /&gt;
Un exemple serait un composant de filtre de document dans lequel les données complémentaires qui doivent être fournies consistent (entre autres) en le type de fichier que le filtre sait charger. Un composant de filtre précis pourrait se déclarer capable de charger des fichiers WordPerfect. Ainsi, si un utilisateur choisit ce filtre pour charger un ficher dans l&amp;#039;application alors OOo trouverait les données déclarées en recherchant toutes données contenant le type de fichier souhaité (wps), instancierait le composant de filtre par son nom de service tel que découvert dans ces données et ensuite s&amp;#039;en servir pour charger le fichier dans l&amp;#039;application. Chaque filtre déjà présent dans OOo a ses propres données de configuration et les filtres de conversion de documents dans les packages UNO fournissent leurs propres données de configuration de manière à complémenter celles déjà présentes dans le produit.&lt;br /&gt;
&lt;br /&gt;
== Support des Packages dans le Gestionnaire de Configuration ==&lt;br /&gt;
Le Gestionnaire de Configuration d&amp;#039;OpenOffice.org possède également la capacité à rechercher dans un ensemble de dossiers extensibles de la même manière que le Gestionnaire de Services. S&amp;#039;il trouve plusieurs fichiers de configuration dans ces dossiers contenant des données pour les mêmes éléments dans l&amp;#039;arborescence des entrées de configuration, soit il les fusionnera, soit il remplacera des données d&amp;#039;ordre hiérarchique inférieur par des données d&amp;#039;ordre hiérarchique supérieur, selon le type de données de configuration. Les données de configuration &amp;quot;utilisateur&amp;quot; ont toujours précédence sur les données de configuration préinstallées se trouvant dans la couche partagée (&amp;quot;share&amp;quot;). Les données de configuration des packages UNO se situent entre ces deux extrêmes : les données de configuration partagées des packages UNO ont un ordre hiérarchique supérieur à la couche partagée pré-installée, mais un ordre hiérarchique inférieur aux données de configuration &amp;quot;utilisateur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Il demeure la question suivante : quelles données sont fusionnées lorsqu&amp;#039;il y a au moins deux couches de configuration ?&lt;br /&gt;
&lt;br /&gt;
Le Gestionnaire de Configuration a tendance à prendre ses informations dans des fichiers xml (portant l&amp;#039;extension de fichier xcu) avec des éléments typés. Il supporte quelques types de base, des types structurés qui doivent être définis dans des fichiers de schéma (portant l&amp;#039;extension de fichier xcs) et fait une liste de tous ces types. Ceux-ci ne peuvent pas être étendus. Si la configuration découvre des valeurs différentes de celles dans les différentes couches, c&amp;#039;est la valeur de l&amp;#039;ordre hiérarchique supérieur qui est retenue. Pour la fusion d&amp;#039;éléments de configuration et par ce biais l&amp;#039;extension de la fonctionnalité qui en dépend nécessite le type &amp;quot;set&amp;quot;. Pour mieux comprendre son fonctionnement, regardez dans [[Configuration_schema_path_settings|configuration schema]] mentionné dans la section &amp;quot;Configuration des Chemins&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Un composant peut étendre ou modifier la configuration de OpenOffice.org en lui fournissant des fichiers xcu dans son package qui remplaceront ou étendront (fusion) des entrées de configuration dans OpenOffice.org. Il peut également disposer de ses propres entrées de configuration s&amp;#039;il fournit des fichiers de schéma (xcs) dans son package.&lt;br /&gt;
&lt;br /&gt;
Il existe un autre cas d&amp;#039;utilisation (relativement évident) du principe de couches du gestionnaire de configuration : le remplacement des entrées de configuration de OpenOffice.org au niveau de tous les utilisateurs (&amp;quot;all users&amp;quot;). Un administrateur peut personnaliser l&amp;#039;installation de OpenOffice.org dans son propre compte utilisateur, et puis ensuite prendre les fichiers xcu créés contenant les personnalisations et les inclure dans un package qu&amp;#039;il installera par la suite avec &amp;quot;unopkg add --shared&amp;quot; chaque fois qu&amp;#039;il installera, réinstallera ou mettra à jour OpenOffice.org. Il n&amp;#039;y aura ainsi aucun besoin d&amp;#039;éditer les fichiers xcu dans &amp;quot;share/registry&amp;quot; à la main !&lt;br /&gt;
&lt;br /&gt;
Le principe des couches du registre de services et de la configuration sont les principes de base qui rendent le système de packages UNO à la fois solide et flexible.&lt;br /&gt;
&lt;br /&gt;
= Configuration des Chemins =&lt;br /&gt;
Quelques données d&amp;#039;OpenOffice.org ne sont pas stockées dans les fichiers de configuration xcu mais ailleurs dans le système de fichiers, comme, par exemple, les modèles de documents, l&amp;#039;autotexte, le contenu de la galerie, etc. Bien entendu ce contenu doit pouvoir être déployé dans des packages, mais dans ce cas, d&amp;#039;ordinaire, vous ne souhaitez pas remplacer le contenu existant, vous souhaitez lui ajouter quelque chose. Aussi l&amp;#039;accès à ces fichiers doit également respecter un principe de couches. OpenOffice.org dispose de quelques composants qui gèrent l&amp;#039;accès aux fichiers. Nous aurions pu étendre ces composants de la  même façon que nous avons étendu le Gestionnaire de Configuration ou le Gestionnaire de Services (en les rendant capables d&amp;#039;utiliser explicitement des couches), mais nous avons décidé de réutiliser la capacité déjà disponible du Gestionnaire de Configuration.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;endroit où sont recherchés ces fichiers est défini dans la configuration soit comme un simple chemin, soit comme une liste de chemins (&amp;quot;multichemin&amp;quot;). Malheureusement, une telle liste ne peut qu&amp;#039;être remplacée dans les couches les plus hautes et non étendue, aussi avons-nous besoin d&amp;#039;un nouveau schéma de configuration pour les chemins, nouveau schéma qui utilise des &amp;quot;ensembles&amp;quot; au lieu de &amp;quot;listes&amp;quot; comme ils peuvent être étendus par des packages. Nous utilisons ce nouveau schéma pour les chemins à partir d&amp;#039;OpenOffice.org 2.0.4. Nous avons gardé l&amp;#039;ancien schéma et ses données pour des raisons de compatibilité et porterons ces réglages vers les nouvelles données. L&amp;#039;ancien schéma sera supprimé dans OpenOffice.org 3.0.&lt;br /&gt;
&lt;br /&gt;
Si vous jetez un coup d&amp;#039;oeil aux entrées des &amp;quot;Chemins&amp;quot; dans la boîte de dialogue &amp;quot;Options&amp;quot; dans OOo2.0.4 vous remarquerez que toutes les parties des multichemins n&amp;#039;y sont pas montrées. Dans les versions antérieures  d&amp;#039;OOo, vous pouviez voir habituellement deux dossiers pour les modèles par exemple :  $(share)/templates et $(user)/templates, où &amp;quot;$(share)&amp;quot; et &amp;quot;$(user) sont des variables pour les dossiers partage (share) et utilisateur (user) de l&amp;#039;installation particulière. Vous pourriez voir de même tous les dossiers supplémentaires que l&amp;#039;administrateur ou l&amp;#039;utilisateur ont pu ajouter. Dans OOo2.0.4 vous continuerez de voir $(user)/templates et ces dossiers additionnels (si jamais il y en a), mais vous ne verrez plus $(share)/templates à cet endroit-ci. Si des packages contenant des modèles de documents sont installés, leur dossier ne sera pas montré ici non plus, ce dialogue n&amp;#039;est désormais qu&amp;#039;un outil pour permettre à l&amp;#039;utilisateur d&amp;#039;adapter les réglages qui sont sous son contrôle direct.&lt;br /&gt;
&lt;br /&gt;
       [[Image:Dialog_Tools_Options_204.png]]&lt;br /&gt;
&lt;br /&gt;
=Packages de Modèles=&lt;br /&gt;
&lt;br /&gt;
Un package UNO pour les modèles de documents est plutôt simple. Il contient principalement les modèles, organisés en des répertoires qui définissent les catégories de modèles pour le Gestionnaire de Modèles de Documents. De plus, un fichier Paths.xcu doit être fourni, fichier qui enregistre le package dans l&amp;#039;ensemble des dossiers de modèles de documents. Ce fichier contient l&amp;#039;URL du dossier où les modèles du package seront décompressés. Comme il s&amp;#039;agit là d&amp;#039;une inconnue lors de la création du package, une variable est utilisée dans l&amp;#039;URL, remplacée par le gestionnaire de packages quand il copie le fichier xcu à son emplacement final. L&amp;#039;avantage réside en ce que cette variable sera toujours la même pour chaque package de modèles et qu&amp;#039;ainsi le créateur d&amp;#039;un tel package n&amp;#039;aura aucun besoin de la créer lui-même :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Paths.xcu&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;#039;1.0&amp;#039; encoding=&amp;#039;UTF-8&amp;#039;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;oor:component-data oor:package=&amp;quot;org.openoffice.Office&amp;quot; &lt;br /&gt;
    oor:name=&amp;quot;Paths&amp;quot; xmlns:install=&amp;quot;http://openoffice.org/2004/installation&amp;quot; &lt;br /&gt;
    xmlns:oor=&amp;quot;http://openoffice.org/2001/registry&amp;quot; &lt;br /&gt;
    xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;node oor:name=&amp;quot;Paths&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;node oor:name=&amp;quot;Template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;node oor:name=&amp;quot;InternalPaths&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;node oor:name=&amp;quot;%origin%/template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/node&amp;gt;&lt;br /&gt;
		&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/node&amp;gt;&lt;br /&gt;
&amp;lt;/oor:component-data&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exemple de Package ==&lt;br /&gt;
[http://framework.openoffice.org/files/documents/25/3702/TemplatePackage.oxt À cet endroit] se trouve un package vide pour modèles de documents prêt à être rempli de modèles.&lt;br /&gt;
&lt;br /&gt;
Le conteneur au format zip possède un dossier nommé &amp;quot;template&amp;quot;. Tout sous-dossier que vous y créerez apparaîtra comme une catégorie de modèles dans les dialogues de modèles d&amp;#039;OOo. Les modèles peuvent être déposés dans ces sous-dossiers. Le titre du modèle sera emprunté aux métadonnées du document (les propriétés du document) ou au nom du fichier  si le titre n&amp;#039;est pas positionné dans les métadonnées. Si un de vos sous-dossiers a le nom d&amp;#039;une catégorie de modèles déjà présente, les modèles du package seront ajoutés à cette catégorie par le composant des modèles d&amp;#039;OpenOffice.org. Essayez, c&amp;#039;est plus simple à faire qu&amp;#039;à expliquer.&lt;br /&gt;
&lt;br /&gt;
== Localisation des modèles et des catégories de modèles ==&lt;br /&gt;
Les titres des catégories et modèles peuvent être pris aux noms des dossiers et fichiers. Ces noms peuvent être traduits  et utiliser tous les caractères que le conteneur zip et le (ou les) système de fichiers cible autorisent. Il peut arriver que les modèles soient installés sur des systèmes de fichiers où l&amp;#039;on rencontre des problèmes avec les noms  de catégories (les noms de dossiers) traduits. Le composant des Modèles de Documents permet de fournir ces noms traduits dans un fichier différent. Les noms traduits des modèles de documents peuvent être enregistrés dans les métadonnées du document (les propriétés du document) de façon à ce qu&amp;#039;aucun problème ne survienne ici.&lt;br /&gt;
&lt;br /&gt;
Le fichier de localisation s&amp;#039;appelle &amp;quot;groupuinames.xml&amp;quot; et prend place dans le sous-dossier &amp;quot;template&amp;quot; du package. Son contenu s&amp;#039;appréhende directement. Voici un exemple d&amp;#039;adaptation française de quelques dossiers qui utilisent des noms de fichiers en anglais :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;groupuinames.xml&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;groupuinames:template-group-list xmlns:groupuinames=&amp;quot;http://openoffice.org/2006/groupuinames&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;educate&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Éducation&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;layout&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Arrière-plans de présentation&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;misc&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Divers&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;officorr&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Correspondance d&amp;#039;affaires&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;offimisc&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Autres documents d&amp;#039;affaires&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;personal&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Correspondance privée et documents&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;groupuinames:template-group groupuinames:name=&amp;quot;presnt&amp;quot; &lt;br /&gt;
                groupuinames:default-ui-name=&amp;quot;Présentations&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/groupuinames:template-group-list&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Packages multilingues de modèles ==&lt;br /&gt;
Des packages multilingues de modèles sont également possibles. Ils nécessitent d&amp;#039;une part une légère modification de la ligne 13 du fichier Paths.xcu :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Paths.xcu&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt; [xml]&lt;br /&gt;
&amp;lt;?xml version=&amp;#039;1.0&amp;#039; encoding=&amp;#039;UTF-8&amp;#039;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;oor:component-data oor:package=&amp;quot;org.openoffice.Office&amp;quot;&lt;br /&gt;
    oor:name=&amp;quot;Paths&amp;quot; xmlns:install=&amp;quot;http://openoffice.org/2004/installation&amp;quot; &lt;br /&gt;
    xmlns:oor=&amp;quot;http://openoffice.org/2001/registry&amp;quot;&lt;br /&gt;
    xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;node oor:name=&amp;quot;Paths&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;node oor:name=&amp;quot;Template&amp;quot; oor:op=&amp;quot;fuse&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;node oor:name=&amp;quot;InternalPaths&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;node oor:name=&amp;quot;%origin%/template/$(vlang)&amp;quot; oor:op=&amp;quot;fuse&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/node&amp;gt;&lt;br /&gt;
		&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/node&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/oor:component-data&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et, d&amp;#039;autre part, la création de dossiers supplémentaires. Il s&amp;#039;agit des dossiers qui contiendront les modèles, sous-dossiers du dossier &amp;quot;template&amp;quot;, et qui  auront comme nom les codes ISO des langages  fournis par les packs de langues d&amp;#039;OOo. Vous trouverez [http://framework.openoffice.org/files/documents/25/3706/MultiLanguageTemplatePackage.oxt un deuxième package vide] qui fournit l&amp;#039;infrastructure d&amp;#039;un tel package. Utilisez-le et placez les modèles en allemand dans le dossier &amp;quot;de&amp;quot;, ceux en anglais dans le dossier &amp;quot;en-US&amp;quot;, ceux en français dans le dossier &amp;quot;fr&amp;quot; etc.  Des dossiers vides ne posent pas de problème. Chaque fichier de localisation (groupuinames.xml) doit désormais être placé dans le dossier correspondant au langage qu&amp;#039;il utilise et non plus directement dans le dossier  &amp;quot;template&amp;quot; comme dans le cas d&amp;#039;un package monolingue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Packages Autotexte =&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a été expliqué ci-dessus par rapport aux pacakges de modèles s&amp;#039;applique également aux packages autotextes. Le fichier comporte alors, à la place d&amp;#039;une valeur pour le chemin du &amp;quot;Template&amp;quot;, une valeur correspondant au chemin &amp;quot;AutoTexte&amp;quot;. Un exemple d&amp;#039;un tel package se trouve ici : [http://framework.openoffice.org/files/documents/25/3710/AutoTextPackage.oxt here]. Cet exemple peut être utilisé pour fournir des fichiers autotexte. A l&amp;#039;heure actuelle, il n&amp;#039;existe aucune méthode d&amp;#039;export pour ces fichiers, il est donc aussi simple de copier les fichiers &amp;quot;*.bau&amp;quot; à la main qui ont été créés directement dans le package. De la même manière, on peut créer des packages d&amp;#039;autotextes localisés dans la langue de son choix: il suffit de placer les fichiers dans des sous-dossiers portant des noms conformes aux codes langue ISO, comme cela est indiqué dans le dossier &amp;quot;share/autotext&amp;quot;. Contrairement aux packages de modèles, le chemin de l&amp;#039;autotexte ne nécessite pas d&amp;#039;inclure &amp;quot;$(vlang)&amp;quot; pour obtenir des packages multilingues puisque le composant gérant les autotextes implémente déjà en interne l&amp;#039;accès indépendamment de la langue.&lt;br /&gt;
&lt;br /&gt;
Une remarque toutefois qui pose parfois des problèmes lors du déploiement de packages autotextes: l&amp;#039;interface graphique de l&amp;#039;utilisateur permet à l&amp;#039;heure actuelle d&amp;#039;enregistrer les autotextes dans des endroits arbitraires. Ceci est une erreur de fonctionnement [http://www.openoffice.org/issues/show_bug.cgi?id=70410 bug] qui devrai être corrigée dans des versions futures de OpenOffice.org. Tout changement appliqué à des autotextes présents dans un package seront perdus lors de la désinstallation du package. Il n&amp;#039;est pas prévu qu&amp;#039;on puisse changer le contenu des packages!&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Extensions_development_basic_fr&amp;diff=18522</id>
		<title>Extensions development basic fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Extensions_development_basic_fr&amp;diff=18522"/>
		<updated>2006-10-13T13:07:24Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* To open a document */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Comment démarrer&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Cette page est un guide de démarrage qui vous permettra d&amp;#039;écrire des macros en OpenOffice.org Basic. Une connaisance préalable de la programmation est un pré-requis. Merci d&amp;#039;éditer cette page pour la rendre plus lisible. J&amp;#039;espère que vous la trouverez utile.&lt;br /&gt;
&lt;br /&gt;
Si vous maîtrisez les bases, alors vous pouvez consulter le [[CookBook]] qui donne des exemples et des (wrappers).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Où le code est-il enregistré ?=&lt;br /&gt;
Le code OpenOffice.org Basic est enregistré dans des modules eux-mêmes placés dans les bibliothèques. Une bibliothèque peut être : &lt;br /&gt;
&lt;br /&gt;
*Partagée (pour une installation en réseau - OOo Macros &amp;amp; Dialogues) &lt;br /&gt;
*Uniquement pour l&amp;#039;utilisateur courant (Mes Macros &amp;amp; Dialogues) &lt;br /&gt;
*Incorporée à un document ou à un modèle de telle manière que son code ne soit disponible que lorsque ce document est ouvert.&lt;br /&gt;
&lt;br /&gt;
Lorsque des bibliothèques ne sont stockées ni dans un document ni dans un modèle, c&amp;#039;est-à-dire lorsque les bibliothèques sont partagées ou pour l&amp;#039;utilisateur courant, on les appelle &amp;#039;&amp;#039;&amp;#039;Bibliothèques OpenOffice.org&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
Pour connaître les dossiers qui contiennent les bibliothèques OpenOffice.org voir :&amp;lt;br&amp;gt; &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Options… &amp;gt; OpenOffice.org &amp;gt; Chemins &amp;gt; BASIC&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Ne copiez pas ni ne déplacez les bibliothèques en utilisant les commandes du système d&amp;#039;exploitation. Préférez le gestionnaire de macros ou le gestionnaire de packages.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La taille autorisée pour les modules placés à l&amp;#039;intérieur des bibliothèques est limitée à 64 Ko. Une bilbiothèque peut contenir jusqu&amp;#039;à 16.000 modules. &lt;br /&gt;
&lt;br /&gt;
Pour plus d&amp;#039;information, reportez-vous à l&amp;#039;aide en ligne, rubrique : Modules et bibliothèques.&lt;br /&gt;
&lt;br /&gt;
=Accéder à l&amp;#039;IDE=&lt;br /&gt;
Pour accéder à l&amp;#039;IDE (environnement de développement intégré) pour la première fois : &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org 1.1.x: &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Macro… &amp;gt;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org 1.9.x et ultérieur : &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Gérer les macros &amp;gt; OpenOffice.org Basic… &amp;gt;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous allons utiliser le Module1 de la bibliothèque Standard, présente pour l&amp;#039;utilisateur courant uniquement : &lt;br /&gt;
&lt;br /&gt;
Entrons un nom pour notre nouvelle macro : &amp;#039;&amp;#039;&amp;#039;HelloWorld&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Dans la macro, sélectionnons &amp;#039;&amp;#039;&amp;#039;Standard&amp;#039;&amp;#039;&amp;#039; dans la boîte de liste.&lt;br /&gt;
&lt;br /&gt;
Cliquons &amp;#039;&amp;#039;&amp;#039;Nouveau&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant trouver quelque chose comme çà : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
REM  *****  BASIC  *****&lt;br /&gt;
 &lt;br /&gt;
Sub Main&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
 &lt;br /&gt;
Sub HelloWorld&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Le curseur est positionné au début de la ligne &amp;lt;tt&amp;gt;Sub HelloWorld&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Maintenant que l&amp;#039;IDE est actif, il peut être accédé depuis le menu Fenêtre d&amp;#039;OpenOffice.org ou par la barre des tâches du système d&amp;#039;exploitation.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Saisie de code=&lt;br /&gt;
Selectionnons et effaçons : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
REM  *****  BASIC  *****&lt;br /&gt;
 &lt;br /&gt;
Sub Main&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Au-dessous de la ligne &amp;quot;Sub HelloWorld&amp;quot; entrons &amp;lt;tt&amp;gt;msgbox &amp;quot;Hello World!&amp;quot;&amp;lt;/tt&amp;gt;, de manière que l&amp;#039;éditeur ressemble à ceci : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
Sub HelloWorld&lt;br /&gt;
  msgbox &amp;quot;Hello World!&amp;quot;&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Notes:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|L&amp;#039;IDE ne fournit aucune fonctionnalité de code completion ni d&amp;#039;aide sur la syntaxe des commandes lors de la frappe. Pour obtenir de l&amp;#039;aide sur une commande Basic, plaçons le curseur dans la commande et tapons F1.&amp;lt;br&amp;gt; Les commande OpenOffice.org Basic ne sont pas sensibles à la casse. C&amp;#039;est pourquoi msgbox, MSGBOX et Msgbox sont équivalents.&amp;lt;br&amp;gt; Les chaînes sont entourées de guillements doubles.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Exécution du code=&lt;br /&gt;
Le code Basic peut être exécuté de plusieurs façons : &lt;br /&gt;
&lt;br /&gt;
Directement dans l&amp;#039;IDE. La barre des macro comprte un bouton Exécter (par défaut, le troisième de la seconde barre d&amp;#039;outils). Ce bouton lance la première macro du module en cours. &lt;br /&gt;
&lt;br /&gt;
Depuis le menu Outils :&lt;br /&gt;
&lt;br /&gt;
(Version 1.1.x) &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Macro…&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
(Version 1.9.x et supérieures) &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Exécuter la macro…&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à une [[ touche]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à une [[ entrée de menu]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à un bouton de barre d&amp;#039;outil. &lt;br /&gt;
&lt;br /&gt;
En créant un [[ contrôle dans un document]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à un évènement. &lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;instant essayons de lancer la procédure &amp;quot;HelloWorld&amp;quot; en cliquant le bouton &amp;#039;&amp;#039;&amp;#039;Exécuter&amp;#039;&amp;#039;&amp;#039;. Un dialogue intitulé &amp;quot;soffice&amp;quot; et comportant le texte &amp;quot;Hello World!&amp;quot; ainsi qu&amp;#039;un bouton OK doit s&amp;#039;afficher.&lt;br /&gt;
&lt;br /&gt;
=Enregistrement du code=&lt;br /&gt;
Le code est enregistré automatiquement chaque fois que son conteneur est lui-même enregistré. Par conséquent, si le code se trouve dans une bibliothèque OpenOffice (partagée ou de l&amp;#039;utilisateur), il est automatiquement enregistré lorsque OpenOffice est refermé. Si le code se trouve dans une bilbiothèque qui fait partie d&amp;#039;un document, alors il est enregistré lorsque le document l&amp;#039;est. &lt;br /&gt;
&lt;br /&gt;
Un bouton Enregistrer figure sur la barre d&amp;#039;outils Standard (celle du haut par défaut). Si le code se trouve à l&amp;#039;intérieur d&amp;#039;un document ou modèle, alors la totalité du document est enregistrée. Si le code se trouve à l&amp;#039;intérieur d&amp;#039;une bibliothèque OpenOffice.org alors seule la bilbiothèque courante est enregistrée.&lt;br /&gt;
&lt;br /&gt;
=Les variables=&lt;br /&gt;
Nous pouvons forcer la déclaration des variables en insérant &amp;lt;tt&amp;gt;Option Explicit&amp;lt;/tt&amp;gt; au début du module. Pour consulter une discussion consacrée à la déclaration ou non des variables, voir : [[http://www.oooforum.org/forum/viewtopic.phtml?t=5845 cette discussion]]. &lt;br /&gt;
&lt;br /&gt;
Dans cette discussion, on voit que l&amp;#039;auteur de [NdT : la version anglaise de] cette page défendait initialement la déclaration systématique des variables. Depuis lors il a changé d&amp;#039;avis et ne les déclare plus du tout. Bref, c&amp;#039;est une question de préférence personnelle. Dans un cas comme dans l&amp;#039;autre, les préférences de l&amp;#039;auteur vont au nommage des variables selon la convention suivante, qui sera utilisée tout au long des exemples de ce wiki :&lt;br /&gt;
&lt;br /&gt;
La première lettre du nom de la variable indique le type de valeur contenue, telle que présentée à la table ci-dessous (basée sur un tableau dans Tutorial.pdf de Sun) &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Lettre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Signification&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|a&lt;br /&gt;
|Structure&lt;br /&gt;
|-&lt;br /&gt;
|b&lt;br /&gt;
|Boolean (TRUE ou FALSE)&lt;br /&gt;
|-&lt;br /&gt;
|e&lt;br /&gt;
|Enumeration. Cette variable ne peut prendre qu&amp;#039;une valeur parmi un ensemble limité de valeurs.&lt;br /&gt;
|-&lt;br /&gt;
|f&lt;br /&gt;
|Float (de 3.402823 x 1038 à 1.401298 x 10-45. Une variable de type float [NdT : single] peut occuper jusqu&amp;#039;à quatre octets)&amp;lt;br&amp;gt; Double (de 1.79769313486232 x 10308 à 4.94065645841247 x 10-324. Une variable de ce type peut occuper jusqu&amp;#039;à huit octets)&amp;lt;br&amp;gt; Currency (de -922337203685477.5808 à +922337203685477.5807 et occupe jusqu&amp;#039;à huit octets en mémoire)&lt;br /&gt;
|-&lt;br /&gt;
|m&lt;br /&gt;
|Array (aka sequence aka matrice)&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|Integer (de -32768 à 32767.) ou&amp;lt;br&amp;gt; Long (de -2147483648 à 2147483647).&lt;br /&gt;
|-&lt;br /&gt;
|o&lt;br /&gt;
|Object, service ou interface&lt;br /&gt;
|-&lt;br /&gt;
|s&lt;br /&gt;
|String (Une variable string peut mémoriser jusqu&amp;#039;à 65535 caractères Unicode).&lt;br /&gt;
|-&lt;br /&gt;
|x&lt;br /&gt;
|Interface, montre que seules les opérations portant sur une interface particulière d&amp;#039;un objet sont utilisées&lt;br /&gt;
|-&lt;br /&gt;
|v&lt;br /&gt;
|Variant, N&amp;#039;importe quel valeur&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Utilisons des noms descriptifs suffisamment longs et employons le style &amp;quot;Camel case&amp;quot; [NdT : usage conjoint des majuscules et des minuscules pour faire ressortir les éléments du nom]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Les variables définies par l&amp;#039;utilisateur en OpenOffice.org Basic ne sont pas sensibles à la casse. Les constantes UNO-API le sont.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les variables indexant les boucles constituent une exception conventionnelle aux longs noms descriptifs. Des symboles tels que i, j et k sont en effet d&amp;#039;usage fréquent. De même, lorsqu&amp;#039;une chaîne est construite, on utilise fréquemment s comme variable temporaire. &lt;br /&gt;
&lt;br /&gt;
Editons la routine sub HelloWorld de manière qu&amp;#039;elle ressemble à ceci et exécutons-la : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub HelloWorld&lt;br /&gt;
dim i as integer &amp;#039;ligne optionnelle&lt;br /&gt;
  for i = 0 to 2&lt;br /&gt;
    &amp;#039;Ces lignes sont indentées par souci de lisiblité uniquement&lt;br /&gt;
    &amp;#039;Notre code devrait toujours être structuré ainsi pour lui donner des chances de survie&lt;br /&gt;
    msgbox &amp;quot;Hello World &amp;quot; &amp;amp; i&lt;br /&gt;
  next i&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Pour plus d&amp;#039;informations sur les variables, reportons-nous à l&amp;#039;aide en ligne, rubrique &amp;quot;utilisation des variables&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=L&amp;#039;API OpenOffice.org=&lt;br /&gt;
Cette section commence par un exemple. La suite donne des informations complémentaires qui nous permettront de comprendre l&amp;#039;exemple et à l&amp;#039;étendre.&lt;br /&gt;
&lt;br /&gt;
Essayons d&amp;#039;exécuter le code ci-dessous lorsque différents types de documents sont ouverts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
&amp;#039;basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
&amp;#039;xray.xray thisComponent&lt;br /&gt;
msgbox fnWhichComponent(thisComponent)&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function fnWhichComponent(oDoc) as string&lt;br /&gt;
if HasUnoInterfaces(oDoc, &amp;quot;com.sun.star.lang.XServiceInfo&amp;quot;) then &lt;br /&gt;
   if thisComponent.supportsService (&amp;quot;com.sun.star.text.GenericTextDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Texte&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.sheet.SpreadsheetDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Feuille de calcul&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.presentation.PresentationDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Presentation&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.drawing.GenericDrawingDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Dessin&amp;quot;&lt;br /&gt;
   else&lt;br /&gt;
      fnWhichComponent = &amp;quot;Oops le document ouvert est autre chose&amp;quot;&lt;br /&gt;
   end if&lt;br /&gt;
else&lt;br /&gt;
   fnWhichComponent = &amp;quot;Ce n&amp;#039;est pas un document&amp;quot;&lt;br /&gt;
end if&lt;br /&gt;
End function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Convention de nommage des routines==&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, le nom de la fonction utilisateur commence par &amp;quot;fn&amp;quot;. Il s&amp;#039;agit de la convention adoptée par l&amp;#039;auteur initial [NdT : version anglaise] qui permet au lecteur de savoir qu&amp;#039;il s&amp;#039;agit d&amp;#039;une fonction définie par l&amp;#039;utilisateur. Dans le même esprit, l&amp;#039;auteur initial utilise la convention de débuter les noms des procédures par &amp;quot;sub&amp;quot;. Lorsque l&amp;#039;on apprend un nouveau langage et de nouvelles API, il peut s&amp;#039;avérer difficile de reconnaître ce qui ressortit du langage lui-même de ce qui a été défini ailleurs dans notre code. Ce document/wiki emploie ces conventions pour le nommage des fonctions et des procédures.&lt;br /&gt;
&lt;br /&gt;
==Présentation de l&amp;#039;API OpenOffice.org==&lt;br /&gt;
Cette section introduit les termes : &lt;br /&gt;
&lt;br /&gt;
* Interface &lt;br /&gt;
* Module &lt;br /&gt;
* Service &lt;br /&gt;
* Méthode &lt;br /&gt;
* Propriété &lt;br /&gt;
&lt;br /&gt;
S&amp;#039;il n&amp;#039;est pas essentiel de comprendre la différence entre une interface et un service ou ce qu&amp;#039;est un module pour pouvoir écrire des extensions à OpenOffice.org, la compréhension de ces termes aide à correctement interpréter la documentation ainsi qu&amp;#039;à l&amp;#039;introspection des éléments manipulés. Peut-être nous faudra-t-il relire cette section plusieurs fois. &lt;br /&gt;
&lt;br /&gt;
Une &amp;#039;&amp;#039;&amp;#039;interface&amp;#039;&amp;#039;&amp;#039; est la &amp;#039;&amp;#039;définition&amp;#039;&amp;#039; d&amp;#039;un ensemble de méthodes (avec leurs arguments) qu&amp;#039;un service implémentant cette interface doit comporter. &lt;br /&gt;
&lt;br /&gt;
Les interfaces sont regroupées en &amp;#039;&amp;#039;&amp;#039;modules&amp;#039;&amp;#039;&amp;#039; pour des besoins de nommage. Toutes les interfaces (et les services) commencent par le nom &amp;quot;com.sun.star&amp;quot; puis vient le nom du module puis celui de l&amp;#039;interface (ou du service). &lt;br /&gt;
&lt;br /&gt;
Par exemple, la plupart des services fournissent l&amp;#039;interface &amp;lt;tt&amp;gt;com.sun.star.beans.XPropertySet&amp;lt;/tt&amp;gt;. Cette interface est enregistrée dans le module &amp;quot;beans&amp;quot; et fournit l&amp;#039;accès aux propriétés d&amp;#039;un service. Une &amp;#039;&amp;#039;&amp;#039;propriété&amp;#039;&amp;#039;&amp;#039; est une valeur tandis qu&amp;#039;une &amp;#039;&amp;#039;&amp;#039;méthode&amp;#039;&amp;#039;&amp;#039; défiti une action. &lt;br /&gt;
&lt;br /&gt;
Un objet OpenOffice.org peut supporter de nombreux services. &lt;br /&gt;
&lt;br /&gt;
Un objet OpenOffice.org peut supporter un service qui implémente une interface dans laquell une description de méthode déclare qu&amp;#039;un autre objet OpenOffice.org est retourné.&lt;br /&gt;
&lt;br /&gt;
==Introspection==&lt;br /&gt;
HasUnoInterfaces est une fonction OpenOffice.org Basic utilisée pour l&amp;#039;introspection. Ce document  [[http://www.oooforum.org/forum/viewtopic.phtml?t=7068 link]] permettra d&amp;#039;apprendre ce que l&amp;#039;on entend par introspection dans d&amp;#039;autres langages de programmation. &lt;br /&gt;
&lt;br /&gt;
HasUnoInterfaces renvoie une valeur &amp;quot;vrai&amp;quot; si toutes les interfaces spécifiées sont disponibles pour l&amp;#039;objet appelant. &lt;br /&gt;
&lt;br /&gt;
La plupart des objets OpenOffice.org fournissent la méthode supportsService parce qu&amp;#039;ils disposent également de l&amp;#039;interface com.sun.star.lang.XServiceInfo. &lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, la commande OpenOffice.org Basic, &amp;#039;&amp;#039;&amp;#039;HasUnoInterfaces&amp;#039;&amp;#039;&amp;#039; vérifie si le document actif dispose de l&amp;#039;interface com.sun.star.lang.XServiceInfo, car si cette interface n&amp;#039;est pas présente, alors le document n&amp;#039;aura pas non plus la méthode supportsService, et une erreur d&amp;#039;exécution se produirait lorsqu&amp;#039;un objet tentait d&amp;#039;accéder à une méthode inexistante. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;SupportsService&amp;#039;&amp;#039;&amp;#039; est une méthode qui renvoie la valeur &amp;quot;vrai&amp;quot; si le service spécifié est disponible. Dans l&amp;#039;exemple ci-dessus, on vérifie la présence d&amp;#039;un service afin de déterminer le type de document en cours d&amp;#039;activation.&lt;br /&gt;
&lt;br /&gt;
==L&amp;#039;Outil X-Ray==&lt;br /&gt;
L&amp;#039;utilisation de &amp;quot;HasUnoInterfaces&amp;quot; et de &amp;quot;supportsService&amp;quot; permet d&amp;#039;obtenir des informations sur un objet donné lors de son exécution, mais procéder ainsi pour apprendre le langage Basic deviendrait vite fastidieux. Heureusement, et grâce à Bernard Marcelly, nous disposons de l&amp;#039;outil X-Ray. Cet outil est disponible ici: [[http://ooomacros.org/dev.php#101416 ooomacros]]. Téléchargez le fichier zip, dézippez l&amp;#039;archive, ouvrez le document dans OpenOffice.org, et suivez les instructions pour son installation et configuration. &lt;br /&gt;
&lt;br /&gt;
Une partie de la configuration de l&amp;#039;outil X-Ray concerne la définition de l&amp;#039;endroit où est stockée une copie locale (sur le disque dur) du Kit de Développement OpenOffice.org (appélé SDK). Téléchargez le Kit de Développement OpenOffice.org depuis [[ftp://mirrors.dotsrc.org/openoffice/stable/2.0.4_sdk/]] et installez le sur votre disque dur. &lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, au début du code, il y a deux lignes mises en commentaires (les lignes de commentaires commencent toujours avec des apostrophes): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
&amp;#039;basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
&amp;#039;xray.xray thisComponent&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Une fois l&amp;#039;outil X-Ray installé, supprimez les apostrophes dans les lignes indiquées ci-dessus et relancez la macro. A partir de la version 5, la commande à utiliser dans votre code est tout simplement &amp;quot;xray&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;BasicLibraries&amp;#039;&amp;#039;&amp;#039; est une commande OpenOffice.org Basic qui renvoie un objet permettant d&amp;#039;accéder aux bibliothèques OpenOffice.org. La méthode &amp;lt;tt&amp;gt;loadLibrary&amp;lt;/tt&amp;gt; rend disponible aux utilisateurs les routines présentes dans cette bibliothèque. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;xray.xray&amp;lt;/tt&amp;gt; indique la bibliothèque xray et la sous-routine xray contenue dans celle-ci, l&amp;#039;objet thisComponent étant l&amp;#039;objet transmis à xray pour l&amp;#039;introspection. &lt;br /&gt;
&lt;br /&gt;
Afin de trouver l&amp;#039;objet que vous cherchez, il est souvent nécessaire de le découvrir ou de le créer depuis StarDesktop ou thisComponent.&lt;br /&gt;
&lt;br /&gt;
==Desktop, documents, et current selection==&lt;br /&gt;
StarDesktop et ThisComponent sont des commandes OpenOffice.org Basic qui ont trait à l&amp;#039;application et le document actif (c&amp;#039;est-à-dire, celui qui a le focus actuellement sur le bureau) respectivement. &lt;br /&gt;
&lt;br /&gt;
Contrairement à Microsoft Office, l&amp;#039;application OpenOffice.org est monolithique et comporte différents composants. Lorsqu&amp;#039;on exécute du code, il peut être utile de vérifier quel composant est actuellement en cours d&amp;#039;activation. Le code ci-dessus donne un exemple de la manière de procéder à cette vérification. &lt;br /&gt;
&lt;br /&gt;
Quand il est fait référence au Desktop dans StarDesktop, celui-ci se réfère à une existence virtuelle (puisqu&amp;#039;auparavant il existait réellement dans OpenOffice.org et dans StarOffice). On peut ainsi le considérer comme étant l&amp;#039;application OpenOffice.org elle-même.&lt;br /&gt;
&lt;br /&gt;
==Création de Nouveaux Documents==&lt;br /&gt;
Pour créer un nouveau document Writer, on écrit le code suivant: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/swriter&amp;quot;, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De la même manière, pour un nouveau document Calc: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/scalc&amp;quot;, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il serait sans doute plus facile d&amp;#039;écrire une fonction simple: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
function fnNewDoc(sDocType as string)&lt;br /&gt;
fnNewDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/&amp;quot; &amp;amp; sDocType , &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, on pourra créer de nouveaux documents ainsi: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;swriter&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;scalc&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;simpress&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;sdraw&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;smath&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir également http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XComponentLoader.html .&lt;br /&gt;
&lt;br /&gt;
==Ouverture d&amp;#039;un document==&lt;br /&gt;
Le code suivant donne un exemple permettant d&amp;#039;ouvrir un fichier. Pour plus d&amp;#039;informations sur l&amp;#039;utilisation d&amp;#039;URL au sein de OpenOffice.org, voir [[ URL Basics]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sFile = &amp;quot;C:\Documents and Settings\danny\Desktop\MyCalc.sxc&amp;quot; &amp;#039; Windows&lt;br /&gt;
sFile = &amp;quot;/home/danny/Desktop/MyCalc.sxc&amp;quot; &amp;#039; Linux&lt;br /&gt;
sURL = ConvertToURL(sFile)&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(sURL, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici encore, il peut être plus rationnel de simplifier le code en écrivant une fonction: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
function fnOpenDoc(sFile)&lt;br /&gt;
sURL = ConvertToURL(sFile)&lt;br /&gt;
fnOpenDoc = StarDesktop.loadComponentFromURL(sURL, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemples d&amp;#039;utilisation de la fonction: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = fnOpenDoc(&amp;quot;C:\Documents and Settings\danny\Desktop\MyCalc.sxc&amp;quot;) &amp;#039; Windows&lt;br /&gt;
oDoc = fnOpenDoc(&amp;quot;/home/danny/Desktop/MyCalc.sxc&amp;quot;) &amp;#039; Linux&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Current Selection==&lt;br /&gt;
It is common to want to run some code that effects the current selection. &amp;lt;tt&amp;gt;ThisComponent&amp;lt;/tt&amp;gt; has the method &amp;lt;tt&amp;gt;getCurrentSelection&amp;lt;/tt&amp;gt;. Since many different types of objects could possibly be selected it is common to check that the currently selected object has the service that contains the method that we want to apply to the object. &lt;br /&gt;
&lt;br /&gt;
Edit the main subroutine to the following and rerun it on a text document with different selections. (To select more than one block of text hold down the control key). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
if fnWhichComponent(thisComponent) = &amp;quot;Text&amp;quot; then&lt;br /&gt;
        oCurSelection = thisComponent.getCurrentSelection()&lt;br /&gt;
        &amp;#039;xray.xray oCurSelection&lt;br /&gt;
        if oCurSelection.supportsService(&amp;quot;com.sun.star.text.TextRanges&amp;quot;) then&lt;br /&gt;
                msgbox &amp;quot;There are &amp;quot; &amp;amp; oCurSelection.getCount() &amp;amp; _&lt;br /&gt;
                 &amp;quot; selections in the current text document.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
end if&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
With nothing selected the number of selections is one - the insertion point, with one block of text selected the count is still one, but with two blocks of text the count is three - the insertion point and the two blocks of selected text. &lt;br /&gt;
&lt;br /&gt;
Exercise 1: Modify the above code so that it works on selected cell ranges in a spreadsheet. &lt;br /&gt;
&lt;br /&gt;
Question1: For two blocks of cells selected, what would be the count for the number of selections? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
Uncomment &amp;lt;tt&amp;gt;&amp;#039;xray.xray oCurSelection&amp;lt;/tt&amp;gt; so that xray runs, to see that the object that &amp;lt;tt&amp;gt;oCurSelection&amp;lt;/tt&amp;gt; points to has a &amp;quot;property&amp;quot; called &amp;lt;tt&amp;gt;Count&amp;lt;/tt&amp;gt; with a description of &amp;quot;pseudo-prop, read only&amp;quot;. It is possible in OpenOffice.org Basic to write &amp;lt;tt&amp;gt;oCurSelection.count&amp;lt;/tt&amp;gt;, but as this is not possible in all other languages accessing the OpenOffice.org API, this Wiki will try to always use the method approach. (I say try because I have not been in the habit of doing this and sometimes I may forget). &lt;br /&gt;
&lt;br /&gt;
This next example demonstrates changing a property value for the current selections. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
if fnWhichComponent(thisComponent) = &amp;quot;Text&amp;quot; then&lt;br /&gt;
   oCurSelection = thisComponent.getCurrentSelection()&lt;br /&gt;
   if oCurSelection.supportsService(&amp;quot;com.sun.star.text.TextRanges&amp;quot;) then&lt;br /&gt;
      nCount = oCurSelection.Count&lt;br /&gt;
      &amp;#039;xray.xray oCurSelection.getByIndex(0)&lt;br /&gt;
      &amp;#039;Warning: The insertion point will have the same action applied twice&lt;br /&gt;
      &amp;#039;in this case it doesn&amp;#039;t matter, but in others it might.&lt;br /&gt;
      for i = 0 to nCount - 1&lt;br /&gt;
         oCurSelection.getByIndex(i).setPropertyValue(&amp;quot;CharStyleName&amp;quot;, &amp;quot;Strong Emphasis&amp;quot;)&lt;br /&gt;
      next&lt;br /&gt;
   end if&lt;br /&gt;
end if&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
In OpenOffice.org Basic it is possible to shorten the assignment line to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oCurSelection(i).CharStyleName = &amp;quot;Strong Emphasis&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
This wiki will try to use the full methods for both indexing and assigning properties. The rationale is that this makes converting the code to other languages easier and also helps the learner to understand what is happening (again I have not been in the habit of doing this so some examples may slip past me). &lt;br /&gt;
&lt;br /&gt;
Exercise 2: Rewrite the above code so that the warning can be removed. &lt;br /&gt;
&lt;br /&gt;
See [[ Current selection]].&lt;br /&gt;
&lt;br /&gt;
=Iterative Access to Subordinate Objects (Enumeration access)=&lt;br /&gt;
Sometimes to access the desired object an enumeration is required. For example paragraphs, within a document or within a selection. &lt;br /&gt;
&lt;br /&gt;
When a Writer document is active and some text is selected, both &amp;lt;tt&amp;gt;thisDocument.getText()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;thisComponent.getCurrentSelection().getByIndex(i)&amp;lt;/tt&amp;gt; have the service: com.sun.star.text.TextRange which has the interface: com.sun.star.container.XContentEnumerationAccess, it is possible to create an enumeration of the paragraphs for the current document or for a particular selection. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
&amp;#039; Create enumeration object&lt;br /&gt;
oTextElementEnum = thisComponent.getText().createEnumeration()&lt;br /&gt;
&amp;#039;or thisComponent.getCurrentSelection().getByIndex(i).createEnumeration()&lt;br /&gt;
 &lt;br /&gt;
&amp;#039; loop over all text elements&lt;br /&gt;
while oTextElementEnum.hasMoreElements()&lt;br /&gt;
        oTextElement = oTextElementEnum.nextElement&lt;br /&gt;
        if oTextElement.supportsService(&amp;quot;com.sun.star.text.TextTable&amp;quot;) then&lt;br /&gt;
                MsgBox &amp;quot;The current block contains a table.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
        if oTextElement.supportsService(&amp;quot;com.sun.star.text.Paragraph&amp;quot;) then&lt;br /&gt;
                MsgBox &amp;quot;The current block contains a paragraph.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
wend&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Exercise 3: Extend the above example to display in a message box all text portions that are bold. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Named access=&lt;br /&gt;
Some objects provide named access to a particular type of subordinate object, some others indexed access, and some both named and indexed access. &lt;br /&gt;
&lt;br /&gt;
For example if the current document in OpenOffice.org is a spreadsheet then to access a particular sheet can be done by index access: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oSheet = thisComponent.getSheets.getByIndex(0)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
or named access: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oSheet = thisComponent.getSheets.getByName(&amp;quot;Sheet1&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
To check if an object with a particular name already exists use &amp;lt;tt&amp;gt;hasByName&amp;lt;/tt&amp;gt;, for example: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
if thisComponent.getSheets.hasByName(&amp;quot;Sheet1&amp;quot;) then&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
To loop through all the available object names can be done like: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
mNames = thisComponent.getSheets.getElementnames&lt;br /&gt;
for i = lbound(mNames) to ubound(mNames)&lt;br /&gt;
        msgbox mNames(i)&lt;br /&gt;
next&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Some named subordinate objects also provide the interface:  com.sun.star.container.XNameContainer. This interface defines that such objects should have the following methods: &amp;lt;tt&amp;gt;insertByName&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;replaceByname&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;removeByName&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
thisComponent.getSheets.insertByName(&amp;quot;NewSheet&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Create new objects=&lt;br /&gt;
Some objects have services which implement interfaces to provide specific methods for creating a particular type of object. &lt;br /&gt;
&lt;br /&gt;
For example if the current document is a Writer document then &amp;lt;tt&amp;gt;thisComponent.getText&amp;lt;/tt&amp;gt; is an object that provides the service com.sun.star.text.Text which implements the interface  com.sun.star.text.XSimpleText which defines the methods &amp;lt;tt&amp;gt;createTextCursor&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;createTextCursorByRange&amp;lt;/tt&amp;gt;. Both of these methods create a text cursor for accessing the text of the document. These cursors are quite independent of the view cursor . The view cursor is visible on the screen and is manipulated by the user (and can be manipulated by program control), where as a text cursor is not visible on the screen and is solely used by program control. The following code snippet demonstrates creating a new text cursor, such that it starts at the same location as the viewCursor and is then moved independent of the view cursor. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oVC = thisComponent.getCurrentController.getViewCursor&lt;br /&gt;
oCursor = oVC.getText.createTextCursorByRange(oVC)&lt;br /&gt;
oCursor.gotoStartOfSentence(false)&lt;br /&gt;
oCursor.gotoEndOfSentence(true)&lt;br /&gt;
msgbox oCursor.getString&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some objects are context dependent and get created using the method &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt; which is defined in the interface com.sun.star.lang.XMultiServiceFactory. For example to add a rectangle to the first page of a drawing document: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
dim aPoint as new com.sun.star.awt.Point&lt;br /&gt;
dim aSize as new com.sun.star.awt.Size&lt;br /&gt;
 &lt;br /&gt;
aPoint.x = 1000&lt;br /&gt;
aPoint.y = 1000&lt;br /&gt;
 &lt;br /&gt;
aSize.Width = 10000&lt;br /&gt;
aSize.Height = 10000&lt;br /&gt;
 &lt;br /&gt;
oRectangleShape = thisComponent.createInstance(&amp;quot;com.sun.star.drawing.RectangleShape&amp;quot;)&lt;br /&gt;
oRectangleShape.Size = aSize&lt;br /&gt;
oRectangleShape.Position = aPoint&lt;br /&gt;
 &lt;br /&gt;
thisComponent.getDrawPages.getByIndex(0).add(oRectangleShape)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example also uses UNO structs see below for more information on UNO stucts. &lt;br /&gt;
&lt;br /&gt;
Some objects are context independent to create these objects use the OpenOffice.org Basic command createUnoService. For example to create the equivalent to StarDesktop: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDesktop = createUnoService(&amp;quot;com.sun.star.frame.Desktop&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The process that I use to determine how to access or create an object is as follows: &lt;br /&gt;
&lt;br /&gt;
Does the object already exist if so I should be able to access it from something like &amp;lt;tt&amp;gt;thisComponent&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Will the new object belong to another object, if so does the owner have a specific method for creating the object, if so use it. &lt;br /&gt;
&lt;br /&gt;
The new object will belong to another object, but that object doesn&amp;#039;t provide a specific method for creating it, but does provide &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt;. If the object doesn&amp;#039;t provide &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt; are you sure you are using the correct object, or is it context independent. &lt;br /&gt;
&lt;br /&gt;
I have found working out how to create an object to be quite difficult with existing documentation so I hope that this document/wiki will eventually make this clear. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==UNO structs==&lt;br /&gt;
UNO structures can be declared using the OpenOffice.org Basic command &amp;lt;tt&amp;gt;dim&amp;lt;/tt&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
dim aPoint as new com.sun.star.awt.Point&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Or by using the OpenOffice.org Basic command &amp;lt;tt&amp;gt;createUnoStruct&amp;lt;/tt&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
aPoint = createUnoStruct(&amp;quot;com.sun.star.awt.Point&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|When declaring UNO structs case is important. Note that everything upto the name of the struct is lowercase, and that the name of the struct is in TitleCase.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Creating Listeners and Handlers==&lt;br /&gt;
Through the user interface it is possible to assign macros to some events: &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org versions 1.1.x: &amp;#039;&amp;#039;&amp;#039;Tools &amp;gt; Configure… &amp;gt; Events&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org versions 1.9.x and above: &amp;#039;&amp;#039;&amp;#039;Tools &amp;gt; Customize… &amp;gt; Events&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
It is also possible to assign macros to a wider range of events using the OpenOffice.org Basic command CreateUnoListener. This same command is used for creating both listeners and handlers. A listener checks for an event and always allows other listeners to respond to the event as well. A handler listens for an event, and can optionally consume the event so that other listeners don&amp;#039;t get to act on it. &lt;br /&gt;
&lt;br /&gt;
The following example creates a keyHandler: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
global IannzExampleKeyHandler&lt;br /&gt;
 &lt;br /&gt;
sub SetupKeyHandler&lt;br /&gt;
oController = thisComponent.currentController&lt;br /&gt;
IannzExampleKeyHandler = CreateUnoListener(&amp;quot;KeyHandler_&amp;quot;,&amp;quot;com.sun.star.awt.XKeyHandler&amp;quot;)&lt;br /&gt;
oController.addKeyHandler(IannzExampleKeyHandler) &amp;#039; Register the listener&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
sub RemoveKeyHandler&lt;br /&gt;
thisComponent.currentController.removeKeyHandler(IannzExampleKeyHandler)&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
sub KeyHandler_disposing&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function KeyHandler_keyReleased(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean&lt;br /&gt;
        KeyHandler_keyReleased = False    &lt;br /&gt;
end function&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function KeyHandler_keyPressed(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean&lt;br /&gt;
KeyHandler_keyPressed = false   &amp;#039;Let other listeners handle the event&lt;br /&gt;
if oKeyEvent.modifiers = com.sun.star.awt.KeyModifier.MOD2 then &amp;#039;Control key was pressed&lt;br /&gt;
        if oKeyEvent.keyCode = com.sun.star.awt.Key.Q then&lt;br /&gt;
                msgbox &amp;quot;Alt + Q was pressed&amp;quot;&lt;br /&gt;
                KeyHandler_keyPressed = true    &amp;#039;Don&amp;#039;t let other listeners process this event&lt;br /&gt;
        end if&lt;br /&gt;
end if&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
A variable declared as global keeps its value even after the macro exits. In this case we want to be able to use this variable later to remove the handler. As variables declared globally could be used in other libraries to try and avoid conflict I start all my global variables with Iannz my registered name for the OpenOffice.org web site. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;sub SetupKeyHandler&amp;lt;/tt&amp;gt; sets up the handler. The first parameter to CreateUnoListener is the staring name for the methods that will be called when that type of event occurs in this example .&amp;lt;tt&amp;gt;&amp;quot;KeyHandler_&amp;quot;&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The second parameter is the name of the interface for the listener or handler, &amp;quot;com.sun.star.awt.XKeyHandler&amp;quot;. The name is case sensitive, everything up to and including the module name is always lowercase, the name of the interface always starts with &amp;quot;X&amp;quot; and the remainder is in TitleCase. &lt;br /&gt;
&lt;br /&gt;
Use the SDK to find out what methods the interface must supply. You must supply routines for all of these methods even if you don&amp;#039;t intend to use them. You also need to supply a disposing method. The names of these routines start with the string given in the first parameter to CreateUnoListener , in this example &amp;lt;tt&amp;gt;&amp;quot;KeyHandler_&amp;quot;&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Thus in the example there is &amp;lt;tt&amp;gt;KeyHandler_disposing&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;KeyHandler_keyReleased&amp;lt;/tt&amp;gt; which don&amp;#039;t actually do anything but are required, and &amp;lt;tt&amp;gt;KeyHandler_keyPressed&amp;lt;/tt&amp;gt; which actually does the job. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;sub RemoveKeyHandler&amp;lt;/tt&amp;gt; demonstrates how to remove the handler.&lt;br /&gt;
&lt;br /&gt;
=OpenOffice.org constants=&lt;br /&gt;
The above example uses OpenOffice.org constants. &lt;br /&gt;
&lt;br /&gt;
E.g. com.sun.star.awt.KeyModifier.MOD2&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org constants are case sensitive. Everything up to and including the module name is always lowercase. The constant group is in TitleCase. The actual constant name is always UPPERCASE. &lt;br /&gt;
&lt;br /&gt;
Programmers not using OpenOffice.org Basic may not have access to these constants. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Using the recorder=&lt;br /&gt;
See [[ The OpenOffice.org recorder and UNO dispatch calls]] section for a discussion on recording UNO Dispatch commands versus writing API calls.&lt;br /&gt;
&lt;br /&gt;
= See also=&lt;br /&gt;
* [[Programming_OooWriter |Programming OOoWriter in C++]] where OOoBascic record are used in C++&lt;br /&gt;
* A [[XIntrospection_Interface|XIntrospection Interface]] short description. XRay uses this interface.&lt;br /&gt;
* Download Bernard Marcelly&amp;#039;s [http://www.ooomacros.org/dev.php#101416 XRay OOoBasic tool]  &lt;br /&gt;
&lt;br /&gt;
[[Category:Basic:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Extensions_development_basic_fr&amp;diff=18521</id>
		<title>Extensions development basic fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Extensions_development_basic_fr&amp;diff=18521"/>
		<updated>2006-10-13T13:04:21Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Desktop, documents, and current selection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Comment démarrer&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Cette page est un guide de démarrage qui vous permettra d&amp;#039;écrire des macros en OpenOffice.org Basic. Une connaisance préalable de la programmation est un pré-requis. Merci d&amp;#039;éditer cette page pour la rendre plus lisible. J&amp;#039;espère que vous la trouverez utile.&lt;br /&gt;
&lt;br /&gt;
Si vous maîtrisez les bases, alors vous pouvez consulter le [[CookBook]] qui donne des exemples et des (wrappers).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Où le code est-il enregistré ?=&lt;br /&gt;
Le code OpenOffice.org Basic est enregistré dans des modules eux-mêmes placés dans les bibliothèques. Une bibliothèque peut être : &lt;br /&gt;
&lt;br /&gt;
*Partagée (pour une installation en réseau - OOo Macros &amp;amp; Dialogues) &lt;br /&gt;
*Uniquement pour l&amp;#039;utilisateur courant (Mes Macros &amp;amp; Dialogues) &lt;br /&gt;
*Incorporée à un document ou à un modèle de telle manière que son code ne soit disponible que lorsque ce document est ouvert.&lt;br /&gt;
&lt;br /&gt;
Lorsque des bibliothèques ne sont stockées ni dans un document ni dans un modèle, c&amp;#039;est-à-dire lorsque les bibliothèques sont partagées ou pour l&amp;#039;utilisateur courant, on les appelle &amp;#039;&amp;#039;&amp;#039;Bibliothèques OpenOffice.org&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
Pour connaître les dossiers qui contiennent les bibliothèques OpenOffice.org voir :&amp;lt;br&amp;gt; &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Options… &amp;gt; OpenOffice.org &amp;gt; Chemins &amp;gt; BASIC&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Ne copiez pas ni ne déplacez les bibliothèques en utilisant les commandes du système d&amp;#039;exploitation. Préférez le gestionnaire de macros ou le gestionnaire de packages.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La taille autorisée pour les modules placés à l&amp;#039;intérieur des bibliothèques est limitée à 64 Ko. Une bilbiothèque peut contenir jusqu&amp;#039;à 16.000 modules. &lt;br /&gt;
&lt;br /&gt;
Pour plus d&amp;#039;information, reportez-vous à l&amp;#039;aide en ligne, rubrique : Modules et bibliothèques.&lt;br /&gt;
&lt;br /&gt;
=Accéder à l&amp;#039;IDE=&lt;br /&gt;
Pour accéder à l&amp;#039;IDE (environnement de développement intégré) pour la première fois : &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org 1.1.x: &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Macro… &amp;gt;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org 1.9.x et ultérieur : &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Gérer les macros &amp;gt; OpenOffice.org Basic… &amp;gt;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous allons utiliser le Module1 de la bibliothèque Standard, présente pour l&amp;#039;utilisateur courant uniquement : &lt;br /&gt;
&lt;br /&gt;
Entrons un nom pour notre nouvelle macro : &amp;#039;&amp;#039;&amp;#039;HelloWorld&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Dans la macro, sélectionnons &amp;#039;&amp;#039;&amp;#039;Standard&amp;#039;&amp;#039;&amp;#039; dans la boîte de liste.&lt;br /&gt;
&lt;br /&gt;
Cliquons &amp;#039;&amp;#039;&amp;#039;Nouveau&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant trouver quelque chose comme çà : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
REM  *****  BASIC  *****&lt;br /&gt;
 &lt;br /&gt;
Sub Main&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
 &lt;br /&gt;
Sub HelloWorld&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Le curseur est positionné au début de la ligne &amp;lt;tt&amp;gt;Sub HelloWorld&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Maintenant que l&amp;#039;IDE est actif, il peut être accédé depuis le menu Fenêtre d&amp;#039;OpenOffice.org ou par la barre des tâches du système d&amp;#039;exploitation.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Saisie de code=&lt;br /&gt;
Selectionnons et effaçons : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
REM  *****  BASIC  *****&lt;br /&gt;
 &lt;br /&gt;
Sub Main&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Au-dessous de la ligne &amp;quot;Sub HelloWorld&amp;quot; entrons &amp;lt;tt&amp;gt;msgbox &amp;quot;Hello World!&amp;quot;&amp;lt;/tt&amp;gt;, de manière que l&amp;#039;éditeur ressemble à ceci : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
Sub HelloWorld&lt;br /&gt;
  msgbox &amp;quot;Hello World!&amp;quot;&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Notes:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|L&amp;#039;IDE ne fournit aucune fonctionnalité de code completion ni d&amp;#039;aide sur la syntaxe des commandes lors de la frappe. Pour obtenir de l&amp;#039;aide sur une commande Basic, plaçons le curseur dans la commande et tapons F1.&amp;lt;br&amp;gt; Les commande OpenOffice.org Basic ne sont pas sensibles à la casse. C&amp;#039;est pourquoi msgbox, MSGBOX et Msgbox sont équivalents.&amp;lt;br&amp;gt; Les chaînes sont entourées de guillements doubles.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Exécution du code=&lt;br /&gt;
Le code Basic peut être exécuté de plusieurs façons : &lt;br /&gt;
&lt;br /&gt;
Directement dans l&amp;#039;IDE. La barre des macro comprte un bouton Exécter (par défaut, le troisième de la seconde barre d&amp;#039;outils). Ce bouton lance la première macro du module en cours. &lt;br /&gt;
&lt;br /&gt;
Depuis le menu Outils :&lt;br /&gt;
&lt;br /&gt;
(Version 1.1.x) &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Macro…&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
(Version 1.9.x et supérieures) &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Exécuter la macro…&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à une [[ touche]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à une [[ entrée de menu]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à un bouton de barre d&amp;#039;outil. &lt;br /&gt;
&lt;br /&gt;
En créant un [[ contrôle dans un document]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à un évènement. &lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;instant essayons de lancer la procédure &amp;quot;HelloWorld&amp;quot; en cliquant le bouton &amp;#039;&amp;#039;&amp;#039;Exécuter&amp;#039;&amp;#039;&amp;#039;. Un dialogue intitulé &amp;quot;soffice&amp;quot; et comportant le texte &amp;quot;Hello World!&amp;quot; ainsi qu&amp;#039;un bouton OK doit s&amp;#039;afficher.&lt;br /&gt;
&lt;br /&gt;
=Enregistrement du code=&lt;br /&gt;
Le code est enregistré automatiquement chaque fois que son conteneur est lui-même enregistré. Par conséquent, si le code se trouve dans une bibliothèque OpenOffice (partagée ou de l&amp;#039;utilisateur), il est automatiquement enregistré lorsque OpenOffice est refermé. Si le code se trouve dans une bilbiothèque qui fait partie d&amp;#039;un document, alors il est enregistré lorsque le document l&amp;#039;est. &lt;br /&gt;
&lt;br /&gt;
Un bouton Enregistrer figure sur la barre d&amp;#039;outils Standard (celle du haut par défaut). Si le code se trouve à l&amp;#039;intérieur d&amp;#039;un document ou modèle, alors la totalité du document est enregistrée. Si le code se trouve à l&amp;#039;intérieur d&amp;#039;une bibliothèque OpenOffice.org alors seule la bilbiothèque courante est enregistrée.&lt;br /&gt;
&lt;br /&gt;
=Les variables=&lt;br /&gt;
Nous pouvons forcer la déclaration des variables en insérant &amp;lt;tt&amp;gt;Option Explicit&amp;lt;/tt&amp;gt; au début du module. Pour consulter une discussion consacrée à la déclaration ou non des variables, voir : [[http://www.oooforum.org/forum/viewtopic.phtml?t=5845 cette discussion]]. &lt;br /&gt;
&lt;br /&gt;
Dans cette discussion, on voit que l&amp;#039;auteur de [NdT : la version anglaise de] cette page défendait initialement la déclaration systématique des variables. Depuis lors il a changé d&amp;#039;avis et ne les déclare plus du tout. Bref, c&amp;#039;est une question de préférence personnelle. Dans un cas comme dans l&amp;#039;autre, les préférences de l&amp;#039;auteur vont au nommage des variables selon la convention suivante, qui sera utilisée tout au long des exemples de ce wiki :&lt;br /&gt;
&lt;br /&gt;
La première lettre du nom de la variable indique le type de valeur contenue, telle que présentée à la table ci-dessous (basée sur un tableau dans Tutorial.pdf de Sun) &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Lettre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Signification&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|a&lt;br /&gt;
|Structure&lt;br /&gt;
|-&lt;br /&gt;
|b&lt;br /&gt;
|Boolean (TRUE ou FALSE)&lt;br /&gt;
|-&lt;br /&gt;
|e&lt;br /&gt;
|Enumeration. Cette variable ne peut prendre qu&amp;#039;une valeur parmi un ensemble limité de valeurs.&lt;br /&gt;
|-&lt;br /&gt;
|f&lt;br /&gt;
|Float (de 3.402823 x 1038 à 1.401298 x 10-45. Une variable de type float [NdT : single] peut occuper jusqu&amp;#039;à quatre octets)&amp;lt;br&amp;gt; Double (de 1.79769313486232 x 10308 à 4.94065645841247 x 10-324. Une variable de ce type peut occuper jusqu&amp;#039;à huit octets)&amp;lt;br&amp;gt; Currency (de -922337203685477.5808 à +922337203685477.5807 et occupe jusqu&amp;#039;à huit octets en mémoire)&lt;br /&gt;
|-&lt;br /&gt;
|m&lt;br /&gt;
|Array (aka sequence aka matrice)&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|Integer (de -32768 à 32767.) ou&amp;lt;br&amp;gt; Long (de -2147483648 à 2147483647).&lt;br /&gt;
|-&lt;br /&gt;
|o&lt;br /&gt;
|Object, service ou interface&lt;br /&gt;
|-&lt;br /&gt;
|s&lt;br /&gt;
|String (Une variable string peut mémoriser jusqu&amp;#039;à 65535 caractères Unicode).&lt;br /&gt;
|-&lt;br /&gt;
|x&lt;br /&gt;
|Interface, montre que seules les opérations portant sur une interface particulière d&amp;#039;un objet sont utilisées&lt;br /&gt;
|-&lt;br /&gt;
|v&lt;br /&gt;
|Variant, N&amp;#039;importe quel valeur&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Utilisons des noms descriptifs suffisamment longs et employons le style &amp;quot;Camel case&amp;quot; [NdT : usage conjoint des majuscules et des minuscules pour faire ressortir les éléments du nom]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Les variables définies par l&amp;#039;utilisateur en OpenOffice.org Basic ne sont pas sensibles à la casse. Les constantes UNO-API le sont.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les variables indexant les boucles constituent une exception conventionnelle aux longs noms descriptifs. Des symboles tels que i, j et k sont en effet d&amp;#039;usage fréquent. De même, lorsqu&amp;#039;une chaîne est construite, on utilise fréquemment s comme variable temporaire. &lt;br /&gt;
&lt;br /&gt;
Editons la routine sub HelloWorld de manière qu&amp;#039;elle ressemble à ceci et exécutons-la : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub HelloWorld&lt;br /&gt;
dim i as integer &amp;#039;ligne optionnelle&lt;br /&gt;
  for i = 0 to 2&lt;br /&gt;
    &amp;#039;Ces lignes sont indentées par souci de lisiblité uniquement&lt;br /&gt;
    &amp;#039;Notre code devrait toujours être structuré ainsi pour lui donner des chances de survie&lt;br /&gt;
    msgbox &amp;quot;Hello World &amp;quot; &amp;amp; i&lt;br /&gt;
  next i&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Pour plus d&amp;#039;informations sur les variables, reportons-nous à l&amp;#039;aide en ligne, rubrique &amp;quot;utilisation des variables&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=L&amp;#039;API OpenOffice.org=&lt;br /&gt;
Cette section commence par un exemple. La suite donne des informations complémentaires qui nous permettront de comprendre l&amp;#039;exemple et à l&amp;#039;étendre.&lt;br /&gt;
&lt;br /&gt;
Essayons d&amp;#039;exécuter le code ci-dessous lorsque différents types de documents sont ouverts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
&amp;#039;basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
&amp;#039;xray.xray thisComponent&lt;br /&gt;
msgbox fnWhichComponent(thisComponent)&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function fnWhichComponent(oDoc) as string&lt;br /&gt;
if HasUnoInterfaces(oDoc, &amp;quot;com.sun.star.lang.XServiceInfo&amp;quot;) then &lt;br /&gt;
   if thisComponent.supportsService (&amp;quot;com.sun.star.text.GenericTextDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Texte&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.sheet.SpreadsheetDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Feuille de calcul&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.presentation.PresentationDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Presentation&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.drawing.GenericDrawingDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Dessin&amp;quot;&lt;br /&gt;
   else&lt;br /&gt;
      fnWhichComponent = &amp;quot;Oops le document ouvert est autre chose&amp;quot;&lt;br /&gt;
   end if&lt;br /&gt;
else&lt;br /&gt;
   fnWhichComponent = &amp;quot;Ce n&amp;#039;est pas un document&amp;quot;&lt;br /&gt;
end if&lt;br /&gt;
End function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Convention de nommage des routines==&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, le nom de la fonction utilisateur commence par &amp;quot;fn&amp;quot;. Il s&amp;#039;agit de la convention adoptée par l&amp;#039;auteur initial [NdT : version anglaise] qui permet au lecteur de savoir qu&amp;#039;il s&amp;#039;agit d&amp;#039;une fonction définie par l&amp;#039;utilisateur. Dans le même esprit, l&amp;#039;auteur initial utilise la convention de débuter les noms des procédures par &amp;quot;sub&amp;quot;. Lorsque l&amp;#039;on apprend un nouveau langage et de nouvelles API, il peut s&amp;#039;avérer difficile de reconnaître ce qui ressortit du langage lui-même de ce qui a été défini ailleurs dans notre code. Ce document/wiki emploie ces conventions pour le nommage des fonctions et des procédures.&lt;br /&gt;
&lt;br /&gt;
==Présentation de l&amp;#039;API OpenOffice.org==&lt;br /&gt;
Cette section introduit les termes : &lt;br /&gt;
&lt;br /&gt;
* Interface &lt;br /&gt;
* Module &lt;br /&gt;
* Service &lt;br /&gt;
* Méthode &lt;br /&gt;
* Propriété &lt;br /&gt;
&lt;br /&gt;
S&amp;#039;il n&amp;#039;est pas essentiel de comprendre la différence entre une interface et un service ou ce qu&amp;#039;est un module pour pouvoir écrire des extensions à OpenOffice.org, la compréhension de ces termes aide à correctement interpréter la documentation ainsi qu&amp;#039;à l&amp;#039;introspection des éléments manipulés. Peut-être nous faudra-t-il relire cette section plusieurs fois. &lt;br /&gt;
&lt;br /&gt;
Une &amp;#039;&amp;#039;&amp;#039;interface&amp;#039;&amp;#039;&amp;#039; est la &amp;#039;&amp;#039;définition&amp;#039;&amp;#039; d&amp;#039;un ensemble de méthodes (avec leurs arguments) qu&amp;#039;un service implémentant cette interface doit comporter. &lt;br /&gt;
&lt;br /&gt;
Les interfaces sont regroupées en &amp;#039;&amp;#039;&amp;#039;modules&amp;#039;&amp;#039;&amp;#039; pour des besoins de nommage. Toutes les interfaces (et les services) commencent par le nom &amp;quot;com.sun.star&amp;quot; puis vient le nom du module puis celui de l&amp;#039;interface (ou du service). &lt;br /&gt;
&lt;br /&gt;
Par exemple, la plupart des services fournissent l&amp;#039;interface &amp;lt;tt&amp;gt;com.sun.star.beans.XPropertySet&amp;lt;/tt&amp;gt;. Cette interface est enregistrée dans le module &amp;quot;beans&amp;quot; et fournit l&amp;#039;accès aux propriétés d&amp;#039;un service. Une &amp;#039;&amp;#039;&amp;#039;propriété&amp;#039;&amp;#039;&amp;#039; est une valeur tandis qu&amp;#039;une &amp;#039;&amp;#039;&amp;#039;méthode&amp;#039;&amp;#039;&amp;#039; défiti une action. &lt;br /&gt;
&lt;br /&gt;
Un objet OpenOffice.org peut supporter de nombreux services. &lt;br /&gt;
&lt;br /&gt;
Un objet OpenOffice.org peut supporter un service qui implémente une interface dans laquell une description de méthode déclare qu&amp;#039;un autre objet OpenOffice.org est retourné.&lt;br /&gt;
&lt;br /&gt;
==Introspection==&lt;br /&gt;
HasUnoInterfaces est une fonction OpenOffice.org Basic utilisée pour l&amp;#039;introspection. Ce document  [[http://www.oooforum.org/forum/viewtopic.phtml?t=7068 link]] permettra d&amp;#039;apprendre ce que l&amp;#039;on entend par introspection dans d&amp;#039;autres langages de programmation. &lt;br /&gt;
&lt;br /&gt;
HasUnoInterfaces renvoie une valeur &amp;quot;vrai&amp;quot; si toutes les interfaces spécifiées sont disponibles pour l&amp;#039;objet appelant. &lt;br /&gt;
&lt;br /&gt;
La plupart des objets OpenOffice.org fournissent la méthode supportsService parce qu&amp;#039;ils disposent également de l&amp;#039;interface com.sun.star.lang.XServiceInfo. &lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, la commande OpenOffice.org Basic, &amp;#039;&amp;#039;&amp;#039;HasUnoInterfaces&amp;#039;&amp;#039;&amp;#039; vérifie si le document actif dispose de l&amp;#039;interface com.sun.star.lang.XServiceInfo, car si cette interface n&amp;#039;est pas présente, alors le document n&amp;#039;aura pas non plus la méthode supportsService, et une erreur d&amp;#039;exécution se produirait lorsqu&amp;#039;un objet tentait d&amp;#039;accéder à une méthode inexistante. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;SupportsService&amp;#039;&amp;#039;&amp;#039; est une méthode qui renvoie la valeur &amp;quot;vrai&amp;quot; si le service spécifié est disponible. Dans l&amp;#039;exemple ci-dessus, on vérifie la présence d&amp;#039;un service afin de déterminer le type de document en cours d&amp;#039;activation.&lt;br /&gt;
&lt;br /&gt;
==L&amp;#039;Outil X-Ray==&lt;br /&gt;
L&amp;#039;utilisation de &amp;quot;HasUnoInterfaces&amp;quot; et de &amp;quot;supportsService&amp;quot; permet d&amp;#039;obtenir des informations sur un objet donné lors de son exécution, mais procéder ainsi pour apprendre le langage Basic deviendrait vite fastidieux. Heureusement, et grâce à Bernard Marcelly, nous disposons de l&amp;#039;outil X-Ray. Cet outil est disponible ici: [[http://ooomacros.org/dev.php#101416 ooomacros]]. Téléchargez le fichier zip, dézippez l&amp;#039;archive, ouvrez le document dans OpenOffice.org, et suivez les instructions pour son installation et configuration. &lt;br /&gt;
&lt;br /&gt;
Une partie de la configuration de l&amp;#039;outil X-Ray concerne la définition de l&amp;#039;endroit où est stockée une copie locale (sur le disque dur) du Kit de Développement OpenOffice.org (appélé SDK). Téléchargez le Kit de Développement OpenOffice.org depuis [[ftp://mirrors.dotsrc.org/openoffice/stable/2.0.4_sdk/]] et installez le sur votre disque dur. &lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, au début du code, il y a deux lignes mises en commentaires (les lignes de commentaires commencent toujours avec des apostrophes): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
&amp;#039;basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
&amp;#039;xray.xray thisComponent&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Une fois l&amp;#039;outil X-Ray installé, supprimez les apostrophes dans les lignes indiquées ci-dessus et relancez la macro. A partir de la version 5, la commande à utiliser dans votre code est tout simplement &amp;quot;xray&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;BasicLibraries&amp;#039;&amp;#039;&amp;#039; est une commande OpenOffice.org Basic qui renvoie un objet permettant d&amp;#039;accéder aux bibliothèques OpenOffice.org. La méthode &amp;lt;tt&amp;gt;loadLibrary&amp;lt;/tt&amp;gt; rend disponible aux utilisateurs les routines présentes dans cette bibliothèque. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;xray.xray&amp;lt;/tt&amp;gt; indique la bibliothèque xray et la sous-routine xray contenue dans celle-ci, l&amp;#039;objet thisComponent étant l&amp;#039;objet transmis à xray pour l&amp;#039;introspection. &lt;br /&gt;
&lt;br /&gt;
Afin de trouver l&amp;#039;objet que vous cherchez, il est souvent nécessaire de le découvrir ou de le créer depuis StarDesktop ou thisComponent.&lt;br /&gt;
&lt;br /&gt;
==Desktop, documents, et current selection==&lt;br /&gt;
StarDesktop et ThisComponent sont des commandes OpenOffice.org Basic qui ont trait à l&amp;#039;application et le document actif (c&amp;#039;est-à-dire, celui qui a le focus actuellement sur le bureau) respectivement. &lt;br /&gt;
&lt;br /&gt;
Contrairement à Microsoft Office, l&amp;#039;application OpenOffice.org est monolithique et comporte différents composants. Lorsqu&amp;#039;on exécute du code, il peut être utile de vérifier quel composant est actuellement en cours d&amp;#039;activation. Le code ci-dessus donne un exemple de la manière de procéder à cette vérification. &lt;br /&gt;
&lt;br /&gt;
Quand il est fait référence au Desktop dans StarDesktop, celui-ci se réfère à une existence virtuelle (puisqu&amp;#039;auparavant il existait réellement dans OpenOffice.org et dans StarOffice). On peut ainsi le considérer comme étant l&amp;#039;application OpenOffice.org elle-même.&lt;br /&gt;
&lt;br /&gt;
==Création de Nouveaux Documents==&lt;br /&gt;
Pour créer un nouveau document Writer, on écrit le code suivant: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/swriter&amp;quot;, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De la même manière, pour un nouveau document Calc: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/scalc&amp;quot;, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il serait sans doute plus facile d&amp;#039;écrire une fonction simple: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
function fnNewDoc(sDocType as string)&lt;br /&gt;
fnNewDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/&amp;quot; &amp;amp; sDocType , &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, on pourra créer de nouveaux documents ainsi: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;swriter&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;scalc&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;simpress&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;sdraw&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;smath&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir également http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XComponentLoader.html .&lt;br /&gt;
&lt;br /&gt;
==To open a document==&lt;br /&gt;
The following example shows how to open a file. For information on URLs in OpenOffice.org see [[ URL Basics]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sFile = &amp;quot;C:\Documents and Settings\danny\Desktop\MyCalc.sxc&amp;quot; &amp;#039; Windows&lt;br /&gt;
sFile = &amp;quot;/home/danny/Desktop/MyCalc.sxc&amp;quot; &amp;#039; Linux&lt;br /&gt;
sURL = ConvertToURL(sFile)&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(sURL, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Again it may make sense to make this easier by writing a simple function: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
function fnOpenDoc(sFile)&lt;br /&gt;
sURL = ConvertToURL(sFile)&lt;br /&gt;
fnOpenDoc = StarDesktop.loadComponentFromURL(sURL, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Examples of calling the function: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = fnOpenDoc(&amp;quot;C:\Documents and Settings\danny\Desktop\MyCalc.sxc&amp;quot;) &amp;#039; Windows&lt;br /&gt;
oDoc = fnOpenDoc(&amp;quot;/home/danny/Desktop/MyCalc.sxc&amp;quot;) &amp;#039; Linux&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Current Selection==&lt;br /&gt;
It is common to want to run some code that effects the current selection. &amp;lt;tt&amp;gt;ThisComponent&amp;lt;/tt&amp;gt; has the method &amp;lt;tt&amp;gt;getCurrentSelection&amp;lt;/tt&amp;gt;. Since many different types of objects could possibly be selected it is common to check that the currently selected object has the service that contains the method that we want to apply to the object. &lt;br /&gt;
&lt;br /&gt;
Edit the main subroutine to the following and rerun it on a text document with different selections. (To select more than one block of text hold down the control key). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
if fnWhichComponent(thisComponent) = &amp;quot;Text&amp;quot; then&lt;br /&gt;
        oCurSelection = thisComponent.getCurrentSelection()&lt;br /&gt;
        &amp;#039;xray.xray oCurSelection&lt;br /&gt;
        if oCurSelection.supportsService(&amp;quot;com.sun.star.text.TextRanges&amp;quot;) then&lt;br /&gt;
                msgbox &amp;quot;There are &amp;quot; &amp;amp; oCurSelection.getCount() &amp;amp; _&lt;br /&gt;
                 &amp;quot; selections in the current text document.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
end if&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
With nothing selected the number of selections is one - the insertion point, with one block of text selected the count is still one, but with two blocks of text the count is three - the insertion point and the two blocks of selected text. &lt;br /&gt;
&lt;br /&gt;
Exercise 1: Modify the above code so that it works on selected cell ranges in a spreadsheet. &lt;br /&gt;
&lt;br /&gt;
Question1: For two blocks of cells selected, what would be the count for the number of selections? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
Uncomment &amp;lt;tt&amp;gt;&amp;#039;xray.xray oCurSelection&amp;lt;/tt&amp;gt; so that xray runs, to see that the object that &amp;lt;tt&amp;gt;oCurSelection&amp;lt;/tt&amp;gt; points to has a &amp;quot;property&amp;quot; called &amp;lt;tt&amp;gt;Count&amp;lt;/tt&amp;gt; with a description of &amp;quot;pseudo-prop, read only&amp;quot;. It is possible in OpenOffice.org Basic to write &amp;lt;tt&amp;gt;oCurSelection.count&amp;lt;/tt&amp;gt;, but as this is not possible in all other languages accessing the OpenOffice.org API, this Wiki will try to always use the method approach. (I say try because I have not been in the habit of doing this and sometimes I may forget). &lt;br /&gt;
&lt;br /&gt;
This next example demonstrates changing a property value for the current selections. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
if fnWhichComponent(thisComponent) = &amp;quot;Text&amp;quot; then&lt;br /&gt;
   oCurSelection = thisComponent.getCurrentSelection()&lt;br /&gt;
   if oCurSelection.supportsService(&amp;quot;com.sun.star.text.TextRanges&amp;quot;) then&lt;br /&gt;
      nCount = oCurSelection.Count&lt;br /&gt;
      &amp;#039;xray.xray oCurSelection.getByIndex(0)&lt;br /&gt;
      &amp;#039;Warning: The insertion point will have the same action applied twice&lt;br /&gt;
      &amp;#039;in this case it doesn&amp;#039;t matter, but in others it might.&lt;br /&gt;
      for i = 0 to nCount - 1&lt;br /&gt;
         oCurSelection.getByIndex(i).setPropertyValue(&amp;quot;CharStyleName&amp;quot;, &amp;quot;Strong Emphasis&amp;quot;)&lt;br /&gt;
      next&lt;br /&gt;
   end if&lt;br /&gt;
end if&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
In OpenOffice.org Basic it is possible to shorten the assignment line to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oCurSelection(i).CharStyleName = &amp;quot;Strong Emphasis&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
This wiki will try to use the full methods for both indexing and assigning properties. The rationale is that this makes converting the code to other languages easier and also helps the learner to understand what is happening (again I have not been in the habit of doing this so some examples may slip past me). &lt;br /&gt;
&lt;br /&gt;
Exercise 2: Rewrite the above code so that the warning can be removed. &lt;br /&gt;
&lt;br /&gt;
See [[ Current selection]].&lt;br /&gt;
&lt;br /&gt;
=Iterative Access to Subordinate Objects (Enumeration access)=&lt;br /&gt;
Sometimes to access the desired object an enumeration is required. For example paragraphs, within a document or within a selection. &lt;br /&gt;
&lt;br /&gt;
When a Writer document is active and some text is selected, both &amp;lt;tt&amp;gt;thisDocument.getText()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;thisComponent.getCurrentSelection().getByIndex(i)&amp;lt;/tt&amp;gt; have the service: com.sun.star.text.TextRange which has the interface: com.sun.star.container.XContentEnumerationAccess, it is possible to create an enumeration of the paragraphs for the current document or for a particular selection. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
&amp;#039; Create enumeration object&lt;br /&gt;
oTextElementEnum = thisComponent.getText().createEnumeration()&lt;br /&gt;
&amp;#039;or thisComponent.getCurrentSelection().getByIndex(i).createEnumeration()&lt;br /&gt;
 &lt;br /&gt;
&amp;#039; loop over all text elements&lt;br /&gt;
while oTextElementEnum.hasMoreElements()&lt;br /&gt;
        oTextElement = oTextElementEnum.nextElement&lt;br /&gt;
        if oTextElement.supportsService(&amp;quot;com.sun.star.text.TextTable&amp;quot;) then&lt;br /&gt;
                MsgBox &amp;quot;The current block contains a table.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
        if oTextElement.supportsService(&amp;quot;com.sun.star.text.Paragraph&amp;quot;) then&lt;br /&gt;
                MsgBox &amp;quot;The current block contains a paragraph.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
wend&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Exercise 3: Extend the above example to display in a message box all text portions that are bold. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Named access=&lt;br /&gt;
Some objects provide named access to a particular type of subordinate object, some others indexed access, and some both named and indexed access. &lt;br /&gt;
&lt;br /&gt;
For example if the current document in OpenOffice.org is a spreadsheet then to access a particular sheet can be done by index access: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oSheet = thisComponent.getSheets.getByIndex(0)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
or named access: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oSheet = thisComponent.getSheets.getByName(&amp;quot;Sheet1&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
To check if an object with a particular name already exists use &amp;lt;tt&amp;gt;hasByName&amp;lt;/tt&amp;gt;, for example: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
if thisComponent.getSheets.hasByName(&amp;quot;Sheet1&amp;quot;) then&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
To loop through all the available object names can be done like: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
mNames = thisComponent.getSheets.getElementnames&lt;br /&gt;
for i = lbound(mNames) to ubound(mNames)&lt;br /&gt;
        msgbox mNames(i)&lt;br /&gt;
next&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Some named subordinate objects also provide the interface:  com.sun.star.container.XNameContainer. This interface defines that such objects should have the following methods: &amp;lt;tt&amp;gt;insertByName&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;replaceByname&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;removeByName&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
thisComponent.getSheets.insertByName(&amp;quot;NewSheet&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Create new objects=&lt;br /&gt;
Some objects have services which implement interfaces to provide specific methods for creating a particular type of object. &lt;br /&gt;
&lt;br /&gt;
For example if the current document is a Writer document then &amp;lt;tt&amp;gt;thisComponent.getText&amp;lt;/tt&amp;gt; is an object that provides the service com.sun.star.text.Text which implements the interface  com.sun.star.text.XSimpleText which defines the methods &amp;lt;tt&amp;gt;createTextCursor&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;createTextCursorByRange&amp;lt;/tt&amp;gt;. Both of these methods create a text cursor for accessing the text of the document. These cursors are quite independent of the view cursor . The view cursor is visible on the screen and is manipulated by the user (and can be manipulated by program control), where as a text cursor is not visible on the screen and is solely used by program control. The following code snippet demonstrates creating a new text cursor, such that it starts at the same location as the viewCursor and is then moved independent of the view cursor. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oVC = thisComponent.getCurrentController.getViewCursor&lt;br /&gt;
oCursor = oVC.getText.createTextCursorByRange(oVC)&lt;br /&gt;
oCursor.gotoStartOfSentence(false)&lt;br /&gt;
oCursor.gotoEndOfSentence(true)&lt;br /&gt;
msgbox oCursor.getString&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some objects are context dependent and get created using the method &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt; which is defined in the interface com.sun.star.lang.XMultiServiceFactory. For example to add a rectangle to the first page of a drawing document: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
dim aPoint as new com.sun.star.awt.Point&lt;br /&gt;
dim aSize as new com.sun.star.awt.Size&lt;br /&gt;
 &lt;br /&gt;
aPoint.x = 1000&lt;br /&gt;
aPoint.y = 1000&lt;br /&gt;
 &lt;br /&gt;
aSize.Width = 10000&lt;br /&gt;
aSize.Height = 10000&lt;br /&gt;
 &lt;br /&gt;
oRectangleShape = thisComponent.createInstance(&amp;quot;com.sun.star.drawing.RectangleShape&amp;quot;)&lt;br /&gt;
oRectangleShape.Size = aSize&lt;br /&gt;
oRectangleShape.Position = aPoint&lt;br /&gt;
 &lt;br /&gt;
thisComponent.getDrawPages.getByIndex(0).add(oRectangleShape)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example also uses UNO structs see below for more information on UNO stucts. &lt;br /&gt;
&lt;br /&gt;
Some objects are context independent to create these objects use the OpenOffice.org Basic command createUnoService. For example to create the equivalent to StarDesktop: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDesktop = createUnoService(&amp;quot;com.sun.star.frame.Desktop&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The process that I use to determine how to access or create an object is as follows: &lt;br /&gt;
&lt;br /&gt;
Does the object already exist if so I should be able to access it from something like &amp;lt;tt&amp;gt;thisComponent&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Will the new object belong to another object, if so does the owner have a specific method for creating the object, if so use it. &lt;br /&gt;
&lt;br /&gt;
The new object will belong to another object, but that object doesn&amp;#039;t provide a specific method for creating it, but does provide &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt;. If the object doesn&amp;#039;t provide &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt; are you sure you are using the correct object, or is it context independent. &lt;br /&gt;
&lt;br /&gt;
I have found working out how to create an object to be quite difficult with existing documentation so I hope that this document/wiki will eventually make this clear. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==UNO structs==&lt;br /&gt;
UNO structures can be declared using the OpenOffice.org Basic command &amp;lt;tt&amp;gt;dim&amp;lt;/tt&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
dim aPoint as new com.sun.star.awt.Point&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Or by using the OpenOffice.org Basic command &amp;lt;tt&amp;gt;createUnoStruct&amp;lt;/tt&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
aPoint = createUnoStruct(&amp;quot;com.sun.star.awt.Point&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|When declaring UNO structs case is important. Note that everything upto the name of the struct is lowercase, and that the name of the struct is in TitleCase.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Creating Listeners and Handlers==&lt;br /&gt;
Through the user interface it is possible to assign macros to some events: &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org versions 1.1.x: &amp;#039;&amp;#039;&amp;#039;Tools &amp;gt; Configure… &amp;gt; Events&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org versions 1.9.x and above: &amp;#039;&amp;#039;&amp;#039;Tools &amp;gt; Customize… &amp;gt; Events&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
It is also possible to assign macros to a wider range of events using the OpenOffice.org Basic command CreateUnoListener. This same command is used for creating both listeners and handlers. A listener checks for an event and always allows other listeners to respond to the event as well. A handler listens for an event, and can optionally consume the event so that other listeners don&amp;#039;t get to act on it. &lt;br /&gt;
&lt;br /&gt;
The following example creates a keyHandler: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
global IannzExampleKeyHandler&lt;br /&gt;
 &lt;br /&gt;
sub SetupKeyHandler&lt;br /&gt;
oController = thisComponent.currentController&lt;br /&gt;
IannzExampleKeyHandler = CreateUnoListener(&amp;quot;KeyHandler_&amp;quot;,&amp;quot;com.sun.star.awt.XKeyHandler&amp;quot;)&lt;br /&gt;
oController.addKeyHandler(IannzExampleKeyHandler) &amp;#039; Register the listener&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
sub RemoveKeyHandler&lt;br /&gt;
thisComponent.currentController.removeKeyHandler(IannzExampleKeyHandler)&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
sub KeyHandler_disposing&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function KeyHandler_keyReleased(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean&lt;br /&gt;
        KeyHandler_keyReleased = False    &lt;br /&gt;
end function&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function KeyHandler_keyPressed(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean&lt;br /&gt;
KeyHandler_keyPressed = false   &amp;#039;Let other listeners handle the event&lt;br /&gt;
if oKeyEvent.modifiers = com.sun.star.awt.KeyModifier.MOD2 then &amp;#039;Control key was pressed&lt;br /&gt;
        if oKeyEvent.keyCode = com.sun.star.awt.Key.Q then&lt;br /&gt;
                msgbox &amp;quot;Alt + Q was pressed&amp;quot;&lt;br /&gt;
                KeyHandler_keyPressed = true    &amp;#039;Don&amp;#039;t let other listeners process this event&lt;br /&gt;
        end if&lt;br /&gt;
end if&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
A variable declared as global keeps its value even after the macro exits. In this case we want to be able to use this variable later to remove the handler. As variables declared globally could be used in other libraries to try and avoid conflict I start all my global variables with Iannz my registered name for the OpenOffice.org web site. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;sub SetupKeyHandler&amp;lt;/tt&amp;gt; sets up the handler. The first parameter to CreateUnoListener is the staring name for the methods that will be called when that type of event occurs in this example .&amp;lt;tt&amp;gt;&amp;quot;KeyHandler_&amp;quot;&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The second parameter is the name of the interface for the listener or handler, &amp;quot;com.sun.star.awt.XKeyHandler&amp;quot;. The name is case sensitive, everything up to and including the module name is always lowercase, the name of the interface always starts with &amp;quot;X&amp;quot; and the remainder is in TitleCase. &lt;br /&gt;
&lt;br /&gt;
Use the SDK to find out what methods the interface must supply. You must supply routines for all of these methods even if you don&amp;#039;t intend to use them. You also need to supply a disposing method. The names of these routines start with the string given in the first parameter to CreateUnoListener , in this example &amp;lt;tt&amp;gt;&amp;quot;KeyHandler_&amp;quot;&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Thus in the example there is &amp;lt;tt&amp;gt;KeyHandler_disposing&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;KeyHandler_keyReleased&amp;lt;/tt&amp;gt; which don&amp;#039;t actually do anything but are required, and &amp;lt;tt&amp;gt;KeyHandler_keyPressed&amp;lt;/tt&amp;gt; which actually does the job. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;sub RemoveKeyHandler&amp;lt;/tt&amp;gt; demonstrates how to remove the handler.&lt;br /&gt;
&lt;br /&gt;
=OpenOffice.org constants=&lt;br /&gt;
The above example uses OpenOffice.org constants. &lt;br /&gt;
&lt;br /&gt;
E.g. com.sun.star.awt.KeyModifier.MOD2&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org constants are case sensitive. Everything up to and including the module name is always lowercase. The constant group is in TitleCase. The actual constant name is always UPPERCASE. &lt;br /&gt;
&lt;br /&gt;
Programmers not using OpenOffice.org Basic may not have access to these constants. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Using the recorder=&lt;br /&gt;
See [[ The OpenOffice.org recorder and UNO dispatch calls]] section for a discussion on recording UNO Dispatch commands versus writing API calls.&lt;br /&gt;
&lt;br /&gt;
= See also=&lt;br /&gt;
* [[Programming_OooWriter |Programming OOoWriter in C++]] where OOoBascic record are used in C++&lt;br /&gt;
* A [[XIntrospection_Interface|XIntrospection Interface]] short description. XRay uses this interface.&lt;br /&gt;
* Download Bernard Marcelly&amp;#039;s [http://www.ooomacros.org/dev.php#101416 XRay OOoBasic tool]  &lt;br /&gt;
&lt;br /&gt;
[[Category:Basic:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Extensions_development_basic_fr&amp;diff=18520</id>
		<title>Extensions development basic fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Extensions_development_basic_fr&amp;diff=18520"/>
		<updated>2006-10-13T13:03:51Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Création de nouveaux documents */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Comment démarrer&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Cette page est un guide de démarrage qui vous permettra d&amp;#039;écrire des macros en OpenOffice.org Basic. Une connaisance préalable de la programmation est un pré-requis. Merci d&amp;#039;éditer cette page pour la rendre plus lisible. J&amp;#039;espère que vous la trouverez utile.&lt;br /&gt;
&lt;br /&gt;
Si vous maîtrisez les bases, alors vous pouvez consulter le [[CookBook]] qui donne des exemples et des (wrappers).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Où le code est-il enregistré ?=&lt;br /&gt;
Le code OpenOffice.org Basic est enregistré dans des modules eux-mêmes placés dans les bibliothèques. Une bibliothèque peut être : &lt;br /&gt;
&lt;br /&gt;
*Partagée (pour une installation en réseau - OOo Macros &amp;amp; Dialogues) &lt;br /&gt;
*Uniquement pour l&amp;#039;utilisateur courant (Mes Macros &amp;amp; Dialogues) &lt;br /&gt;
*Incorporée à un document ou à un modèle de telle manière que son code ne soit disponible que lorsque ce document est ouvert.&lt;br /&gt;
&lt;br /&gt;
Lorsque des bibliothèques ne sont stockées ni dans un document ni dans un modèle, c&amp;#039;est-à-dire lorsque les bibliothèques sont partagées ou pour l&amp;#039;utilisateur courant, on les appelle &amp;#039;&amp;#039;&amp;#039;Bibliothèques OpenOffice.org&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
Pour connaître les dossiers qui contiennent les bibliothèques OpenOffice.org voir :&amp;lt;br&amp;gt; &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Options… &amp;gt; OpenOffice.org &amp;gt; Chemins &amp;gt; BASIC&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Ne copiez pas ni ne déplacez les bibliothèques en utilisant les commandes du système d&amp;#039;exploitation. Préférez le gestionnaire de macros ou le gestionnaire de packages.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La taille autorisée pour les modules placés à l&amp;#039;intérieur des bibliothèques est limitée à 64 Ko. Une bilbiothèque peut contenir jusqu&amp;#039;à 16.000 modules. &lt;br /&gt;
&lt;br /&gt;
Pour plus d&amp;#039;information, reportez-vous à l&amp;#039;aide en ligne, rubrique : Modules et bibliothèques.&lt;br /&gt;
&lt;br /&gt;
=Accéder à l&amp;#039;IDE=&lt;br /&gt;
Pour accéder à l&amp;#039;IDE (environnement de développement intégré) pour la première fois : &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org 1.1.x: &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Macro… &amp;gt;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org 1.9.x et ultérieur : &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Gérer les macros &amp;gt; OpenOffice.org Basic… &amp;gt;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous allons utiliser le Module1 de la bibliothèque Standard, présente pour l&amp;#039;utilisateur courant uniquement : &lt;br /&gt;
&lt;br /&gt;
Entrons un nom pour notre nouvelle macro : &amp;#039;&amp;#039;&amp;#039;HelloWorld&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Dans la macro, sélectionnons &amp;#039;&amp;#039;&amp;#039;Standard&amp;#039;&amp;#039;&amp;#039; dans la boîte de liste.&lt;br /&gt;
&lt;br /&gt;
Cliquons &amp;#039;&amp;#039;&amp;#039;Nouveau&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant trouver quelque chose comme çà : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
REM  *****  BASIC  *****&lt;br /&gt;
 &lt;br /&gt;
Sub Main&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
 &lt;br /&gt;
Sub HelloWorld&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Le curseur est positionné au début de la ligne &amp;lt;tt&amp;gt;Sub HelloWorld&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Maintenant que l&amp;#039;IDE est actif, il peut être accédé depuis le menu Fenêtre d&amp;#039;OpenOffice.org ou par la barre des tâches du système d&amp;#039;exploitation.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Saisie de code=&lt;br /&gt;
Selectionnons et effaçons : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
REM  *****  BASIC  *****&lt;br /&gt;
 &lt;br /&gt;
Sub Main&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Au-dessous de la ligne &amp;quot;Sub HelloWorld&amp;quot; entrons &amp;lt;tt&amp;gt;msgbox &amp;quot;Hello World!&amp;quot;&amp;lt;/tt&amp;gt;, de manière que l&amp;#039;éditeur ressemble à ceci : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
Sub HelloWorld&lt;br /&gt;
  msgbox &amp;quot;Hello World!&amp;quot;&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Notes:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|L&amp;#039;IDE ne fournit aucune fonctionnalité de code completion ni d&amp;#039;aide sur la syntaxe des commandes lors de la frappe. Pour obtenir de l&amp;#039;aide sur une commande Basic, plaçons le curseur dans la commande et tapons F1.&amp;lt;br&amp;gt; Les commande OpenOffice.org Basic ne sont pas sensibles à la casse. C&amp;#039;est pourquoi msgbox, MSGBOX et Msgbox sont équivalents.&amp;lt;br&amp;gt; Les chaînes sont entourées de guillements doubles.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Exécution du code=&lt;br /&gt;
Le code Basic peut être exécuté de plusieurs façons : &lt;br /&gt;
&lt;br /&gt;
Directement dans l&amp;#039;IDE. La barre des macro comprte un bouton Exécter (par défaut, le troisième de la seconde barre d&amp;#039;outils). Ce bouton lance la première macro du module en cours. &lt;br /&gt;
&lt;br /&gt;
Depuis le menu Outils :&lt;br /&gt;
&lt;br /&gt;
(Version 1.1.x) &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Macro…&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
(Version 1.9.x et supérieures) &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Exécuter la macro…&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à une [[ touche]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à une [[ entrée de menu]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à un bouton de barre d&amp;#039;outil. &lt;br /&gt;
&lt;br /&gt;
En créant un [[ contrôle dans un document]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à un évènement. &lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;instant essayons de lancer la procédure &amp;quot;HelloWorld&amp;quot; en cliquant le bouton &amp;#039;&amp;#039;&amp;#039;Exécuter&amp;#039;&amp;#039;&amp;#039;. Un dialogue intitulé &amp;quot;soffice&amp;quot; et comportant le texte &amp;quot;Hello World!&amp;quot; ainsi qu&amp;#039;un bouton OK doit s&amp;#039;afficher.&lt;br /&gt;
&lt;br /&gt;
=Enregistrement du code=&lt;br /&gt;
Le code est enregistré automatiquement chaque fois que son conteneur est lui-même enregistré. Par conséquent, si le code se trouve dans une bibliothèque OpenOffice (partagée ou de l&amp;#039;utilisateur), il est automatiquement enregistré lorsque OpenOffice est refermé. Si le code se trouve dans une bilbiothèque qui fait partie d&amp;#039;un document, alors il est enregistré lorsque le document l&amp;#039;est. &lt;br /&gt;
&lt;br /&gt;
Un bouton Enregistrer figure sur la barre d&amp;#039;outils Standard (celle du haut par défaut). Si le code se trouve à l&amp;#039;intérieur d&amp;#039;un document ou modèle, alors la totalité du document est enregistrée. Si le code se trouve à l&amp;#039;intérieur d&amp;#039;une bibliothèque OpenOffice.org alors seule la bilbiothèque courante est enregistrée.&lt;br /&gt;
&lt;br /&gt;
=Les variables=&lt;br /&gt;
Nous pouvons forcer la déclaration des variables en insérant &amp;lt;tt&amp;gt;Option Explicit&amp;lt;/tt&amp;gt; au début du module. Pour consulter une discussion consacrée à la déclaration ou non des variables, voir : [[http://www.oooforum.org/forum/viewtopic.phtml?t=5845 cette discussion]]. &lt;br /&gt;
&lt;br /&gt;
Dans cette discussion, on voit que l&amp;#039;auteur de [NdT : la version anglaise de] cette page défendait initialement la déclaration systématique des variables. Depuis lors il a changé d&amp;#039;avis et ne les déclare plus du tout. Bref, c&amp;#039;est une question de préférence personnelle. Dans un cas comme dans l&amp;#039;autre, les préférences de l&amp;#039;auteur vont au nommage des variables selon la convention suivante, qui sera utilisée tout au long des exemples de ce wiki :&lt;br /&gt;
&lt;br /&gt;
La première lettre du nom de la variable indique le type de valeur contenue, telle que présentée à la table ci-dessous (basée sur un tableau dans Tutorial.pdf de Sun) &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Lettre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Signification&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|a&lt;br /&gt;
|Structure&lt;br /&gt;
|-&lt;br /&gt;
|b&lt;br /&gt;
|Boolean (TRUE ou FALSE)&lt;br /&gt;
|-&lt;br /&gt;
|e&lt;br /&gt;
|Enumeration. Cette variable ne peut prendre qu&amp;#039;une valeur parmi un ensemble limité de valeurs.&lt;br /&gt;
|-&lt;br /&gt;
|f&lt;br /&gt;
|Float (de 3.402823 x 1038 à 1.401298 x 10-45. Une variable de type float [NdT : single] peut occuper jusqu&amp;#039;à quatre octets)&amp;lt;br&amp;gt; Double (de 1.79769313486232 x 10308 à 4.94065645841247 x 10-324. Une variable de ce type peut occuper jusqu&amp;#039;à huit octets)&amp;lt;br&amp;gt; Currency (de -922337203685477.5808 à +922337203685477.5807 et occupe jusqu&amp;#039;à huit octets en mémoire)&lt;br /&gt;
|-&lt;br /&gt;
|m&lt;br /&gt;
|Array (aka sequence aka matrice)&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|Integer (de -32768 à 32767.) ou&amp;lt;br&amp;gt; Long (de -2147483648 à 2147483647).&lt;br /&gt;
|-&lt;br /&gt;
|o&lt;br /&gt;
|Object, service ou interface&lt;br /&gt;
|-&lt;br /&gt;
|s&lt;br /&gt;
|String (Une variable string peut mémoriser jusqu&amp;#039;à 65535 caractères Unicode).&lt;br /&gt;
|-&lt;br /&gt;
|x&lt;br /&gt;
|Interface, montre que seules les opérations portant sur une interface particulière d&amp;#039;un objet sont utilisées&lt;br /&gt;
|-&lt;br /&gt;
|v&lt;br /&gt;
|Variant, N&amp;#039;importe quel valeur&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Utilisons des noms descriptifs suffisamment longs et employons le style &amp;quot;Camel case&amp;quot; [NdT : usage conjoint des majuscules et des minuscules pour faire ressortir les éléments du nom]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Les variables définies par l&amp;#039;utilisateur en OpenOffice.org Basic ne sont pas sensibles à la casse. Les constantes UNO-API le sont.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les variables indexant les boucles constituent une exception conventionnelle aux longs noms descriptifs. Des symboles tels que i, j et k sont en effet d&amp;#039;usage fréquent. De même, lorsqu&amp;#039;une chaîne est construite, on utilise fréquemment s comme variable temporaire. &lt;br /&gt;
&lt;br /&gt;
Editons la routine sub HelloWorld de manière qu&amp;#039;elle ressemble à ceci et exécutons-la : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub HelloWorld&lt;br /&gt;
dim i as integer &amp;#039;ligne optionnelle&lt;br /&gt;
  for i = 0 to 2&lt;br /&gt;
    &amp;#039;Ces lignes sont indentées par souci de lisiblité uniquement&lt;br /&gt;
    &amp;#039;Notre code devrait toujours être structuré ainsi pour lui donner des chances de survie&lt;br /&gt;
    msgbox &amp;quot;Hello World &amp;quot; &amp;amp; i&lt;br /&gt;
  next i&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Pour plus d&amp;#039;informations sur les variables, reportons-nous à l&amp;#039;aide en ligne, rubrique &amp;quot;utilisation des variables&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=L&amp;#039;API OpenOffice.org=&lt;br /&gt;
Cette section commence par un exemple. La suite donne des informations complémentaires qui nous permettront de comprendre l&amp;#039;exemple et à l&amp;#039;étendre.&lt;br /&gt;
&lt;br /&gt;
Essayons d&amp;#039;exécuter le code ci-dessous lorsque différents types de documents sont ouverts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
&amp;#039;basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
&amp;#039;xray.xray thisComponent&lt;br /&gt;
msgbox fnWhichComponent(thisComponent)&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function fnWhichComponent(oDoc) as string&lt;br /&gt;
if HasUnoInterfaces(oDoc, &amp;quot;com.sun.star.lang.XServiceInfo&amp;quot;) then &lt;br /&gt;
   if thisComponent.supportsService (&amp;quot;com.sun.star.text.GenericTextDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Texte&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.sheet.SpreadsheetDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Feuille de calcul&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.presentation.PresentationDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Presentation&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.drawing.GenericDrawingDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Dessin&amp;quot;&lt;br /&gt;
   else&lt;br /&gt;
      fnWhichComponent = &amp;quot;Oops le document ouvert est autre chose&amp;quot;&lt;br /&gt;
   end if&lt;br /&gt;
else&lt;br /&gt;
   fnWhichComponent = &amp;quot;Ce n&amp;#039;est pas un document&amp;quot;&lt;br /&gt;
end if&lt;br /&gt;
End function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Convention de nommage des routines==&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, le nom de la fonction utilisateur commence par &amp;quot;fn&amp;quot;. Il s&amp;#039;agit de la convention adoptée par l&amp;#039;auteur initial [NdT : version anglaise] qui permet au lecteur de savoir qu&amp;#039;il s&amp;#039;agit d&amp;#039;une fonction définie par l&amp;#039;utilisateur. Dans le même esprit, l&amp;#039;auteur initial utilise la convention de débuter les noms des procédures par &amp;quot;sub&amp;quot;. Lorsque l&amp;#039;on apprend un nouveau langage et de nouvelles API, il peut s&amp;#039;avérer difficile de reconnaître ce qui ressortit du langage lui-même de ce qui a été défini ailleurs dans notre code. Ce document/wiki emploie ces conventions pour le nommage des fonctions et des procédures.&lt;br /&gt;
&lt;br /&gt;
==Présentation de l&amp;#039;API OpenOffice.org==&lt;br /&gt;
Cette section introduit les termes : &lt;br /&gt;
&lt;br /&gt;
* Interface &lt;br /&gt;
* Module &lt;br /&gt;
* Service &lt;br /&gt;
* Méthode &lt;br /&gt;
* Propriété &lt;br /&gt;
&lt;br /&gt;
S&amp;#039;il n&amp;#039;est pas essentiel de comprendre la différence entre une interface et un service ou ce qu&amp;#039;est un module pour pouvoir écrire des extensions à OpenOffice.org, la compréhension de ces termes aide à correctement interpréter la documentation ainsi qu&amp;#039;à l&amp;#039;introspection des éléments manipulés. Peut-être nous faudra-t-il relire cette section plusieurs fois. &lt;br /&gt;
&lt;br /&gt;
Une &amp;#039;&amp;#039;&amp;#039;interface&amp;#039;&amp;#039;&amp;#039; est la &amp;#039;&amp;#039;définition&amp;#039;&amp;#039; d&amp;#039;un ensemble de méthodes (avec leurs arguments) qu&amp;#039;un service implémentant cette interface doit comporter. &lt;br /&gt;
&lt;br /&gt;
Les interfaces sont regroupées en &amp;#039;&amp;#039;&amp;#039;modules&amp;#039;&amp;#039;&amp;#039; pour des besoins de nommage. Toutes les interfaces (et les services) commencent par le nom &amp;quot;com.sun.star&amp;quot; puis vient le nom du module puis celui de l&amp;#039;interface (ou du service). &lt;br /&gt;
&lt;br /&gt;
Par exemple, la plupart des services fournissent l&amp;#039;interface &amp;lt;tt&amp;gt;com.sun.star.beans.XPropertySet&amp;lt;/tt&amp;gt;. Cette interface est enregistrée dans le module &amp;quot;beans&amp;quot; et fournit l&amp;#039;accès aux propriétés d&amp;#039;un service. Une &amp;#039;&amp;#039;&amp;#039;propriété&amp;#039;&amp;#039;&amp;#039; est une valeur tandis qu&amp;#039;une &amp;#039;&amp;#039;&amp;#039;méthode&amp;#039;&amp;#039;&amp;#039; défiti une action. &lt;br /&gt;
&lt;br /&gt;
Un objet OpenOffice.org peut supporter de nombreux services. &lt;br /&gt;
&lt;br /&gt;
Un objet OpenOffice.org peut supporter un service qui implémente une interface dans laquell une description de méthode déclare qu&amp;#039;un autre objet OpenOffice.org est retourné.&lt;br /&gt;
&lt;br /&gt;
==Introspection==&lt;br /&gt;
HasUnoInterfaces est une fonction OpenOffice.org Basic utilisée pour l&amp;#039;introspection. Ce document  [[http://www.oooforum.org/forum/viewtopic.phtml?t=7068 link]] permettra d&amp;#039;apprendre ce que l&amp;#039;on entend par introspection dans d&amp;#039;autres langages de programmation. &lt;br /&gt;
&lt;br /&gt;
HasUnoInterfaces renvoie une valeur &amp;quot;vrai&amp;quot; si toutes les interfaces spécifiées sont disponibles pour l&amp;#039;objet appelant. &lt;br /&gt;
&lt;br /&gt;
La plupart des objets OpenOffice.org fournissent la méthode supportsService parce qu&amp;#039;ils disposent également de l&amp;#039;interface com.sun.star.lang.XServiceInfo. &lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, la commande OpenOffice.org Basic, &amp;#039;&amp;#039;&amp;#039;HasUnoInterfaces&amp;#039;&amp;#039;&amp;#039; vérifie si le document actif dispose de l&amp;#039;interface com.sun.star.lang.XServiceInfo, car si cette interface n&amp;#039;est pas présente, alors le document n&amp;#039;aura pas non plus la méthode supportsService, et une erreur d&amp;#039;exécution se produirait lorsqu&amp;#039;un objet tentait d&amp;#039;accéder à une méthode inexistante. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;SupportsService&amp;#039;&amp;#039;&amp;#039; est une méthode qui renvoie la valeur &amp;quot;vrai&amp;quot; si le service spécifié est disponible. Dans l&amp;#039;exemple ci-dessus, on vérifie la présence d&amp;#039;un service afin de déterminer le type de document en cours d&amp;#039;activation.&lt;br /&gt;
&lt;br /&gt;
==L&amp;#039;Outil X-Ray==&lt;br /&gt;
L&amp;#039;utilisation de &amp;quot;HasUnoInterfaces&amp;quot; et de &amp;quot;supportsService&amp;quot; permet d&amp;#039;obtenir des informations sur un objet donné lors de son exécution, mais procéder ainsi pour apprendre le langage Basic deviendrait vite fastidieux. Heureusement, et grâce à Bernard Marcelly, nous disposons de l&amp;#039;outil X-Ray. Cet outil est disponible ici: [[http://ooomacros.org/dev.php#101416 ooomacros]]. Téléchargez le fichier zip, dézippez l&amp;#039;archive, ouvrez le document dans OpenOffice.org, et suivez les instructions pour son installation et configuration. &lt;br /&gt;
&lt;br /&gt;
Une partie de la configuration de l&amp;#039;outil X-Ray concerne la définition de l&amp;#039;endroit où est stockée une copie locale (sur le disque dur) du Kit de Développement OpenOffice.org (appélé SDK). Téléchargez le Kit de Développement OpenOffice.org depuis [[ftp://mirrors.dotsrc.org/openoffice/stable/2.0.4_sdk/]] et installez le sur votre disque dur. &lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, au début du code, il y a deux lignes mises en commentaires (les lignes de commentaires commencent toujours avec des apostrophes): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
&amp;#039;basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
&amp;#039;xray.xray thisComponent&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Une fois l&amp;#039;outil X-Ray installé, supprimez les apostrophes dans les lignes indiquées ci-dessus et relancez la macro. A partir de la version 5, la commande à utiliser dans votre code est tout simplement &amp;quot;xray&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;BasicLibraries&amp;#039;&amp;#039;&amp;#039; est une commande OpenOffice.org Basic qui renvoie un objet permettant d&amp;#039;accéder aux bibliothèques OpenOffice.org. La méthode &amp;lt;tt&amp;gt;loadLibrary&amp;lt;/tt&amp;gt; rend disponible aux utilisateurs les routines présentes dans cette bibliothèque. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;xray.xray&amp;lt;/tt&amp;gt; indique la bibliothèque xray et la sous-routine xray contenue dans celle-ci, l&amp;#039;objet thisComponent étant l&amp;#039;objet transmis à xray pour l&amp;#039;introspection. &lt;br /&gt;
&lt;br /&gt;
Afin de trouver l&amp;#039;objet que vous cherchez, il est souvent nécessaire de le découvrir ou de le créer depuis StarDesktop ou thisComponent.&lt;br /&gt;
&lt;br /&gt;
==Desktop, documents, and current selection==&lt;br /&gt;
StarDesktop et ThisComponent sont des commandes OpenOffice.org Basic qui ont trait à l&amp;#039;application et le document actif (c&amp;#039;est-à-dire, celui qui a le focus actuellement sur le bureau) respectivement. &lt;br /&gt;
&lt;br /&gt;
Contrairement à Microsoft Office, l&amp;#039;application OpenOffice.org est monolithique et comporte différents composants. Lorsqu&amp;#039;on exécute du code, il peut être utile de vérifier quel composant est actuellement en cours d&amp;#039;activation. Le code ci-dessus donne un exemple de la manière de procéder à cette vérification. &lt;br /&gt;
&lt;br /&gt;
Quand il est fait référence au Desktop dans StarDesktop, celui-ci se réfère à une existence virtuelle (puisqu&amp;#039;auparavant il existait réellement dans OpenOffice.org et dans StarOffice). On peut ainsi le considérer comme étant l&amp;#039;application OpenOffice.org elle-même.&lt;br /&gt;
&lt;br /&gt;
==Création de Nouveaux Documents==&lt;br /&gt;
Pour créer un nouveau document Writer, on écrit le code suivant: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/swriter&amp;quot;, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De la même manière, pour un nouveau document Calc: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/scalc&amp;quot;, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il serait sans doute plus facile d&amp;#039;écrire une fonction simple: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
function fnNewDoc(sDocType as string)&lt;br /&gt;
fnNewDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/&amp;quot; &amp;amp; sDocType , &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, on pourra créer de nouveaux documents ainsi: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;swriter&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;scalc&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;simpress&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;sdraw&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;smath&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir également http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XComponentLoader.html .&lt;br /&gt;
&lt;br /&gt;
==To open a document==&lt;br /&gt;
The following example shows how to open a file. For information on URLs in OpenOffice.org see [[ URL Basics]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sFile = &amp;quot;C:\Documents and Settings\danny\Desktop\MyCalc.sxc&amp;quot; &amp;#039; Windows&lt;br /&gt;
sFile = &amp;quot;/home/danny/Desktop/MyCalc.sxc&amp;quot; &amp;#039; Linux&lt;br /&gt;
sURL = ConvertToURL(sFile)&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(sURL, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Again it may make sense to make this easier by writing a simple function: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
function fnOpenDoc(sFile)&lt;br /&gt;
sURL = ConvertToURL(sFile)&lt;br /&gt;
fnOpenDoc = StarDesktop.loadComponentFromURL(sURL, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Examples of calling the function: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = fnOpenDoc(&amp;quot;C:\Documents and Settings\danny\Desktop\MyCalc.sxc&amp;quot;) &amp;#039; Windows&lt;br /&gt;
oDoc = fnOpenDoc(&amp;quot;/home/danny/Desktop/MyCalc.sxc&amp;quot;) &amp;#039; Linux&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Current Selection==&lt;br /&gt;
It is common to want to run some code that effects the current selection. &amp;lt;tt&amp;gt;ThisComponent&amp;lt;/tt&amp;gt; has the method &amp;lt;tt&amp;gt;getCurrentSelection&amp;lt;/tt&amp;gt;. Since many different types of objects could possibly be selected it is common to check that the currently selected object has the service that contains the method that we want to apply to the object. &lt;br /&gt;
&lt;br /&gt;
Edit the main subroutine to the following and rerun it on a text document with different selections. (To select more than one block of text hold down the control key). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
if fnWhichComponent(thisComponent) = &amp;quot;Text&amp;quot; then&lt;br /&gt;
        oCurSelection = thisComponent.getCurrentSelection()&lt;br /&gt;
        &amp;#039;xray.xray oCurSelection&lt;br /&gt;
        if oCurSelection.supportsService(&amp;quot;com.sun.star.text.TextRanges&amp;quot;) then&lt;br /&gt;
                msgbox &amp;quot;There are &amp;quot; &amp;amp; oCurSelection.getCount() &amp;amp; _&lt;br /&gt;
                 &amp;quot; selections in the current text document.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
end if&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
With nothing selected the number of selections is one - the insertion point, with one block of text selected the count is still one, but with two blocks of text the count is three - the insertion point and the two blocks of selected text. &lt;br /&gt;
&lt;br /&gt;
Exercise 1: Modify the above code so that it works on selected cell ranges in a spreadsheet. &lt;br /&gt;
&lt;br /&gt;
Question1: For two blocks of cells selected, what would be the count for the number of selections? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
Uncomment &amp;lt;tt&amp;gt;&amp;#039;xray.xray oCurSelection&amp;lt;/tt&amp;gt; so that xray runs, to see that the object that &amp;lt;tt&amp;gt;oCurSelection&amp;lt;/tt&amp;gt; points to has a &amp;quot;property&amp;quot; called &amp;lt;tt&amp;gt;Count&amp;lt;/tt&amp;gt; with a description of &amp;quot;pseudo-prop, read only&amp;quot;. It is possible in OpenOffice.org Basic to write &amp;lt;tt&amp;gt;oCurSelection.count&amp;lt;/tt&amp;gt;, but as this is not possible in all other languages accessing the OpenOffice.org API, this Wiki will try to always use the method approach. (I say try because I have not been in the habit of doing this and sometimes I may forget). &lt;br /&gt;
&lt;br /&gt;
This next example demonstrates changing a property value for the current selections. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
if fnWhichComponent(thisComponent) = &amp;quot;Text&amp;quot; then&lt;br /&gt;
   oCurSelection = thisComponent.getCurrentSelection()&lt;br /&gt;
   if oCurSelection.supportsService(&amp;quot;com.sun.star.text.TextRanges&amp;quot;) then&lt;br /&gt;
      nCount = oCurSelection.Count&lt;br /&gt;
      &amp;#039;xray.xray oCurSelection.getByIndex(0)&lt;br /&gt;
      &amp;#039;Warning: The insertion point will have the same action applied twice&lt;br /&gt;
      &amp;#039;in this case it doesn&amp;#039;t matter, but in others it might.&lt;br /&gt;
      for i = 0 to nCount - 1&lt;br /&gt;
         oCurSelection.getByIndex(i).setPropertyValue(&amp;quot;CharStyleName&amp;quot;, &amp;quot;Strong Emphasis&amp;quot;)&lt;br /&gt;
      next&lt;br /&gt;
   end if&lt;br /&gt;
end if&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
In OpenOffice.org Basic it is possible to shorten the assignment line to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oCurSelection(i).CharStyleName = &amp;quot;Strong Emphasis&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
This wiki will try to use the full methods for both indexing and assigning properties. The rationale is that this makes converting the code to other languages easier and also helps the learner to understand what is happening (again I have not been in the habit of doing this so some examples may slip past me). &lt;br /&gt;
&lt;br /&gt;
Exercise 2: Rewrite the above code so that the warning can be removed. &lt;br /&gt;
&lt;br /&gt;
See [[ Current selection]].&lt;br /&gt;
&lt;br /&gt;
=Iterative Access to Subordinate Objects (Enumeration access)=&lt;br /&gt;
Sometimes to access the desired object an enumeration is required. For example paragraphs, within a document or within a selection. &lt;br /&gt;
&lt;br /&gt;
When a Writer document is active and some text is selected, both &amp;lt;tt&amp;gt;thisDocument.getText()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;thisComponent.getCurrentSelection().getByIndex(i)&amp;lt;/tt&amp;gt; have the service: com.sun.star.text.TextRange which has the interface: com.sun.star.container.XContentEnumerationAccess, it is possible to create an enumeration of the paragraphs for the current document or for a particular selection. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
&amp;#039; Create enumeration object&lt;br /&gt;
oTextElementEnum = thisComponent.getText().createEnumeration()&lt;br /&gt;
&amp;#039;or thisComponent.getCurrentSelection().getByIndex(i).createEnumeration()&lt;br /&gt;
 &lt;br /&gt;
&amp;#039; loop over all text elements&lt;br /&gt;
while oTextElementEnum.hasMoreElements()&lt;br /&gt;
        oTextElement = oTextElementEnum.nextElement&lt;br /&gt;
        if oTextElement.supportsService(&amp;quot;com.sun.star.text.TextTable&amp;quot;) then&lt;br /&gt;
                MsgBox &amp;quot;The current block contains a table.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
        if oTextElement.supportsService(&amp;quot;com.sun.star.text.Paragraph&amp;quot;) then&lt;br /&gt;
                MsgBox &amp;quot;The current block contains a paragraph.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
wend&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Exercise 3: Extend the above example to display in a message box all text portions that are bold. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Named access=&lt;br /&gt;
Some objects provide named access to a particular type of subordinate object, some others indexed access, and some both named and indexed access. &lt;br /&gt;
&lt;br /&gt;
For example if the current document in OpenOffice.org is a spreadsheet then to access a particular sheet can be done by index access: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oSheet = thisComponent.getSheets.getByIndex(0)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
or named access: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oSheet = thisComponent.getSheets.getByName(&amp;quot;Sheet1&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
To check if an object with a particular name already exists use &amp;lt;tt&amp;gt;hasByName&amp;lt;/tt&amp;gt;, for example: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
if thisComponent.getSheets.hasByName(&amp;quot;Sheet1&amp;quot;) then&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
To loop through all the available object names can be done like: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
mNames = thisComponent.getSheets.getElementnames&lt;br /&gt;
for i = lbound(mNames) to ubound(mNames)&lt;br /&gt;
        msgbox mNames(i)&lt;br /&gt;
next&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Some named subordinate objects also provide the interface:  com.sun.star.container.XNameContainer. This interface defines that such objects should have the following methods: &amp;lt;tt&amp;gt;insertByName&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;replaceByname&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;removeByName&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
thisComponent.getSheets.insertByName(&amp;quot;NewSheet&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Create new objects=&lt;br /&gt;
Some objects have services which implement interfaces to provide specific methods for creating a particular type of object. &lt;br /&gt;
&lt;br /&gt;
For example if the current document is a Writer document then &amp;lt;tt&amp;gt;thisComponent.getText&amp;lt;/tt&amp;gt; is an object that provides the service com.sun.star.text.Text which implements the interface  com.sun.star.text.XSimpleText which defines the methods &amp;lt;tt&amp;gt;createTextCursor&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;createTextCursorByRange&amp;lt;/tt&amp;gt;. Both of these methods create a text cursor for accessing the text of the document. These cursors are quite independent of the view cursor . The view cursor is visible on the screen and is manipulated by the user (and can be manipulated by program control), where as a text cursor is not visible on the screen and is solely used by program control. The following code snippet demonstrates creating a new text cursor, such that it starts at the same location as the viewCursor and is then moved independent of the view cursor. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oVC = thisComponent.getCurrentController.getViewCursor&lt;br /&gt;
oCursor = oVC.getText.createTextCursorByRange(oVC)&lt;br /&gt;
oCursor.gotoStartOfSentence(false)&lt;br /&gt;
oCursor.gotoEndOfSentence(true)&lt;br /&gt;
msgbox oCursor.getString&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some objects are context dependent and get created using the method &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt; which is defined in the interface com.sun.star.lang.XMultiServiceFactory. For example to add a rectangle to the first page of a drawing document: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
dim aPoint as new com.sun.star.awt.Point&lt;br /&gt;
dim aSize as new com.sun.star.awt.Size&lt;br /&gt;
 &lt;br /&gt;
aPoint.x = 1000&lt;br /&gt;
aPoint.y = 1000&lt;br /&gt;
 &lt;br /&gt;
aSize.Width = 10000&lt;br /&gt;
aSize.Height = 10000&lt;br /&gt;
 &lt;br /&gt;
oRectangleShape = thisComponent.createInstance(&amp;quot;com.sun.star.drawing.RectangleShape&amp;quot;)&lt;br /&gt;
oRectangleShape.Size = aSize&lt;br /&gt;
oRectangleShape.Position = aPoint&lt;br /&gt;
 &lt;br /&gt;
thisComponent.getDrawPages.getByIndex(0).add(oRectangleShape)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example also uses UNO structs see below for more information on UNO stucts. &lt;br /&gt;
&lt;br /&gt;
Some objects are context independent to create these objects use the OpenOffice.org Basic command createUnoService. For example to create the equivalent to StarDesktop: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDesktop = createUnoService(&amp;quot;com.sun.star.frame.Desktop&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The process that I use to determine how to access or create an object is as follows: &lt;br /&gt;
&lt;br /&gt;
Does the object already exist if so I should be able to access it from something like &amp;lt;tt&amp;gt;thisComponent&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Will the new object belong to another object, if so does the owner have a specific method for creating the object, if so use it. &lt;br /&gt;
&lt;br /&gt;
The new object will belong to another object, but that object doesn&amp;#039;t provide a specific method for creating it, but does provide &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt;. If the object doesn&amp;#039;t provide &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt; are you sure you are using the correct object, or is it context independent. &lt;br /&gt;
&lt;br /&gt;
I have found working out how to create an object to be quite difficult with existing documentation so I hope that this document/wiki will eventually make this clear. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==UNO structs==&lt;br /&gt;
UNO structures can be declared using the OpenOffice.org Basic command &amp;lt;tt&amp;gt;dim&amp;lt;/tt&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
dim aPoint as new com.sun.star.awt.Point&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Or by using the OpenOffice.org Basic command &amp;lt;tt&amp;gt;createUnoStruct&amp;lt;/tt&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
aPoint = createUnoStruct(&amp;quot;com.sun.star.awt.Point&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|When declaring UNO structs case is important. Note that everything upto the name of the struct is lowercase, and that the name of the struct is in TitleCase.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Creating Listeners and Handlers==&lt;br /&gt;
Through the user interface it is possible to assign macros to some events: &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org versions 1.1.x: &amp;#039;&amp;#039;&amp;#039;Tools &amp;gt; Configure… &amp;gt; Events&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org versions 1.9.x and above: &amp;#039;&amp;#039;&amp;#039;Tools &amp;gt; Customize… &amp;gt; Events&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
It is also possible to assign macros to a wider range of events using the OpenOffice.org Basic command CreateUnoListener. This same command is used for creating both listeners and handlers. A listener checks for an event and always allows other listeners to respond to the event as well. A handler listens for an event, and can optionally consume the event so that other listeners don&amp;#039;t get to act on it. &lt;br /&gt;
&lt;br /&gt;
The following example creates a keyHandler: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
global IannzExampleKeyHandler&lt;br /&gt;
 &lt;br /&gt;
sub SetupKeyHandler&lt;br /&gt;
oController = thisComponent.currentController&lt;br /&gt;
IannzExampleKeyHandler = CreateUnoListener(&amp;quot;KeyHandler_&amp;quot;,&amp;quot;com.sun.star.awt.XKeyHandler&amp;quot;)&lt;br /&gt;
oController.addKeyHandler(IannzExampleKeyHandler) &amp;#039; Register the listener&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
sub RemoveKeyHandler&lt;br /&gt;
thisComponent.currentController.removeKeyHandler(IannzExampleKeyHandler)&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
sub KeyHandler_disposing&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function KeyHandler_keyReleased(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean&lt;br /&gt;
        KeyHandler_keyReleased = False    &lt;br /&gt;
end function&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function KeyHandler_keyPressed(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean&lt;br /&gt;
KeyHandler_keyPressed = false   &amp;#039;Let other listeners handle the event&lt;br /&gt;
if oKeyEvent.modifiers = com.sun.star.awt.KeyModifier.MOD2 then &amp;#039;Control key was pressed&lt;br /&gt;
        if oKeyEvent.keyCode = com.sun.star.awt.Key.Q then&lt;br /&gt;
                msgbox &amp;quot;Alt + Q was pressed&amp;quot;&lt;br /&gt;
                KeyHandler_keyPressed = true    &amp;#039;Don&amp;#039;t let other listeners process this event&lt;br /&gt;
        end if&lt;br /&gt;
end if&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
A variable declared as global keeps its value even after the macro exits. In this case we want to be able to use this variable later to remove the handler. As variables declared globally could be used in other libraries to try and avoid conflict I start all my global variables with Iannz my registered name for the OpenOffice.org web site. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;sub SetupKeyHandler&amp;lt;/tt&amp;gt; sets up the handler. The first parameter to CreateUnoListener is the staring name for the methods that will be called when that type of event occurs in this example .&amp;lt;tt&amp;gt;&amp;quot;KeyHandler_&amp;quot;&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The second parameter is the name of the interface for the listener or handler, &amp;quot;com.sun.star.awt.XKeyHandler&amp;quot;. The name is case sensitive, everything up to and including the module name is always lowercase, the name of the interface always starts with &amp;quot;X&amp;quot; and the remainder is in TitleCase. &lt;br /&gt;
&lt;br /&gt;
Use the SDK to find out what methods the interface must supply. You must supply routines for all of these methods even if you don&amp;#039;t intend to use them. You also need to supply a disposing method. The names of these routines start with the string given in the first parameter to CreateUnoListener , in this example &amp;lt;tt&amp;gt;&amp;quot;KeyHandler_&amp;quot;&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Thus in the example there is &amp;lt;tt&amp;gt;KeyHandler_disposing&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;KeyHandler_keyReleased&amp;lt;/tt&amp;gt; which don&amp;#039;t actually do anything but are required, and &amp;lt;tt&amp;gt;KeyHandler_keyPressed&amp;lt;/tt&amp;gt; which actually does the job. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;sub RemoveKeyHandler&amp;lt;/tt&amp;gt; demonstrates how to remove the handler.&lt;br /&gt;
&lt;br /&gt;
=OpenOffice.org constants=&lt;br /&gt;
The above example uses OpenOffice.org constants. &lt;br /&gt;
&lt;br /&gt;
E.g. com.sun.star.awt.KeyModifier.MOD2&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org constants are case sensitive. Everything up to and including the module name is always lowercase. The constant group is in TitleCase. The actual constant name is always UPPERCASE. &lt;br /&gt;
&lt;br /&gt;
Programmers not using OpenOffice.org Basic may not have access to these constants. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Using the recorder=&lt;br /&gt;
See [[ The OpenOffice.org recorder and UNO dispatch calls]] section for a discussion on recording UNO Dispatch commands versus writing API calls.&lt;br /&gt;
&lt;br /&gt;
= See also=&lt;br /&gt;
* [[Programming_OooWriter |Programming OOoWriter in C++]] where OOoBascic record are used in C++&lt;br /&gt;
* A [[XIntrospection_Interface|XIntrospection Interface]] short description. XRay uses this interface.&lt;br /&gt;
* Download Bernard Marcelly&amp;#039;s [http://www.ooomacros.org/dev.php#101416 XRay OOoBasic tool]  &lt;br /&gt;
&lt;br /&gt;
[[Category:Basic:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Extensions_development_basic_fr&amp;diff=18515</id>
		<title>Extensions development basic fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Extensions_development_basic_fr&amp;diff=18515"/>
		<updated>2006-10-13T13:00:32Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Introspection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Comment démarrer&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Cette page est un guide de démarrage qui vous permettra d&amp;#039;écrire des macros en OpenOffice.org Basic. Une connaisance préalable de la programmation est un pré-requis. Merci d&amp;#039;éditer cette page pour la rendre plus lisible. J&amp;#039;espère que vous la trouverez utile.&lt;br /&gt;
&lt;br /&gt;
Si vous maîtrisez les bases, alors vous pouvez consulter le [[CookBook]] qui donne des exemples et des (wrappers).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Où le code est-il enregistré ?=&lt;br /&gt;
Le code OpenOffice.org Basic est enregistré dans des modules eux-mêmes placés dans les bibliothèques. Une bibliothèque peut être : &lt;br /&gt;
&lt;br /&gt;
*Partagée (pour une installation en réseau - OOo Macros &amp;amp; Dialogues) &lt;br /&gt;
*Uniquement pour l&amp;#039;utilisateur courant (Mes Macros &amp;amp; Dialogues) &lt;br /&gt;
*Incorporée à un document ou à un modèle de telle manière que son code ne soit disponible que lorsque ce document est ouvert.&lt;br /&gt;
&lt;br /&gt;
Lorsque des bibliothèques ne sont stockées ni dans un document ni dans un modèle, c&amp;#039;est-à-dire lorsque les bibliothèques sont partagées ou pour l&amp;#039;utilisateur courant, on les appelle &amp;#039;&amp;#039;&amp;#039;Bibliothèques OpenOffice.org&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
Pour connaître les dossiers qui contiennent les bibliothèques OpenOffice.org voir :&amp;lt;br&amp;gt; &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Options… &amp;gt; OpenOffice.org &amp;gt; Chemins &amp;gt; BASIC&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Ne copiez pas ni ne déplacez les bibliothèques en utilisant les commandes du système d&amp;#039;exploitation. Préférez le gestionnaire de macros ou le gestionnaire de packages.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La taille autorisée pour les modules placés à l&amp;#039;intérieur des bibliothèques est limitée à 64 Ko. Une bilbiothèque peut contenir jusqu&amp;#039;à 16.000 modules. &lt;br /&gt;
&lt;br /&gt;
Pour plus d&amp;#039;information, reportez-vous à l&amp;#039;aide en ligne, rubrique : Modules et bibliothèques.&lt;br /&gt;
&lt;br /&gt;
=Accéder à l&amp;#039;IDE=&lt;br /&gt;
Pour accéder à l&amp;#039;IDE (environnement de développement intégré) pour la première fois : &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org 1.1.x: &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Macro… &amp;gt;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org 1.9.x et ultérieur : &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Gérer les macros &amp;gt; OpenOffice.org Basic… &amp;gt;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous allons utiliser le Module1 de la bibliothèque Standard, présente pour l&amp;#039;utilisateur courant uniquement : &lt;br /&gt;
&lt;br /&gt;
Entrons un nom pour notre nouvelle macro : &amp;#039;&amp;#039;&amp;#039;HelloWorld&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Dans la macro, sélectionnons &amp;#039;&amp;#039;&amp;#039;Standard&amp;#039;&amp;#039;&amp;#039; dans la boîte de liste.&lt;br /&gt;
&lt;br /&gt;
Cliquons &amp;#039;&amp;#039;&amp;#039;Nouveau&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant trouver quelque chose comme çà : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
REM  *****  BASIC  *****&lt;br /&gt;
 &lt;br /&gt;
Sub Main&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
 &lt;br /&gt;
Sub HelloWorld&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Le curseur est positionné au début de la ligne &amp;lt;tt&amp;gt;Sub HelloWorld&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Maintenant que l&amp;#039;IDE est actif, il peut être accédé depuis le menu Fenêtre d&amp;#039;OpenOffice.org ou par la barre des tâches du système d&amp;#039;exploitation.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Saisie de code=&lt;br /&gt;
Selectionnons et effaçons : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
REM  *****  BASIC  *****&lt;br /&gt;
 &lt;br /&gt;
Sub Main&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Au-dessous de la ligne &amp;quot;Sub HelloWorld&amp;quot; entrons &amp;lt;tt&amp;gt;msgbox &amp;quot;Hello World!&amp;quot;&amp;lt;/tt&amp;gt;, de manière que l&amp;#039;éditeur ressemble à ceci : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
Sub HelloWorld&lt;br /&gt;
  msgbox &amp;quot;Hello World!&amp;quot;&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Notes:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|L&amp;#039;IDE ne fournit aucune fonctionnalité de code completion ni d&amp;#039;aide sur la syntaxe des commandes lors de la frappe. Pour obtenir de l&amp;#039;aide sur une commande Basic, plaçons le curseur dans la commande et tapons F1.&amp;lt;br&amp;gt; Les commande OpenOffice.org Basic ne sont pas sensibles à la casse. C&amp;#039;est pourquoi msgbox, MSGBOX et Msgbox sont équivalents.&amp;lt;br&amp;gt; Les chaînes sont entourées de guillements doubles.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Exécution du code=&lt;br /&gt;
Le code Basic peut être exécuté de plusieurs façons : &lt;br /&gt;
&lt;br /&gt;
Directement dans l&amp;#039;IDE. La barre des macro comprte un bouton Exécter (par défaut, le troisième de la seconde barre d&amp;#039;outils). Ce bouton lance la première macro du module en cours. &lt;br /&gt;
&lt;br /&gt;
Depuis le menu Outils :&lt;br /&gt;
&lt;br /&gt;
(Version 1.1.x) &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Macro…&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
(Version 1.9.x et supérieures) &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Exécuter la macro…&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à une [[ touche]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à une [[ entrée de menu]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à un bouton de barre d&amp;#039;outil. &lt;br /&gt;
&lt;br /&gt;
En créant un [[ contrôle dans un document]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à un évènement. &lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;instant essayons de lancer la procédure &amp;quot;HelloWorld&amp;quot; en cliquant le bouton &amp;#039;&amp;#039;&amp;#039;Exécuter&amp;#039;&amp;#039;&amp;#039;. Un dialogue intitulé &amp;quot;soffice&amp;quot; et comportant le texte &amp;quot;Hello World!&amp;quot; ainsi qu&amp;#039;un bouton OK doit s&amp;#039;afficher.&lt;br /&gt;
&lt;br /&gt;
=Enregistrement du code=&lt;br /&gt;
Le code est enregistré automatiquement chaque fois que son conteneur est lui-même enregistré. Par conséquent, si le code se trouve dans une bibliothèque OpenOffice (partagée ou de l&amp;#039;utilisateur), il est automatiquement enregistré lorsque OpenOffice est refermé. Si le code se trouve dans une bilbiothèque qui fait partie d&amp;#039;un document, alors il est enregistré lorsque le document l&amp;#039;est. &lt;br /&gt;
&lt;br /&gt;
Un bouton Enregistrer figure sur la barre d&amp;#039;outils Standard (celle du haut par défaut). Si le code se trouve à l&amp;#039;intérieur d&amp;#039;un document ou modèle, alors la totalité du document est enregistrée. Si le code se trouve à l&amp;#039;intérieur d&amp;#039;une bibliothèque OpenOffice.org alors seule la bilbiothèque courante est enregistrée.&lt;br /&gt;
&lt;br /&gt;
=Les variables=&lt;br /&gt;
Nous pouvons forcer la déclaration des variables en insérant &amp;lt;tt&amp;gt;Option Explicit&amp;lt;/tt&amp;gt; au début du module. Pour consulter une discussion consacrée à la déclaration ou non des variables, voir : [[http://www.oooforum.org/forum/viewtopic.phtml?t=5845 cette discussion]]. &lt;br /&gt;
&lt;br /&gt;
Dans cette discussion, on voit que l&amp;#039;auteur de [NdT : la version anglaise de] cette page défendait initialement la déclaration systématique des variables. Depuis lors il a changé d&amp;#039;avis et ne les déclare plus du tout. Bref, c&amp;#039;est une question de préférence personnelle. Dans un cas comme dans l&amp;#039;autre, les préférences de l&amp;#039;auteur vont au nommage des variables selon la convention suivante, qui sera utilisée tout au long des exemples de ce wiki :&lt;br /&gt;
&lt;br /&gt;
La première lettre du nom de la variable indique le type de valeur contenue, telle que présentée à la table ci-dessous (basée sur un tableau dans Tutorial.pdf de Sun) &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Lettre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Signification&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|a&lt;br /&gt;
|Structure&lt;br /&gt;
|-&lt;br /&gt;
|b&lt;br /&gt;
|Boolean (TRUE ou FALSE)&lt;br /&gt;
|-&lt;br /&gt;
|e&lt;br /&gt;
|Enumeration. Cette variable ne peut prendre qu&amp;#039;une valeur parmi un ensemble limité de valeurs.&lt;br /&gt;
|-&lt;br /&gt;
|f&lt;br /&gt;
|Float (de 3.402823 x 1038 à 1.401298 x 10-45. Une variable de type float [NdT : single] peut occuper jusqu&amp;#039;à quatre octets)&amp;lt;br&amp;gt; Double (de 1.79769313486232 x 10308 à 4.94065645841247 x 10-324. Une variable de ce type peut occuper jusqu&amp;#039;à huit octets)&amp;lt;br&amp;gt; Currency (de -922337203685477.5808 à +922337203685477.5807 et occupe jusqu&amp;#039;à huit octets en mémoire)&lt;br /&gt;
|-&lt;br /&gt;
|m&lt;br /&gt;
|Array (aka sequence aka matrice)&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|Integer (de -32768 à 32767.) ou&amp;lt;br&amp;gt; Long (de -2147483648 à 2147483647).&lt;br /&gt;
|-&lt;br /&gt;
|o&lt;br /&gt;
|Object, service ou interface&lt;br /&gt;
|-&lt;br /&gt;
|s&lt;br /&gt;
|String (Une variable string peut mémoriser jusqu&amp;#039;à 65535 caractères Unicode).&lt;br /&gt;
|-&lt;br /&gt;
|x&lt;br /&gt;
|Interface, montre que seules les opérations portant sur une interface particulière d&amp;#039;un objet sont utilisées&lt;br /&gt;
|-&lt;br /&gt;
|v&lt;br /&gt;
|Variant, N&amp;#039;importe quel valeur&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Utilisons des noms descriptifs suffisamment longs et employons le style &amp;quot;Camel case&amp;quot; [NdT : usage conjoint des majuscules et des minuscules pour faire ressortir les éléments du nom]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Les variables définies par l&amp;#039;utilisateur en OpenOffice.org Basic ne sont pas sensibles à la casse. Les constantes UNO-API le sont.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les variables indexant les boucles constituent une exception conventionnelle aux longs noms descriptifs. Des symboles tels que i, j et k sont en effet d&amp;#039;usage fréquent. De même, lorsqu&amp;#039;une chaîne est construite, on utilise fréquemment s comme variable temporaire. &lt;br /&gt;
&lt;br /&gt;
Editons la routine sub HelloWorld de manière qu&amp;#039;elle ressemble à ceci et exécutons-la : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub HelloWorld&lt;br /&gt;
dim i as integer &amp;#039;ligne optionnelle&lt;br /&gt;
  for i = 0 to 2&lt;br /&gt;
    &amp;#039;Ces lignes sont indentées par souci de lisiblité uniquement&lt;br /&gt;
    &amp;#039;Notre code devrait toujours être structuré ainsi pour lui donner des chances de survie&lt;br /&gt;
    msgbox &amp;quot;Hello World &amp;quot; &amp;amp; i&lt;br /&gt;
  next i&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Pour plus d&amp;#039;informations sur les variables, reportons-nous à l&amp;#039;aide en ligne, rubrique &amp;quot;utilisation des variables&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=L&amp;#039;API OpenOffice.org=&lt;br /&gt;
Cette section commence par un exemple. La suite donne des informations complémentaires qui nous permettront de comprendre l&amp;#039;exemple et à l&amp;#039;étendre.&lt;br /&gt;
&lt;br /&gt;
Essayons d&amp;#039;exécuter le code ci-dessous lorsque différents types de documents sont ouverts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
&amp;#039;basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
&amp;#039;xray.xray thisComponent&lt;br /&gt;
msgbox fnWhichComponent(thisComponent)&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function fnWhichComponent(oDoc) as string&lt;br /&gt;
if HasUnoInterfaces(oDoc, &amp;quot;com.sun.star.lang.XServiceInfo&amp;quot;) then &lt;br /&gt;
   if thisComponent.supportsService (&amp;quot;com.sun.star.text.GenericTextDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Texte&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.sheet.SpreadsheetDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Feuille de calcul&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.presentation.PresentationDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Presentation&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.drawing.GenericDrawingDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Dessin&amp;quot;&lt;br /&gt;
   else&lt;br /&gt;
      fnWhichComponent = &amp;quot;Oops le document ouvert est autre chose&amp;quot;&lt;br /&gt;
   end if&lt;br /&gt;
else&lt;br /&gt;
   fnWhichComponent = &amp;quot;Ce n&amp;#039;est pas un document&amp;quot;&lt;br /&gt;
end if&lt;br /&gt;
End function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Convention de nommage des routines==&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, le nom de la fonction utilisateur commence par &amp;quot;fn&amp;quot;. Il s&amp;#039;agit de la convention adoptée par l&amp;#039;auteur initial [NdT : version anglaise] qui permet au lecteur de savoir qu&amp;#039;il s&amp;#039;agit d&amp;#039;une fonction définie par l&amp;#039;utilisateur. Dans le même esprit, l&amp;#039;auteur initial utilise la convention de débuter les noms des procédures par &amp;quot;sub&amp;quot;. Lorsque l&amp;#039;on apprend un nouveau langage et de nouvelles API, il peut s&amp;#039;avérer difficile de reconnaître ce qui ressortit du langage lui-même de ce qui a été défini ailleurs dans notre code. Ce document/wiki emploie ces conventions pour le nommage des fonctions et des procédures.&lt;br /&gt;
&lt;br /&gt;
==Présentation de l&amp;#039;API OpenOffice.org==&lt;br /&gt;
Cette section introduit les termes : &lt;br /&gt;
&lt;br /&gt;
* Interface &lt;br /&gt;
* Module &lt;br /&gt;
* Service &lt;br /&gt;
* Méthode &lt;br /&gt;
* Propriété &lt;br /&gt;
&lt;br /&gt;
S&amp;#039;il n&amp;#039;est pas essentiel de comprendre la différence entre une interface et un service ou ce qu&amp;#039;est un module pour pouvoir écrire des extensions à OpenOffice.org, la compréhension de ces termes aide à correctement interpréter la documentation ainsi qu&amp;#039;à l&amp;#039;introspection des éléments manipulés. Peut-être nous faudra-t-il relire cette section plusieurs fois. &lt;br /&gt;
&lt;br /&gt;
Une &amp;#039;&amp;#039;&amp;#039;interface&amp;#039;&amp;#039;&amp;#039; est la &amp;#039;&amp;#039;définition&amp;#039;&amp;#039; d&amp;#039;un ensemble de méthodes (avec leurs arguments) qu&amp;#039;un service implémentant cette interface doit comporter. &lt;br /&gt;
&lt;br /&gt;
Les interfaces sont regroupées en &amp;#039;&amp;#039;&amp;#039;modules&amp;#039;&amp;#039;&amp;#039; pour des besoins de nommage. Toutes les interfaces (et les services) commencent par le nom &amp;quot;com.sun.star&amp;quot; puis vient le nom du module puis celui de l&amp;#039;interface (ou du service). &lt;br /&gt;
&lt;br /&gt;
Par exemple, la plupart des services fournissent l&amp;#039;interface &amp;lt;tt&amp;gt;com.sun.star.beans.XPropertySet&amp;lt;/tt&amp;gt;. Cette interface est enregistrée dans le module &amp;quot;beans&amp;quot; et fournit l&amp;#039;accès aux propriétés d&amp;#039;un service. Une &amp;#039;&amp;#039;&amp;#039;propriété&amp;#039;&amp;#039;&amp;#039; est une valeur tandis qu&amp;#039;une &amp;#039;&amp;#039;&amp;#039;méthode&amp;#039;&amp;#039;&amp;#039; défiti une action. &lt;br /&gt;
&lt;br /&gt;
Un objet OpenOffice.org peut supporter de nombreux services. &lt;br /&gt;
&lt;br /&gt;
Un objet OpenOffice.org peut supporter un service qui implémente une interface dans laquell une description de méthode déclare qu&amp;#039;un autre objet OpenOffice.org est retourné.&lt;br /&gt;
&lt;br /&gt;
==Introspection==&lt;br /&gt;
HasUnoInterfaces est une fonction OpenOffice.org Basic utilisée pour l&amp;#039;introspection. Ce document  [[http://www.oooforum.org/forum/viewtopic.phtml?t=7068 link]] permettra d&amp;#039;apprendre ce que l&amp;#039;on entend par introspection dans d&amp;#039;autres langages de programmation. &lt;br /&gt;
&lt;br /&gt;
HasUnoInterfaces renvoie une valeur &amp;quot;vrai&amp;quot; si toutes les interfaces spécifiées sont disponibles pour l&amp;#039;objet appelant. &lt;br /&gt;
&lt;br /&gt;
La plupart des objets OpenOffice.org fournissent la méthode supportsService parce qu&amp;#039;ils disposent également de l&amp;#039;interface com.sun.star.lang.XServiceInfo. &lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, la commande OpenOffice.org Basic, &amp;#039;&amp;#039;&amp;#039;HasUnoInterfaces&amp;#039;&amp;#039;&amp;#039; vérifie si le document actif dispose de l&amp;#039;interface com.sun.star.lang.XServiceInfo, car si cette interface n&amp;#039;est pas présente, alors le document n&amp;#039;aura pas non plus la méthode supportsService, et une erreur d&amp;#039;exécution se produirait lorsqu&amp;#039;un objet tentait d&amp;#039;accéder à une méthode inexistante. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;SupportsService&amp;#039;&amp;#039;&amp;#039; est une méthode qui renvoie la valeur &amp;quot;vrai&amp;quot; si le service spécifié est disponible. Dans l&amp;#039;exemple ci-dessus, on vérifie la présence d&amp;#039;un service afin de déterminer le type de document en cours d&amp;#039;activation.&lt;br /&gt;
&lt;br /&gt;
==L&amp;#039;Outil X-Ray==&lt;br /&gt;
L&amp;#039;utilisation de &amp;quot;HasUnoInterfaces&amp;quot; et de &amp;quot;supportsService&amp;quot; permet d&amp;#039;obtenir des informations sur un objet donné lors de son exécution, mais procéder ainsi pour apprendre le langage Basic deviendrait vite fastidieux. Heureusement, et grâce à Bernard Marcelly, nous disposons de l&amp;#039;outil X-Ray. Cet outil est disponible ici: [[http://ooomacros.org/dev.php#101416 ooomacros]]. Téléchargez le fichier zip, dézippez l&amp;#039;archive, ouvrez le document dans OpenOffice.org, et suivez les instructions pour son installation et configuration. &lt;br /&gt;
&lt;br /&gt;
Une partie de la configuration de l&amp;#039;outil X-Ray concerne la définition de l&amp;#039;endroit où est stockée une copie locale (sur le disque dur) du Kit de Développement OpenOffice.org (appélé SDK). Téléchargez le Kit de Développement OpenOffice.org depuis [[ftp://mirrors.dotsrc.org/openoffice/stable/2.0.4_sdk/]] et installez le sur votre disque dur. &lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, au début du code, il y a deux lignes mises en commentaires (les lignes de commentaires commencent toujours avec des apostrophes): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
&amp;#039;basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
&amp;#039;xray.xray thisComponent&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Une fois l&amp;#039;outil X-Ray installé, supprimez les apostrophes dans les lignes indiquées ci-dessus et relancez la macro. A partir de la version 5, la commande à utiliser dans votre code est tout simplement &amp;quot;xray&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;BasicLibraries&amp;#039;&amp;#039;&amp;#039; est une commande OpenOffice.org Basic qui renvoie un objet permettant d&amp;#039;accéder aux bibliothèques OpenOffice.org. La méthode &amp;lt;tt&amp;gt;loadLibrary&amp;lt;/tt&amp;gt; rend disponible aux utilisateurs les routines présentes dans cette bibliothèque. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;xray.xray&amp;lt;/tt&amp;gt; indique la bibliothèque xray et la sous-routine xray contenue dans celle-ci, l&amp;#039;objet thisComponent étant l&amp;#039;objet transmis à xray pour l&amp;#039;introspection. &lt;br /&gt;
&lt;br /&gt;
Afin de trouver l&amp;#039;objet que vous cherchez, il est souvent nécessaire de le découvrir ou de le créer depuis StarDesktop ou thisComponent.&lt;br /&gt;
&lt;br /&gt;
==Desktop, documents, and current selection==&lt;br /&gt;
StarDesktop et ThisComponent sont des commandes OpenOffice.org Basic qui ont trait à l&amp;#039;application et le document actif (c&amp;#039;est-à-dire, celui qui a le focus actuellement sur le bureau) respectivement. &lt;br /&gt;
&lt;br /&gt;
Contrairement à Microsoft Office, l&amp;#039;application OpenOffice.org est monolithique et comporte différents composants. Lorsqu&amp;#039;on exécute du code, il peut être utile de vérifier quel composant est actuellement en cours d&amp;#039;activation. Le code ci-dessus donne un exemple de la manière de procéder à cette vérification. &lt;br /&gt;
&lt;br /&gt;
Quand il est fait référence au Desktop dans StarDesktop, celui-ci se réfère à une existence virtuelle (puisqu&amp;#039;auparavant il existait réellement dans OpenOffice.org et dans StarOffice). On peut ainsi le considérer comme étant l&amp;#039;application OpenOffice.org elle-même.&lt;br /&gt;
&lt;br /&gt;
==Creating new documents==&lt;br /&gt;
To create a new text document: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/swriter&amp;quot;, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
To create a new spreadsheet document: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/scalc&amp;quot;, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
An easier approach would be to write a simple function: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
function fnNewDoc(sDocType as string)&lt;br /&gt;
fnNewDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/&amp;quot; &amp;amp; sDocType , &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Then creating new documents can be achieved with: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;swriter&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;scalc&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;simpress&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;sdraw&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;smath&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
See http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XComponentLoader.html .&lt;br /&gt;
&lt;br /&gt;
==To open a document==&lt;br /&gt;
The following example shows how to open a file. For information on URLs in OpenOffice.org see [[ URL Basics]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sFile = &amp;quot;C:\Documents and Settings\danny\Desktop\MyCalc.sxc&amp;quot; &amp;#039; Windows&lt;br /&gt;
sFile = &amp;quot;/home/danny/Desktop/MyCalc.sxc&amp;quot; &amp;#039; Linux&lt;br /&gt;
sURL = ConvertToURL(sFile)&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(sURL, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Again it may make sense to make this easier by writing a simple function: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
function fnOpenDoc(sFile)&lt;br /&gt;
sURL = ConvertToURL(sFile)&lt;br /&gt;
fnOpenDoc = StarDesktop.loadComponentFromURL(sURL, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Examples of calling the function: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = fnOpenDoc(&amp;quot;C:\Documents and Settings\danny\Desktop\MyCalc.sxc&amp;quot;) &amp;#039; Windows&lt;br /&gt;
oDoc = fnOpenDoc(&amp;quot;/home/danny/Desktop/MyCalc.sxc&amp;quot;) &amp;#039; Linux&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Current Selection==&lt;br /&gt;
It is common to want to run some code that effects the current selection. &amp;lt;tt&amp;gt;ThisComponent&amp;lt;/tt&amp;gt; has the method &amp;lt;tt&amp;gt;getCurrentSelection&amp;lt;/tt&amp;gt;. Since many different types of objects could possibly be selected it is common to check that the currently selected object has the service that contains the method that we want to apply to the object. &lt;br /&gt;
&lt;br /&gt;
Edit the main subroutine to the following and rerun it on a text document with different selections. (To select more than one block of text hold down the control key). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
if fnWhichComponent(thisComponent) = &amp;quot;Text&amp;quot; then&lt;br /&gt;
        oCurSelection = thisComponent.getCurrentSelection()&lt;br /&gt;
        &amp;#039;xray.xray oCurSelection&lt;br /&gt;
        if oCurSelection.supportsService(&amp;quot;com.sun.star.text.TextRanges&amp;quot;) then&lt;br /&gt;
                msgbox &amp;quot;There are &amp;quot; &amp;amp; oCurSelection.getCount() &amp;amp; _&lt;br /&gt;
                 &amp;quot; selections in the current text document.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
end if&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
With nothing selected the number of selections is one - the insertion point, with one block of text selected the count is still one, but with two blocks of text the count is three - the insertion point and the two blocks of selected text. &lt;br /&gt;
&lt;br /&gt;
Exercise 1: Modify the above code so that it works on selected cell ranges in a spreadsheet. &lt;br /&gt;
&lt;br /&gt;
Question1: For two blocks of cells selected, what would be the count for the number of selections? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
Uncomment &amp;lt;tt&amp;gt;&amp;#039;xray.xray oCurSelection&amp;lt;/tt&amp;gt; so that xray runs, to see that the object that &amp;lt;tt&amp;gt;oCurSelection&amp;lt;/tt&amp;gt; points to has a &amp;quot;property&amp;quot; called &amp;lt;tt&amp;gt;Count&amp;lt;/tt&amp;gt; with a description of &amp;quot;pseudo-prop, read only&amp;quot;. It is possible in OpenOffice.org Basic to write &amp;lt;tt&amp;gt;oCurSelection.count&amp;lt;/tt&amp;gt;, but as this is not possible in all other languages accessing the OpenOffice.org API, this Wiki will try to always use the method approach. (I say try because I have not been in the habit of doing this and sometimes I may forget). &lt;br /&gt;
&lt;br /&gt;
This next example demonstrates changing a property value for the current selections. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
if fnWhichComponent(thisComponent) = &amp;quot;Text&amp;quot; then&lt;br /&gt;
   oCurSelection = thisComponent.getCurrentSelection()&lt;br /&gt;
   if oCurSelection.supportsService(&amp;quot;com.sun.star.text.TextRanges&amp;quot;) then&lt;br /&gt;
      nCount = oCurSelection.Count&lt;br /&gt;
      &amp;#039;xray.xray oCurSelection.getByIndex(0)&lt;br /&gt;
      &amp;#039;Warning: The insertion point will have the same action applied twice&lt;br /&gt;
      &amp;#039;in this case it doesn&amp;#039;t matter, but in others it might.&lt;br /&gt;
      for i = 0 to nCount - 1&lt;br /&gt;
         oCurSelection.getByIndex(i).setPropertyValue(&amp;quot;CharStyleName&amp;quot;, &amp;quot;Strong Emphasis&amp;quot;)&lt;br /&gt;
      next&lt;br /&gt;
   end if&lt;br /&gt;
end if&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
In OpenOffice.org Basic it is possible to shorten the assignment line to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oCurSelection(i).CharStyleName = &amp;quot;Strong Emphasis&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
This wiki will try to use the full methods for both indexing and assigning properties. The rationale is that this makes converting the code to other languages easier and also helps the learner to understand what is happening (again I have not been in the habit of doing this so some examples may slip past me). &lt;br /&gt;
&lt;br /&gt;
Exercise 2: Rewrite the above code so that the warning can be removed. &lt;br /&gt;
&lt;br /&gt;
See [[ Current selection]].&lt;br /&gt;
&lt;br /&gt;
=Iterative Access to Subordinate Objects (Enumeration access)=&lt;br /&gt;
Sometimes to access the desired object an enumeration is required. For example paragraphs, within a document or within a selection. &lt;br /&gt;
&lt;br /&gt;
When a Writer document is active and some text is selected, both &amp;lt;tt&amp;gt;thisDocument.getText()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;thisComponent.getCurrentSelection().getByIndex(i)&amp;lt;/tt&amp;gt; have the service: com.sun.star.text.TextRange which has the interface: com.sun.star.container.XContentEnumerationAccess, it is possible to create an enumeration of the paragraphs for the current document or for a particular selection. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
&amp;#039; Create enumeration object&lt;br /&gt;
oTextElementEnum = thisComponent.getText().createEnumeration()&lt;br /&gt;
&amp;#039;or thisComponent.getCurrentSelection().getByIndex(i).createEnumeration()&lt;br /&gt;
 &lt;br /&gt;
&amp;#039; loop over all text elements&lt;br /&gt;
while oTextElementEnum.hasMoreElements()&lt;br /&gt;
        oTextElement = oTextElementEnum.nextElement&lt;br /&gt;
        if oTextElement.supportsService(&amp;quot;com.sun.star.text.TextTable&amp;quot;) then&lt;br /&gt;
                MsgBox &amp;quot;The current block contains a table.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
        if oTextElement.supportsService(&amp;quot;com.sun.star.text.Paragraph&amp;quot;) then&lt;br /&gt;
                MsgBox &amp;quot;The current block contains a paragraph.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
wend&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Exercise 3: Extend the above example to display in a message box all text portions that are bold. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Named access=&lt;br /&gt;
Some objects provide named access to a particular type of subordinate object, some others indexed access, and some both named and indexed access. &lt;br /&gt;
&lt;br /&gt;
For example if the current document in OpenOffice.org is a spreadsheet then to access a particular sheet can be done by index access: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oSheet = thisComponent.getSheets.getByIndex(0)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
or named access: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oSheet = thisComponent.getSheets.getByName(&amp;quot;Sheet1&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
To check if an object with a particular name already exists use &amp;lt;tt&amp;gt;hasByName&amp;lt;/tt&amp;gt;, for example: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
if thisComponent.getSheets.hasByName(&amp;quot;Sheet1&amp;quot;) then&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
To loop through all the available object names can be done like: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
mNames = thisComponent.getSheets.getElementnames&lt;br /&gt;
for i = lbound(mNames) to ubound(mNames)&lt;br /&gt;
        msgbox mNames(i)&lt;br /&gt;
next&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Some named subordinate objects also provide the interface:  com.sun.star.container.XNameContainer. This interface defines that such objects should have the following methods: &amp;lt;tt&amp;gt;insertByName&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;replaceByname&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;removeByName&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
thisComponent.getSheets.insertByName(&amp;quot;NewSheet&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Create new objects=&lt;br /&gt;
Some objects have services which implement interfaces to provide specific methods for creating a particular type of object. &lt;br /&gt;
&lt;br /&gt;
For example if the current document is a Writer document then &amp;lt;tt&amp;gt;thisComponent.getText&amp;lt;/tt&amp;gt; is an object that provides the service com.sun.star.text.Text which implements the interface  com.sun.star.text.XSimpleText which defines the methods &amp;lt;tt&amp;gt;createTextCursor&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;createTextCursorByRange&amp;lt;/tt&amp;gt;. Both of these methods create a text cursor for accessing the text of the document. These cursors are quite independent of the view cursor . The view cursor is visible on the screen and is manipulated by the user (and can be manipulated by program control), where as a text cursor is not visible on the screen and is solely used by program control. The following code snippet demonstrates creating a new text cursor, such that it starts at the same location as the viewCursor and is then moved independent of the view cursor. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oVC = thisComponent.getCurrentController.getViewCursor&lt;br /&gt;
oCursor = oVC.getText.createTextCursorByRange(oVC)&lt;br /&gt;
oCursor.gotoStartOfSentence(false)&lt;br /&gt;
oCursor.gotoEndOfSentence(true)&lt;br /&gt;
msgbox oCursor.getString&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some objects are context dependent and get created using the method &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt; which is defined in the interface com.sun.star.lang.XMultiServiceFactory. For example to add a rectangle to the first page of a drawing document: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
dim aPoint as new com.sun.star.awt.Point&lt;br /&gt;
dim aSize as new com.sun.star.awt.Size&lt;br /&gt;
 &lt;br /&gt;
aPoint.x = 1000&lt;br /&gt;
aPoint.y = 1000&lt;br /&gt;
 &lt;br /&gt;
aSize.Width = 10000&lt;br /&gt;
aSize.Height = 10000&lt;br /&gt;
 &lt;br /&gt;
oRectangleShape = thisComponent.createInstance(&amp;quot;com.sun.star.drawing.RectangleShape&amp;quot;)&lt;br /&gt;
oRectangleShape.Size = aSize&lt;br /&gt;
oRectangleShape.Position = aPoint&lt;br /&gt;
 &lt;br /&gt;
thisComponent.getDrawPages.getByIndex(0).add(oRectangleShape)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example also uses UNO structs see below for more information on UNO stucts. &lt;br /&gt;
&lt;br /&gt;
Some objects are context independent to create these objects use the OpenOffice.org Basic command createUnoService. For example to create the equivalent to StarDesktop: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDesktop = createUnoService(&amp;quot;com.sun.star.frame.Desktop&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The process that I use to determine how to access or create an object is as follows: &lt;br /&gt;
&lt;br /&gt;
Does the object already exist if so I should be able to access it from something like &amp;lt;tt&amp;gt;thisComponent&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Will the new object belong to another object, if so does the owner have a specific method for creating the object, if so use it. &lt;br /&gt;
&lt;br /&gt;
The new object will belong to another object, but that object doesn&amp;#039;t provide a specific method for creating it, but does provide &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt;. If the object doesn&amp;#039;t provide &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt; are you sure you are using the correct object, or is it context independent. &lt;br /&gt;
&lt;br /&gt;
I have found working out how to create an object to be quite difficult with existing documentation so I hope that this document/wiki will eventually make this clear. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==UNO structs==&lt;br /&gt;
UNO structures can be declared using the OpenOffice.org Basic command &amp;lt;tt&amp;gt;dim&amp;lt;/tt&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
dim aPoint as new com.sun.star.awt.Point&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Or by using the OpenOffice.org Basic command &amp;lt;tt&amp;gt;createUnoStruct&amp;lt;/tt&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
aPoint = createUnoStruct(&amp;quot;com.sun.star.awt.Point&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|When declaring UNO structs case is important. Note that everything upto the name of the struct is lowercase, and that the name of the struct is in TitleCase.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Creating Listeners and Handlers==&lt;br /&gt;
Through the user interface it is possible to assign macros to some events: &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org versions 1.1.x: &amp;#039;&amp;#039;&amp;#039;Tools &amp;gt; Configure… &amp;gt; Events&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org versions 1.9.x and above: &amp;#039;&amp;#039;&amp;#039;Tools &amp;gt; Customize… &amp;gt; Events&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
It is also possible to assign macros to a wider range of events using the OpenOffice.org Basic command CreateUnoListener. This same command is used for creating both listeners and handlers. A listener checks for an event and always allows other listeners to respond to the event as well. A handler listens for an event, and can optionally consume the event so that other listeners don&amp;#039;t get to act on it. &lt;br /&gt;
&lt;br /&gt;
The following example creates a keyHandler: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
global IannzExampleKeyHandler&lt;br /&gt;
 &lt;br /&gt;
sub SetupKeyHandler&lt;br /&gt;
oController = thisComponent.currentController&lt;br /&gt;
IannzExampleKeyHandler = CreateUnoListener(&amp;quot;KeyHandler_&amp;quot;,&amp;quot;com.sun.star.awt.XKeyHandler&amp;quot;)&lt;br /&gt;
oController.addKeyHandler(IannzExampleKeyHandler) &amp;#039; Register the listener&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
sub RemoveKeyHandler&lt;br /&gt;
thisComponent.currentController.removeKeyHandler(IannzExampleKeyHandler)&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
sub KeyHandler_disposing&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function KeyHandler_keyReleased(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean&lt;br /&gt;
        KeyHandler_keyReleased = False    &lt;br /&gt;
end function&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function KeyHandler_keyPressed(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean&lt;br /&gt;
KeyHandler_keyPressed = false   &amp;#039;Let other listeners handle the event&lt;br /&gt;
if oKeyEvent.modifiers = com.sun.star.awt.KeyModifier.MOD2 then &amp;#039;Control key was pressed&lt;br /&gt;
        if oKeyEvent.keyCode = com.sun.star.awt.Key.Q then&lt;br /&gt;
                msgbox &amp;quot;Alt + Q was pressed&amp;quot;&lt;br /&gt;
                KeyHandler_keyPressed = true    &amp;#039;Don&amp;#039;t let other listeners process this event&lt;br /&gt;
        end if&lt;br /&gt;
end if&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
A variable declared as global keeps its value even after the macro exits. In this case we want to be able to use this variable later to remove the handler. As variables declared globally could be used in other libraries to try and avoid conflict I start all my global variables with Iannz my registered name for the OpenOffice.org web site. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;sub SetupKeyHandler&amp;lt;/tt&amp;gt; sets up the handler. The first parameter to CreateUnoListener is the staring name for the methods that will be called when that type of event occurs in this example .&amp;lt;tt&amp;gt;&amp;quot;KeyHandler_&amp;quot;&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The second parameter is the name of the interface for the listener or handler, &amp;quot;com.sun.star.awt.XKeyHandler&amp;quot;. The name is case sensitive, everything up to and including the module name is always lowercase, the name of the interface always starts with &amp;quot;X&amp;quot; and the remainder is in TitleCase. &lt;br /&gt;
&lt;br /&gt;
Use the SDK to find out what methods the interface must supply. You must supply routines for all of these methods even if you don&amp;#039;t intend to use them. You also need to supply a disposing method. The names of these routines start with the string given in the first parameter to CreateUnoListener , in this example &amp;lt;tt&amp;gt;&amp;quot;KeyHandler_&amp;quot;&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Thus in the example there is &amp;lt;tt&amp;gt;KeyHandler_disposing&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;KeyHandler_keyReleased&amp;lt;/tt&amp;gt; which don&amp;#039;t actually do anything but are required, and &amp;lt;tt&amp;gt;KeyHandler_keyPressed&amp;lt;/tt&amp;gt; which actually does the job. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;sub RemoveKeyHandler&amp;lt;/tt&amp;gt; demonstrates how to remove the handler.&lt;br /&gt;
&lt;br /&gt;
=OpenOffice.org constants=&lt;br /&gt;
The above example uses OpenOffice.org constants. &lt;br /&gt;
&lt;br /&gt;
E.g. com.sun.star.awt.KeyModifier.MOD2&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org constants are case sensitive. Everything up to and including the module name is always lowercase. The constant group is in TitleCase. The actual constant name is always UPPERCASE. &lt;br /&gt;
&lt;br /&gt;
Programmers not using OpenOffice.org Basic may not have access to these constants. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Using the recorder=&lt;br /&gt;
See [[ The OpenOffice.org recorder and UNO dispatch calls]] section for a discussion on recording UNO Dispatch commands versus writing API calls.&lt;br /&gt;
&lt;br /&gt;
= See also=&lt;br /&gt;
* [[Programming_OooWriter |Programming OOoWriter in C++]] where OOoBascic record are used in C++&lt;br /&gt;
* A [[XIntrospection_Interface|XIntrospection Interface]] short description. XRay uses this interface.&lt;br /&gt;
* Download Bernard Marcelly&amp;#039;s [http://www.ooomacros.org/dev.php#101416 XRay OOoBasic tool]  &lt;br /&gt;
&lt;br /&gt;
[[Category:Basic:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Extensions_development_basic_fr&amp;diff=18512</id>
		<title>Extensions development basic fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Extensions_development_basic_fr&amp;diff=18512"/>
		<updated>2006-10-13T12:51:47Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Desktop, documents, et current selection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Comment démarrer&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Cette page est un guide de démarrage qui vous permettra d&amp;#039;écrire des macros en OpenOffice.org Basic. Une connaisance préalable de la programmation est un pré-requis. Merci d&amp;#039;éditer cette page pour la rendre plus lisible. J&amp;#039;espère que vous la trouverez utile.&lt;br /&gt;
&lt;br /&gt;
Si vous maîtrisez les bases, alors vous pouvez consulter le [[CookBook]] qui donne des exemples et des (wrappers).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Où le code est-il enregistré ?=&lt;br /&gt;
Le code OpenOffice.org Basic est enregistré dans des modules eux-mêmes placés dans les bibliothèques. Une bibliothèque peut être : &lt;br /&gt;
&lt;br /&gt;
*Partagée (pour une installation en réseau - OOo Macros &amp;amp; Dialogues) &lt;br /&gt;
*Uniquement pour l&amp;#039;utilisateur courant (Mes Macros &amp;amp; Dialogues) &lt;br /&gt;
*Incorporée à un document ou à un modèle de telle manière que son code ne soit disponible que lorsque ce document est ouvert.&lt;br /&gt;
&lt;br /&gt;
Lorsque des bibliothèques ne sont stockées ni dans un document ni dans un modèle, c&amp;#039;est-à-dire lorsque les bibliothèques sont partagées ou pour l&amp;#039;utilisateur courant, on les appelle &amp;#039;&amp;#039;&amp;#039;Bibliothèques OpenOffice.org&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
Pour connaître les dossiers qui contiennent les bibliothèques OpenOffice.org voir :&amp;lt;br&amp;gt; &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Options… &amp;gt; OpenOffice.org &amp;gt; Chemins &amp;gt; BASIC&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Ne copiez pas ni ne déplacez les bibliothèques en utilisant les commandes du système d&amp;#039;exploitation. Préférez le gestionnaire de macros ou le gestionnaire de packages.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La taille autorisée pour les modules placés à l&amp;#039;intérieur des bibliothèques est limitée à 64 Ko. Une bilbiothèque peut contenir jusqu&amp;#039;à 16.000 modules. &lt;br /&gt;
&lt;br /&gt;
Pour plus d&amp;#039;information, reportez-vous à l&amp;#039;aide en ligne, rubrique : Modules et bibliothèques.&lt;br /&gt;
&lt;br /&gt;
=Accéder à l&amp;#039;IDE=&lt;br /&gt;
Pour accéder à l&amp;#039;IDE (environnement de développement intégré) pour la première fois : &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org 1.1.x: &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Macro… &amp;gt;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org 1.9.x et ultérieur : &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Gérer les macros &amp;gt; OpenOffice.org Basic… &amp;gt;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous allons utiliser le Module1 de la bibliothèque Standard, présente pour l&amp;#039;utilisateur courant uniquement : &lt;br /&gt;
&lt;br /&gt;
Entrons un nom pour notre nouvelle macro : &amp;#039;&amp;#039;&amp;#039;HelloWorld&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Dans la macro, sélectionnons &amp;#039;&amp;#039;&amp;#039;Standard&amp;#039;&amp;#039;&amp;#039; dans la boîte de liste.&lt;br /&gt;
&lt;br /&gt;
Cliquons &amp;#039;&amp;#039;&amp;#039;Nouveau&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant trouver quelque chose comme çà : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
REM  *****  BASIC  *****&lt;br /&gt;
 &lt;br /&gt;
Sub Main&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
 &lt;br /&gt;
Sub HelloWorld&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Le curseur est positionné au début de la ligne &amp;lt;tt&amp;gt;Sub HelloWorld&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Maintenant que l&amp;#039;IDE est actif, il peut être accédé depuis le menu Fenêtre d&amp;#039;OpenOffice.org ou par la barre des tâches du système d&amp;#039;exploitation.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Saisie de code=&lt;br /&gt;
Selectionnons et effaçons : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
REM  *****  BASIC  *****&lt;br /&gt;
 &lt;br /&gt;
Sub Main&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Au-dessous de la ligne &amp;quot;Sub HelloWorld&amp;quot; entrons &amp;lt;tt&amp;gt;msgbox &amp;quot;Hello World!&amp;quot;&amp;lt;/tt&amp;gt;, de manière que l&amp;#039;éditeur ressemble à ceci : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
Sub HelloWorld&lt;br /&gt;
  msgbox &amp;quot;Hello World!&amp;quot;&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Notes:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|L&amp;#039;IDE ne fournit aucune fonctionnalité de code completion ni d&amp;#039;aide sur la syntaxe des commandes lors de la frappe. Pour obtenir de l&amp;#039;aide sur une commande Basic, plaçons le curseur dans la commande et tapons F1.&amp;lt;br&amp;gt; Les commande OpenOffice.org Basic ne sont pas sensibles à la casse. C&amp;#039;est pourquoi msgbox, MSGBOX et Msgbox sont équivalents.&amp;lt;br&amp;gt; Les chaînes sont entourées de guillements doubles.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Exécution du code=&lt;br /&gt;
Le code Basic peut être exécuté de plusieurs façons : &lt;br /&gt;
&lt;br /&gt;
Directement dans l&amp;#039;IDE. La barre des macro comprte un bouton Exécter (par défaut, le troisième de la seconde barre d&amp;#039;outils). Ce bouton lance la première macro du module en cours. &lt;br /&gt;
&lt;br /&gt;
Depuis le menu Outils :&lt;br /&gt;
&lt;br /&gt;
(Version 1.1.x) &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Macro…&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
(Version 1.9.x et supérieures) &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Exécuter la macro…&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à une [[ touche]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à une [[ entrée de menu]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à un bouton de barre d&amp;#039;outil. &lt;br /&gt;
&lt;br /&gt;
En créant un [[ contrôle dans un document]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à un évènement. &lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;instant essayons de lancer la procédure &amp;quot;HelloWorld&amp;quot; en cliquant le bouton &amp;#039;&amp;#039;&amp;#039;Exécuter&amp;#039;&amp;#039;&amp;#039;. Un dialogue intitulé &amp;quot;soffice&amp;quot; et comportant le texte &amp;quot;Hello World!&amp;quot; ainsi qu&amp;#039;un bouton OK doit s&amp;#039;afficher.&lt;br /&gt;
&lt;br /&gt;
=Enregistrement du code=&lt;br /&gt;
Le code est enregistré automatiquement chaque fois que son conteneur est lui-même enregistré. Par conséquent, si le code se trouve dans une bibliothèque OpenOffice (partagée ou de l&amp;#039;utilisateur), il est automatiquement enregistré lorsque OpenOffice est refermé. Si le code se trouve dans une bilbiothèque qui fait partie d&amp;#039;un document, alors il est enregistré lorsque le document l&amp;#039;est. &lt;br /&gt;
&lt;br /&gt;
Un bouton Enregistrer figure sur la barre d&amp;#039;outils Standard (celle du haut par défaut). Si le code se trouve à l&amp;#039;intérieur d&amp;#039;un document ou modèle, alors la totalité du document est enregistrée. Si le code se trouve à l&amp;#039;intérieur d&amp;#039;une bibliothèque OpenOffice.org alors seule la bilbiothèque courante est enregistrée.&lt;br /&gt;
&lt;br /&gt;
=Les variables=&lt;br /&gt;
Nous pouvons forcer la déclaration des variables en insérant &amp;lt;tt&amp;gt;Option Explicit&amp;lt;/tt&amp;gt; au début du module. Pour consulter une discussion consacrée à la déclaration ou non des variables, voir : [[http://www.oooforum.org/forum/viewtopic.phtml?t=5845 cette discussion]]. &lt;br /&gt;
&lt;br /&gt;
Dans cette discussion, on voit que l&amp;#039;auteur de [NdT : la version anglaise de] cette page défendait initialement la déclaration systématique des variables. Depuis lors il a changé d&amp;#039;avis et ne les déclare plus du tout. Bref, c&amp;#039;est une question de préférence personnelle. Dans un cas comme dans l&amp;#039;autre, les préférences de l&amp;#039;auteur vont au nommage des variables selon la convention suivante, qui sera utilisée tout au long des exemples de ce wiki :&lt;br /&gt;
&lt;br /&gt;
La première lettre du nom de la variable indique le type de valeur contenue, telle que présentée à la table ci-dessous (basée sur un tableau dans Tutorial.pdf de Sun) &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Lettre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Signification&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|a&lt;br /&gt;
|Structure&lt;br /&gt;
|-&lt;br /&gt;
|b&lt;br /&gt;
|Boolean (TRUE ou FALSE)&lt;br /&gt;
|-&lt;br /&gt;
|e&lt;br /&gt;
|Enumeration. Cette variable ne peut prendre qu&amp;#039;une valeur parmi un ensemble limité de valeurs.&lt;br /&gt;
|-&lt;br /&gt;
|f&lt;br /&gt;
|Float (de 3.402823 x 1038 à 1.401298 x 10-45. Une variable de type float [NdT : single] peut occuper jusqu&amp;#039;à quatre octets)&amp;lt;br&amp;gt; Double (de 1.79769313486232 x 10308 à 4.94065645841247 x 10-324. Une variable de ce type peut occuper jusqu&amp;#039;à huit octets)&amp;lt;br&amp;gt; Currency (de -922337203685477.5808 à +922337203685477.5807 et occupe jusqu&amp;#039;à huit octets en mémoire)&lt;br /&gt;
|-&lt;br /&gt;
|m&lt;br /&gt;
|Array (aka sequence aka matrice)&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|Integer (de -32768 à 32767.) ou&amp;lt;br&amp;gt; Long (de -2147483648 à 2147483647).&lt;br /&gt;
|-&lt;br /&gt;
|o&lt;br /&gt;
|Object, service ou interface&lt;br /&gt;
|-&lt;br /&gt;
|s&lt;br /&gt;
|String (Une variable string peut mémoriser jusqu&amp;#039;à 65535 caractères Unicode).&lt;br /&gt;
|-&lt;br /&gt;
|x&lt;br /&gt;
|Interface, montre que seules les opérations portant sur une interface particulière d&amp;#039;un objet sont utilisées&lt;br /&gt;
|-&lt;br /&gt;
|v&lt;br /&gt;
|Variant, N&amp;#039;importe quel valeur&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Utilisons des noms descriptifs suffisamment longs et employons le style &amp;quot;Camel case&amp;quot; [NdT : usage conjoint des majuscules et des minuscules pour faire ressortir les éléments du nom]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Les variables définies par l&amp;#039;utilisateur en OpenOffice.org Basic ne sont pas sensibles à la casse. Les constantes UNO-API le sont.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les variables indexant les boucles constituent une exception conventionnelle aux longs noms descriptifs. Des symboles tels que i, j et k sont en effet d&amp;#039;usage fréquent. De même, lorsqu&amp;#039;une chaîne est construite, on utilise fréquemment s comme variable temporaire. &lt;br /&gt;
&lt;br /&gt;
Editons la routine sub HelloWorld de manière qu&amp;#039;elle ressemble à ceci et exécutons-la : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub HelloWorld&lt;br /&gt;
dim i as integer &amp;#039;ligne optionnelle&lt;br /&gt;
  for i = 0 to 2&lt;br /&gt;
    &amp;#039;Ces lignes sont indentées par souci de lisiblité uniquement&lt;br /&gt;
    &amp;#039;Notre code devrait toujours être structuré ainsi pour lui donner des chances de survie&lt;br /&gt;
    msgbox &amp;quot;Hello World &amp;quot; &amp;amp; i&lt;br /&gt;
  next i&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Pour plus d&amp;#039;informations sur les variables, reportons-nous à l&amp;#039;aide en ligne, rubrique &amp;quot;utilisation des variables&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=L&amp;#039;API OpenOffice.org=&lt;br /&gt;
Cette section commence par un exemple. La suite donne des informations complémentaires qui nous permettront de comprendre l&amp;#039;exemple et à l&amp;#039;étendre.&lt;br /&gt;
&lt;br /&gt;
Essayons d&amp;#039;exécuter le code ci-dessous lorsque différents types de documents sont ouverts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
&amp;#039;basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
&amp;#039;xray.xray thisComponent&lt;br /&gt;
msgbox fnWhichComponent(thisComponent)&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function fnWhichComponent(oDoc) as string&lt;br /&gt;
if HasUnoInterfaces(oDoc, &amp;quot;com.sun.star.lang.XServiceInfo&amp;quot;) then &lt;br /&gt;
   if thisComponent.supportsService (&amp;quot;com.sun.star.text.GenericTextDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Texte&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.sheet.SpreadsheetDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Feuille de calcul&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.presentation.PresentationDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Presentation&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.drawing.GenericDrawingDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Dessin&amp;quot;&lt;br /&gt;
   else&lt;br /&gt;
      fnWhichComponent = &amp;quot;Oops le document ouvert est autre chose&amp;quot;&lt;br /&gt;
   end if&lt;br /&gt;
else&lt;br /&gt;
   fnWhichComponent = &amp;quot;Ce n&amp;#039;est pas un document&amp;quot;&lt;br /&gt;
end if&lt;br /&gt;
End function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Convention de nommage des routines==&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, le nom de la fonction utilisateur commence par &amp;quot;fn&amp;quot;. Il s&amp;#039;agit de la convention adoptée par l&amp;#039;auteur initial [NdT : version anglaise] qui permet au lecteur de savoir qu&amp;#039;il s&amp;#039;agit d&amp;#039;une fonction définie par l&amp;#039;utilisateur. Dans le même esprit, l&amp;#039;auteur initial utilise la convention de débuter les noms des procédures par &amp;quot;sub&amp;quot;. Lorsque l&amp;#039;on apprend un nouveau langage et de nouvelles API, il peut s&amp;#039;avérer difficile de reconnaître ce qui ressortit du langage lui-même de ce qui a été défini ailleurs dans notre code. Ce document/wiki emploie ces conventions pour le nommage des fonctions et des procédures.&lt;br /&gt;
&lt;br /&gt;
==Présentation de l&amp;#039;API OpenOffice.org==&lt;br /&gt;
Cette section introduit les termes : &lt;br /&gt;
&lt;br /&gt;
* Interface &lt;br /&gt;
* Module &lt;br /&gt;
* Service &lt;br /&gt;
* Méthode &lt;br /&gt;
* Propriété &lt;br /&gt;
&lt;br /&gt;
S&amp;#039;il n&amp;#039;est pas essentiel de comprendre la différence entre une interface et un service ou ce qu&amp;#039;est un module pour pouvoir écrire des extensions à OpenOffice.org, la compréhension de ces termes aide à correctement interpréter la documentation ainsi qu&amp;#039;à l&amp;#039;introspection des éléments manipulés. Peut-être nous faudra-t-il relire cette section plusieurs fois. &lt;br /&gt;
&lt;br /&gt;
Une &amp;#039;&amp;#039;&amp;#039;interface&amp;#039;&amp;#039;&amp;#039; est la &amp;#039;&amp;#039;définition&amp;#039;&amp;#039; d&amp;#039;un ensemble de méthodes (avec leurs arguments) qu&amp;#039;un service implémentant cette interface doit comporter. &lt;br /&gt;
&lt;br /&gt;
Les interfaces sont regroupées en &amp;#039;&amp;#039;&amp;#039;modules&amp;#039;&amp;#039;&amp;#039; pour des besoins de nommage. Toutes les interfaces (et les services) commencent par le nom &amp;quot;com.sun.star&amp;quot; puis vient le nom du module puis celui de l&amp;#039;interface (ou du service). &lt;br /&gt;
&lt;br /&gt;
Par exemple, la plupart des services fournissent l&amp;#039;interface &amp;lt;tt&amp;gt;com.sun.star.beans.XPropertySet&amp;lt;/tt&amp;gt;. Cette interface est enregistrée dans le module &amp;quot;beans&amp;quot; et fournit l&amp;#039;accès aux propriétés d&amp;#039;un service. Une &amp;#039;&amp;#039;&amp;#039;propriété&amp;#039;&amp;#039;&amp;#039; est une valeur tandis qu&amp;#039;une &amp;#039;&amp;#039;&amp;#039;méthode&amp;#039;&amp;#039;&amp;#039; défiti une action. &lt;br /&gt;
&lt;br /&gt;
Un objet OpenOffice.org peut supporter de nombreux services. &lt;br /&gt;
&lt;br /&gt;
Un objet OpenOffice.org peut supporter un service qui implémente une interface dans laquell une description de méthode déclare qu&amp;#039;un autre objet OpenOffice.org est retourné.&lt;br /&gt;
&lt;br /&gt;
==Introspection==&lt;br /&gt;
HasUnoInterfaces is an OpenOffice.org Basic function for introspection. See this [[http://www.oooforum.org/forum/viewtopic.phtml?t=7068 link]] for information on introspection in other languages. &lt;br /&gt;
&lt;br /&gt;
HasUnoInterfaces returns true if all of the specified interfaces are available for the specified object. &lt;br /&gt;
&lt;br /&gt;
Most OpenOffice.org objects provide the method supportsService because they have the interface com.sun.star.lang.XServiceInfo. &lt;br /&gt;
&lt;br /&gt;
In the above example, the OpenOffice.org Basic command, &amp;#039;&amp;#039;&amp;#039;HasUnoInterfaces&amp;#039;&amp;#039;&amp;#039; checks that the current document has the interface com.sun.star.lang.XServiceInfo, because if it doesn&amp;#039;t have that interface then it doesn&amp;#039;t have the method supportsService, and a run time error would occur if such an object tried to access its nonexistent method. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;SupportsService&amp;#039;&amp;#039;&amp;#039; is a method which returns true if the specified service is available. The above examples checks for a service to determine the type of document that is currently active.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==L&amp;#039;Outil X-Ray==&lt;br /&gt;
L&amp;#039;utilisation de &amp;quot;HasUnoInterfaces&amp;quot; et de &amp;quot;supportsService&amp;quot; permet d&amp;#039;obtenir des informations sur un objet donné lors de son exécution, mais procéder ainsi pour apprendre le langage Basic deviendrait vite fastidieux. Heureusement, et grâce à Bernard Marcelly, nous disposons de l&amp;#039;outil X-Ray. Cet outil est disponible ici: [[http://ooomacros.org/dev.php#101416 ooomacros]]. Téléchargez le fichier zip, dézippez l&amp;#039;archive, ouvrez le document dans OpenOffice.org, et suivez les instructions pour son installation et configuration. &lt;br /&gt;
&lt;br /&gt;
Une partie de la configuration de l&amp;#039;outil X-Ray concerne la définition de l&amp;#039;endroit où est stockée une copie locale (sur le disque dur) du Kit de Développement OpenOffice.org (appélé SDK). Téléchargez le Kit de Développement OpenOffice.org depuis [[ftp://mirrors.dotsrc.org/openoffice/stable/2.0.4_sdk/]] et installez le sur votre disque dur. &lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, au début du code, il y a deux lignes mises en commentaires (les lignes de commentaires commencent toujours avec des apostrophes): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
&amp;#039;basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
&amp;#039;xray.xray thisComponent&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Une fois l&amp;#039;outil X-Ray installé, supprimez les apostrophes dans les lignes indiquées ci-dessus et relancez la macro. A partir de la version 5, la commande à utiliser dans votre code est tout simplement &amp;quot;xray&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;BasicLibraries&amp;#039;&amp;#039;&amp;#039; est une commande OpenOffice.org Basic qui renvoie un objet permettant d&amp;#039;accéder aux bibliothèques OpenOffice.org. La méthode &amp;lt;tt&amp;gt;loadLibrary&amp;lt;/tt&amp;gt; rend disponible aux utilisateurs les routines présentes dans cette bibliothèque. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;xray.xray&amp;lt;/tt&amp;gt; indique la bibliothèque xray et la sous-routine xray contenue dans celle-ci, l&amp;#039;objet thisComponent étant l&amp;#039;objet transmis à xray pour l&amp;#039;introspection. &lt;br /&gt;
&lt;br /&gt;
Afin de trouver l&amp;#039;objet que vous cherchez, il est souvent nécessaire de le découvrir ou de le créer depuis StarDesktop ou thisComponent.&lt;br /&gt;
&lt;br /&gt;
==Desktop, documents, and current selection==&lt;br /&gt;
StarDesktop et ThisComponent sont des commandes OpenOffice.org Basic qui ont trait à l&amp;#039;application et le document actif (c&amp;#039;est-à-dire, celui qui a le focus actuellement sur le bureau) respectivement. &lt;br /&gt;
&lt;br /&gt;
Contrairement à Microsoft Office, l&amp;#039;application OpenOffice.org est monolithique et comporte différents composants. Lorsqu&amp;#039;on exécute du code, il peut être utile de vérifier quel composant est actuellement en cours d&amp;#039;activation. Le code ci-dessus donne un exemple de la manière de procéder à cette vérification. &lt;br /&gt;
&lt;br /&gt;
Quand il est fait référence au Desktop dans StarDesktop, celui-ci se réfère à une existence virtuelle (puisqu&amp;#039;auparavant il existait réellement dans OpenOffice.org et dans StarOffice). On peut ainsi le considérer comme étant l&amp;#039;application OpenOffice.org elle-même.&lt;br /&gt;
&lt;br /&gt;
==Creating new documents==&lt;br /&gt;
To create a new text document: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/swriter&amp;quot;, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
To create a new spreadsheet document: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/scalc&amp;quot;, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
An easier approach would be to write a simple function: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
function fnNewDoc(sDocType as string)&lt;br /&gt;
fnNewDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/&amp;quot; &amp;amp; sDocType , &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Then creating new documents can be achieved with: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;swriter&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;scalc&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;simpress&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;sdraw&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;smath&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
See http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XComponentLoader.html .&lt;br /&gt;
&lt;br /&gt;
==To open a document==&lt;br /&gt;
The following example shows how to open a file. For information on URLs in OpenOffice.org see [[ URL Basics]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sFile = &amp;quot;C:\Documents and Settings\danny\Desktop\MyCalc.sxc&amp;quot; &amp;#039; Windows&lt;br /&gt;
sFile = &amp;quot;/home/danny/Desktop/MyCalc.sxc&amp;quot; &amp;#039; Linux&lt;br /&gt;
sURL = ConvertToURL(sFile)&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(sURL, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Again it may make sense to make this easier by writing a simple function: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
function fnOpenDoc(sFile)&lt;br /&gt;
sURL = ConvertToURL(sFile)&lt;br /&gt;
fnOpenDoc = StarDesktop.loadComponentFromURL(sURL, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Examples of calling the function: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = fnOpenDoc(&amp;quot;C:\Documents and Settings\danny\Desktop\MyCalc.sxc&amp;quot;) &amp;#039; Windows&lt;br /&gt;
oDoc = fnOpenDoc(&amp;quot;/home/danny/Desktop/MyCalc.sxc&amp;quot;) &amp;#039; Linux&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Current Selection==&lt;br /&gt;
It is common to want to run some code that effects the current selection. &amp;lt;tt&amp;gt;ThisComponent&amp;lt;/tt&amp;gt; has the method &amp;lt;tt&amp;gt;getCurrentSelection&amp;lt;/tt&amp;gt;. Since many different types of objects could possibly be selected it is common to check that the currently selected object has the service that contains the method that we want to apply to the object. &lt;br /&gt;
&lt;br /&gt;
Edit the main subroutine to the following and rerun it on a text document with different selections. (To select more than one block of text hold down the control key). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
if fnWhichComponent(thisComponent) = &amp;quot;Text&amp;quot; then&lt;br /&gt;
        oCurSelection = thisComponent.getCurrentSelection()&lt;br /&gt;
        &amp;#039;xray.xray oCurSelection&lt;br /&gt;
        if oCurSelection.supportsService(&amp;quot;com.sun.star.text.TextRanges&amp;quot;) then&lt;br /&gt;
                msgbox &amp;quot;There are &amp;quot; &amp;amp; oCurSelection.getCount() &amp;amp; _&lt;br /&gt;
                 &amp;quot; selections in the current text document.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
end if&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
With nothing selected the number of selections is one - the insertion point, with one block of text selected the count is still one, but with two blocks of text the count is three - the insertion point and the two blocks of selected text. &lt;br /&gt;
&lt;br /&gt;
Exercise 1: Modify the above code so that it works on selected cell ranges in a spreadsheet. &lt;br /&gt;
&lt;br /&gt;
Question1: For two blocks of cells selected, what would be the count for the number of selections? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
Uncomment &amp;lt;tt&amp;gt;&amp;#039;xray.xray oCurSelection&amp;lt;/tt&amp;gt; so that xray runs, to see that the object that &amp;lt;tt&amp;gt;oCurSelection&amp;lt;/tt&amp;gt; points to has a &amp;quot;property&amp;quot; called &amp;lt;tt&amp;gt;Count&amp;lt;/tt&amp;gt; with a description of &amp;quot;pseudo-prop, read only&amp;quot;. It is possible in OpenOffice.org Basic to write &amp;lt;tt&amp;gt;oCurSelection.count&amp;lt;/tt&amp;gt;, but as this is not possible in all other languages accessing the OpenOffice.org API, this Wiki will try to always use the method approach. (I say try because I have not been in the habit of doing this and sometimes I may forget). &lt;br /&gt;
&lt;br /&gt;
This next example demonstrates changing a property value for the current selections. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
if fnWhichComponent(thisComponent) = &amp;quot;Text&amp;quot; then&lt;br /&gt;
   oCurSelection = thisComponent.getCurrentSelection()&lt;br /&gt;
   if oCurSelection.supportsService(&amp;quot;com.sun.star.text.TextRanges&amp;quot;) then&lt;br /&gt;
      nCount = oCurSelection.Count&lt;br /&gt;
      &amp;#039;xray.xray oCurSelection.getByIndex(0)&lt;br /&gt;
      &amp;#039;Warning: The insertion point will have the same action applied twice&lt;br /&gt;
      &amp;#039;in this case it doesn&amp;#039;t matter, but in others it might.&lt;br /&gt;
      for i = 0 to nCount - 1&lt;br /&gt;
         oCurSelection.getByIndex(i).setPropertyValue(&amp;quot;CharStyleName&amp;quot;, &amp;quot;Strong Emphasis&amp;quot;)&lt;br /&gt;
      next&lt;br /&gt;
   end if&lt;br /&gt;
end if&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
In OpenOffice.org Basic it is possible to shorten the assignment line to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oCurSelection(i).CharStyleName = &amp;quot;Strong Emphasis&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
This wiki will try to use the full methods for both indexing and assigning properties. The rationale is that this makes converting the code to other languages easier and also helps the learner to understand what is happening (again I have not been in the habit of doing this so some examples may slip past me). &lt;br /&gt;
&lt;br /&gt;
Exercise 2: Rewrite the above code so that the warning can be removed. &lt;br /&gt;
&lt;br /&gt;
See [[ Current selection]].&lt;br /&gt;
&lt;br /&gt;
=Iterative Access to Subordinate Objects (Enumeration access)=&lt;br /&gt;
Sometimes to access the desired object an enumeration is required. For example paragraphs, within a document or within a selection. &lt;br /&gt;
&lt;br /&gt;
When a Writer document is active and some text is selected, both &amp;lt;tt&amp;gt;thisDocument.getText()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;thisComponent.getCurrentSelection().getByIndex(i)&amp;lt;/tt&amp;gt; have the service: com.sun.star.text.TextRange which has the interface: com.sun.star.container.XContentEnumerationAccess, it is possible to create an enumeration of the paragraphs for the current document or for a particular selection. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
&amp;#039; Create enumeration object&lt;br /&gt;
oTextElementEnum = thisComponent.getText().createEnumeration()&lt;br /&gt;
&amp;#039;or thisComponent.getCurrentSelection().getByIndex(i).createEnumeration()&lt;br /&gt;
 &lt;br /&gt;
&amp;#039; loop over all text elements&lt;br /&gt;
while oTextElementEnum.hasMoreElements()&lt;br /&gt;
        oTextElement = oTextElementEnum.nextElement&lt;br /&gt;
        if oTextElement.supportsService(&amp;quot;com.sun.star.text.TextTable&amp;quot;) then&lt;br /&gt;
                MsgBox &amp;quot;The current block contains a table.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
        if oTextElement.supportsService(&amp;quot;com.sun.star.text.Paragraph&amp;quot;) then&lt;br /&gt;
                MsgBox &amp;quot;The current block contains a paragraph.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
wend&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Exercise 3: Extend the above example to display in a message box all text portions that are bold. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Named access=&lt;br /&gt;
Some objects provide named access to a particular type of subordinate object, some others indexed access, and some both named and indexed access. &lt;br /&gt;
&lt;br /&gt;
For example if the current document in OpenOffice.org is a spreadsheet then to access a particular sheet can be done by index access: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oSheet = thisComponent.getSheets.getByIndex(0)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
or named access: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oSheet = thisComponent.getSheets.getByName(&amp;quot;Sheet1&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
To check if an object with a particular name already exists use &amp;lt;tt&amp;gt;hasByName&amp;lt;/tt&amp;gt;, for example: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
if thisComponent.getSheets.hasByName(&amp;quot;Sheet1&amp;quot;) then&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
To loop through all the available object names can be done like: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
mNames = thisComponent.getSheets.getElementnames&lt;br /&gt;
for i = lbound(mNames) to ubound(mNames)&lt;br /&gt;
        msgbox mNames(i)&lt;br /&gt;
next&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Some named subordinate objects also provide the interface:  com.sun.star.container.XNameContainer. This interface defines that such objects should have the following methods: &amp;lt;tt&amp;gt;insertByName&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;replaceByname&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;removeByName&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
thisComponent.getSheets.insertByName(&amp;quot;NewSheet&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Create new objects=&lt;br /&gt;
Some objects have services which implement interfaces to provide specific methods for creating a particular type of object. &lt;br /&gt;
&lt;br /&gt;
For example if the current document is a Writer document then &amp;lt;tt&amp;gt;thisComponent.getText&amp;lt;/tt&amp;gt; is an object that provides the service com.sun.star.text.Text which implements the interface  com.sun.star.text.XSimpleText which defines the methods &amp;lt;tt&amp;gt;createTextCursor&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;createTextCursorByRange&amp;lt;/tt&amp;gt;. Both of these methods create a text cursor for accessing the text of the document. These cursors are quite independent of the view cursor . The view cursor is visible on the screen and is manipulated by the user (and can be manipulated by program control), where as a text cursor is not visible on the screen and is solely used by program control. The following code snippet demonstrates creating a new text cursor, such that it starts at the same location as the viewCursor and is then moved independent of the view cursor. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oVC = thisComponent.getCurrentController.getViewCursor&lt;br /&gt;
oCursor = oVC.getText.createTextCursorByRange(oVC)&lt;br /&gt;
oCursor.gotoStartOfSentence(false)&lt;br /&gt;
oCursor.gotoEndOfSentence(true)&lt;br /&gt;
msgbox oCursor.getString&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some objects are context dependent and get created using the method &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt; which is defined in the interface com.sun.star.lang.XMultiServiceFactory. For example to add a rectangle to the first page of a drawing document: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
dim aPoint as new com.sun.star.awt.Point&lt;br /&gt;
dim aSize as new com.sun.star.awt.Size&lt;br /&gt;
 &lt;br /&gt;
aPoint.x = 1000&lt;br /&gt;
aPoint.y = 1000&lt;br /&gt;
 &lt;br /&gt;
aSize.Width = 10000&lt;br /&gt;
aSize.Height = 10000&lt;br /&gt;
 &lt;br /&gt;
oRectangleShape = thisComponent.createInstance(&amp;quot;com.sun.star.drawing.RectangleShape&amp;quot;)&lt;br /&gt;
oRectangleShape.Size = aSize&lt;br /&gt;
oRectangleShape.Position = aPoint&lt;br /&gt;
 &lt;br /&gt;
thisComponent.getDrawPages.getByIndex(0).add(oRectangleShape)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example also uses UNO structs see below for more information on UNO stucts. &lt;br /&gt;
&lt;br /&gt;
Some objects are context independent to create these objects use the OpenOffice.org Basic command createUnoService. For example to create the equivalent to StarDesktop: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDesktop = createUnoService(&amp;quot;com.sun.star.frame.Desktop&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The process that I use to determine how to access or create an object is as follows: &lt;br /&gt;
&lt;br /&gt;
Does the object already exist if so I should be able to access it from something like &amp;lt;tt&amp;gt;thisComponent&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Will the new object belong to another object, if so does the owner have a specific method for creating the object, if so use it. &lt;br /&gt;
&lt;br /&gt;
The new object will belong to another object, but that object doesn&amp;#039;t provide a specific method for creating it, but does provide &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt;. If the object doesn&amp;#039;t provide &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt; are you sure you are using the correct object, or is it context independent. &lt;br /&gt;
&lt;br /&gt;
I have found working out how to create an object to be quite difficult with existing documentation so I hope that this document/wiki will eventually make this clear. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==UNO structs==&lt;br /&gt;
UNO structures can be declared using the OpenOffice.org Basic command &amp;lt;tt&amp;gt;dim&amp;lt;/tt&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
dim aPoint as new com.sun.star.awt.Point&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Or by using the OpenOffice.org Basic command &amp;lt;tt&amp;gt;createUnoStruct&amp;lt;/tt&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
aPoint = createUnoStruct(&amp;quot;com.sun.star.awt.Point&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|When declaring UNO structs case is important. Note that everything upto the name of the struct is lowercase, and that the name of the struct is in TitleCase.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Creating Listeners and Handlers==&lt;br /&gt;
Through the user interface it is possible to assign macros to some events: &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org versions 1.1.x: &amp;#039;&amp;#039;&amp;#039;Tools &amp;gt; Configure… &amp;gt; Events&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org versions 1.9.x and above: &amp;#039;&amp;#039;&amp;#039;Tools &amp;gt; Customize… &amp;gt; Events&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
It is also possible to assign macros to a wider range of events using the OpenOffice.org Basic command CreateUnoListener. This same command is used for creating both listeners and handlers. A listener checks for an event and always allows other listeners to respond to the event as well. A handler listens for an event, and can optionally consume the event so that other listeners don&amp;#039;t get to act on it. &lt;br /&gt;
&lt;br /&gt;
The following example creates a keyHandler: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
global IannzExampleKeyHandler&lt;br /&gt;
 &lt;br /&gt;
sub SetupKeyHandler&lt;br /&gt;
oController = thisComponent.currentController&lt;br /&gt;
IannzExampleKeyHandler = CreateUnoListener(&amp;quot;KeyHandler_&amp;quot;,&amp;quot;com.sun.star.awt.XKeyHandler&amp;quot;)&lt;br /&gt;
oController.addKeyHandler(IannzExampleKeyHandler) &amp;#039; Register the listener&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
sub RemoveKeyHandler&lt;br /&gt;
thisComponent.currentController.removeKeyHandler(IannzExampleKeyHandler)&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
sub KeyHandler_disposing&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function KeyHandler_keyReleased(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean&lt;br /&gt;
        KeyHandler_keyReleased = False    &lt;br /&gt;
end function&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function KeyHandler_keyPressed(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean&lt;br /&gt;
KeyHandler_keyPressed = false   &amp;#039;Let other listeners handle the event&lt;br /&gt;
if oKeyEvent.modifiers = com.sun.star.awt.KeyModifier.MOD2 then &amp;#039;Control key was pressed&lt;br /&gt;
        if oKeyEvent.keyCode = com.sun.star.awt.Key.Q then&lt;br /&gt;
                msgbox &amp;quot;Alt + Q was pressed&amp;quot;&lt;br /&gt;
                KeyHandler_keyPressed = true    &amp;#039;Don&amp;#039;t let other listeners process this event&lt;br /&gt;
        end if&lt;br /&gt;
end if&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
A variable declared as global keeps its value even after the macro exits. In this case we want to be able to use this variable later to remove the handler. As variables declared globally could be used in other libraries to try and avoid conflict I start all my global variables with Iannz my registered name for the OpenOffice.org web site. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;sub SetupKeyHandler&amp;lt;/tt&amp;gt; sets up the handler. The first parameter to CreateUnoListener is the staring name for the methods that will be called when that type of event occurs in this example .&amp;lt;tt&amp;gt;&amp;quot;KeyHandler_&amp;quot;&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The second parameter is the name of the interface for the listener or handler, &amp;quot;com.sun.star.awt.XKeyHandler&amp;quot;. The name is case sensitive, everything up to and including the module name is always lowercase, the name of the interface always starts with &amp;quot;X&amp;quot; and the remainder is in TitleCase. &lt;br /&gt;
&lt;br /&gt;
Use the SDK to find out what methods the interface must supply. You must supply routines for all of these methods even if you don&amp;#039;t intend to use them. You also need to supply a disposing method. The names of these routines start with the string given in the first parameter to CreateUnoListener , in this example &amp;lt;tt&amp;gt;&amp;quot;KeyHandler_&amp;quot;&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Thus in the example there is &amp;lt;tt&amp;gt;KeyHandler_disposing&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;KeyHandler_keyReleased&amp;lt;/tt&amp;gt; which don&amp;#039;t actually do anything but are required, and &amp;lt;tt&amp;gt;KeyHandler_keyPressed&amp;lt;/tt&amp;gt; which actually does the job. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;sub RemoveKeyHandler&amp;lt;/tt&amp;gt; demonstrates how to remove the handler.&lt;br /&gt;
&lt;br /&gt;
=OpenOffice.org constants=&lt;br /&gt;
The above example uses OpenOffice.org constants. &lt;br /&gt;
&lt;br /&gt;
E.g. com.sun.star.awt.KeyModifier.MOD2&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org constants are case sensitive. Everything up to and including the module name is always lowercase. The constant group is in TitleCase. The actual constant name is always UPPERCASE. &lt;br /&gt;
&lt;br /&gt;
Programmers not using OpenOffice.org Basic may not have access to these constants. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Using the recorder=&lt;br /&gt;
See [[ The OpenOffice.org recorder and UNO dispatch calls]] section for a discussion on recording UNO Dispatch commands versus writing API calls.&lt;br /&gt;
&lt;br /&gt;
= See also=&lt;br /&gt;
* [[Programming_OooWriter |Programming OOoWriter in C++]] where OOoBascic record are used in C++&lt;br /&gt;
* A [[XIntrospection_Interface|XIntrospection Interface]] short description. XRay uses this interface.&lt;br /&gt;
* Download Bernard Marcelly&amp;#039;s [http://www.ooomacros.org/dev.php#101416 XRay OOoBasic tool]  &lt;br /&gt;
&lt;br /&gt;
[[Category:Basic:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Extensions_development_basic_fr&amp;diff=18511</id>
		<title>Extensions development basic fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Extensions_development_basic_fr&amp;diff=18511"/>
		<updated>2006-10-13T12:41:46Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* L&amp;#039;Outil X-Ray */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Comment démarrer&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Cette page est un guide de démarrage qui vous permettra d&amp;#039;écrire des macros en OpenOffice.org Basic. Une connaisance préalable de la programmation est un pré-requis. Merci d&amp;#039;éditer cette page pour la rendre plus lisible. J&amp;#039;espère que vous la trouverez utile.&lt;br /&gt;
&lt;br /&gt;
Si vous maîtrisez les bases, alors vous pouvez consulter le [[CookBook]] qui donne des exemples et des (wrappers).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Où le code est-il enregistré ?=&lt;br /&gt;
Le code OpenOffice.org Basic est enregistré dans des modules eux-mêmes placés dans les bibliothèques. Une bibliothèque peut être : &lt;br /&gt;
&lt;br /&gt;
*Partagée (pour une installation en réseau - OOo Macros &amp;amp; Dialogues) &lt;br /&gt;
*Uniquement pour l&amp;#039;utilisateur courant (Mes Macros &amp;amp; Dialogues) &lt;br /&gt;
*Incorporée à un document ou à un modèle de telle manière que son code ne soit disponible que lorsque ce document est ouvert.&lt;br /&gt;
&lt;br /&gt;
Lorsque des bibliothèques ne sont stockées ni dans un document ni dans un modèle, c&amp;#039;est-à-dire lorsque les bibliothèques sont partagées ou pour l&amp;#039;utilisateur courant, on les appelle &amp;#039;&amp;#039;&amp;#039;Bibliothèques OpenOffice.org&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
Pour connaître les dossiers qui contiennent les bibliothèques OpenOffice.org voir :&amp;lt;br&amp;gt; &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Options… &amp;gt; OpenOffice.org &amp;gt; Chemins &amp;gt; BASIC&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Ne copiez pas ni ne déplacez les bibliothèques en utilisant les commandes du système d&amp;#039;exploitation. Préférez le gestionnaire de macros ou le gestionnaire de packages.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La taille autorisée pour les modules placés à l&amp;#039;intérieur des bibliothèques est limitée à 64 Ko. Une bilbiothèque peut contenir jusqu&amp;#039;à 16.000 modules. &lt;br /&gt;
&lt;br /&gt;
Pour plus d&amp;#039;information, reportez-vous à l&amp;#039;aide en ligne, rubrique : Modules et bibliothèques.&lt;br /&gt;
&lt;br /&gt;
=Accéder à l&amp;#039;IDE=&lt;br /&gt;
Pour accéder à l&amp;#039;IDE (environnement de développement intégré) pour la première fois : &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org 1.1.x: &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Macro… &amp;gt;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org 1.9.x et ultérieur : &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Gérer les macros &amp;gt; OpenOffice.org Basic… &amp;gt;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous allons utiliser le Module1 de la bibliothèque Standard, présente pour l&amp;#039;utilisateur courant uniquement : &lt;br /&gt;
&lt;br /&gt;
Entrons un nom pour notre nouvelle macro : &amp;#039;&amp;#039;&amp;#039;HelloWorld&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Dans la macro, sélectionnons &amp;#039;&amp;#039;&amp;#039;Standard&amp;#039;&amp;#039;&amp;#039; dans la boîte de liste.&lt;br /&gt;
&lt;br /&gt;
Cliquons &amp;#039;&amp;#039;&amp;#039;Nouveau&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant trouver quelque chose comme çà : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
REM  *****  BASIC  *****&lt;br /&gt;
 &lt;br /&gt;
Sub Main&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
 &lt;br /&gt;
Sub HelloWorld&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Le curseur est positionné au début de la ligne &amp;lt;tt&amp;gt;Sub HelloWorld&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Maintenant que l&amp;#039;IDE est actif, il peut être accédé depuis le menu Fenêtre d&amp;#039;OpenOffice.org ou par la barre des tâches du système d&amp;#039;exploitation.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Saisie de code=&lt;br /&gt;
Selectionnons et effaçons : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
REM  *****  BASIC  *****&lt;br /&gt;
 &lt;br /&gt;
Sub Main&lt;br /&gt;
 &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Au-dessous de la ligne &amp;quot;Sub HelloWorld&amp;quot; entrons &amp;lt;tt&amp;gt;msgbox &amp;quot;Hello World!&amp;quot;&amp;lt;/tt&amp;gt;, de manière que l&amp;#039;éditeur ressemble à ceci : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
Sub HelloWorld&lt;br /&gt;
  msgbox &amp;quot;Hello World!&amp;quot;&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Notes:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|L&amp;#039;IDE ne fournit aucune fonctionnalité de code completion ni d&amp;#039;aide sur la syntaxe des commandes lors de la frappe. Pour obtenir de l&amp;#039;aide sur une commande Basic, plaçons le curseur dans la commande et tapons F1.&amp;lt;br&amp;gt; Les commande OpenOffice.org Basic ne sont pas sensibles à la casse. C&amp;#039;est pourquoi msgbox, MSGBOX et Msgbox sont équivalents.&amp;lt;br&amp;gt; Les chaînes sont entourées de guillements doubles.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Exécution du code=&lt;br /&gt;
Le code Basic peut être exécuté de plusieurs façons : &lt;br /&gt;
&lt;br /&gt;
Directement dans l&amp;#039;IDE. La barre des macro comprte un bouton Exécter (par défaut, le troisième de la seconde barre d&amp;#039;outils). Ce bouton lance la première macro du module en cours. &lt;br /&gt;
&lt;br /&gt;
Depuis le menu Outils :&lt;br /&gt;
&lt;br /&gt;
(Version 1.1.x) &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Macro…&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
(Version 1.9.x et supérieures) &amp;#039;&amp;#039;&amp;#039;Outils &amp;gt; Macros &amp;gt; Exécuter la macro…&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à une [[ touche]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à une [[ entrée de menu]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à un bouton de barre d&amp;#039;outil. &lt;br /&gt;
&lt;br /&gt;
En créant un [[ contrôle dans un document]]. &lt;br /&gt;
&lt;br /&gt;
Par assignation de la macro à un évènement. &lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;instant essayons de lancer la procédure &amp;quot;HelloWorld&amp;quot; en cliquant le bouton &amp;#039;&amp;#039;&amp;#039;Exécuter&amp;#039;&amp;#039;&amp;#039;. Un dialogue intitulé &amp;quot;soffice&amp;quot; et comportant le texte &amp;quot;Hello World!&amp;quot; ainsi qu&amp;#039;un bouton OK doit s&amp;#039;afficher.&lt;br /&gt;
&lt;br /&gt;
=Enregistrement du code=&lt;br /&gt;
Le code est enregistré automatiquement chaque fois que son conteneur est lui-même enregistré. Par conséquent, si le code se trouve dans une bibliothèque OpenOffice (partagée ou de l&amp;#039;utilisateur), il est automatiquement enregistré lorsque OpenOffice est refermé. Si le code se trouve dans une bilbiothèque qui fait partie d&amp;#039;un document, alors il est enregistré lorsque le document l&amp;#039;est. &lt;br /&gt;
&lt;br /&gt;
Un bouton Enregistrer figure sur la barre d&amp;#039;outils Standard (celle du haut par défaut). Si le code se trouve à l&amp;#039;intérieur d&amp;#039;un document ou modèle, alors la totalité du document est enregistrée. Si le code se trouve à l&amp;#039;intérieur d&amp;#039;une bibliothèque OpenOffice.org alors seule la bilbiothèque courante est enregistrée.&lt;br /&gt;
&lt;br /&gt;
=Les variables=&lt;br /&gt;
Nous pouvons forcer la déclaration des variables en insérant &amp;lt;tt&amp;gt;Option Explicit&amp;lt;/tt&amp;gt; au début du module. Pour consulter une discussion consacrée à la déclaration ou non des variables, voir : [[http://www.oooforum.org/forum/viewtopic.phtml?t=5845 cette discussion]]. &lt;br /&gt;
&lt;br /&gt;
Dans cette discussion, on voit que l&amp;#039;auteur de [NdT : la version anglaise de] cette page défendait initialement la déclaration systématique des variables. Depuis lors il a changé d&amp;#039;avis et ne les déclare plus du tout. Bref, c&amp;#039;est une question de préférence personnelle. Dans un cas comme dans l&amp;#039;autre, les préférences de l&amp;#039;auteur vont au nommage des variables selon la convention suivante, qui sera utilisée tout au long des exemples de ce wiki :&lt;br /&gt;
&lt;br /&gt;
La première lettre du nom de la variable indique le type de valeur contenue, telle que présentée à la table ci-dessous (basée sur un tableau dans Tutorial.pdf de Sun) &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Lettre&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Signification&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|a&lt;br /&gt;
|Structure&lt;br /&gt;
|-&lt;br /&gt;
|b&lt;br /&gt;
|Boolean (TRUE ou FALSE)&lt;br /&gt;
|-&lt;br /&gt;
|e&lt;br /&gt;
|Enumeration. Cette variable ne peut prendre qu&amp;#039;une valeur parmi un ensemble limité de valeurs.&lt;br /&gt;
|-&lt;br /&gt;
|f&lt;br /&gt;
|Float (de 3.402823 x 1038 à 1.401298 x 10-45. Une variable de type float [NdT : single] peut occuper jusqu&amp;#039;à quatre octets)&amp;lt;br&amp;gt; Double (de 1.79769313486232 x 10308 à 4.94065645841247 x 10-324. Une variable de ce type peut occuper jusqu&amp;#039;à huit octets)&amp;lt;br&amp;gt; Currency (de -922337203685477.5808 à +922337203685477.5807 et occupe jusqu&amp;#039;à huit octets en mémoire)&lt;br /&gt;
|-&lt;br /&gt;
|m&lt;br /&gt;
|Array (aka sequence aka matrice)&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|Integer (de -32768 à 32767.) ou&amp;lt;br&amp;gt; Long (de -2147483648 à 2147483647).&lt;br /&gt;
|-&lt;br /&gt;
|o&lt;br /&gt;
|Object, service ou interface&lt;br /&gt;
|-&lt;br /&gt;
|s&lt;br /&gt;
|String (Une variable string peut mémoriser jusqu&amp;#039;à 65535 caractères Unicode).&lt;br /&gt;
|-&lt;br /&gt;
|x&lt;br /&gt;
|Interface, montre que seules les opérations portant sur une interface particulière d&amp;#039;un objet sont utilisées&lt;br /&gt;
|-&lt;br /&gt;
|v&lt;br /&gt;
|Variant, N&amp;#039;importe quel valeur&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Utilisons des noms descriptifs suffisamment longs et employons le style &amp;quot;Camel case&amp;quot; [NdT : usage conjoint des majuscules et des minuscules pour faire ressortir les éléments du nom]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Les variables définies par l&amp;#039;utilisateur en OpenOffice.org Basic ne sont pas sensibles à la casse. Les constantes UNO-API le sont.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les variables indexant les boucles constituent une exception conventionnelle aux longs noms descriptifs. Des symboles tels que i, j et k sont en effet d&amp;#039;usage fréquent. De même, lorsqu&amp;#039;une chaîne est construite, on utilise fréquemment s comme variable temporaire. &lt;br /&gt;
&lt;br /&gt;
Editons la routine sub HelloWorld de manière qu&amp;#039;elle ressemble à ceci et exécutons-la : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub HelloWorld&lt;br /&gt;
dim i as integer &amp;#039;ligne optionnelle&lt;br /&gt;
  for i = 0 to 2&lt;br /&gt;
    &amp;#039;Ces lignes sont indentées par souci de lisiblité uniquement&lt;br /&gt;
    &amp;#039;Notre code devrait toujours être structuré ainsi pour lui donner des chances de survie&lt;br /&gt;
    msgbox &amp;quot;Hello World &amp;quot; &amp;amp; i&lt;br /&gt;
  next i&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Pour plus d&amp;#039;informations sur les variables, reportons-nous à l&amp;#039;aide en ligne, rubrique &amp;quot;utilisation des variables&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=L&amp;#039;API OpenOffice.org=&lt;br /&gt;
Cette section commence par un exemple. La suite donne des informations complémentaires qui nous permettront de comprendre l&amp;#039;exemple et à l&amp;#039;étendre.&lt;br /&gt;
&lt;br /&gt;
Essayons d&amp;#039;exécuter le code ci-dessous lorsque différents types de documents sont ouverts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
&amp;#039;basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
&amp;#039;xray.xray thisComponent&lt;br /&gt;
msgbox fnWhichComponent(thisComponent)&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function fnWhichComponent(oDoc) as string&lt;br /&gt;
if HasUnoInterfaces(oDoc, &amp;quot;com.sun.star.lang.XServiceInfo&amp;quot;) then &lt;br /&gt;
   if thisComponent.supportsService (&amp;quot;com.sun.star.text.GenericTextDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Texte&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.sheet.SpreadsheetDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Feuille de calcul&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.presentation.PresentationDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Presentation&amp;quot;&lt;br /&gt;
   elseif thisComponent.supportsService(&amp;quot;com.sun.star.drawing.GenericDrawingDocument&amp;quot;) then&lt;br /&gt;
      fnWhichComponent = &amp;quot;Dessin&amp;quot;&lt;br /&gt;
   else&lt;br /&gt;
      fnWhichComponent = &amp;quot;Oops le document ouvert est autre chose&amp;quot;&lt;br /&gt;
   end if&lt;br /&gt;
else&lt;br /&gt;
   fnWhichComponent = &amp;quot;Ce n&amp;#039;est pas un document&amp;quot;&lt;br /&gt;
end if&lt;br /&gt;
End function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Convention de nommage des routines==&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, le nom de la fonction utilisateur commence par &amp;quot;fn&amp;quot;. Il s&amp;#039;agit de la convention adoptée par l&amp;#039;auteur initial [NdT : version anglaise] qui permet au lecteur de savoir qu&amp;#039;il s&amp;#039;agit d&amp;#039;une fonction définie par l&amp;#039;utilisateur. Dans le même esprit, l&amp;#039;auteur initial utilise la convention de débuter les noms des procédures par &amp;quot;sub&amp;quot;. Lorsque l&amp;#039;on apprend un nouveau langage et de nouvelles API, il peut s&amp;#039;avérer difficile de reconnaître ce qui ressortit du langage lui-même de ce qui a été défini ailleurs dans notre code. Ce document/wiki emploie ces conventions pour le nommage des fonctions et des procédures.&lt;br /&gt;
&lt;br /&gt;
==Présentation de l&amp;#039;API OpenOffice.org==&lt;br /&gt;
Cette section introduit les termes : &lt;br /&gt;
&lt;br /&gt;
* Interface &lt;br /&gt;
* Module &lt;br /&gt;
* Service &lt;br /&gt;
* Méthode &lt;br /&gt;
* Propriété &lt;br /&gt;
&lt;br /&gt;
S&amp;#039;il n&amp;#039;est pas essentiel de comprendre la différence entre une interface et un service ou ce qu&amp;#039;est un module pour pouvoir écrire des extensions à OpenOffice.org, la compréhension de ces termes aide à correctement interpréter la documentation ainsi qu&amp;#039;à l&amp;#039;introspection des éléments manipulés. Peut-être nous faudra-t-il relire cette section plusieurs fois. &lt;br /&gt;
&lt;br /&gt;
Une &amp;#039;&amp;#039;&amp;#039;interface&amp;#039;&amp;#039;&amp;#039; est la &amp;#039;&amp;#039;définition&amp;#039;&amp;#039; d&amp;#039;un ensemble de méthodes (avec leurs arguments) qu&amp;#039;un service implémentant cette interface doit comporter. &lt;br /&gt;
&lt;br /&gt;
Les interfaces sont regroupées en &amp;#039;&amp;#039;&amp;#039;modules&amp;#039;&amp;#039;&amp;#039; pour des besoins de nommage. Toutes les interfaces (et les services) commencent par le nom &amp;quot;com.sun.star&amp;quot; puis vient le nom du module puis celui de l&amp;#039;interface (ou du service). &lt;br /&gt;
&lt;br /&gt;
Par exemple, la plupart des services fournissent l&amp;#039;interface &amp;lt;tt&amp;gt;com.sun.star.beans.XPropertySet&amp;lt;/tt&amp;gt;. Cette interface est enregistrée dans le module &amp;quot;beans&amp;quot; et fournit l&amp;#039;accès aux propriétés d&amp;#039;un service. Une &amp;#039;&amp;#039;&amp;#039;propriété&amp;#039;&amp;#039;&amp;#039; est une valeur tandis qu&amp;#039;une &amp;#039;&amp;#039;&amp;#039;méthode&amp;#039;&amp;#039;&amp;#039; défiti une action. &lt;br /&gt;
&lt;br /&gt;
Un objet OpenOffice.org peut supporter de nombreux services. &lt;br /&gt;
&lt;br /&gt;
Un objet OpenOffice.org peut supporter un service qui implémente une interface dans laquell une description de méthode déclare qu&amp;#039;un autre objet OpenOffice.org est retourné.&lt;br /&gt;
&lt;br /&gt;
==Introspection==&lt;br /&gt;
HasUnoInterfaces is an OpenOffice.org Basic function for introspection. See this [[http://www.oooforum.org/forum/viewtopic.phtml?t=7068 link]] for information on introspection in other languages. &lt;br /&gt;
&lt;br /&gt;
HasUnoInterfaces returns true if all of the specified interfaces are available for the specified object. &lt;br /&gt;
&lt;br /&gt;
Most OpenOffice.org objects provide the method supportsService because they have the interface com.sun.star.lang.XServiceInfo. &lt;br /&gt;
&lt;br /&gt;
In the above example, the OpenOffice.org Basic command, &amp;#039;&amp;#039;&amp;#039;HasUnoInterfaces&amp;#039;&amp;#039;&amp;#039; checks that the current document has the interface com.sun.star.lang.XServiceInfo, because if it doesn&amp;#039;t have that interface then it doesn&amp;#039;t have the method supportsService, and a run time error would occur if such an object tried to access its nonexistent method. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;SupportsService&amp;#039;&amp;#039;&amp;#039; is a method which returns true if the specified service is available. The above examples checks for a service to determine the type of document that is currently active.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==L&amp;#039;Outil X-Ray==&lt;br /&gt;
L&amp;#039;utilisation de &amp;quot;HasUnoInterfaces&amp;quot; et de &amp;quot;supportsService&amp;quot; permet d&amp;#039;obtenir des informations sur un objet donné lors de son exécution, mais procéder ainsi pour apprendre le langage Basic deviendrait vite fastidieux. Heureusement, et grâce à Bernard Marcelly, nous disposons de l&amp;#039;outil X-Ray. Cet outil est disponible ici: [[http://ooomacros.org/dev.php#101416 ooomacros]]. Téléchargez le fichier zip, dézippez l&amp;#039;archive, ouvrez le document dans OpenOffice.org, et suivez les instructions pour son installation et configuration. &lt;br /&gt;
&lt;br /&gt;
Une partie de la configuration de l&amp;#039;outil X-Ray concerne la définition de l&amp;#039;endroit où est stockée une copie locale (sur le disque dur) du Kit de Développement OpenOffice.org (appélé SDK). Téléchargez le Kit de Développement OpenOffice.org depuis [[ftp://mirrors.dotsrc.org/openoffice/stable/2.0.4_sdk/]] et installez le sur votre disque dur. &lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple ci-dessus, au début du code, il y a deux lignes mises en commentaires (les lignes de commentaires commencent toujours avec des apostrophes): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
&amp;#039;basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
&amp;#039;xray.xray thisComponent&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Une fois l&amp;#039;outil X-Ray installé, supprimez les apostrophes dans les lignes indiquées ci-dessus et relancez la macro. A partir de la version 5, la commande à utiliser dans votre code est tout simplement &amp;quot;xray&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;BasicLibraries&amp;#039;&amp;#039;&amp;#039; est une commande OpenOffice.org Basic qui renvoie un objet permettant d&amp;#039;accéder aux bibliothèques OpenOffice.org. La méthode &amp;lt;tt&amp;gt;loadLibrary&amp;lt;/tt&amp;gt; rend disponible aux utilisateurs les routines présentes dans cette bibliothèque. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;xray.xray&amp;lt;/tt&amp;gt; indique la bibliothèque xray et la sous-routine xray contenue dans celle-ci, l&amp;#039;objet thisComponent étant l&amp;#039;objet transmis à xray pour l&amp;#039;introspection. &lt;br /&gt;
&lt;br /&gt;
Afin de trouver l&amp;#039;objet que vous cherchez, il est souvent nécessaire de le découvrir ou de le créer depuis StarDesktop ou thisComponent.&lt;br /&gt;
&lt;br /&gt;
==Desktop, documents, and current selection==&lt;br /&gt;
StarDesktop and ThisComponent are OpenOffice.org Basic commands that refer to the application and currently active document respectively. &lt;br /&gt;
&lt;br /&gt;
Unlike Microsoft Office, OpenOffice.org is one application with different components. When running some code it maybe useful to check which component is currently active. The above code demonstrates how that checking process can be done. &lt;br /&gt;
&lt;br /&gt;
The Desktop that StarDesktop refers to is conceptual (historically it actually existed) and can be thought of as the OpenOffice.org application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Creating new documents==&lt;br /&gt;
To create a new text document: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/swriter&amp;quot;, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
To create a new spreadsheet document: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/scalc&amp;quot;, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
An easier approach would be to write a simple function: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
function fnNewDoc(sDocType as string)&lt;br /&gt;
fnNewDoc = StarDesktop.loadComponentFromURL(&amp;quot;private:factory/&amp;quot; &amp;amp; sDocType , &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Then creating new documents can be achieved with: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;swriter&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;scalc&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;simpress&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;sdraw&amp;quot;)&lt;br /&gt;
oDoc = fnNewDoc(&amp;quot;smath&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
See http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XComponentLoader.html .&lt;br /&gt;
&lt;br /&gt;
==To open a document==&lt;br /&gt;
The following example shows how to open a file. For information on URLs in OpenOffice.org see [[ URL Basics]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sFile = &amp;quot;C:\Documents and Settings\danny\Desktop\MyCalc.sxc&amp;quot; &amp;#039; Windows&lt;br /&gt;
sFile = &amp;quot;/home/danny/Desktop/MyCalc.sxc&amp;quot; &amp;#039; Linux&lt;br /&gt;
sURL = ConvertToURL(sFile)&lt;br /&gt;
oDoc = StarDesktop.loadComponentFromURL(sURL, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Again it may make sense to make this easier by writing a simple function: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
function fnOpenDoc(sFile)&lt;br /&gt;
sURL = ConvertToURL(sFile)&lt;br /&gt;
fnOpenDoc = StarDesktop.loadComponentFromURL(sURL, &amp;quot;_blank&amp;quot;, 0, Array())&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Examples of calling the function: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDoc = fnOpenDoc(&amp;quot;C:\Documents and Settings\danny\Desktop\MyCalc.sxc&amp;quot;) &amp;#039; Windows&lt;br /&gt;
oDoc = fnOpenDoc(&amp;quot;/home/danny/Desktop/MyCalc.sxc&amp;quot;) &amp;#039; Linux&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Current Selection==&lt;br /&gt;
It is common to want to run some code that effects the current selection. &amp;lt;tt&amp;gt;ThisComponent&amp;lt;/tt&amp;gt; has the method &amp;lt;tt&amp;gt;getCurrentSelection&amp;lt;/tt&amp;gt;. Since many different types of objects could possibly be selected it is common to check that the currently selected object has the service that contains the method that we want to apply to the object. &lt;br /&gt;
&lt;br /&gt;
Edit the main subroutine to the following and rerun it on a text document with different selections. (To select more than one block of text hold down the control key). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
if fnWhichComponent(thisComponent) = &amp;quot;Text&amp;quot; then&lt;br /&gt;
        oCurSelection = thisComponent.getCurrentSelection()&lt;br /&gt;
        &amp;#039;xray.xray oCurSelection&lt;br /&gt;
        if oCurSelection.supportsService(&amp;quot;com.sun.star.text.TextRanges&amp;quot;) then&lt;br /&gt;
                msgbox &amp;quot;There are &amp;quot; &amp;amp; oCurSelection.getCount() &amp;amp; _&lt;br /&gt;
                 &amp;quot; selections in the current text document.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
end if&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
With nothing selected the number of selections is one - the insertion point, with one block of text selected the count is still one, but with two blocks of text the count is three - the insertion point and the two blocks of selected text. &lt;br /&gt;
&lt;br /&gt;
Exercise 1: Modify the above code so that it works on selected cell ranges in a spreadsheet. &lt;br /&gt;
&lt;br /&gt;
Question1: For two blocks of cells selected, what would be the count for the number of selections? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
Uncomment &amp;lt;tt&amp;gt;&amp;#039;xray.xray oCurSelection&amp;lt;/tt&amp;gt; so that xray runs, to see that the object that &amp;lt;tt&amp;gt;oCurSelection&amp;lt;/tt&amp;gt; points to has a &amp;quot;property&amp;quot; called &amp;lt;tt&amp;gt;Count&amp;lt;/tt&amp;gt; with a description of &amp;quot;pseudo-prop, read only&amp;quot;. It is possible in OpenOffice.org Basic to write &amp;lt;tt&amp;gt;oCurSelection.count&amp;lt;/tt&amp;gt;, but as this is not possible in all other languages accessing the OpenOffice.org API, this Wiki will try to always use the method approach. (I say try because I have not been in the habit of doing this and sometimes I may forget). &lt;br /&gt;
&lt;br /&gt;
This next example demonstrates changing a property value for the current selections. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
sub main&lt;br /&gt;
basicLibraries.loadLibrary(&amp;quot;Xray&amp;quot;)&lt;br /&gt;
if fnWhichComponent(thisComponent) = &amp;quot;Text&amp;quot; then&lt;br /&gt;
   oCurSelection = thisComponent.getCurrentSelection()&lt;br /&gt;
   if oCurSelection.supportsService(&amp;quot;com.sun.star.text.TextRanges&amp;quot;) then&lt;br /&gt;
      nCount = oCurSelection.Count&lt;br /&gt;
      &amp;#039;xray.xray oCurSelection.getByIndex(0)&lt;br /&gt;
      &amp;#039;Warning: The insertion point will have the same action applied twice&lt;br /&gt;
      &amp;#039;in this case it doesn&amp;#039;t matter, but in others it might.&lt;br /&gt;
      for i = 0 to nCount - 1&lt;br /&gt;
         oCurSelection.getByIndex(i).setPropertyValue(&amp;quot;CharStyleName&amp;quot;, &amp;quot;Strong Emphasis&amp;quot;)&lt;br /&gt;
      next&lt;br /&gt;
   end if&lt;br /&gt;
end if&lt;br /&gt;
end sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
In OpenOffice.org Basic it is possible to shorten the assignment line to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oCurSelection(i).CharStyleName = &amp;quot;Strong Emphasis&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
This wiki will try to use the full methods for both indexing and assigning properties. The rationale is that this makes converting the code to other languages easier and also helps the learner to understand what is happening (again I have not been in the habit of doing this so some examples may slip past me). &lt;br /&gt;
&lt;br /&gt;
Exercise 2: Rewrite the above code so that the warning can be removed. &lt;br /&gt;
&lt;br /&gt;
See [[ Current selection]].&lt;br /&gt;
&lt;br /&gt;
=Iterative Access to Subordinate Objects (Enumeration access)=&lt;br /&gt;
Sometimes to access the desired object an enumeration is required. For example paragraphs, within a document or within a selection. &lt;br /&gt;
&lt;br /&gt;
When a Writer document is active and some text is selected, both &amp;lt;tt&amp;gt;thisDocument.getText()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;thisComponent.getCurrentSelection().getByIndex(i)&amp;lt;/tt&amp;gt; have the service: com.sun.star.text.TextRange which has the interface: com.sun.star.container.XContentEnumerationAccess, it is possible to create an enumeration of the paragraphs for the current document or for a particular selection. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
&amp;#039; Create enumeration object&lt;br /&gt;
oTextElementEnum = thisComponent.getText().createEnumeration()&lt;br /&gt;
&amp;#039;or thisComponent.getCurrentSelection().getByIndex(i).createEnumeration()&lt;br /&gt;
 &lt;br /&gt;
&amp;#039; loop over all text elements&lt;br /&gt;
while oTextElementEnum.hasMoreElements()&lt;br /&gt;
        oTextElement = oTextElementEnum.nextElement&lt;br /&gt;
        if oTextElement.supportsService(&amp;quot;com.sun.star.text.TextTable&amp;quot;) then&lt;br /&gt;
                MsgBox &amp;quot;The current block contains a table.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
        if oTextElement.supportsService(&amp;quot;com.sun.star.text.Paragraph&amp;quot;) then&lt;br /&gt;
                MsgBox &amp;quot;The current block contains a paragraph.&amp;quot;&lt;br /&gt;
        end if&lt;br /&gt;
wend&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Exercise 3: Extend the above example to display in a message box all text portions that are bold. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Named access=&lt;br /&gt;
Some objects provide named access to a particular type of subordinate object, some others indexed access, and some both named and indexed access. &lt;br /&gt;
&lt;br /&gt;
For example if the current document in OpenOffice.org is a spreadsheet then to access a particular sheet can be done by index access: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oSheet = thisComponent.getSheets.getByIndex(0)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
or named access: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oSheet = thisComponent.getSheets.getByName(&amp;quot;Sheet1&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
To check if an object with a particular name already exists use &amp;lt;tt&amp;gt;hasByName&amp;lt;/tt&amp;gt;, for example: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
if thisComponent.getSheets.hasByName(&amp;quot;Sheet1&amp;quot;) then&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
To loop through all the available object names can be done like: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
mNames = thisComponent.getSheets.getElementnames&lt;br /&gt;
for i = lbound(mNames) to ubound(mNames)&lt;br /&gt;
        msgbox mNames(i)&lt;br /&gt;
next&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Some named subordinate objects also provide the interface:  com.sun.star.container.XNameContainer. This interface defines that such objects should have the following methods: &amp;lt;tt&amp;gt;insertByName&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;replaceByname&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;removeByName&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
E.g. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
thisComponent.getSheets.insertByName(&amp;quot;NewSheet&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Create new objects=&lt;br /&gt;
Some objects have services which implement interfaces to provide specific methods for creating a particular type of object. &lt;br /&gt;
&lt;br /&gt;
For example if the current document is a Writer document then &amp;lt;tt&amp;gt;thisComponent.getText&amp;lt;/tt&amp;gt; is an object that provides the service com.sun.star.text.Text which implements the interface  com.sun.star.text.XSimpleText which defines the methods &amp;lt;tt&amp;gt;createTextCursor&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;createTextCursorByRange&amp;lt;/tt&amp;gt;. Both of these methods create a text cursor for accessing the text of the document. These cursors are quite independent of the view cursor . The view cursor is visible on the screen and is manipulated by the user (and can be manipulated by program control), where as a text cursor is not visible on the screen and is solely used by program control. The following code snippet demonstrates creating a new text cursor, such that it starts at the same location as the viewCursor and is then moved independent of the view cursor. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oVC = thisComponent.getCurrentController.getViewCursor&lt;br /&gt;
oCursor = oVC.getText.createTextCursorByRange(oVC)&lt;br /&gt;
oCursor.gotoStartOfSentence(false)&lt;br /&gt;
oCursor.gotoEndOfSentence(true)&lt;br /&gt;
msgbox oCursor.getString&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some objects are context dependent and get created using the method &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt; which is defined in the interface com.sun.star.lang.XMultiServiceFactory. For example to add a rectangle to the first page of a drawing document: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
dim aPoint as new com.sun.star.awt.Point&lt;br /&gt;
dim aSize as new com.sun.star.awt.Size&lt;br /&gt;
 &lt;br /&gt;
aPoint.x = 1000&lt;br /&gt;
aPoint.y = 1000&lt;br /&gt;
 &lt;br /&gt;
aSize.Width = 10000&lt;br /&gt;
aSize.Height = 10000&lt;br /&gt;
 &lt;br /&gt;
oRectangleShape = thisComponent.createInstance(&amp;quot;com.sun.star.drawing.RectangleShape&amp;quot;)&lt;br /&gt;
oRectangleShape.Size = aSize&lt;br /&gt;
oRectangleShape.Position = aPoint&lt;br /&gt;
 &lt;br /&gt;
thisComponent.getDrawPages.getByIndex(0).add(oRectangleShape)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example also uses UNO structs see below for more information on UNO stucts. &lt;br /&gt;
&lt;br /&gt;
Some objects are context independent to create these objects use the OpenOffice.org Basic command createUnoService. For example to create the equivalent to StarDesktop: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
oDesktop = createUnoService(&amp;quot;com.sun.star.frame.Desktop&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The process that I use to determine how to access or create an object is as follows: &lt;br /&gt;
&lt;br /&gt;
Does the object already exist if so I should be able to access it from something like &amp;lt;tt&amp;gt;thisComponent&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Will the new object belong to another object, if so does the owner have a specific method for creating the object, if so use it. &lt;br /&gt;
&lt;br /&gt;
The new object will belong to another object, but that object doesn&amp;#039;t provide a specific method for creating it, but does provide &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt;. If the object doesn&amp;#039;t provide &amp;lt;tt&amp;gt;createInstance&amp;lt;/tt&amp;gt; are you sure you are using the correct object, or is it context independent. &lt;br /&gt;
&lt;br /&gt;
I have found working out how to create an object to be quite difficult with existing documentation so I hope that this document/wiki will eventually make this clear. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==UNO structs==&lt;br /&gt;
UNO structures can be declared using the OpenOffice.org Basic command &amp;lt;tt&amp;gt;dim&amp;lt;/tt&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
dim aPoint as new com.sun.star.awt.Point&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Or by using the OpenOffice.org Basic command &amp;lt;tt&amp;gt;createUnoStruct&amp;lt;/tt&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
aPoint = createUnoStruct(&amp;quot;com.sun.star.awt.Point&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|When declaring UNO structs case is important. Note that everything upto the name of the struct is lowercase, and that the name of the struct is in TitleCase.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Creating Listeners and Handlers==&lt;br /&gt;
Through the user interface it is possible to assign macros to some events: &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org versions 1.1.x: &amp;#039;&amp;#039;&amp;#039;Tools &amp;gt; Configure… &amp;gt; Events&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org versions 1.9.x and above: &amp;#039;&amp;#039;&amp;#039;Tools &amp;gt; Customize… &amp;gt; Events&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
It is also possible to assign macros to a wider range of events using the OpenOffice.org Basic command CreateUnoListener. This same command is used for creating both listeners and handlers. A listener checks for an event and always allows other listeners to respond to the event as well. A handler listens for an event, and can optionally consume the event so that other listeners don&amp;#039;t get to act on it. &lt;br /&gt;
&lt;br /&gt;
The following example creates a keyHandler: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
global IannzExampleKeyHandler&lt;br /&gt;
 &lt;br /&gt;
sub SetupKeyHandler&lt;br /&gt;
oController = thisComponent.currentController&lt;br /&gt;
IannzExampleKeyHandler = CreateUnoListener(&amp;quot;KeyHandler_&amp;quot;,&amp;quot;com.sun.star.awt.XKeyHandler&amp;quot;)&lt;br /&gt;
oController.addKeyHandler(IannzExampleKeyHandler) &amp;#039; Register the listener&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
sub RemoveKeyHandler&lt;br /&gt;
thisComponent.currentController.removeKeyHandler(IannzExampleKeyHandler)&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
sub KeyHandler_disposing&lt;br /&gt;
end sub&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function KeyHandler_keyReleased(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean&lt;br /&gt;
        KeyHandler_keyReleased = False    &lt;br /&gt;
end function&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
function KeyHandler_keyPressed(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean&lt;br /&gt;
KeyHandler_keyPressed = false   &amp;#039;Let other listeners handle the event&lt;br /&gt;
if oKeyEvent.modifiers = com.sun.star.awt.KeyModifier.MOD2 then &amp;#039;Control key was pressed&lt;br /&gt;
        if oKeyEvent.keyCode = com.sun.star.awt.Key.Q then&lt;br /&gt;
                msgbox &amp;quot;Alt + Q was pressed&amp;quot;&lt;br /&gt;
                KeyHandler_keyPressed = true    &amp;#039;Don&amp;#039;t let other listeners process this event&lt;br /&gt;
        end if&lt;br /&gt;
end if&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
A variable declared as global keeps its value even after the macro exits. In this case we want to be able to use this variable later to remove the handler. As variables declared globally could be used in other libraries to try and avoid conflict I start all my global variables with Iannz my registered name for the OpenOffice.org web site. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;sub SetupKeyHandler&amp;lt;/tt&amp;gt; sets up the handler. The first parameter to CreateUnoListener is the staring name for the methods that will be called when that type of event occurs in this example .&amp;lt;tt&amp;gt;&amp;quot;KeyHandler_&amp;quot;&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The second parameter is the name of the interface for the listener or handler, &amp;quot;com.sun.star.awt.XKeyHandler&amp;quot;. The name is case sensitive, everything up to and including the module name is always lowercase, the name of the interface always starts with &amp;quot;X&amp;quot; and the remainder is in TitleCase. &lt;br /&gt;
&lt;br /&gt;
Use the SDK to find out what methods the interface must supply. You must supply routines for all of these methods even if you don&amp;#039;t intend to use them. You also need to supply a disposing method. The names of these routines start with the string given in the first parameter to CreateUnoListener , in this example &amp;lt;tt&amp;gt;&amp;quot;KeyHandler_&amp;quot;&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Thus in the example there is &amp;lt;tt&amp;gt;KeyHandler_disposing&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;KeyHandler_keyReleased&amp;lt;/tt&amp;gt; which don&amp;#039;t actually do anything but are required, and &amp;lt;tt&amp;gt;KeyHandler_keyPressed&amp;lt;/tt&amp;gt; which actually does the job. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;sub RemoveKeyHandler&amp;lt;/tt&amp;gt; demonstrates how to remove the handler.&lt;br /&gt;
&lt;br /&gt;
=OpenOffice.org constants=&lt;br /&gt;
The above example uses OpenOffice.org constants. &lt;br /&gt;
&lt;br /&gt;
E.g. com.sun.star.awt.KeyModifier.MOD2&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org constants are case sensitive. Everything up to and including the module name is always lowercase. The constant group is in TitleCase. The actual constant name is always UPPERCASE. &lt;br /&gt;
&lt;br /&gt;
Programmers not using OpenOffice.org Basic may not have access to these constants. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Using the recorder=&lt;br /&gt;
See [[ The OpenOffice.org recorder and UNO dispatch calls]] section for a discussion on recording UNO Dispatch commands versus writing API calls.&lt;br /&gt;
&lt;br /&gt;
= See also=&lt;br /&gt;
* [[Programming_OooWriter |Programming OOoWriter in C++]] where OOoBascic record are used in C++&lt;br /&gt;
* A [[XIntrospection_Interface|XIntrospection Interface]] short description. XRay uses this interface.&lt;br /&gt;
* Download Bernard Marcelly&amp;#039;s [http://www.ooomacros.org/dev.php#101416 XRay OOoBasic tool]  &lt;br /&gt;
&lt;br /&gt;
[[Category:Basic:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18424</id>
		<title>Non-code extensions FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18424"/>
		<updated>2006-10-11T21:34:58Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Extensions conmportant des services UNO (code) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;traduction en cours ... sur la base de :&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Non-code_extensions&lt;br /&gt;
&lt;br /&gt;
{{Extensions}}&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Packages UNO: Principes de base =&lt;br /&gt;
&lt;br /&gt;
Le concept de déploiement des extensions OpenOffice.org basé sur les packages UNO n&amp;#039;est pas limité au code. Il est également possible d&amp;#039;installer d&amp;#039;autres choses dans des packages faciles d&amp;#039;utilisation, comme des modèles, des autotextes etc. Vous trouverez ci-dessous une explication du fonctionnement de base. Elle est destinée aux utilisateurs avancés et aux administrateurs système. La plupart des points abordés ici sont expliqués de façon plus détaillée et plus compréhensible à d&amp;#039;autres endroits. Le sujet de la documentation ci-dessous est de présenter une vue générale et d&amp;#039;expliquer les principes de base. Si vous souhaitez en savoir plus sur UNO, vous pouvez consulter notre [http://wiki.services.openoffice.org/wiki/Uno wiki UNO] ou les pages web du  [http://udk.openoffice.org project UDK].&lt;br /&gt;
&lt;br /&gt;
Toutes les informations fournies ici se rapportent à OpenOffice.org 2.0.4. Les différences pouvant exister avec des versions plus anciennes ne sont pas expliquées ici, bien que l&amp;#039;on puisse mentionner explicitement les choses apparues pour la première fois dans la 2.0.4.&lt;br /&gt;
&lt;br /&gt;
Les packages UNO ne sont rien d&amp;#039;autre que des dossiers zippés avec des données supplémentaires et des méta-données décrivant le contenu. Il peuvent être déployés par l&amp;#039;interface du Gestionnaire de packages intégré à OOo (&amp;quot;Outils - Gestionnaire de packages&amp;quot;) ou grace à l&amp;#039;outil en ligne de commande “unopkg” qui se trouve dans le répertoire &amp;quot;program&amp;quot; de OOo. Ce dernier permet non seulement le déploiement d&amp;#039;un package pour un utilisateur, mais également pour tous les utilisateurs avec le paramètre optionnel &amp;quot;--shared”. Quand les packages sont installés, leur contenu est recopié à des emplacements privés bien définis sous “share/uno_packages” ou “user/uno_packages”, selon la portée de l&amp;#039;installation du package (installation système ou simple utilisateur). On entend par &amp;quot;Privé&amp;quot; : ne pas écrire de code qui se fie à la structure particulière du composant UNO décompressé, l&amp;#039;accès aux fichiers compressés doit utiliser un API défini qui se charge des détails pour l&amp;#039;appelant. Des fichiers en dehors des dossiers &amp;quot;uno_packages&amp;quot; ne devraient jamais être affectés, à la seule exception dont l&amp;#039;explication se trouve ici [http://www.openoffice.org/issues/show_bug.cgi?id=70283 bug]: Des macros Basic dans des packages UNO doivent toujours être enregistrées dans un fichier xlc se trouvant dans l&amp;#039;un des répertoires &amp;quot;basic&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Extensions comportant des services UNO (code) ==&lt;br /&gt;
&lt;br /&gt;
Si un package UNO comporte un composant écrit en Java, C++ ou Python, ce dernier doit rendre public sa fonctionnalité afin d&amp;#039;être fonctionnel au sein de OpenOffice.org. Dans les développements basés sur UNO, un ensemble de fonctionnalités défini est appelé un &amp;quot;service&amp;quot;. Ceux-ci sont identifiés et on y accède par leurs noms de service. Un composant qui met en oeuvre de tels services doit informer les autres de son identification. Aujourd&amp;#039;hui tous les composants exportent une fonction qui peut être appélée par unopkg et qui va obliger le composant à écrire toutes les informations nécessaires dans le fichier de registre des services qui est créé et maintenu à l&amp;#039;intérieur d&amp;#039;un dossier „uno_package“. Lorsque OpenOffice.org se sert de son gestionnaire de service pour rechercher des services UNO disponibles, il regardera non seulement dans le registre des services (services.rdb) au sein du répertoire principal du programme (contenant toutes les informations sur les &amp;quot;services internes&amp;quot;), mais également dans tous les fichiers de registre se trouvant dans les dossiers “uno_packages”.&lt;br /&gt;
&lt;br /&gt;
OOo n&amp;#039;est capanble d&amp;#039;instancier des services UNO par leurs noms que s&amp;#039;il en connaît l&amp;#039;existence. Ceci est facile pour des services qui remplacent ceux déhà présents en &amp;quot;interne&amp;quot; puisqu&amp;#039;OOo les connaît déjà et s&amp;#039;en sert couramment, mais comme la plupart des composants fournissent de nouveaux services, il doit exister autre chose qui permet à OOo de s&amp;#039;en servir bien que lui étant inconnus lors de la compilation. Pour ces cas précis, les composants UNO doivent fournir des données complémentaires sur le moment auquel le chargement d&amp;#039;un service donné doit s&amp;#039;effectuer. Ces &amp;quot;données de composant additionnelles&amp;quot; sont fournies dans les fichiers de configuration de OOo. &lt;br /&gt;
&lt;br /&gt;
Un exemple serait un composant de filtre de document dans lequel les données complémentaires qui doivent être fournies consistent (entre autres) en le type de fichier que le filtre sait charger. Un composant de filtre précis pourrait se déclarer capable de charger des fichiers WordPerfect. Ainsi, si un utilisateur choisit ce filtre pour charger un ficher dans l&amp;#039;application alors OOo trouverait les données déclarées en recherchant toutes données contenant le type de fichier souhaité (wps), instancierait le composant de filtre par son nom de service tel que découvert dans ces données et ensuite s&amp;#039;en servir pour charger le fichier dans l&amp;#039;application. Chaque filtre déhà présent dans OOo a ses propres données de configuration et les filtres de conversion de documents dans les packages UNO fournissent leurs propres données de configuration de manière à complémenter celles déjà présentes dans le produit.&lt;br /&gt;
&lt;br /&gt;
== Support des Packages dans le Gestionnaire de Configuration ==&lt;br /&gt;
Le Gestionnaire de Configuration de OpenOffice.org présente également la capacité à rechercher dans un ensemble de dossiers extensibles de la même manière que le Gestionnaire de Services. S&amp;#039;il trouve plusieurs fichiers de configuration dans ces dossiers contenant des données pour les mêmes éléments dans l&amp;#039;arborescence des entrées de configuration, soit il les fusionnera, soit il remplacera des données d&amp;#039;ordre hiérarchique inférieur par des données d&amp;#039;ordre hiérarchique supérieur, selon le type de données de configuration. Les données de configuration &amp;quot;utilisateur&amp;quot; ont toujours précédence sur les données de configuration préinstallées se trouvant dans la couche partagée (&amp;quot;share&amp;quot;). Les données de configuration des packages UNO se situent entre ces deux extrêmes : les données de configuration partagées des packages UNO ont un ordre hiérarchique supérieur à la couche partagée pré-installée, mais un ordre hiérarchique inférieur aux données de configuration &amp;quot;utilisateur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Il demeure la question suivante : quelles données sont fusionnées lorsqu&amp;#039;il y a au moins deux couches de configuration ?&lt;br /&gt;
&lt;br /&gt;
Le Gestionnaire de Configuration a tendance à prendre ses informations dans des fichiers xml (portant l&amp;#039;extension de fichier xcu) avec des éléments typés. Il supporte quelques types de base, des types structurés qui doivent être définis dans des fichiers de schéma (portant l&amp;#039;extension de fichier xcs) et fait une liste de tous ces types. Ceux-ci ne peuvent pas être étendus. Si la configuration découvre des valeurs différentes de celles dans les différentes couches, c&amp;#039;est la valeur de l&amp;#039;ordre hiérarchique supérieur qui est retenue. Pour la fusion d&amp;#039;éléments de configuration et par ce biais l&amp;#039;extension de la fonctionnalité qui en dépend nécessite le type &amp;quot;set&amp;quot;. Pour mieux comprendre son fonctionnement, regardez dans [[Configuration_schema_path_settings|configuration schema]] mentionné dans la section &amp;quot;Configuration des Chemins&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Un composant peut étendre ou modifier la configuration de OpenOffice.org en lui fournissant des fichiers xcu dans son package qui remplaceront ou étendront (fusion) des entrées de configuration dans OpenOffice.org. Il peut également disposer de ses propres entrées de configuration s&amp;#039;il fournit des fichiers de schéma (xcs) dans son package.&lt;br /&gt;
&lt;br /&gt;
Il existe un autre cas d&amp;#039;utilisation (relativement évident) du principe de couches du gestionnaire de configuration : le remplacement des entrées de configuration de OpenOffice.org au niveau de tous les utilisateurs (&amp;quot;all users&amp;quot;). Un administrateur peut personnaliser l&amp;#039;installation de OpenOffice.org dans son propre compte utilisateur, et puis ensuite prendre les fichiers xcu créés contenant les personnalisations et les inclure dans un package qu&amp;#039;il installera par la suite avec &amp;quot;unopkg add --shared&amp;quot; chaque fois qu&amp;#039;il installera, réinstallera ou mettra à jour OpenOffice.org. Il n&amp;#039;y aura ainsi aucun besoin d&amp;#039;éditer les fichiers xcu dans &amp;quot;share/registry&amp;quot; à la main !&lt;br /&gt;
&lt;br /&gt;
Le principe des couches du registre de services et de la configuration sont les principes de base qui rendent le système de packages UNO à la fois fort et flexible.&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18423</id>
		<title>Non-code extensions FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Non-code_extensions_FR&amp;diff=18423"/>
		<updated>2006-10-11T21:16:39Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* Packages UNO: Principes de base */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;traduction en cours ... sur la base de :&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Non-code_extensions&lt;br /&gt;
&lt;br /&gt;
{{Extensions}}&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Packages UNO: Principes de base =&lt;br /&gt;
&lt;br /&gt;
Le concept de déploiement des extensions OpenOffice.org basé sur les packages UNO n&amp;#039;est pas limité au code. Il est également possible d&amp;#039;installer d&amp;#039;autres choses dans des packages faciles d&amp;#039;utilisation, comme des modèles, des autotextes etc. Vous trouverez ci-dessous une explication du fonctionnement de base. Elle est destinée aux utilisateurs avancés et aux administrateurs système. La plupart des points abordés ici sont expliqués de façon plus détaillée et plus compréhensible à d&amp;#039;autres endroits. Le sujet de la documentation ci-dessous est de présenter une vue générale et d&amp;#039;expliquer les principes de base. Si vous souhaitez en savoir plus sur UNO, vous pouvez consulter notre [http://wiki.services.openoffice.org/wiki/Uno wiki UNO] ou les pages web du  [http://udk.openoffice.org project UDK].&lt;br /&gt;
&lt;br /&gt;
Toutes les informations fournies ici se rapportent à OpenOffice.org 2.0.4. Les différences pouvant exister avec des versions plus anciennes ne sont pas expliquées ici, bien que l&amp;#039;on puisse mentionner explicitement les choses apparues pour la première fois dans la 2.0.4.&lt;br /&gt;
&lt;br /&gt;
Les packages UNO ne sont rien d&amp;#039;autre que des dossiers zippés avec des données supplémentaires et des méta-données décrivant le contenu. Il peuvent être déployés par l&amp;#039;interface du Gestionnaire de packages intégré à OOo (&amp;quot;Outils - Gestionnaire de packages&amp;quot;) ou grace à l&amp;#039;outil en ligne de commande “unopkg” qui se trouve dans le répertoire &amp;quot;program&amp;quot; de OOo. Ce dernier permet non seulement le déploiement d&amp;#039;un package pour un utilisateur, mais également pour tous les utilisateurs avec le paramètre optionnel &amp;quot;--shared”. Quand les packages sont installés, leur contenu est recopié à des emplacements privés bien définis sous “share/uno_packages” ou “user/uno_packages”, selon la portée de l&amp;#039;installation du package (installation système ou simple utilisateur). On entend par &amp;quot;Privé&amp;quot; : ne pas écrire de code qui se fie à la structure particulière du composant UNO décompressé, l&amp;#039;accès aux fichiers compressés doit utiliser un API défini qui se charge des détails pour l&amp;#039;appelant. Des fichiers en dehors des dossiers &amp;quot;uno_packages&amp;quot; ne devraient jamais être affectés, à la seule exception dont l&amp;#039;explication se trouve ici [http://www.openoffice.org/issues/show_bug.cgi?id=70283 bug]: Des macros Basic dans des packages UNO doivent toujours être enregistrées dans un fichier xlc se trouvant dans l&amp;#039;un des répertoires &amp;quot;basic&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Extensions conmportant des services UNO (code) ==&lt;br /&gt;
&lt;br /&gt;
Si un package UNO comporte un composant écrit en Java, C++ ou Python, ce dernier doit rendre public sa fonctionnalité afin d&amp;#039;être fonctionnel au sein de OpenOffice.org. Dans les développements basés sur UNO, un ensemble de fonctionnalités défini est appelé un &amp;quot;service&amp;quot;. Ceux-ci sont identifiés et on y accède par leurs noms de service. Un composant qui met en oeuvre de tels services doit informer les autres de son identification. Aujourd&amp;#039;hui tous les composants exportent une fonction qui peut être appélée par unopkg et qui va obliger le composant à écrire toutes les informations nécessaires dans le fichier de registre des services qui est créé et maintenu à l&amp;#039;intérieur d&amp;#039;un dossier „uno_package“. Lorsque OpenOffice.org se sert de son gestionnaire de service pour rechercher des services UNO disponibles, il regardera non seulement dans le registre des services (services.rdb) au sein du répertoire principal du programme (contenant toutes les informations sur les &amp;quot;services internes&amp;quot;), mais également dans tous les fichiers de registre se trouvant dans les dossiers “uno_packages”.&lt;br /&gt;
&lt;br /&gt;
OOo n&amp;#039;est capanble d&amp;#039;instancier des services UNO par leurs noms que s&amp;#039;il en connaît l&amp;#039;existence. Ceci est facile pour des services qui remplacent ceux déhà présents en &amp;quot;interne&amp;quot; puisqu&amp;#039;OOo les connaît déjà et s&amp;#039;en sert couramment, mais comme la plupart des composants fournissent de nouveaux services, il doit exister autre chose qui permet à OOo de s&amp;#039;en servir bien que lui étant inconnus lors de la compilation. Pour ces cas précis, les composants UNO doivent fournir des données complémentaires sur le moment auquel le chargement d&amp;#039;un service donné doit s&amp;#039;effectuer. Ces &amp;quot;données de composant additionnelles&amp;quot; sont fournies dans les fichiers de configuration de OOo. &lt;br /&gt;
&lt;br /&gt;
Un exemple serait un composant de filtre de document dans lequel les données complémentaires qui doivent être fournies consistent (entre autres) en le type de fichier que le filtre sait charger. Un composant de filtre précis pourrait se déclarer capable de charger des fichiers WordPerfect. Ainsi, si un utilisateur choisit ce filtre pour charger un ficher dans l&amp;#039;application alors OOo trouverait les données déclarées en recherchant toutes données contenant le type de fichier souhaité (wps), instancierait le composant de filtre par son nom de service tel que découvert dans ces données et ensuite s&amp;#039;en servir pour charger le fichier dans l&amp;#039;application. Chaque filtre déhà présent dans OOo a ses propres données de configuration et les filtres de conversion de documents dans les packages UNO fournissent leurs propres données de configuration de manière à complémenter celles déjà présentes dans le produit.&lt;br /&gt;
&lt;br /&gt;
== Support des Packages dans le Gestionnaire de Configuration ==&lt;br /&gt;
Le Gestionnaire de Configuration de OpenOffice.org présente également la capacité à rechercher dans un ensemble de dossiers extensibles de la même manière que le Gestionnaire de Services. S&amp;#039;il trouve plusieurs fichiers de configuration dans ces dossiers contenant des données pour les mêmes éléments dans l&amp;#039;arborescence des entrées de configuration, soit il les fusionnera, soit il remplacera des données d&amp;#039;ordre hiérarchique inférieur par des données d&amp;#039;ordre hiérarchique supérieur, selon le type de données de configuration. Les données de configuration &amp;quot;utilisateur&amp;quot; ont toujours précédence sur les données de configuration préinstallées se trouvant dans la couche partagée (&amp;quot;share&amp;quot;). Les données de configuration des packages UNO se situent entre ces deux extrêmes : les données de configuration partagées des packages UNO ont un ordre hiérarchique supérieur à la couche partagée pré-installée, mais un ordre hiérarchique inférieur aux données de configuration &amp;quot;utilisateur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Il demeure la question suivante : quelles données sont fusionnées lorsqu&amp;#039;il y a au moins deux couches de configuration ?&lt;br /&gt;
&lt;br /&gt;
Le Gestionnaire de Configuration a tendance à prendre ses informations dans des fichiers xml (portant l&amp;#039;extension de fichier xcu) avec des éléments typés. Il supporte quelques types de base, des types structurés qui doivent être définis dans des fichiers de schéma (portant l&amp;#039;extension de fichier xcs) et fait une liste de tous ces types. Ceux-ci ne peuvent pas être étendus. Si la configuration découvre des valeurs différentes de celles dans les différentes couches, c&amp;#039;est la valeur de l&amp;#039;ordre hiérarchique supérieur qui est retenue. Pour la fusion d&amp;#039;éléments de configuration et par ce biais l&amp;#039;extension de la fonctionnalité qui en dépend nécessite le type &amp;quot;set&amp;quot;. Pour mieux comprendre son fonctionnement, regardez dans [[Configuration_schema_path_settings|configuration schema]] mentionné dans la section &amp;quot;Configuration des Chemins&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Un composant peut étendre ou modifier la configuration de OpenOffice.org en lui fournissant des fichiers xcu dans son package qui remplaceront ou étendront (fusion) des entrées de configuration dans OpenOffice.org. Il peut également disposer de ses propres entrées de configuration s&amp;#039;il fournit des fichiers de schéma (xcs) dans son package.&lt;br /&gt;
&lt;br /&gt;
Il existe un autre cas d&amp;#039;utilisation (relativement évident) du principe de couches du gestionnaire de configuration : le remplacement des entrées de configuration de OpenOffice.org au niveau de tous les utilisateurs (&amp;quot;all users&amp;quot;). Un administrateur peut personnaliser l&amp;#039;installation de OpenOffice.org dans son propre compte utilisateur, et puis ensuite prendre les fichiers xcu créés contenant les personnalisations et les inclure dans un package qu&amp;#039;il installera par la suite avec &amp;quot;unopkg add --shared&amp;quot; chaque fois qu&amp;#039;il installera, réinstallera ou mettra à jour OpenOffice.org. Il n&amp;#039;y aura ainsi aucun besoin d&amp;#039;éditer les fichiers xcu dans &amp;quot;share/registry&amp;quot; à la main !&lt;br /&gt;
&lt;br /&gt;
Le principe des couches du registre de services et de la configuration sont les principes de base qui rendent le système de packages UNO à la fois fort et flexible.&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Talk:Non-code_extensions_FR&amp;diff=18422</id>
		<title>Talk:Non-code extensions FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Talk:Non-code_extensions_FR&amp;diff=18422"/>
		<updated>2006-10-11T20:24:38Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: Commentaires début trad extensions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Il me semblerait normal de parler de &amp;quot;paquetages&amp;quot;, comme on le voit traduit en français sous Linux, mais il est vrai que cela n&amp;#039;a pas été traduit ainsi au niveau de l&amp;#039;interface d&amp;#039;OOo. Par exemple, dans le menu Outils, il est écrit &amp;quot;Gestionnaire de packages&amp;quot;. Si on veut que les trads soient homogènes, il faut alors laisser le mot tel qu&amp;#039;il apparaît dans le produit, sinon les lecteurs risquent de se perdre.&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X&amp;diff=5736</id>
		<title>Printing problems with OpenOffice.org 2.0 for Mac OS X</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X&amp;diff=5736"/>
		<updated>2006-03-03T14:38:43Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* [ verified : 1 times ] Network  printing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please, use the part corresponding to your problem, or create one if needed. To help us, please describe as completely as possible the description of your problem, giving just the most important informations.&lt;br /&gt;
&lt;br /&gt;
In order to be able to recense the most important issues, every problem type MUST BEGIN using this syntax :&lt;br /&gt;
&lt;br /&gt;
[ verified : number times]&lt;br /&gt;
&lt;br /&gt;
means the first entering the problem put 1, next people will simply increment the counter&lt;br /&gt;
Thank&amp;#039;s in advance to put&lt;br /&gt;
&lt;br /&gt;
1) your name ( without personnal informations, please)&lt;br /&gt;
&lt;br /&gt;
2) the version of OpenOffice.org you are using, your locale&lt;br /&gt;
&lt;br /&gt;
3) the printer you are using : Mark Model ... whatever you think usefull for this field&lt;br /&gt;
&lt;br /&gt;
4) in a few words, the problem you have&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Cannot configure my printer ==&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Printer configured but not found ==&lt;br /&gt;
&lt;br /&gt;
== [ verified : 1 times ] Network  printing ==&lt;br /&gt;
Hi,&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m having problems with :&lt;br /&gt;
&lt;br /&gt;
Network Printer : HP4730 multifunction printer / photocopier /scanner&lt;br /&gt;
The printer is a standalone network printer serving a group of workers, with a fixed IP address.&lt;br /&gt;
&lt;br /&gt;
The MacOSX is 10.3 Panther&lt;br /&gt;
Locale : FR&lt;br /&gt;
&lt;br /&gt;
The printer can be seen and printed to from OOo 2.0.x from the Linux workstations.&lt;br /&gt;
&lt;br /&gt;
The printer does not appear in the list of CUPS printers in the OOo print dialog under OOo 2.0.x for the MacOSX workstations.&lt;br /&gt;
&lt;br /&gt;
The printer is available and the print options configurable from OOo 1.1.x on MacOSX.&lt;br /&gt;
&lt;br /&gt;
alex&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Printing stops before the end ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Features not available ==&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X&amp;diff=5735</id>
		<title>Printing problems with OpenOffice.org 2.0 for Mac OS X</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X&amp;diff=5735"/>
		<updated>2006-03-03T14:38:03Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please, use the part corresponding to your problem, or create one if needed. To help us, please describe as completely as possible the description of your problem, giving just the most important informations.&lt;br /&gt;
&lt;br /&gt;
In order to be able to recense the most important issues, every problem type MUST BEGIN using this syntax :&lt;br /&gt;
&lt;br /&gt;
[ verified : number times]&lt;br /&gt;
&lt;br /&gt;
means the first entering the problem put 1, next people will simply increment the counter&lt;br /&gt;
Thank&amp;#039;s in advance to put&lt;br /&gt;
&lt;br /&gt;
1) your name ( without personnal informations, please)&lt;br /&gt;
&lt;br /&gt;
2) the version of OpenOffice.org you are using, your locale&lt;br /&gt;
&lt;br /&gt;
3) the printer you are using : Mark Model ... whatever you think usefull for this field&lt;br /&gt;
&lt;br /&gt;
4) in a few words, the problem you have&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Cannot configure my printer ==&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Printer configured but not found ==&lt;br /&gt;
&lt;br /&gt;
== [ verified : 1 times ] Network  printing ==&lt;br /&gt;
Hi,&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m having problems with :&lt;br /&gt;
&lt;br /&gt;
Network Printer : HP4730 multifunction printer / photocopier /scanner&lt;br /&gt;
The printer is a standalone network printer serving a group of workers, with a fixed IP address.&lt;br /&gt;
&lt;br /&gt;
The MacOSX is 10.3 Panther&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The printer can be seen and printed to from OOo 2.0.x from the Linux workstations.&lt;br /&gt;
&lt;br /&gt;
The printer does not appear in the list of CUPS printers in the OOo print dialog under OOo 2.0.x for the MacOSX workstations.&lt;br /&gt;
&lt;br /&gt;
The printer is available and the print options configurable from OOo 1.1.x on MacOSX.&lt;br /&gt;
&lt;br /&gt;
alex&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Printing stops before the end ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Features not available ==&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X&amp;diff=5734</id>
		<title>Printing problems with OpenOffice.org 2.0 for Mac OS X</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X&amp;diff=5734"/>
		<updated>2006-03-03T14:34:57Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* [ verified : 0 times ] Printing stops before the end */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please, use the part corresponding to your problem, or create one if needed. To help us, please describe as completely as possible the description of your problem, giving just the most important informations.&lt;br /&gt;
&lt;br /&gt;
In order to be able to recense the most important issues, every problem type MUST BEGIN using this syntax :&lt;br /&gt;
&lt;br /&gt;
[ verified : number times]&lt;br /&gt;
&lt;br /&gt;
means the first entering the problem put 1, next people will simply increment the counter&lt;br /&gt;
Thank&amp;#039;s in advance to put&lt;br /&gt;
&lt;br /&gt;
1) your name ( without personnal informations, please)&lt;br /&gt;
&lt;br /&gt;
2) the version of OpenOffice.org you are using, your locale&lt;br /&gt;
&lt;br /&gt;
3) the printer you are using : Mark Model ... whatever you think usefull for this field&lt;br /&gt;
&lt;br /&gt;
4) in a few words, the problem you have&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Cannot configure my printer ==&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Printer configured but not found ==&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Network  printing ==&lt;br /&gt;
Hi,&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m having problems with :&lt;br /&gt;
&lt;br /&gt;
Network Printer : HP4730 multifunction printer / photocopier /scanner&lt;br /&gt;
The printer is a standalone network printer serving a group of workers, with a fixed IP address.&lt;br /&gt;
&lt;br /&gt;
The MacOSX is 10.3 Panther&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The printer can be seen and printed to from OOo 2.0.x from the Linux workstations.&lt;br /&gt;
&lt;br /&gt;
The printer does not appear in the list of CUPS printers in the OOo print dialog under OOo 2.0.x for the MacOSX workstations.&lt;br /&gt;
&lt;br /&gt;
The printer is available and the print options configurable from OOo 1.1.x on MacOSX.&lt;br /&gt;
&lt;br /&gt;
alex&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Printing stops before the end ==&lt;br /&gt;
Forgot to mention the locale : FR&lt;br /&gt;
&lt;br /&gt;
alex&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Features not available ==&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X&amp;diff=5733</id>
		<title>Printing problems with OpenOffice.org 2.0 for Mac OS X</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X&amp;diff=5733"/>
		<updated>2006-03-03T14:33:56Z</updated>

		<summary type="html">&lt;p&gt;Wurzel: /* [ verified : 0 times ] Network  printing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please, use the part corresponding to your problem, or create one if needed. To help us, please describe as completely as possible the description of your problem, giving just the most important informations.&lt;br /&gt;
&lt;br /&gt;
In order to be able to recense the most important issues, every problem type MUST BEGIN using this syntax :&lt;br /&gt;
&lt;br /&gt;
[ verified : number times]&lt;br /&gt;
&lt;br /&gt;
means the first entering the problem put 1, next people will simply increment the counter&lt;br /&gt;
Thank&amp;#039;s in advance to put&lt;br /&gt;
&lt;br /&gt;
1) your name ( without personnal informations, please)&lt;br /&gt;
&lt;br /&gt;
2) the version of OpenOffice.org you are using, your locale&lt;br /&gt;
&lt;br /&gt;
3) the printer you are using : Mark Model ... whatever you think usefull for this field&lt;br /&gt;
&lt;br /&gt;
4) in a few words, the problem you have&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Cannot configure my printer ==&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Printer configured but not found ==&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Network  printing ==&lt;br /&gt;
Hi,&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m having problems with :&lt;br /&gt;
&lt;br /&gt;
Network Printer : HP4730 multifunction printer / photocopier /scanner&lt;br /&gt;
The printer is a standalone network printer serving a group of workers, with a fixed IP address.&lt;br /&gt;
&lt;br /&gt;
The MacOSX is 10.3 Panther&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The printer can be seen and printed to from OOo 2.0.x from the Linux workstations.&lt;br /&gt;
&lt;br /&gt;
The printer does not appear in the list of CUPS printers in the OOo print dialog under OOo 2.0.x for the MacOSX workstations.&lt;br /&gt;
&lt;br /&gt;
The printer is available and the print options configurable from OOo 1.1.x on MacOSX.&lt;br /&gt;
&lt;br /&gt;
alex&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Printing stops before the end ==&lt;br /&gt;
&lt;br /&gt;
== [ verified : 0 times ] Features not available ==&lt;/div&gt;</summary>
		<author><name>Wurzel</name></author>
	</entry>
</feed>