version 6.0
La structure multiprocess particulière de 4D impose que le serveur DDE fonctionne dans un process particulier. DDE_Tools dispose donc de la commande DDE_SERVER, chargée d'exécuter les commandes DDE envoyées par les autres applications. Ces commandes sont alors exécutées dans le contexte qui a appelé la commande DDE_SERVER.
Des exemples de process serveur DDE sont fournis dans la description de la commande DDE_SERVER.
Depuis une autre application, il est possible de lire et d'écrire le contenu des variables process ou interprocess et des champs de 4e Dimension.
Création d'un courrier personnalisé dans Microsoft® Word
Supposons que vous disposiez d'une base 4D appelée "Contacts.4DB" contenant un certain nombre de coordonnées de personnes dans une table [Contacts]. Ouvrez cette base et choisissez la personne à qui vous voulez écrire, en double-cliquant sur son enregistrement en mode Utilisation.
Dans ce cas, l'appel de la commande DDE_SERVER peut être effectué dans la méthode du formulaire (cf. exemple 2 de la commande DDE_SERVER).
Lancez maintenant Microsoft® Word et rédigez votre lettre. A la place où vous auriez normalement écrit le nom du destinataire, insérez un champ en appuyant sur les touches Ctrl+F9.
Saisissez à l'intérieur des deux accolades :
{DDE 4D Contacts.4DB [Contacts]Nom}
Faites la même chose pour les autres champs que vous souhaitez inclure dans votre document, comme le prénom, l'adresse, le code postal :
Note : Si l'intitulé de votre champ se compose de deux mots séparés par un espace, placez-les entre guillemets : «[Contacts]Code Postal».
Raccourcis clavier
Pour insérer un champ, tapez les touches Ctrl + F9.
Pour afficher la valeur d'un champ, il suffit de le sélectionner et de taper la touche F9.
Pour afficher alternativement le contenu du champ et sa définition, appuyez sur les touches Majuscule + F9.
Si vous changez d'enregistrement dans 4D, il vous suffit d'appuyer sur la touche F9 pour mettre à jour les champs du document Word.
Note : Vous pouvez aussi afficher le contenu d'une variable (process ou interprocess), il suffit de remplacer l'intitulé du champ par le nom de la variable.
Envoyer des données à 4D
Imaginons maintenant que vous disposiez d'une feuille Excel qui calcule la feuille de paye d'un salarié, le fichier des salariés étant géré par 4e Dimension.
Le fichier "BaseDDE.4DB" est ouvert par 4D en mode Utilisation. Vous vous trouvez en mode Utilisation sur l'enregistrement "Dupont".
Dans ce cas également, l'appel de la commande DDE_SERVER peut être effectué via la méthode du formulaire (cf. exemple 2 de la commande DDE_SERVER).
Excel est ouvert sur une feuille de calcul type, calculant la fiche de paye. Une simple macro permet de calculer le salaire net et de renvoyer la valeur dans l'enregistrement. Cette macro pourrait être :
La première partie de cette procédure lit le montant du salaire brut consigné dans l'enregistrement courant et l'importe dans la cellule (10;5).
Proc CalculeSalaire()
`Initialisation de la communication avec 4D
Canal = AccéderDDE ("4D"; "BaseDDE.4DB")
`On lit dans la base 4D le champ SalaireBrut
Cellules(10;5).Formule = RequêteDDE(Canal; "[Contacts]SalaireBrut")
La seconde partie récupère le montant du salaire net calculé dans la cellule (5;5) et l'exporte dans le champ SalaireNet de votre enregistrement courant.
AffecteRéf SalaireNet = Cellules(5;5) PointDDE Canal; "[Salariés]SalaireNet"; SalaireNet `La communication peut s'interrompre TerminerDDE Canal Fin Proc
Faire exécuter des commandes à 4D
Les commandes du langage de 4e Dimension peuvent être également exécutées depuis une application tierce lorsque cette dernière a ouvert une connexion DDE avec 4e Dimension.
Dans ce cas, vous devez utiliser la méthode de gestion de process DDE fournie dans l'exemple 1 de la commande DDE_SERVER.
Imaginons une base 4D contenant des enregistrements Employés, comprenant une méthode projet 4D calculant la masse salariale et stockant le résultat dans la variable interprocess <>Resultat :
`Méthode MSalariale TOUT SELECTIONNER([Salariés]) <>Resultat:=Somme([Salariés]Salaire)
Cette méthode pourra maintenant être lancée depuis Excel avec la macro suivante :
Proc CalculeMasseSalariale()
Canal = AccéderDDE("4D"; "BaseDDE.4DB")
ExécuterDDE Canal; "[MSalariale]"
Cellules(8; 5).Formule = RequêteDDE (Canal; "<>Resultat")
TerminerDDE Canal
Fin Proc
Lorsque 4D recevra d'Excel l'ordre de calculer la masse salariale, il empilera cette commande et attendra qu'une commande 4D DDE_SERVER soit lancée. Lors de l'appel de cette commande, 4D exécutera la commande reçue dans le process ayant appelé DDE_SERVER, puis validera l'opération auprès de l'application appelante :
Note : Si vous n'avez pas installé le process appelant périodiquement la commande DDE_SERVER, non seulement les commandes envoyées ne seront pas exécutées par 4D, mais de plus l'application ayant lancé la commande restera en attente d'une réponse de 4D. Il est donc important de bien respecter ce protocole.
Référence
4e Dimension en tant que client DDE, DDE_SERVER.