I. Introduction▲
La Bibliothèque d’objets est une nouvelle fonctionnalité de 4e Dimension permettant un stockage permanent de certains objets. À l’inverse les Librairies 4D Insider ou des composants, les Bibliothèques d’objets peuvent être intégrées directement dans les bases 4D, sans aucune installation, déplacement ou copie à partir de 4D Insider.
II. Qu’est qu’une Bibliothèque d’objets ?▲
Une Bibliothèque d’objets est un fichier externe composé d’objets formulaire. Ces Bibliothèques permettent aux développeurs de grouper des objets dans un simple « conteneur » qui peut être partagé entre les bases et entre les développeurs.
Un conteneur partagé▲
Une bibliothèque d’objets contient donc simplement des objets. Ceci inclut également toutes les propriétés de l’objet (actions standards, événements, etc.) ainsi que les Méthodes objet. Une Bibliothèque d’objets n’est pas affectée à une base en particulier. Ainsi ses objets peuvent être utilisés dans des bases différentes.
Un fichier externe▲
Une Bibliothèque est stockée en tant que fichier externe qui peut être chargé en Mode Structure ou en Mode Menus Créés. Ce fichier aura l’extension « .4il » (identique à l’extension des librairies d’objets de 4D Insider). Ces fichiers sont disponibles à la fois localement et en architecture Client-Serveur.
En client-serveur, elle doit se trouver dans le dossier nommé « Extras » (placé au même niveau que la structure de la base) pour être recopiée sur chaque poste client, au même niveau que le dossier PlugIns, dans le dossier actif de 4D.
MacOS :
Utilisateur:Library:Application Support:4D:NomdelaBase_xxx_xxx_xx_xx:Extras
Windows :
C:\Documents and Settings\Utilisateur\Application Data\4D\NomdelaBase_xxx_xxx_xx_xx\Extras
("xxx_xxx_xx_xx étant le n° IP de la machine).
III. Aperçu des Bibliothèques d’objets▲
Elle peut contenir jusqu’à 32 000 éléments : bouton, texte, image, liste hiérarchique… (avec propriétés et objets dépendants : méthode objet, énumération, feuille de style, format et filtre, image, texte d’aide, STR#).
La création d’une Bibliothèque d’objets est très simple. Ceci peut être fait en mode Structure en passant par la barre de menu ou en utilisant le bouton « Nouveau » situé dans la barre d’outils :
Lorsqu’une Bibliothèque d’objets est créée, elle ressemble à une zone de presse-papiers. Les objets peuvent être soit déposés à partir d’un formulaire, soit collés dans cette zone.
IV. Utilisation des objets dans une Bibliothèque▲
Les objets peuvent être glissés de la Bibliothèque d’objets vers le formulaire, ou copiés de la Bibliothèque et coller sur le formulaire et vice-versa. L’objet, qui est une partie de la Bibliothèque d’objets, peut être renommé simplement en double-cliquant dessus.
Une autre nouveauté de 4D 2004 est la commande MODIFIER FORMULAIRE qui permet à l’utilisateur final de modifier un formulaire en Mode Menus Créés. Cette commande peut préciser une Bibliothèque d’objets en particulier à utiliser lorsque l’utilisateur édite le formulaire.
V. Bibliothèque d’objets et Librairies 4D Insider▲
La principale différence entre les deux est que la Bibliothèque d’objets peut seulement inclure des objets issus d’un formulaire tandis qu’une Librairie 4D Insider peut contenir tout ce qu’une base peut contenir. De plus, les Librairies 4D Insider sont seulement accessibles avec 4D Insider, tandis qu’une bibliothèque d’objets est accessible à partir de 4D et n’importe quelle base qui utilise la commande MODIFIER FORMULAIRE.
VI. Utilisation de la Bibliothèque d’objets dans les différents modes▲
Les Bibliothèques d’objets ne sont pas seulement disponibles aux développeurs en Mode Structure, mais aussi à l’utilisateur final par le Mode Menus Créés.
Mode Structure▲
Les Bibliothèques d’objets sont ouvertes dans ce Mode grâce au menu Fichier. Comme les propriétés et les Méthodes objet sont gardées dans une Bibliothèque d’objet, elles sont également transférées lorsque les objets sont récupérés de la Bibliothèque.
Cela signifie que les développeurs peuvent créer des objets avec code qui peuvent être transférés d’une base vers une autre. Cette façon de réutiliser le code permet de gagner énormément de temps sur un développement.
Mode Menus Créés▲
Permettre à un utilisateur final de personnaliser l’application que vous avez développée est une nouvelle fonctionnalité apparue avec 4D 2004. En utilisant la commande MODIFIER FORMULAIRE, l’utilisateur peut changer l’apparence d’un formulaire « modifiable » en utilisant les Bibliothèques d’objets fournies.
MODIFIER FORMULAIRE
([
Ma Table
];
"Saisie"
;
""
;
"Exemples.4IL"
)
La ligne de code ci-dessus ouvre « l’éditeur de formulaire utilisateur » pour « éditer » le formulaire « Saisie » de la table [Ma Table] et ouvre la Bibliothèque d’objets appelée « Exemples.4il ».
Lorsque vous utilisez la commande MODIFIER FORMULAIRE avec une Bibliothèque d’objets, il y a un point très important à noter : les objets avec Méthode objet ne peuvent pas être utilisés.
Dans une base compilée, du code ne peut pas être ajouté ou changé. La commande MODIFIER FORMULAIRE n’est pas différente, même si elle vous permet d’ajouter ou de supprimer des objets issus de la Bibliothèque d’objets, elle ne permet pas de rajouter du code. Ainsi, si un objet a une méthode objet, il ne pourra pas être ajouté. En fait l’objet lui-même ne sera pas visible.
VII. Mode Structure contre Mode Menus Créés▲
Ci-dessous, un formulaire ouvert en Mode Structure. La Bibliothèque d’objets est aussi ouverte en Mode Structure et comme vous pouvez le constater, quelques objets ont des Méthodes objet. Ils sont parfaitement visibles et on peut les placer sur le formulaire.
Ci-dessous, nous avons le même formulaire et la même Bibliothèque d’objets ouverts avec la commande MODIFIER FORMULAIRE en Mode Menus Créés. Mais ici certains objets de la Bibliothèque d’objets sont absents : il s’agit de tous ceux qui ont une Méthode objet.
VIII. Méthode objet▲
Lorsque les objets avec Méthode objet sont stockés dans une Bibliothèque d’objets, leur code est « déconnecté » de la base. Ce qui signifie que c’est seulement après avoir été ajouté en Mode Structure que le code peut être mis en forme (« tokenisé ») et accessoirement compilé.
MODIFIER FORMULAIRE permet aux Bibliothèques d’objets d’utiliser des objets avec les propriétés mises en place dans la liste des propriétés, en incluant les actions standards.
Partager des fonctionnalités▲
Les Bibliothèques d’objets sont un excellent moyen pour réutiliser le code que vous ou un autre développeur avez écrit.
Pensez Générique▲
Plus le code derrière les objets sera générique, plus vous pourrez utiliser ces objets sur des bases différentes. Le but est de créer un objet qui n’a à connaître de son environnement que le formulaire sur lequel il est et la Table dont dépend ce formulaire.
Pour un objet vraiment générique, vous devez pouvoir récupérer ces informations grâce à l’environnement. Vous pouvez utiliser des commandes 4D qui récupèrent ces informations, comme LIRE TITRES TABLES ou Table du formulaire courant pour analyser l’environnement des objets.
Les objets doivent pouvoir fonctionner sur n’importe quelle base, avec n’importe quelle table, ou sur n’importe quel formulaire. Le nom de la table ou le nom d’un champ spécifique ne devrait jamais concerner un objet ; il devrait pouvoir exécuter le code indépendamment de cela.
Si vous projetez de créer une Bibliothèque d’objets avec un faible niveau de dépendance, c’est-à-dire qui fonctionnera avec n’importe quelle table dans n’importe quelle base, vous devez proscrire le code « en dur ». Une Méthode objet qui contient du code comme le code ci-dessous sera un désastre si vous comptez l’utiliser dans n’importe quelle base.
2.
C_POINTEUR
(
$pTable
)
$pTable
:=->[
MaTable]
La façon correcte serait de récupérer la table grâce au pointeur sur la table du formulaire courant :
2.
3.
4.
5.
6.
C_POINTEUR
(
$pTable
)
$pTable
:=
Table du formulaire courant
Si
(
Nom de la table
(
$pTable
)=
"MaTable"
)
`faire quelque chose
Fin de si
IX. Composants▲
Une autre alternative est de créer un composant. Un Composant vous permet d’inclure n’importe quelle Méthode projet ou formulaire souhaités dans une base, et les Bibliothèques d’objets ne sont pas limitées dans ce sens. Le seul problème est que si vous essayez d’utiliser la Bibliothèque d’objets avec un autre Composant, l’objet ne fonctionnera pas si les Méthodes projet ne sont pas présentes.
Dans la base exemple, il y a une Méthode appelée « DoSomethingToHighlighted ». Cette méthode est actuellement une partie d’un composant qui a été installé dans la base. Regardez le formulaire contenant le bouton intitulé « Faire quelque chose ». La Méthode objet de cet objet utilise le composant :
Notez que si cette Méthode projet n’existe pas dans la base, la Méthode objet produira une erreur. Il est important de noter que la Méthode objet pour un objet est toujours maintenue, que la Méthode projet qui l’appelle soit présente ou non.
X. Objet indépendant ou objet dépendant▲
Lorsque l’on parle d’objets « indépendants », nous parlons d’objets de la Bibliothèque d’objets qui peuvent fonctionner indépendamment de n’importe quelle base ou composant.
XI. La Bibliothèque d’objet et les actions standards▲
Un exemple de Bibliothèque d’objets indépendante est celle qui ne contient que des objets avec actions standards. Les objets avec actions standards sont très fréquemment utilisés et peuvent donc valablement être placés dans une Bibliothèque d’objets.
Par exemple, disons que vous travaillez sur un projet qui requiert plusieurs formulaires. Au départ, le formulaire utilise le jeu standard de boutons:
Pour mettre à jour ces boutons, vous devez aller sur l’objet du formulaire et modifier ses propriétés et l’image du bouton. Encore mieux, vous pouvez modifier un formulaire et copier-coller ce que vous voulez sur les autres formulaires. C’est parfait pour travailler sur une base, mais si vous voulez utiliser ces boutons sur plusieurs bases ?
Voici le jeu de boutons que nous souhaiterions utiliser :
La solution est d’utiliser une Bibliothèque d’objets. Nous créons une Bibliothèque d’objets contenant les boutons avec actions standards.
Nous ajoutons chaque bouton individuellement et aussi tous les objets dans la position souhaitée. Maintenant vous pouvez glisser-déposer les objets sur n’importe quel formulaire dans n’importe quelle base.
Notez que vous avez sept objets individuels et un huitième objet qui est la combinaison de tous. Chaque objet a aussi un nom qui identifie son action. Ce nom peut être ce que vous voulez.
L’objet qui combine tous les boutons peut être déposé sur un formulaire et c’est comme si vous déposiez les boutons un par un. Pour additionner ce type d’objet dans la Bibliothèque d’objets, il suffit de les sélectionner sur le formulaire, de copier et de coller dans la Bibliothèque. Les propriétés de chaque bouton sont gardées, ainsi que les positions relatives des uns par rapport aux autres.
Les objets avec actions standards dans les Bibliothèques d’objets sont pratiques à utiliser avec les Formulaires Utilisateur, car ils permettent à l’utilisateur final de modifier un formulaire et d’ajouter des objets avec action à ses formulaires.
XII. Les objets avec Méthode objet▲
Lorsque les objets ont des Méthodes objet, nous devons considérer les choses suivantes :
- l’objet est-il relié à une Méthode projet ?
- l’objet fonctionne-t-il seulement avec une table spécifique ?
- souhaitez-vous que l’objet fonctionne dans n’importe quelle base ?
XIII. Utilisation des Méthodes projet▲
Supposons que nous voulions appliquer une action à une sélection d’enregistrements en vidéo-inverse pour une certaine table [Ma Table]. Nous devons avoir une Méthode projet appelée « DoSomethingToHighlighted » ci-dessous :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
C_POINTEUR
(
$1
;
$pTable
)
C_TEXTE
(
$highlightedSetName
)
` on récupère un pointeur sur la table courante
$pTable
:=
$1
$highlightedSetName
:=
"HighlightedRecords"
LIRE ENREGISTREMENTS MARQUES
(
$pTable
->;
$highlightedSetName
)
Si
(
Enregistrements dans ensemble
(
$highlightedSetName
)>
0
)
` on fait quelque chose
ALERTE
(
Chaine
(
Enregistrements dans ensemble
(
$highlightedSetName
))+
" enregistrement(s) a (ont) été sélectionné(s)."
)
Sinon
ALERTE
(
"Merci de choisir quelques enregistrements !"
)
Fin de si
Nous avons aussi un bouton sur le formulaire « Output » de la table [Ma Table] avec la Méthode objet suivante :
2.
3.
4.
5.
6.
Au cas ou
: (
Evenement formulaire
=
Sur clic
)
DoSomethingToHighlighted (->[
Ma Table
])
Fin de cas
Cet objet fonctionnera si la Méthode projet DoSomethingToHighlighted est présente dans la base. Un composant fonctionnera parfaitement avec une Bibliothèque d’objet contenant un objet tel que celui-ci.
XIV. Travailler avec n’importe quelle table▲
Dans l’exemple ci-dessous, nous voyons que l’objet fait quelque chose sur une sélection d’enregistrements en vidéo-inverse d’une table spécifique. La Méthode objet pointe directement sur une table nommée [Ma Table]. Cela signifie que si un bouton doit pouvoir fonctionner, il doit le faire sur des enregistrements de [Ma Table]. Pour que cet objet fonctionne avec n’importe quelle table, nous opérons un simple changement :
2.
3.
4.
5.
6.
7.
Au cas ou
:(
Evenement formulaire
=
Sur clic
)
`on remplace [Ma Table] par Table du formulaire courant
DoSomethingToHighlighted (
Table du formulaire courant
)
Fin de cas
Il est important d’utiliser cette méthode pour être sûr que vos boutons fonctionneront dans tous les cas de figure
XV. Travailler avec n’importe quelle base▲
Maintenant il est nécessaire que la Méthode projet DoSomethingToHighlighted existe dans la base utilisant l’objet. Pour éliminer ce problème, nous pouvons nous passer de la Méthode projet en copiant tout son code dans la Méthode objet. Nous obtenons une version finale :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Au cas ou
: (
Evenement formulaire
=
Sur clic
)
C_POINTEUR
(
$pTable
)
C_TEXTE
(
$highlightedSetName
)
`on récupère un pointeur sur la table courante
$pTable
:=
Table du formulaire courant
$highlightedSetName
:=
"HighlightedRecords"
LIRE ENREGISTREMENTS MARQUES
(
$pTable
->;
$highlightedSetName
)
Si
(
Enregistrements dans ensemble
(
$highlightedSetName
)>
0
)
` faire quelque chose
ALERTE
(
Chaine
(
Enregistrements dans ensemble
(
$highlightedSetName
))
+
" enregistrement(s) a (ont) été sélectionné(s)."
)
Sinon
ALERTE
(
"Merci de choisir quelques enregistrements !"
)
Fin de si
Fin de cas
XVI. Glisser, déposer et modifier▲
En utilisant les principes décrits ici, nous pouvons créer une Bibliothèque d’objets qui peut être utilisée avec des Composants ou, encore mieux, avec des objets qui peuvent être entièrement indépendants et utilisés tout seuls. Mais parfois il est impossible de créer un objet complètement générique à cause du contexte dans lequel il est utilisé.
Par exemple, supposons que nous voulions créer un objet qui fonctionne avec n’importe quelle table contenant des informations sur des contacts. Ces informations sont suffisamment fréquentes pour qu’une programmation générique soit utile. Si les informations sont en générales stockées dans des champs comme Prénom, Nom, Téléphone, et ainsi de suite, vous ne pouvez savoir à l’avance si ces champs existeront ou non et quel sera leur nom précis.
Dans ce cas, le mieux est de créer des objets qui pourront être facilement modifiés par les développeurs qui les adapteront rapidement à leur propre solution. Pour illustrer ceci, prenez par exemple la Bibliothèque d’objet « 4D Integration.4IL ». Elle contient un bouton qui permet d’ajouter un contact dans Microsoft Outlook 2003.
Voici un extrait du code :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
C_TEXTE
(
$firstname
;
$lastname
;
$email
;
$company
;
$address
)
C_TEXTE
(
$city
;
$state
;
$zip
;
$country
;
$phone
;
$web
;
$notes
;
$fax
)
...
$firstname
:=[
Contacts]
First Name
$lastname
:=[
Contacts]
Last Name
$email
:=[
Contacts]
Email Address
$company
:=[
Contacts]
Company
$address
:=[
Contacts]
Address
$city
:=[
Contacts]
City
$state
:=[
Contacts]
State
$zip
:=[
Contacts]
Zip Code
$country
:=[
Contacts]
Country
$phone
:=[
Contacts]
Phone
$fax
:=[
Contacts]
Fax
$web
:=[
Contacts]
Web Si
te
$notes
:=[
Contacts]
Notes
Le code fait référence à une table appelée [Contacts] (voir la base Exemple « 4D Integration », qui est une base de démonstration US jointe avec cette note et qui utilise cette Bibliothèque d’objets). Cette base n’est pas traduite en français, mais présentait suffisamment d’intérêt pour être ajoutée en base de démonstration à cette note.
Si dans sa base la table et les champs contenant ces informations portent un nom différent, il suffit de le changer ici.
Notez également que des variables récupèrent les valeurs des champs. Il faut que ces variables soient typées au début de la Méthode.
XVII. Office et applis Mac (iCal, carnet d’adresses)▲
Pour Windows, nous avons créé une Bibliothèque d’objets qui permet par glisser-déposer de rajouter des fonctionnalités Microsoft Office 2003 dans vos bases. Cette Bibliothèque d’objets vous permet d’intégrer des applications Microsoft Office 2003 telles que Word et Excel. Chacun de ces objets peut être ajouté dans n’importe quelle base. Ils utilisent de nouvelles commandes telles que LANCER PROCESS EXTERNE et APPLIQUER TRANSFORMATION XSLT.
Sous MacOSX, en utilisant cet ensemble de commandes, la Bibliothèque d’objets créera des documents Microsoft Excel 2004, récupérera des événements de iCal, et ajoutera des contacts dans le Carnet d’adresses. Microsoft Word 2004 pour Mac ne fournit pas de support XML pour l’instant.
Création d’un document Excel▲
Cet objet génère un document Excel sur la sélection d’enregistrements dans le formulaire liste de la base :
Sélectionnez quelques enregistrements et cliquez sur « Sales Report ». Vous obtiendrez :
et en cliquant sur le bouton « Invoices » :
Ajoutez des contacts dans Outlook▲
Cet objet ajoute un contact dans Outlook 2003. À partir de la table Contact, en visualisant le formulaire sortie, cliquez sur le bouton « Add Contact »:
Ajoutez des événements et des contacts▲
Sous MacOS, vous utilisez la Bibliothèque d’objets présente dans le dossier « Mac4DX ». Elle contient les objets suivants :
Par exemple, pour importer des événements de « iCal », utilisez le bouton « Import Events ». Il se trouve, dans la base 4D Integration, sur le formulaire sortie de la table [Appointments] :
L’application « iCal » est alors lancée
Un dialogue vous permettra de choisir les calendriers dont vous souhaitez récupérer les événements. Une fois ce choix effectué, un autre dialogue vous demandera de choisir la destination de ces informations (presse-papiers, TextEdit ou 4D).
Si le choix « 4D » est fait :
Dans la table [Contacts], on sélectionne des contacts, et en cliquant sur le bouton « Export Contacts » :
on exporte les contacts vers le carnet d’adresses :
XVIII. Conclusion▲
Les Bibliothèques d’objets sont faciles à utiliser, mais aussi très efficaces pour partager du code. Les objets d’un formulaire, ainsi que leurs propriétés et les Méthodes objet, sont stockés dans les Bibliothèques d’objets, ce qui permet aux développeurs de rajouter très rapidement des fonctionnalités dans leurs bases.
De plus, l’addition de la commande MODIFIER FORMULAIRE permet à l’utilisateur final de personnaliser ses formulaires avec la Bibliothèque d’objets.
XIX. Bases exemples▲
Téléchargez les bases exemples :
Base exemple
Base exemple