Sunteți pe pagina 1din 2154

4e Dimension

_______________________________________________________________________________________________________________________________________________________________

Langage Windows/MacOS

4 e Dimension 1985 - 2004 4D SA. Tous droits rservs.

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension - Langage
Version 2004 pour Windows et Mac OS
Copyright 1985-2004 4D SA Tous droits rservs
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les informations contenues dans ce manuel peuvent faire lobjet de modifications sans pravis et ne sauraient en aucune manire engager 4D SA. La fourniture du logiciel dcrit dans ce manuel est rgie par un octroi de licence dont les termes sont prciss par ailleurs dans la licence lectronique figurant sur le support du Logiciel et de la Documentation y affrente. Le logiciel et sa Documentation ne peuvent tre utiliss, copis ou reproduits sur quelque support que ce soit et de quelque manire que ce soit, que conformment aux termes de cette licence. Aucune partie de ce manuel ne peut tre reproduite ou recopie de quelque manire que ce soit, lectronique ou mcanique, y compris par photocopie, enregistrement, archivage ou tout autre procd de stockage, de traitement et de rcupration dinformations, pour dautres buts que lusage personnel de lacheteur, et ce exclusivement aux conditions contractuelles, sans la permission explicite de 4D SA. 4D, 4D Draw, 4D Write, 4D View, 4D Insider, 4me Dimension, 4D Server ainsi que les logos 4e Dimension et 4D sont des marques enregistres de 4D SA. Windows, Windows NT et Microsoft sont des marques enregistres de Microsoft Corporation. Apple, Macintosh, MacOS, LaserWriter et QuickTime sont des marques enregistres ou des noms commerciaux de Apple Computer, Inc. Mac2Win Software Copyright 1990-2004 est un produit de Altura Software, Inc. Ce produit inclut un programme dvelopp par Apache Software Foundation (http://www.apache.org/). 4e Dimension utilise des logiciels de cryptographie crits par Eric Young (eay@cryptsoft.com), ainsi que des logiciels crits par Tim Hudson (tjh@cryptsoft.com). Correcteur orthographique, Copyright SYNAPSE Dveloppement, Toulouse, France, 1994-2004. ACROBAT Copyright 1987-2004, Secret Commercial Adobe Systems Inc. Tous droits rservs. ACROBAT est une marque enregistre dAdobe Systems Inc. Tous les autres noms de produits ou appellations sont des marques dposes ou des noms commerciaux appartenant leurs propritaires respectifs.

Sommaire
1. Introduction
Prface Introduction Construire une application 4D

39
41 43 54

2. Prsentation du langage
Introduction au langage 4D Types de donnes Constantes Variables Variables systme Pointeurs Nommer les objets du langage 4D Conditions et boucles Si...Sinon...Fin de si Au cas ou...Sinon...Fin de cas Tant que...Fin tant que Repeter...Jusque Boucle...Fin de boucle Mthodes Mthodes projet

69
71 77 82 86 92 94 104 115 117 119 123 125 126 132 138

3. Barres d'outils
CACHER BARRE OUTILS AFFICHER BARRE OUTILS

147
149 150

4. BLOB
Commandes du thme BLOB FIXER TAILLE BLOB Taille BLOB COMPRESSER BLOB DECOMPRESSER BLOB

151
153 156 157 158 160

4e Dimension - Langage

LIRE PROPRIETES BLOB DOCUMENT VERS BLOB BLOB VERS DOCUMENT VARIABLE VERS BLOB BLOB VERS VARIABLE LISTE VERS BLOB BLOB vers liste ENTIER VERS BLOB ENTIER LONG VERS BLOB REEL VERS BLOB TEXTE VERS BLOB BLOB vers entier BLOB vers entier long BLOB vers reel BLOB vers texte INSERER DANS BLOB SUPPRIMER DANS BLOB COPIER BLOB CRYPTER BLOB DECRYPTER BLOB

162 164 166 168 171 173 175 177 180 183 186 189 191 193 195 198 199 200 201 206

5. Boolens
Commandes du thme Boolens Vrai Faux Non

207
209 210 211 212

6. Chanes de caractres
Chaine Num Position Sous chaine Longueur Code ascii Caractere Symboles d'indice de chane

213
215 218 220 221 223 224 226 227

4e Dimension - Langage

Majusc Minusc Remplacer caracteres Inserer chaine Supprimer chaine Remplacer chaine Mac vers Windows Windows vers Mac Mac vers ISO ISO vers Mac

230 231 232 233 234 235 237 238 239 243

7. Commandes obsoltes
CHERCHER SUR CLE TRIER SUR INDEX

245
247 248

8. Communications
REGLER SERIE FIXER TIMEOUT UTILISER FILTRE LIRE CORRESPONDANCE PORT SERIE ENVOYER PAQUET RECEVOIR PAQUET RECEVOIR BUFFER ENVOYER VARIABLE RECEVOIR VARIABLE ENVOYER ENREGISTREMENT RECEVOIR ENREGISTREMENT

249
251 256 258 260 261 263 266 268 269 270 271

9. Compilateur
Commandes du thme Compilateur Utilisation des directives de compilation Guide du typage Prcisions de syntaxe Conseils doptimisation

277
279 283 292 305 316

4e Dimension - Langage

Messages d'erreurs C_BLOB C_BOOLEEN C_DATE C_GRAPHE C_ENTIER C_ENTIER LONG C_IMAGE C_POINTEUR C_REEL C_ALPHA C_TEXTE C_HEURE APPELER 4D

320 329 330 331 332 333 334 335 336 337 338 339 340 341

10. Dates et heures


Date du jour Jour de Mois de Annee de Numero du jour Ajouter a date Date Heure courante Chaine heure Heure Nombre de ticks Nombre de millisecondes SIECLE PAR DEFAUT

343
345 348 349 351 352 354 355 356 357 358 359 360 361

11. Dbogueur
Un dbogueur, pour quoi faire ? Fentre d'erreur de syntaxe Dbogueur Fentre d'expression Fentre de chane d'appel

363
365 370 372 378 384

4e Dimension - Langage

Fentre d'valuation Fentre d'valuation des mthodes Points d'arrt Liste des points darrt Points d'arrt sur commandes Raccourcis du dbogueur

386 390 394 397 400 404

12. Dfinition structure


Commandes du thme Dfinition structure Nombre de tables Nombre de champs Nom de la table Nom du champ Table LIRE PROPRIETES TABLE Champ LIRE PROPRIETES CHAMP LIRE PROPRIETES SAISIE CHAMP LIRE PROPRIETES LIEN FIXER INDEX Lire parametre base FIXER PARAMETRE BASE

407
409 410 411 412 413 414 415 416 417 419 420 421 423 425

13. Documents systme


Prsentation des documents systme Type document CHANGER TYPE DOCUMENT Createur document CHANGER CREATEUR DOCUMENT Ouvrir document Creer document Ajouter a document FERMER DOCUMENT COPIER DOCUMENT DEPLACER DOCUMENT SUPPRIMER DOCUMENT

433
435 442 443 444 445 446 449 451 452 453 454 455

4e Dimension - Langage

Selectionner document Tester chemin acces CREER DOSSIER Selectionner dossier SUPPRIMER DOSSIER CREER ALIAS RESOUDRE ALIAS LISTE DES VOLUMES PROPRIETES DU VOLUME LISTE DES DOSSIERS LISTE DES DOCUMENTS ASSOCIER TYPES FICHIER PROPRIETES DOCUMENT CHANGER PROPRIETES DOCUMENT LIRE ICONE DOCUMENT Taille document CHANGER TAILLE DOCUMENT Position dans document CHANGER POSITION DANS DOCUMENT

456 459 460 461 464 465 467 468 469 472 473 474 476 482 483 484 485 486 487

14. Enregistrements
AFFICHER ENREGISTREMENT CREER ENREGISTREMENT DUPLIQUER ENREGISTREMENT Nouvel enregistrement Enregistrement modifie Enregistrement charge STOCKER ENREGISTREMENT SUPPRIMER ENREGISTREMENT Enregistrements dans table Numero enregistrement ALLER A ENREGISTREMENT Numerotation automatique A propos des numros d'enregistrements EMPILER ENREGISTREMENT DEPILER ENREGISTREMENT Utiliser la pile d'enregistrements

489
491 492 493 494 495 496 497 499 500 501 502 503 505 508 509 510

4e Dimension - Langage

15. Enregistrements (verrouillage)


Verrouillage d'enregistrements LECTURE ECRITURE LECTURE SEULEMENT Etat lecture seulement CHARGER ENREGISTREMENT LIBERER ENREGISTREMENT Enregistrement verrouille VERROUILLE PAR

511
513 520 521 522 523 525 526 527

16. Ensembles
Prsentation des ensembles ENSEMBLE VIDE NOMMER ENSEMBLE CREER ENSEMBLE SUR TABLEAU UTILISER ENSEMBLE ADJOINDRE ELEMENT ENLEVER ELEMENT EFFACER ENSEMBLE Appartient a ensemble Enregistrements dans ensemble STOCKER ENSEMBLE CHARGER ENSEMBLE DIFFERENCE INTERSECTION REUNION COPIER ENSEMBLE

529
531 536 537 538 539 540 541 542 543 544 545 547 549 551 553 555

17. Environnement 4D
Type application Type version Version application Application compilee Fichier application

557
559 560 561 563 564

4e Dimension - Langage

Fichier structure Fichier donnees Fichier donnees verrouille Dossier 4D LISTE SEGMENTS DE DONNEES AJOUTER SEGMENT DE DONNEES ECRIRE CACHE CREER FICHIER DONNEES OUVRIR FICHIER DONNEES QUITTER 4D FIXER HISTORIQUE LIRE INFORMATIONS SERIALISATION Licence disponible OUVRIR PREFERENCES 4D

565 567 569 570 572 574 575 576 577 578 580 582 584 585

18. Environnement systme


Hauteur ecran Largeur ecran Nombre ecrans COORDONNEES ECRAN PROFONDEUR ECRAN FIXER PROFONDEUR ECRAN Ecran principal Hauteur barre de menus LISTE DES POLICES Nom de police Numero de police PROPRIETES PLATE FORME Dossier systeme Dossier temporaire Nom de la machine Nom du possesseur Gestalt ENREGISTRER EVENEMENT FIXER VARIABLE ENVIRONNEMENT LANCER PROCESS EXTERNE

589
591 592 593 594 595 597 598 599 600 601 602 603 607 609 610 611 612 613 614 615

10

4e Dimension - Langage

19. Etats rapides


QR ETAT QR ETAT VERS BLOB QR BLOB VERS ETAT QR Creer zone hors ecran QR SUPPRIMER ZONE HORS ECRAN QR FIXER DESTINATION QR LIRE DESTINATION QR FIXER PROPRIETE DOCUMENT QR Lire propriete document QR FIXER TYPE ETAT QR Lire type etat QR FIXER PROPRIETE ZONE QR Lire propriete zone QR FIXER TABLE ETAT QR Lire table etat QR FIXER PROPRIETE TEXTE QR Lire propriete texte QR EXECUTER QR EXECUTER COMMANDE QR Lire statut commande QR APPELER SUR COMMANDE QR Chercher colonne QR FIXER SELECTION QR LIRE SELECTION QR FIXER ENTETE ET PIED DE PAGE QR LIRE ENTETE ET PIED DE PAGE QR FIXER ENCADREMENTS QR LIRE ENCADREMENTS QR FIXER INFO COLONNE QR LIRE INFO COLONNE QR FIXER INFO LIGNE QR Lire info ligne QR FIXER TRIS QR LIRE TRIS QR FIXER DONNEES TOTAUX QR LIRE DONNEES TOTAUX QR FIXER ESPACEMENT TOTAUX

617
619 622 623 624 625 626 628 629 630 631 632 633 634 635 636 637 639 641 642 643 644 645 646 647 648 650 652 654 656 660 663 664 665 666 667 670 672

4e Dimension - Langage

11

QR QR QR QR QR QR QR

LIRE ESPACEMENT TOTAUX INSERER COLONNE Lire colonne deposee Nombre de colonnes SUPPRIMER COLONNE FIXER MODELE HTML Lire modele HTML

673 674 675 676 677 678 680

20. Evnements formulaire


Evenement formulaire Avant Pendant Apres En entete En rupture En pied Activation Desactivation Appel exterieur Lire texte edite FIXER MINUTEUR Clic droit Clic contextuel

681
683 702 703 704 705 706 707 708 709 710 711 713 715 716

21. Fentres
Gestion des fentres Types de fentres Creer fenetre Creer fenetre externe FERMER FENETRE EFFACER FENETRE REDESSINER FENETRE DEPLACER FENETRE CACHER FENETRE AFFICHER FENETRE MAXIMISER FENETRE

717
719 721 729 733 735 736 737 738 740 741 742

12

4e Dimension - Langage

MINIMISER FENETRE Titre fenetre CHANGER TITRE FENETRE LISTE FENETRES Type fenetre Process de la fenetre COORDONNEES FENETRE CHANGER COORDONNEES FENETRE Fenetre premier plan Fenetre suivante Chercher fenetre Creer fenetre formulaire Fenetre formulaire courant REDIMENSIONNER FENETRE FORMULAIRE

744 745 746 748 749 750 751 752 754 755 756 757 760 761

22. Fonctions mathmatiques 763


Abs Ent Dec Arrondi Troncature Hasard Modulo Racine carree Log Exp Sin Cos Tan Arctan FIXER NIVEAU COMPARAISON REEL Affichage des nombres rels Convertisseur Euro 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 782

4e Dimension - Langage

13

23. Fonctions statistiques


Prsentation des fonctions statistiques Somme Moyenne Min Max Ecart type Variance Somme des carres

785
787 788 789 790 791 792 793 795

24. Formulaires
LIRE PROPRIETES FORMULAIRE FIXER TAILLE FORMULAIRE FIXER REDIMENSIONNEMENT FORMULAIRE HORIZONTAL FIXER REDIMENSIONNEMENT FORMULAIRE VERTICAL LIRE OBJETS FORMULAIRE ALLER A PAGE PREMIERE PAGE DERNIERE PAGE PAGE SUIVANTE PAGE PRECEDENTE Page formulaire courante FORMULAIRE ENTREE FORMULAIRE SORTIE

797
799 800 804 805 806 807 808 809 810 811 812 814 817

25. Formulaires utilisateurs


Prsentation des formulaires utilisateurs MODIFIER FORMULAIRE CREER FORMULAIRE UTILISATEUR LISTE FORMULAIRES UTILISATEURS SUPPRIMER FORMULAIRE UTILISATEUR

819
821 823 825 826 827

14

4e Dimension - Langage

26. Formules
FIXER METHODES AUTORISEES LIRE METHODES AUTORISEES EDITER FORMULE

829
831 832 833

27. Gestion de la saisie


VALIDER NE PAS VALIDER Frappe clavier FILTRER FRAPPE CLAVIER ALLER A CHAMP REFUSER EDITER ELEMENT

835
837 838 840 845 851 852 854

28. Glisser-Dposer
Prsentation du Glisser-Dposer Position deposer PROPRIETES GLISSER DEPOSER

857
859 869 870

29. Graphes
GRAPHE PARAMETRES DU GRAPHE GRAPHE SUR SELECTION

877
879 884 886

4e Dimension - Langage

15

30. Images
Introduction aux images COMPRESSER IMAGE CHARGER ET COMPRESSER IMAGE COMPRESSER FICHIER IMAGE ENREGISTRER IMAGE IMAGE VERS GIF IMAGE VERS BLOB BLOB VERS IMAGE ECRIRE FICHIER IMAGE LIRE FICHIER IMAGE LISTE TYPES IMAGES Taille image PROPRIETES IMAGE CREER IMAGETTE LISTE IMAGES DANS BIBLIOTHEQUE LIRE IMAGE DANS BIBLIOTHEQUE ECRIRE IMAGE DANS BIBLIOTHEQUE SUPPRIMER IMAGE DANS BIBLIOTHEQUE

889
891 894 895 897 898 899 901 902 903 904 905 907 908 909 911 913 915 918

31. Import-Export
LECTURE ASCII ECRITURE ASCII LECTURE SYLK ECRITURE SYLK LECTURE DIF ECRITURE DIF IMPORTER DONNEES EXPORTER DONNEES

919
921 923 925 927 929 931 933 935

16

4e Dimension - Langage

32. Impressions
IMPRIMER ETIQUETTES IMPRIMER SELECTION Page impression NIVEAUX DE RUPTURES CUMULER SUR Sous total Niveau Imprimer ligne SAUT DE PAGE IMPRIMER ENREGISTREMENT LISTE IMPRIMANTES FIXER IMPRIMANTE COURANTE Lire imprimante courante UTILISER PARAMETRES IMPRESSION PARAMETRES IMPRESSION FIXER OPTION IMPRESSION LIRE OPTION IMPRESSION VALEURS OPTION IMPRESSION IMPRESSION ECRAN LIRE MARGE IMPRESSION FIXER MARGE IMPRESSION Lire taquet impression FIXER TAQUET IMPRESSION LIRE ZONE IMPRESSION Lire hauteur imprimee

937
939 942 945 946 947 948 951 953 956 958 960 961 962 963 965 966 969 971 973 974 976 977 978 983 984

33. Interface utilisateur


BEEP JOUER SON Lire interface FIXER INTERFACE FIXER TITRES TABLES

985
987 988 990 991 993

4e Dimension - Langage

17

LIRE TITRES TABLES FIXER TITRES CHAMPS LIRE TITRES CHAMPS Majuscule enfoncee Verrouillage majuscule enfoncee Windows Ctrl enfoncee Windows Alt enfoncee Macintosh commande enfoncee Macintosh option enfoncee Macintosh control enfoncee POSITION SOURIS Pop up menu GENERER FRAPPE CLAVIER GENERER CLIC GENERER EVENEMENT DEFILER LIGNES TEXTE SELECTIONNE SELECTIONNER TEXTE CHANGER POINTEUR SOURIS Objet focus REDESSINER INVERSER FOND

997 998 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1012 1013 1014 1016 1017 1018 1019 1020 1021 1022

34. Interruptions
APPELER SUR EVENEMENT Methode appelee sur evenement FILTRER EVENEMENT APPELER SUR ERREUR Methode appelee sur erreur STOP

1023
1025 1029 1030 1031 1035 1036

18

4e Dimension - Langage

35. Langage
Nombre de parametres Type Self RESOUDRE POINTEUR Nil Est une variable Pointeur vers EXECUTER Nom commande Nom methode courante TRACE PAS DE TRACE

1039
1041 1043 1046 1047 1049 1050 1051 1052 1053 1056 1057 1059

36. Liens
Prsentation des liens FIXER LIENS AUTOMATIQUES LIRE LIENS AUTOMATIQUES FIXER LIEN CHAMP LIRE LIEN CHAMP CHARGER SUR LIEN LIEN RETOUR CREER SUR LIEN STOCKER SUR LIEN CHARGER ANCIEN STOCKER ANCIEN ANCIEN LIEN RETOUR JOINTURE SELECTION RETOUR

1061
1063 1066 1067 1068 1070 1073 1077 1080 1081 1082 1083 1084 1085 1086

4e Dimension - Langage

19

37. List Box


Gestion programme des objets de type List box INSERER COLONNE LISTBOX SUPPRIMER COLONNE LISTBOX Lire nombre colonnes listbox TRIER COLONNES LISTBOX FIXER LARGEUR COLONNE LISTBOX Lire largeur colonne listbox NUMERO COLONNE LISTBOX DEPLACEE SELECTIONNER LIGNE LISTBOX INSERER LIGNE LISTBOX SUPPRIMER LIGNE LISTBOX Lire nombre lignes listbox FIXER HAUTEUR LIGNES LISTBOX Lire hauteur lignes listbox NUMERO LIGNE LISTBOX DEPLACEE LIRE TABLEAUX LISTBOX Lire information listbox MONTRER GRILLE LISTBOX FIXER COULEUR GRILLE LISTBOX MONTRER BARRES DEFILEMENT LISTBOX

1087
1089 1094 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1111 1112 1113 1114

38. Listes hirarchiques


Charger liste STOCKER LISTE Nouvelle liste Copier liste SUPPRIMER LISTE Nombre elements Liste existante REDESSINER LISTE CHANGER PROPRIETES LISTE LIRE PROPRIETES LISTE

1115
1117 1119 1120 1121 1122 1124 1126 1127 1128 1136

20

4e Dimension - Langage

TRIER LISTE AJOUTER A LISTE INSERER ELEMENT CHANGER PROPRIETES ELEMENT LIRE PROPRIETES ELEMENT Position element liste Element parent SUPPRIMER ELEMENT INFORMATION ELEMENT CHANGER ELEMENT Elements selectionnes SELECTIONNER ELEMENTS PAR POSITION SELECTIONNER ELEMENTS PAR REFERENCE

1138 1140 1148 1149 1152 1154 1155 1157 1159 1161 1163 1166 1169

39. Menus
Gestion des menus CHANGER BARRE CACHER BARRE DE MENUS AFFICHER BARRE DE MENUS APPELER SUR A PROPOS Menu choisi Nombre de menus Nombre de lignes de menu Titre menu Texte ligne menu CHANGER TEXTE LIGNE MENU Style ligne menu CHANGER STYLE LIGNE MENU Marque ligne menu MARQUER LIGNE MENU Raccourci clavier CHANGER RACCOURCI CLAVIER INACTIVER LIGNE MENU ACTIVER LIGNE MENU AJOUTER LIGNE MENU INSERER LIGNE MENU SUPPRIMER LIGNE MENU

1171
1173 1177 1179 1180 1181 1182 1184 1185 1186 1187 1188 1189 1191 1192 1193 1194 1195 1196 1197 1198 1200 1201

4e Dimension - Langage

21

40. Messages
SUPPRIMER MESSAGES LAISSER MESSAGES ALERTE CONFIRMER Demander MESSAGE POSITION MESSAGE AFFICHER NOTIFICATION

1203
1205 1206 1207 1209 1212 1215 1220 1222

41. Mthodes base


Prsentation des mthodes base Mthode base Sur ouverture Mthode base Sur fermeture

1223
1225 1227 1229

42. Oprateurs
Oprateurs Oprateurs sur les chanes Oprateurs numriques Oprateurs sur les dates Oprateurs sur les heures Oprateurs de comparaison Oprateurs logiques Oprateurs sur les images Oprateurs sur les bits

1235
1237 1239 1240 1241 1242 1244 1248 1250 1259

22

4e Dimension - Langage

43. Outils
GENERER APPLICATION ENCODER DECODER CORRECTION ORTHOGRAPHIQUE CHANGER DICTIONNAIRE

1265
1267 1268 1269 1270 1271

44. Presse-Papiers
AJOUTER A PRESSE PAPIERS EFFACER PRESSE PAPIERS LIRE PRESSE PAPIERS LIRE IMAGE DANS PRESSE PAPIERS Lire texte dans presse papiers ECRIRE IMAGE DANS PRESSE PAPIERS ECRIRE TEXTE DANS PRESSE PAPIERS Tester presse papiers

1273
1275 1281 1282 1284 1285 1287 1288 1289

45. Process
Introduction aux process Nouveau process Executer sur serveur ENDORMIR PROCESS SUSPENDRE PROCESS REACTIVER PROCESS Process interrompu Numero du process courant Statut du process INFORMATIONS PROCESS Chercher process

1291
1293 1297 1300 1305 1306 1307 1308 1309 1310 1312 1315

4e Dimension - Langage

23

Nombre utilisateurs Nombre de process Nombre de process utilisateurs EXECUTER SUR CLIENT INSCRIRE CLIENT DESINSCRIRE CLIENT LIRE CLIENTS INSCRITS

1317 1318 1319 1320 1322 1325 1326

46. Process (Communications)1327


Semaphore EFFACER SEMAPHORE Tester semaphore APPELER PROCESS LIRE VARIABLE PROCESS ECRIRE VARIABLE PROCESS VARIABLE VERS VARIABLE 1329 1332 1333 1334 1336 1339 1342

47. Process (Interface utilisateur)


CACHER PROCESS MONTRER PROCESS PASSER AU PREMIER PLAN Process de premier plan

1345
1347 1348 1349 1350

48. Proprits des objets


Proprits des objets CHANGER JEU DE CARACTERES CHANGER TAILLE CHANGER STYLE ACTIVER BOUTON INACTIVER BOUTON TITRE BOUTON

1351
1353 1354 1355 1356 1358 1360 1362

24

4e Dimension - Langage

Lire formatage CHOIX FORMATAGE CHOIX FILTRE SAISIE CHOIX ENUMERATION CHOIX SAISISSABLE CHOIX VISIBLE CHOIX COULEUR FIXER COULEURS RVB LIRE RECT OBJET DEPLACER OBJET TAILLE OBJET OPTIMALE Lire alignement FIXER ALIGNEMENT

1364 1366 1374 1376 1377 1379 1381 1383 1388 1389 1391 1393 1394

49. Protocole scuris


GENERER CLES CRYPTAGE GENERER DEMANDE CERTIFICAT

1395
1397 1399

50. Recherches et tris


CHERCHER PAR EXEMPLE CHERCHER CHERCHER DANS SELECTION CHERCHER PAR FORMULE CHERCHER PAR FORMULE DANS SELECTION CHERCHER PAR TABLEAU FIXER DESTINATION RECHERCHE FIXER LIMITE RECHERCHE Trouver clef index TRIER TRIER PAR FORMULE

1403
1405 1406 1413 1415 1417 1418 1419 1425 1427 1428 1433

4e Dimension - Langage

25

51. Ressources
Ressources Les ressources et 4D Insider : un exemple Ouvrir fichier ressources Creer fichier ressources FERMER FICHIER RESSOURCES LISTE TYPES RESSOURCE LISTE RESSOURCES LISTE DE CHAINES VERS TABLEAU TABLEAU VERS LISTE DE CHAINES Lire chaine dans liste Lire ressource chaine ECRIRE RESSOURCE CHAINE Lire ressource texte ECRIRE RESSOURCE TEXTE LIRE RESSOURCE IMAGE ECRIRE RESSOURCE IMAGE LIRE RESSOURCE ICONE LIRE RESSOURCE ECRIRE RESSOURCE Lire nom ressource ECRIRE NOM RESSOURCE Lire proprietes ressource ECRIRE PROPRIETES RESSOURCE SUPPRIMER RESSOURCE Lire ID ressource composant

1435
1437 1445 1452 1456 1458 1459 1461 1463 1464 1466 1467 1468 1469 1470 1471 1472 1473 1475 1477 1480 1482 1483 1484 1487 1489

52. Saisie
AJOUTER ENREGISTREMENT MODIFIER ENREGISTREMENT AJOUTER SOUS ENREGISTREMENT MODIFIER SOUS ENREGISTREMENT DIALOGUE Modifie Ancien

1491
1493 1496 1498 1500 1501 1503 1505

26

4e Dimension - Langage

53. Sauvegarde
SAUVEGARDER LIRE INFORMATION SAUVEGARDE RESTITUER LIRE INFORMATION RESTITUTION Mthode base Sur dmarrage sauvegarde Mthode base Sur arrt sauvegarde

1507
1509 1510 1511 1512 1513 1514

54. Slections
TOUT SELECTIONNER Enregistrements trouves SUPPRIMER SELECTION Numero dans selection ALLER DANS SELECTION DEBUT SELECTION Numero de ligne affichee ENREGISTREMENT SUIVANT ALLER A DERNIER ENREGISTREMENT ENREGISTREMENT PRECEDENT Avant selection Fin de selection VISUALISER SELECTION MODIFIER SELECTION APPLIQUER A SELECTION REDUIRE SELECTION SCAN INDEX ENREGISTREMENT SELECTION MARQUER ENREGISTREMENTS LIRE ENREGISTREMENTS MARQUES

1515
1517 1518 1519 1521 1522 1524 1525 1527 1528 1529 1530 1532 1534 1538 1539 1541 1543 1544 1545 1547

4e Dimension - Langage

27

55. Slections Temporaires


Prsentation des Slections Temporaires COPIER SELECTION DEPLACER SELECTION UTILISER SELECTION EFFACER SELECTION CREER SELECTION SUR TABLEAU

1549
1551 1553 1555 1556 1557 1558

56. Serveur Web


Prsentation du serveur Web Mise en route du serveur Web et gestion des connexions Premiers pas Scurit des connexions Mthode base Sur authentification Web Mthode base Sur connexion Web Associer des objets 4D des objets HTML URLs et actions de formulaires Balises HTML 4D Paramtrages du serveur Web Informations sur le site Web Utiliser le mode contextuel Utiliser le protocole SSL Support de XML et de WML Support des CGI LANCER SERVEUR WEB ARRETER SERVEUR WEB FIXER TEMPORISATION WEB FIXER RACINE HTML FIXER LIMITES AFFICHAGE WEB FIXER PAGE ACCUEIL ENVOYER FICHIER HTML ENVOYER BLOB HTML ENVOYER TEXTE HTML

1561
1563 1568 1579 1588 1596 1601 1609 1620 1628 1637 1648 1652 1670 1675 1676 1683 1684 1685 1686 1687 1690 1691 1694 1697

28

4e Dimension - Langage

TRAITER BALISES HTML LIRE VARIABLES FORMULAIRE WEB Contexte Web FIXER ENTETE HTTP LIRE ENTETE HTTP LIRE CORPS HTTP ENVOYER DONNEES HTTP ENVOYER REDIRECTION HTTP STATISTIQUES DU CACHE WEB Connexion Web securisee FIXER EXECUTABLE CGI OUVRIR URL WEB

1698 1700 1702 1703 1705 1708 1710 1713 1715 1716 1717 1718

57. Source de donnes externes 1719


ODBC LOGIN ODBC LOGOUT ODBC FIXER OPTION ODBC LIRE OPTION ODBC EXECUTER ODBC Fin de selection ODBC CHARGER ENREGISTREMENT ODBC ANNULER CHARGEMENT ODBC FIXER PARAMETRE ODBC LIRE DERNIERE ERREUR ODBC IMPORTER ODBC EXPORTER 1721 1723 1724 1725 1726 1728 1729 1730 1731 1734 1735 1737

58. Sous-enregistrements
CREER SOUS ENREGISTREMENT SUPPRIMER SOUS ENREGISTREMENT TOUS LES SOUS ENREGISTREMENTS Sous enregistrements trouves APPLIQUER A SOUS SELECTION DEBUT SOUS ENREGISTREMENT ALLER A DERNIER SOUS ENREGISTREMENT

1739
1741 1742 1744 1745 1746 1747 1748

4e Dimension - Langage

29

SOUS ENREGISTREMENT SUIVANT SOUS ENREGISTREMENT PRECEDENT Avant sous enregistrement Fin sous enregistrement TRIER SOUS ENREGISTREMENTS CHERCHER SOUS ENREGISTREMENTS

1749 1750 1751 1752 1753 1754

59. Table
TABLE PAR DEFAUT Table par defaut courante Table du formulaire courant

1755
1757 1759 1760

60. Tableaux
Prsentation des tableaux Crer des tableaux Tableaux et objets de formulaire Zones de dfilement groupes Les tableaux et le langage 4D Tableaux et pointeurs Utiliser l'lment zro d'un tableau Tableaux deux dimensions Tableaux et mmoire TABLEAU ENTIER TABLEAU ENTIER LONG TABLEAU REEL TABLEAU ALPHA TABLEAU TEXTE TABLEAU DATE TABLEAU BOOLEEN TABLEAU IMAGE TABLEAU POINTEUR

1763
1765 1766 1769 1778 1781 1783 1785 1787 1789 1792 1794 1796 1798 1800 1802 1804 1806 1808

30

4e Dimension - Langage

Taille tableau TRIER TABLEAU TABLEAU MULTI TRI Chercher dans tableau Compter dans tableau INSERER LIGNES SUPPRIMER LIGNES AJOUTER A TABLEAU COPIER TABLEAU ENUMERATION VERS TABLEAU TABLEAU VERS ENUMERATION SELECTION VERS TABLEAU SELECTION LIMITEE VERS TABLEAU TABLEAU VERS SELECTION VALEURS DISTINCTES TABLEAU ENTIER LONG SUR SELECTION TABLEAU BOOLEEN SUR ENSEMBLE

1810 1811 1813 1816 1819 1820 1821 1822 1823 1824 1826 1828 1830 1833 1835 1837 1838

61. Transactions
Utiliser des transactions DEBUT TRANSACTION VALIDER TRANSACTION ANNULER TRANSACTION Transaction en cours

1839
1841 1846 1847 1848 1849

62. Triggers
Prsentation des triggers Evenement moteur Niveau du trigger PROPRIETES DU TRIGGER

1851
1853 1864 1866 1867

4e Dimension - Langage

31

63. Utilisateurs et groupes


CHANGER PRIVILEGES CHANGER UTILISATEUR COURANT Valider mot de passe CHANGER MOT DE PASSE Utilisateur courant Lire utilisateur par defaut Appartient au groupe SUPPRIMER UTILISATEUR Utilisateur supprime LIRE LISTE UTILISATEURS LIRE PROPRIETES UTILISATEUR Ecrire proprietes utilisateur UTILISATEURS VERS BLOB BLOB VERS UTILISATEURS LIRE LISTE GROUPE LIRE PROPRIETES GROUPE Ecrire proprietes groupe CHANGER LICENCES ECRIRE ACCES PLUGIN Lire acces plugin

1869
1871 1872 1875 1876 1877 1878 1879 1880 1881 1882 1884 1886 1889 1890 1892 1893 1895 1898 1899 1900

64. Variables
ECRIRE VARIABLES LIRE VARIABLES EFFACER VARIABLE Indefinie

1901
1903 1905 1906 1908

32

4e Dimension - Langage

65. Web Services (Client)


Commandes du thme Web Services (Client) FIXER PARAMETRE WEB SERVICE FIXER OPTION WEB SERVICE APPELER WEB SERVICE LIRE RESULTAT WEB SERVICE AUTHENTIFIER WEB SERVICE Lire infos erreur Web Service

1911
1913 1914 1916 1918 1922 1924 1925

66. Web Services (Serveur)


Commandes du thme Web Services (Serveur) DECLARATION SOAP ENVOYER ERREUR SOAP Est une requete SOAP Lire informations SOAP

1927
1929 1930 1933 1934 1935

67. XML
Prsentation des commandes XML DOM Creer ref XML DOM ECRIRE OPTIONS XML DOM Analyser source XML DOM Analyser variable XML DOM Creer element XML DOM Chercher element XML DOM Compter elements XML DOM Lire element XML DOM Lire premier element XML DOM Lire element XML suivant

1937
1939 1944 1946 1947 1949 1951 1953 1955 1956 1957 1959

4e Dimension - Langage

33

DOM ECRIRE NOM ELEMENT XML DOM LIRE NOM ELEMENT XML DOM ECRIRE VALEUR ELEMENT XML DOM LIRE VALEUR ELEMENT XML DOM SUPPRIMER ELEMENT XML DOM Compter attributs XML DOM ECRIRE ATTRIBUT XML DOM LIRE ATTRIBUT XML PAR INDEX DOM LIRE ATTRIBUT XML PAR NOM DOM Lire informations XML DOM EXPORTER VERS FICHIER DOM EXPORTER VERS VARIABLE DOM FERMER XML SAX ECRIRE OPTIONS XML SAX LIRE VALEURS DOCUMENT XML SAX AJOUTER DOCTYPE XML SAX Lire noeud XML SAX AJOUTER COMMENTAIRE XML SAX LIRE COMMENTAIRE XML SAX OUVRIR ELEMENT XML SAX OUVRIR ELEMENT XML TABLEAUX SAX FERMER ELEMENT XML SAX LIRE ELEMENT XML SAX AJOUTER VALEUR ELEMENT XML SAX LIRE VALEUR ELEMENT XML SAX AJOUTER CDATA XML SAX LIRE CDATA XML SAX AJOUTER INSTRUCTION DE TRAITEMENT SAX LIRE INSTRUCTION DE TRAITEMENT XML SAX LIRE ENTITE XML LIRE ERREUR XML APPLIQUER TRANSFORMATION XSLT FIXER PARAMETRE XSLT LIRE ERREUR XSLT

1961 1962 1963 1964 1965 1966 1968 1969 1970 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1987 1988 1989 1991 1992 1993 1994 1995 1996 1998 2000

34

4e Dimension - Langage

68. Codes d'erreurs


Erreurs de syntaxe Erreurs de la base de donnes Erreurs rseau Erreurs du gestionnaire de fichiers du systme Erreurs du gestionnaire de mmoire du systme Erreurs du gestionnaire d'impression du systme Erreurs du gestionnaire de ressources du systme Erreurs SANE NaN Erreurs du gestionnaire de son du systme Erreurs du gestionnaire de port srie du systme Erreurs MacOS

2001
2003 2006 2010 2011 2013 2014 2015 2016 2017 2018 2019

69. Codes ASCII


Codes Codes Codes Codes Codes Codes ASCII ASCII 0..63 ASCII 64..127 ASCII 128..191 ASCII 192..255 des touches de fonction

2021
2023 2025 2027 2029 2033 2037

70. Syntaxe des commandes 2039


Syntaxe des commandes (liste alphabtique) 2041

4e Dimension - Langage

35

Constantes
Alignement objet BLOB Caractres latins ISO Chercher fenetre Codes ASCII Communications Couleurs Creer fenetre Creer fenetre formulaire Destinations de recherche Dictionnaires Documents systme Dossier Systme Environnement 4D Euro monnaies Evnements (Modifiers) Evnements (types) Evnements formulaire Evnements moteur Expressions FIXER COULEUR RVB Fonctions mathmatiques Formats d'affichage des dates Formats d'affichage des heures Formats d'affichage des images Interfaces de plate-forme Journal d'vnements Windows NT Jours et mois Licence disponible Liens

2063
2065 2066 2067 2069 2070 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096

36

4e Dimension - Langage

List box Listes hirarchiques Moteur de la base Numros de port TCP Options d'impression Options de formulaire Paramtres de la base Presse-Papiers PROFONDEUR ECRAN Proprits des ressources Proprits plate-forme QR Commandes QR Destination de sortie QR Encadrements QR Lignes pour Proprits QR Oprateurs QR Proprits de document QR Proprits de texte QR Proprits de zone QR Types d'tats Sauvegarde et restitution Signatures systme standard Source de donnes externes Statut du process Styles de caractres Touches de fonction Type du process Type fenetre Types champs et variables Web Services (Client) Web Services (Serveur) XML Zone de formulaire

2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130

Index des commandes

2131

4e Dimension - Langage

37

38

4e Dimension - Langage

1 ________________________ Introduction

4e Dimension - Langage

39

40

4e Dimension - Langage

Prface

Introduction version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension possde son propre langage de programmation. Ce langage intgr, qui comprend plus de 800 commandes, fait de 4e Dimension un outil de dveloppement trs puissant. Le langage de 4e Dimension peut tre utilis pour de multiples types de tches, de la ralisation de calculs simples la cration dinterfaces utilisateur personnalises complexes. Par lintermdiaire des routines du langage, vous pourrez par exemple : Accder par programmation tous les diteurs du mode Utilisation, Crer et imprimer des tats et des tiquettes complexes avec les donnes de la base, Communiquer avec dautres systmes dinformation, Grer des documents, Importer et exporter des donnes entre des bases 4e Dimension et dautres applications, Incorporer des procdures crites dans dautres langages que celui de 4e Dimension.

La flexibilit et la puissance du langage de 4e Dimension en font loutil idal pour toute une gamme de fonctions de gestion de linformation. Les utilisateurs novices peuvent rapidement effectuer des calculs. Les utilisateurs expriments peuvent personnaliser leurs bases sans devoir connatre la programmation. Les dveloppeurs plus expriments peuvent utiliser la puissance du langage de 4e Dimension pour ajouter leurs bases de donnes des fonctions sophistiques, allant jusqu'au transfert de fichiers et aux communications. Les dveloppeurs matrisant la programmation dans dautres langages peuvent ajouter leurs propres routines au langage de 4e Dimension. Le langage de programmation de 4e Dimension senrichit lorsquun des plug-ins de lenvironnement 4D est install dans lapplication. Chaque plug-in comporte en effet des commandes spcifiques, permettant de grer les fonctions quil accomplit. A propos des manuels Les manuels de 4D, lists ci-dessous, sappliquent indiffremment dcrire le fonctionnement de 4e Dimension et de 4D Server. Une seule exception : le "Manuel de rfrence 4D Server", qui traite uniquement des fonctions de 4D Server. Le manuel "Langage" est le guide de rfrence du langage de 4e Dimension. Il vous apprend personnaliser votre base en utilisant les commandes et fonctions de 4e Dimension. Le manuel "Mode Structure" dtaille le mode Structure et toutes les oprations que vous pouvez raliser dans cet environnement.

4e Dimension - Langage

41

Le manuel "Mode Utilisation" dcrit le mode Utilisation, lenvironnement dans lequel vous exploitez les donnes de la base et utilisez les formulaires pour traiter les donnes. Le manuel "Prise en main" vous propose de suivre au pas pas des exemples de cration et dutilisation de bases de donnes. Ces exercices vous permettent de vous familiariser rapidement avec les fonctionnalits et les concepts de 4e Dimension et 4D Server. Le "Manuel de rfrence 4D Server" est consacr linstallation et la gestion de bases de donnes multi-utilisateurs avec 4D Server. A propos de ce manuel Ce manuel dcrit le langage de 4e Dimension. Nous supposons que vous tes familiaris avec le vocabulaire lmentaire utilis dans 4e Dimension tels que tables, champs ou formulaires. Avant de lire ce manuel, nous vous conseillons de : dcouvrir 4e Dimension travers les exemples du manuel "Prise en main", commencer crer vos propres bases de donnes, en vous rfrant au manuel "Mode Structure", vous initier la gestion des donnes de votre base dans le mode Utilisation. Reportezvous pour cela au manuel "Mode Utilisation". Conventions d'criture Dans ce manuel, diverses conventions dcriture sont employes : l'instar de l'diteur de mthodes de 4e Dimension, les commandes sont crites en majuscules et en caractres spciaux : OUVRIR DOCUMENT. Les fonctions (commandes renvoyant une valeur) ont une lettre initiale en majuscule et sont crites en minuscule : Remplacer caracteres. Dans la syntaxe des commandes, les caractres { } (accolades) indiquent des paramtres facultatifs. Par exemple, SIECLE PAR DEFAUT (sicle{; anPivot}) signifie que le paramtre anPivot peut tre omis lors de l'appel de la commande. Dans la syntaxe des commandes, le caractre | indique une alternative. Par exemple, Table (numTable | unPtr) indique que cette fonction accepte soit un numro de table soit un pointeur comme paramtre. Dans certains exemples de cette documentation, une ligne de code peut se prolonger sur une plusieurs lignes, par manque de place. Toutefois, tapez ces exemples sans appuyer sur la touche Retour chariot, en une seule ligne de code. Pour en savoir plus... Si vous lisez ce manuel pour la premire fois, reportez-vous la section Introduction.

42

4e Dimension - Langage

Introduction

Introduction version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Cette section prsente le langage de 4e Dimension. Elle apporte des rponses aux questions suivantes : Quest-ce que le langage de 4D, et que peut-il vous apporter ? Comment utiliser les mthodes ? Comment dvelopper une application avec 4e Dimension ? Ces sujets sont voqus d'un point de vue gnral ; chacun d'entre eux est trait plus en dtail dans les autres sections de ce manuel. Quest-ce quun langage ?
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le langage de 4e Dimension nest pas trs diffrent de celui que nous utilisons tous les jours. Cest une forme de communication servant exprimer des ides, informer ou donner des instructions. Tout comme un langage parl, celui de 4e Dimension se compose d'un vocabulaire, dune grammaire et dune syntaxe, que vous employez pour indiquer au programme comment grer votre base et vos donnes. Il nest pas ncessaire de connatre entirement le langage. Pour pouvoir vous exprimer en anglais, vous ntes pas oblig de connatre la totalit de la langue anglaise ; en ralit, un peu de vocabulaire suffit. Il en va de mme pour 4e Dimension il vous suffit de connatre un minimum du langage pour tre productif, vous en apprendrez de plus en plus au fur et mesure de vos besoins. Pourquoi utiliser un langage ?
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

A premire vue, un langage de programmation dans 4e Dimension peut sembler inutile. En effet, les modes Structure et Utilisation proposent des outils puissants et entirement paramtrables, permettant deffectuer une grande varit de tches de gestion des donnes. Les oprations fondamentales telles que la saisie de donnes, les recherches, les tris et la cration dtats sont effectues facilement. De nombreuses autres possibilits sont aussi disponibles, telles que les filtres de validation des donnes, les aides la saisie, la reprsentation graphique et la gnration dtiquettes.

4e Dimension - Langage

43

Alors, pourquoi avons-nous besoin dun langage ? Voici quelques-uns de ses principaux rles : Automatiser les tches rptitives : par exemple la modification de donnes, la gnration dtats complexes et la ralisation de longues sries doprations ne ncessitant pas lintervention dun utilisateur. Contrler linterface utilisateur : vous pouvez grer les fentres, les menus, contrler les formulaires et les objets dinterface. Grer les donnes de manire trs fine : cette gestion inclut le traitement de transactions, les systmes de validation complexes, la gestion multi-utilisateurs, lutilisation des ensembles et des slections temporaires. Contrler lordinateur : vous pouvez contrler les communications par le port srie, la gestion des documents et des erreurs. Crer des applications : vous pouvez crer des bases de donnes personnalises, faciles utiliser, en mode Menus crs. Ajouter des fonctionnalits au serveur Web 4D intgr : par exemple, vous pouvez crer des pages HTML dynamiques et les insrer parmi celles qui sont automatiquement cres par 4D lorsque les formulaires sont convertis. Le langage vous permet de contrler totalement la structure et le fonctionnement de votre base de donnes. Alors que le mode Utilisation vous offre de puissants outils gnriques, le langage vous offre la possibilit de personnaliser autant que vous voulez votre base de donne. Prendre le contrle de vos donnes
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le langage de 4e Dimension vous permet de prendre le contrle total de vos donnes, dune manire la fois puissante et lgante. Il reste dun abord facile pour un dbutant, et est suffisamment riche pour un dveloppeur dapplications. Il permet de passer par tapes dune simple exploitation des fonctions intgres de 4e Dimension une base entirement personnalise. Les commandes du langage de 4e Dimension vous laissent la possibilit daccder aux diteurs du mode Utilisation qui vous sont familiers. Par exemple, lorsque vous utilisez la commande CHERCHER, vous accdez lditeur de recherches. Il est presque aussi simple dutiliser cette commande du langage que de slectionner la commande Recherche... dans le menu Slection, et cela peut mme tre plus pratique. Vous pouvez, si vous le voulez, indiquer explicitement la commande CHERCHER ce quelle doit rechercher. Par exemple, CHERCHER([Personnes]Nom="Dupont") trouvera toutes les personnes nommes Dupont dans votre base.

44

4e Dimension - Langage

Le langage de 4e Dimension est trs puissant une commande remplace souvent des centaines, voire des milliers de lignes de code crites dans les langages informatiques traditionnels. Et cette puissance saccompagne d'une relle simplicit: les commandes sont crites en franais. Par exemple, vous utilisez la commande CHERCHER pour effectuer une recherche ; pour ajouter un nouvel enregistrement, vous appelez la commande AJOUTER ENREGISTREMENT. Le langage est organis de telle manire que vous puissiez facilement accomplir nimporte quelle tche. Lajout dun enregistrement, le tri denregistrements, la recherche de valeurs et les autres oprations de mme type sont dfinies par des commandes simples et directes. Mais les routines peuvent galement contrler les ports srie, lire des documents sur le disque, traiter des systmes de transactions complexes, et plus encore. Mme les oprations les plus compliques se dfinissent de manire relativement simple. Il serait inimaginable de les raliser sans le langage de 4D. Cependant, mme laide de la puissance des commandes du langage, certaines tches peuvent se rvler complexes et difficiles. Ce nest pas loutil lui-mme qui fait le travail ; une tche peut reprsenter en soi une difficult, loutil ne fait que faciliter son traitement. Par exemple, un logiciel de traitement de texte permet dcrire un livre plus rapidement et plus facilement, mais il ne lcrira pas votre place. Le langage de 4e Dimension vous permet de grer plus facilement vos donnes et dapprhender les tches ardues en toute confiance. Est-ce un langage informatique traditionnel ?
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Si vous tes familier avec les langages informatiques traditionnels, ce paragraphe peut vous intresser. Si ce nest pas le cas, vous pouvez passer directement au paragraphe suivant. Le langage de 4e Dimension nest pas un langage informatique traditionnel. Cest un des langages les plus souples et les plus innovants que lon puisse trouver aujourdhui sur micro-ordinateur. Le langage a t conu pour sadapter vous, et non linverse. Pour utiliser les langages traditionnels, vous devez avant tout raliser des maquettes dtailles. Cest mme l'une des principales phases dun dveloppement. 4e Dimension vous permet de commencer utiliser le langage tout moment et dans nimporte quelle partie de votre base. Vous pouvez commencer par ajouter une mthode objet dans un formulaire, puis plus tard une ou deux mthodes formulaires. Comme votre base devient plus sophistique, vous pouvez ajouter une mthode projet contrle par un menu. Vous tes totalement libre dutiliser une petite partie du langage ou une partie plus tendue. Ce nest pas tout ou rien, comme cest le cas dans beaucoup dautres bases de donnes.

4e Dimension - Langage

45

Les langages traditionnels vous obligent dfinir et pr-dclarer vos objets sous une forme syntaxique rigide. Dans 4e Dimension, vous crez simplement un objet, comme un bouton, et vous lutilisez. 4e Dimension gre automatiquement lobjet pour vous. Par exemple, pour utiliser un bouton, il suffit de le dessiner dans un formulaire et de lui donner un nom. Lorsque lutilisateur clique sur le bouton, le langage dclenche automatiquement vos mthodes. Les langages traditionnels sont souvent rigides et inflexibles, et exigent que les commandes soient saisies dans un style trs formel et contraignant. Le langage de 4e Dimension rompt avec la tradition, au grand bnfice de lutilisateur. Les mthodes, passerelles vers le langage
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Une mthode est une srie dinstructions qui provoquent laccomplissement dune tche par 4e Dimension. Toute mthode contient une ou plusieurs lignes dinstructions. Chaque ligne dinstruction est compose dlments du langage. Puisque vous avez lu le manuel "Prise en main" de 4e Dimension (vous lavez lu, nest-ce pas ?), vous avez dj crit et utilis des mthodes objet et des mthodes projet. Dans 4e Dimension, vous pouvez crer cinq types de mthodes : des mthodes objet, des mthodes formulaire, des mthodes table ou "triggers", des mthodes projet et des mthodes base. Mthode objet : mthode gnralement courte utilise pour contrler un objet de formulaire. Mthode formulaire : mthode qui gre laffichage ou l'impression dun formulaire. Mthode table/trigger : mthode utilise pour appliquer les rgles de fonctionnement de votre base. Mthode projet : mthode sappliquant la totalit de la base. Les mthodes projet peuvent tre associes des commandes de menus, par exemple. Mthode base : mthode utilise pour initialiser des valeurs ou effectuer des actions particulires l'ouverture ou la fermeture d'une base, ou lorsqu'un navigateur Web se connecte une base publie comme serveur Web sur un rseau Intranet ou sur Internet. Les paragraphes suivants prsentent chaque type de mthode et expliquent brivement la manire dont vous pouvez les utiliser pour automatiser votre base.

46

4e Dimension - Langage

Dmarrer avec les mthodes objet Tout objet dun formulaire pouvant dclencher une action cest--dire tout objet actif peut tre associ une mthode objet. Une mthode objet surveille et gre lobjet actif lors de la saisie et de limpression des donnes. Une mthode objet reste lie un objet actif mme lorsque lobjet est copi et coll. Ce principe vous permet de crer des librairies dobjets actifs rutilisables. La mthode objet sexcute lorsque cest ncessaire. Les mthodes objet sont les outils de base pour la gestion de linterface utilisateur. Linterface utilisateur est lensemble des moyens et des conventions par lesquels lordinateur communique avec lutilisateur. Linterface utilisateur est la porte par laquelle vous entrez dans votre base de donnes. Lobjectif est de la rendre aussi simple d'emploi que possible. Linterface utilisateur doit faire en sorte que linteraction avec lordinateur soit agrable, que lutilisateur lapprcie ou, mieux, ne la remarque mme pas. Il y a deux types principaux dobjets actifs dans un formulaire : les objets actifs de saisie, daffichage et de stockage des donnes, tels que les champs et les sous-champs, et les objets actifs de contrle comme les zones de saisie, les boutons, les listes droulantes et les thermomtres. 4e Dimension vous permet de construire des formulaires sobres et classiques, tel que celui prsent ci-dessous :

4e Dimension - Langage

47

4e Dimension vous permet galement de construire des formulaires comportant de multiples lments de contrle, comme celui-ci :

Vous pouvez aussi crer des formulaires originaux en laissant libre cours votre imagination et en utilisant des lments graphiques exubrants. Vous n'tes limit que par votre imagination ou par les souhaits des commanditaires de l'application :

48

4e Dimension - Langage

Lorsque vous construisez des formulaires, rappelez-vous que tous les objets actifs disposent de systmes de contrle intgrs, comme les intervalles de valeurs et les filtres pour les zones de saisie, ou les actions automatiques pour les objets, menus et boutons. Essayez toujours d'utiliser ces systmes intgrs avant de recourir aux mthodes objet. Ils sont comparables aux mthodes objet dans la mesure o ils restent associs aux objets actifs et ne sont excuts que lorsque l'objet est sollicit. En gnral, vous utiliserez une combinaison d'aides intgres et de mthodes objet pour contrler l'interface utilisateur. Typiquement, une mthode associe un objet actif de saisie aura un rle de gestion des donnes spcifiquement li au champ ou la variable. La mthode peut effectuer un contrle ou un formatage des valeurs, ou des calculs. Elle peut galement rcuprer des informations en provenance dautres tables. Bien entendu, certaines de ces tches peuvent aussi tre excutes par lintermdiaire des systmes intgrs de contrle de saisie des objets. Nutilisez les mthodes objet que lorsque lopration effectuer est plus complexe que ce que permettent ces systmes. Pour plus dinformations sur les systmes intgrs de contrle de saisie, reportez-vous au manuel "Mode Structure" de 4e Dimension. Des mthodes objet peuvent aussi tre associes aux objets actifs de contrle tels que les boutons. Ces objets sont essentiels pour la navigation au sein de votre base. Les boutons vous permettent de vous dplacer dun enregistrement lautre, de changer de formulaire, dajouter et deffacer des donnes. Ces objets actifs simplifient lutilisation dune base et rduisent le temps dapprentissage. Les boutons disposent galement de systmes daides intgrs et, comme pour la saisie de donnes, il est prfrable de les utiliser avant dcrire des mthodes objet. Les mthodes vous permettent dassocier vos objets des actions qui nexistent pas en standard. Dans lexemple ci-dessous, la mthode objet du bouton affichera lditeur de recherches lorsque lutilisateur cliquera dessus.

A mesure que vous vous familiariserez avec les mthodes objet, vous pourrez crer des librairies dobjets avec leurs mthodes associes. Vous pourrez copier et coller ces objets entre diffrents formulaires, tables et bases. Vous pourrez mme les conserver dans lAlbum, prts tre utiliss suivant vos besoins.

4e Dimension - Langage

49

Contrler des formulaires l'aide des mthodes formulaire Tout comme une mthode objet est associe un objet actif dun formulaire, une mthode formulaire est associe un formulaire. Chaque formulaire peut comporter au plus une mthode formulaire. Un formulaire est un modle dans lequel vous pouvez visualiser vos donnes. Les formulaires vous permettent de prsenter les donnes lutilisateur de diffrentes manires. Grce aux formulaires, vous pouvez crer des crans de saisie et des tats rcapitulatifs attractifs et faciles utiliser. Une mthode formulaire contrle et gre lutilisation dun formulaire spcifique, la fois pour la saisie et limpression des donnes. Une mthode formulaire gre un formulaire un plus haut niveau que les mthodes objet. Une mthode objet nest excute que lorsque lobjet est utilis, alors quune mthode formulaire est excute lorsque nimporte quel objet du formulaire est activ. Les mthodes formulaire sont gnralement utilises pour contrler linteraction entre les diffrents objets et le formulaire dans son ensemble. Comme les formulaires peuvent tre utiliss de nombreuses manires, il est utile de contrler ce qui se passe lorsque votre formulaire est en cours d'utilisation. Pour cela, 4e Dimension met votre disposition un grand nombre d'vnements formulaires. Ces vnements vous indiquent prcisment ce qui se produit dans le formulaire. Chaque type d'vnement (par exemple un clic, un double-clic, une touche du clavier enfonce...) active ou dsactive l'excution de la mthode formulaire ainsi que les mthodes des objets du formulaire. Pour plus d'informations sur les formulaires, les objets, les vnements et les mthodes, reportez-vous la description de la commande Evenement formulaire. Rguler le fonctionnement de votre base l'aide des mthodes table/triggers Un trigger est une mthode associe une table, c'est la raison pour laquelle on peut galement parler de mthode table. Les triggers sont automatiquement appels par le moteur de base de donnes de 4D chaque fois qu'une action (ajout, suppression, modification et chargement) est effectue sur les enregistrements d'une table. Les triggers peuvent empcher que des oprations interdites soient excutes avec les enregistrements de votre base. Par exemple, dans un systme de facturation, vous ne voulez pas qu'un utilisateur puisse crer des factures sans avoir spcifi le client qui elle est destine. Les triggers sont des outils puissants de contrle des oprations possibles avec les tables, ainsi que de prvention des risques de pertes accidentelles de donnes. Vous pouvez crire des triggers trs simples, puis les rendre de plus en plus sophistiqus. Pour plus d'informations sur les triggers, reportez-vous la section Prsentation des triggers.

50

4e Dimension - Langage

Utiliser des mthodes projet dans toute la base A la diffrence des triggers, des mthodes formulaire et des mthodes objet, qui sont associes des tables, des formulaires ou des objets actifs particuliers, les mthodes projet sont accessibles depuis nimporte quelle partie de votre base. Les mthodes projet sont rutilisables et peuvent tre appeles par dautres mthodes. Vous pouvez ainsi effectuer plusieurs fois une opration similaire sans devoir crire plusieurs mthodes. Vous pouvez appeler des mthodes projet depuis n'importe quelle partie de la base autres mthodes projet, mthodes objet, mthodes formulaire... Lorsque vous appelez une mthode projet, elle sexcute comme si elle avait t crite lendroit do elle a t appele. Les mthodes projet appeles depuis dautres procdures sont appeles sousroutines. Il y a un autre moyen d'utiliser les mthodes projet : les associer des commandes de menu. Lorsque vous associez une mthode projet une commande de menu, la mthode est excute lorsque la commande est slectionne par lutilisateur. Vous pouvez considrer la commande de menu comme un appel une mthode projet. Grer les sessions de travail avec les mthodes base De la mme manire que les mthodes objet et formulaire sont excutes lorsque des vnements se produisent dans un formulaire, il existe des mthodes associes la base qui sont excutes lorsqu'un vnement de type "session de travail" se produit : ce sont les mthodes base. Par exemple, chaque fois que vous ouvrez une base de donnes, vous voulez initialiser certaines variables qui seront utilises pendant toute la session de travail ; pour cela, vous pouvez initialiser vos variables dans la mthode base Sur ouverture, qui est automatiquement excute par 4D lorsque vous ouvrez la base. Pour plus d'informations sur les mthode base, reportez-vous la section Prsentation des mthodes base. Dvelopper votre base de donnes
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La phase de dveloppement est celle pendant laquelle vous personnalisez votre base laide du langage et des autres fonctions intgres. En crant simplement une base, vous avez dj franchi les premires tapes de lutilisation du langage. Chaque lment dune base les tables et les champs, les formulaires et leurs objets est automatiquement reli au langage. Le langage de 4e Dimension les reconnat tous. Votre premire utilisation du langage pourrait tre de crer une mthode objet ou formulaire pour contrler la saisie de donnes. Par la suite, vous pourrez dfinir une mthode formulaire pour grer laffichage. Lorsque la base deviendra plus complexe, vous ajouterez une barre de menus avec des mthodes projet pour la personnaliser entirement.

4e Dimension - Langage

51

Comme tous les autres aspects de 4e Dimension, le dveloppement est une phase trs souple. Il ny a aucun cheminement prcis suivre vous pouvez dvelopper de la manire qui vous semble la plus pratique. Bien entendu, cette phase comprend des tapes gnrales. Limplmentation : dfinition de la structure et des fonctionnalits de la base en mode Structure. Le test : ralisation dessais de la base en mode Utilisation et de test de chaque lment personnalis. Lutilisation : lorsque la base est entirement personnalise, utilisation en mode Menus crs. Les corrections : si des erreurs sont dtectes, retour au mode Structure pour les corriger. Des outils particuliers daide au dveloppement, n'apparaissant que lorsque cest ncessaire, sont intgrs 4e Dimension. A mesure que vous utiliserez le langage de manire de plus en plus intensive, vous vous apercevrez que ces outils facilitent grandement le dveloppement. Par exemple, lditeur de mthodes traite automatiquement les ventuelles erreurs de saisie et formate votre travail la vole ; linterprteur (le moteur qui excute le langage) intercepte les erreurs de syntaxe et vous les dsigne ; enfin, le dbogueur vous permet de contrler trs prcisment lexcution de vos mthodes afin de dtecter toute erreur de structure. Construire des applications
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous connaissez maintenant les oprations que lon peut raliser avec une base de donnes saisie, recherches, tris et crations dtats... Vous avez effectu ces actions dans le mode Utilisation, laide des menus et des diteurs intgrs. Lorsque vous utilisez une base de donnes, vous rptez certaines squences de tches. Par exemple, dans une base de contacts personnels, vous pouvez rechercher des contacts, les trier par nom, puis imprimer un tat chaque fois que des informations ont t modifies. Ces oprations ne sont pas difficiles raliser, mais elles peuvent prendre beaucoup de temps lorsquil faut les faire 20 fois. De plus, si vous navez pas utilis la base pendant deux semaines, il se peut que vous ayez oubli certaines tapes ncessaires la cration dun tat. Dans les mthodes, les tapes senchanent les unes aprs les autres. Ainsi, une seule commande effectue automatiquement toutes les tches qui lui sont lies. Par consquent, vous navez pas vous proccuper des oprations particulires raliser. Dans vos applications, les menus crs permettent deffectuer des tches rpondant prcisment aux besoins de la personne qui utilise la base. Une application se compose de tous les lments de votre base : la structure, les formulaires, les diffrentes mthodes, les menus et les mots de passe.

52

4e Dimension - Langage

Vous pouvez compiler vos bases et crer des applications Windows et MacOS autonomes. La compilation des bases de donnes acclre lexcution du langage, protge les bases, et vous permet de crer des applications totalement indpendantes. Le compilateur intgr vrifie galement la syntaxe ainsi que les types des variables dans les mthodes, et contrle donc la cohrence de base. Les applications que vous crez peuvent aller du plus simple (un menu unique permettant de saisir des noms et dimprimer un tat) au plus complexe (un systme de facturation ou de gestion des stocks). Les types dutilisation des applications sont illimits. Gnralement, une application grandit progressivement depuis une base de donnes en mode Utilisation jusqu un logiciel entirement contrl par des menus crs. Pour en savoir plus... Le dveloppement d'applications peut tre aussi simple ou aussi complexe que vous le voulez. Pour plus dinformations sur le processus de construction d'une application, reportez-vous la section Construire une application 4D. Si vous dbutez avec 4D, reportez-vous aux sections Prsentation du langage pour dcouvrir les principes de fonctionnement du langage 4D. Commencez par la section Introduction au langage 4D.

4e Dimension - Langage

53

Construire une application 4D

Introduction version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Une application 4D est une base de donnes conue pour rpondre spcifiquement des besoins prcis. Une application comporte une interface utilisateur destine faciliter son utilisation. Toutes les fonctions quelle propose sont directement lies (et se limitent) son champ daction. 4e Dimension vous permet de crer des applications de manire plus confortable et plus aise que si vous utilisiez des langages traditionnels. Parmi la grande varit dapplications que 4e Dimension peut crer, citons : un systme de facturation, un systme de gestion des stocks, un systme de comptabilit, un systme de paie, un gestion des ressources humaines, un systme de traitement des prospects, une base de donnes accessible par Internet ou Intranet.

Il est parfaitement envisageable quune seule application 4D gre tous ces systmes. Ce type dapplications correspond une utilisation plutt traditionnelle des bases de donnes. De surcrot, les outils proposs par 4e Dimension vous permettent de crer des applications originales, telles que, par exemple : un systme de gestion documentaire, un systme graphique de gestion dimages, une application de publication de catalogues, un systme de contrle et de commande dun dispositif externe, un systme de messagerie lectronique (E-mail), un systme multi-utilisateurs de gestion de planning, un catalogue recensant les lments d'une collection de vidos ou de disques.

Typiquement, une application commence par tre une simple base de donnes exploite en mode Utilisation. Cette base se transforme en application mesure quelle est personnalise. La caractristique majeure dune application est la dissimulation lutilisateur des systmes internes de gestion des fonctions de la base. La gestion de la base est automatise, et lutilisateur se sert de menus personnaliss pour excuter des tches spcifiques.

54

4e Dimension - Langage

Lorsquune base 4e Dimension est exploite en mode Utilisation, vous devez connatre les tapes atteindre pour obtenir le rsultat recherch. Dans une application 4D, cest le mode Menus crs qui est utilis. Dans ce mode, vous devez grer vous-mme toutes les fonctions qui sont automatiques dans le mode Utilisation, cest--dire : Navigation parmi les tables : les botes de dialogue "Slectionnez la table ou le formulaire" et la Liste des tables ne sont pas accessibles lutilisateur. Vous pouvez utiliser les commandes de menus et les mthodes pour contrler la navigation parmi les tables. Menus : en mode Menus crs, seuls les menus Fichier (comportant la commande Quitter), Edition et Aide (ou le menu Pomme sous MacOS) sont affichs par dfaut. Si lapplication ncessite dautres menus, vous devez les crer vous-mme et les grer laide des mthodes 4D. Editeurs : les diteurs, tels que les diteurs de recherches et de tris, ne sont plus automatiquement accessibles en mode Menus crs. Si vous voulez quils restent disponibles, vous devez les appeler en utilisant les commandes du langage. Les paragraphes suivants fournissent des exemples dautomatisation de lutilisation dune base laide du langage. Menus crs : un exemple
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les menus personnaliss sont les lments dinterface lmentaires dune application. La cration de menus est trs simple il suffit dassocier une mthode ou une action automatique chaque commande de menu dans lditeur de menus. Les menus personnaliss facilitent lapprentissage et lutilisation dune base de donnes. Le paragraphe ci-dessous dcrit le point de vue de lutilisateur lorsquil choisit une commande de menu. Le paragraphe suivant dtaille ensuite ce qui se produit rellement au cur lapplication ainsi que le travail de conception qui a t effectu. Bien que lexemple soit simple, il apparat clairement que la base est plus facile apprendre et utiliser. Lutilisateur na accs quaux lments correspondant ses besoins plutt quaux outils gnriques et aux commandes de menu du mode Utilisation. Le point de vue de l'utilisateur Lutilisateur slectionne une commande de menu personnalis appele Crer pour ajouter une nouvelle personne dans la base de donnes.

4e Dimension - Langage

55

Le formulaire entre de la table [Personnes] saffiche.

Lutilisateur saisit le prnom de la personne et appuie sur la touche Tabulation pour passer au champ suivant.

56

4e Dimension - Langage

Lutilisateur saisit le nom de la personne.

Lutilisateur appuie sur la touche Tabulation pour passer au champ suivant : le nom est converti en lettres majuscules.

Une fois la saisie termine, lutilisateur clique sur le bouton de validation (gnralement le dernier dans la barre de boutons).

4e Dimension - Langage

57

Un autre enregistrement vide s'affiche. L'utilisateur clique sur le bouton Annuler (celui qui comporte une croix) pour terminer la boucle de saisie des donnes. Lutilisateur retourne lcran principal. Les coulisses La barre de menus a t cre en mode Structure, laide de lditeur de menus.

58

4e Dimension - Langage

La commande de menu Crer est associe une mthode projet appele Nouvelle Personne. Cette mthode a t cre, en mode Structure, dans lditeur de mthodes. Lorsque l'utilisateur slectionne cette commande de menu, la mthode Nouvelle personne s'excute.

La boucle Repeter...Jusque l'intrieur de laquelle se trouve la commande AJOUTER ENREGISTREMENT provoque exactement les mmes effets que la commande de menu Nouvel enregistrement en mode Utilisation. Elle affiche le formulaire entre courant, de manire ce que l'utilisateur puisse saisir un nouvel enregistrement. Lorsque l'utilisateur valide l'enregistrement, un autre enregistrement vide apparat. Cette boucle AJOUTER ENREGISTREMENT continue de s'excuter jusqu' ce que l'utilisateur clique sur le bouton Annuler. Lorsque l'utilisateur remplit un enregistrement, les actions suivantes sont dclenches : Comme il ny a pas de mthode objet associe au champ Prnom, rien ne sexcute. Une mthode est associe au champ Nom. Cette mthode a t cre, en mode Structure, l'aide des diteurs de formulaires et de mthodes. Elle excute linstruction suivante : Nom:=Majusc(Nom) Cette ligne convertit le champ "Nom" en caractres majuscules. Une fois qu'un enregistrement a t saisi, lorsque l'utilisateur clique sur le bouton d'annulation dans le formulaire suivant, la variable systme OK prend la valeur zro, ce qui constitue la condition d'arrt de l'excution de la boucle AJOUTER ENREGISTREMENT. Comme il ny a pas dautres instructions excuter, la mthode Nouvelle Personne stoppe son excution et rend la main la barre de menus principale.

4e Dimension - Langage

59

Comparer une application 4D avec le mode Utilisation


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Comparons la manire dont une mme tche est effectue en mode Utilisation et laide du langage. Examinons une opration courante : Slectionner un groupe denregistrements, Le trier, Imprimer un tat. Le paragraphe ci-dessous, Exploiter une base en mode Utilisation, traite de la ralisation de ces tches partir du mode Utilisation. Le paragraphe suivant, Exploiter une application 4D avec les diteurs intgrs, traite de la ralisation des mmes tches partir dune application en mode Menus crs. Notez que, bien que les mmes oprations sont effectues dans les deux cas, les tapes dans le second paragraphe sont automatises par programmation. Exploiter une base en mode Utilisation Lutilisateur choisit la commande Recherche>Recherche... dans le menu Enregistrements.

60

4e Dimension - Langage

Lditeur de recherches saffiche :

Lutilisateur dfinit ses critres de recherche et clique sur le bouton Rechercher. La recherche seffectue. Lutilisateur choisit la commande Trier... dans le menu Enregistrements.

4e Dimension - Langage

61

L'diteur de tris saffiche.

Lutilisateur dfinit ses critres de tri et clique sur le bouton Trier. Le tri est effectu. Puis, pour imprimer les enregistrements, les tapes suivantes sont ncessaires : Lutilisateur choisit la commande Imprimer dans le menu Fichier. La bote de dialogue de choix du formulaire dimpression saffiche (lutilisateur doit savoir quel formulaire choisir !). Les botes de dialogue de limprimante slectionne saffichent. Lutilisateur fixe ses paramtres, puis ltat est imprim. Exploiter une application 4D avec les diteurs intgrs Examinons maintenant comment ces oprations peuvent tre effectues en mode Menus crs. L'utilisateur choisit la commande Etat dans le menu Personnes. Mme ce stade, lutilisation dune application apparat plus facile. Lutilisateur na pas besoin de savoir quil faut commencer par effectuer une recherche.

62

4e Dimension - Langage

Une mthode appele Mon Etat est associe la commande de menu. Elle se prsente ainsi : CHERCHER ([Personnes]) TRIER ([Personnes]) FORMULAIRE SORTIE ([Personnes]; "Etat") IMPRIMER SELECTION ([Personnes]) La premire ligne est excute : CHERCHER ([Personnes]) Lditeur de recherches saffiche.

Lutilisateur dfinit ses critres de recherche et clique sur le bouton Rechercher. La recherche seffectue. La deuxime ligne de la mthode Mon Etat est excute : TRIER ([Personnes])

4e Dimension - Langage

63

Vous notez que lutilisateur navait pas besoin de savoir que le tri tait la deuxime tape. La bote de dialogue de tri saffiche.

Lutilisateur dfinit ses critres de tri et clique sur le bouton Trier. Le tri est effectu. La troisime ligne de Mon Etat est excute : FORMULAIRE SORTIE ([Personnes]; "Etat") Une fois de plus, il nest pas ncessaire que lutilisateur sache ce quil faut faire ensuite. Le cheminement est dj trac. La dernire ligne de la mthode Mon Etat est excute : IMPRIMER SELECTION ([Personnes]) Les botes de dialogue de limprimante slectionne saffichent. Lutilisateur fixe ses paramtres, puis ltat est imprim.

64

4e Dimension - Langage

Automatiser davantage lapplication


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les mmes commandes que celles qui ont t employes dans la comparaison prcdente peuvent tre utilises pour automatiser encore plus la base de donnes. Examinons la nouvelle version de la mthode Mon Etat. L'utilisateur choisit Etat dans le menu Personnes. La mthode appel Mon Etat2 est associe la commande de menu : CHERCHER ([Personnes]; [Personnes]Entreprise = "Dupont & Associs") TRIER ([Personnes]; [Personnes]Nom; > ; [Personnes]Prnom; >) FORMULAIRE SORTIE([Personnes]; "Etat") IMPRIMER SELECTION ([Personnes]; *) La premire ligne est excute : CHERCHER ([Personnes]; [Personnes]Entreprise = "Dupont & Associs") Lditeur de recherches ne s'affiche pas. Au lieu de cela, la recherche est dfinie et effectue par la commande CHERCHER. Lutilisateur na rien faire. La deuxime ligne est excute : TRIER ([Personnes]; [Personnes]Nom; > ; [Personnes]Prnom; >) La bote de dialogue de tri nest pas affiche, et le tri est immdiatement effectu. Une fois encore, aucune intervention de lutilisateur nest ncessaire. Les dernires lignes de la mthode Mon Etat2 sont excutes : FORMULAIRE SORTIE([Personnes]; "Etat") IMPRIMER SELECTION ([Personnes]; *) Les botes de dialogue standard dimpression ne sont pas affiches. La commande IMPRIMER SELECTION comporte en effet le paramtre optionnel astrisque (*), ce qui lui indique dutiliser les paramtres dimpression en vigueur au moment o le formulaire dtat a t cr. Ltat est imprim. Les avantages de cette automatisation accrue sont les suivants : La recherche est effectue automatiquement : cela vite que les utilisateurs slectionnent de mauvais critres lorsqu'ils construisent leur recherche. Le tri est effectu automatiquement : cela vite que les utilisateurs slectionnent de mauvais critres lorsqu'ils construisent leur tri.

4e Dimension - Langage

65

L'impression est effectue automatiquement : cela vite que les utilisateurs slectionnent un formulaire inadapt. Vous vitez l'utilisateur d'avoir dfinir des options dans les trois botes de dialogue. Aides au dveloppement dapplications 4D
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

A mesure que vous progresserez dans votre dveloppement d'une application 4D, vous allez dcouvrir de nombreuses fonctionnalits que vous n'aviez pas vues lorsque vous avez commenc. Mais vous pouvez aller encore plus loin, en ajoutant des outils et des plug-ins dans votre environnement 4D. Outils et plug-ins 4D 4D fournit plusieurs outils et plug-ins permettant d'augmenter les capacits de vos applications 4e Dimension : 4D Insider vous permet de construire des tables de rfrences croises de vos bases 4e Dimension. Vous pouvez visualiser et imprimer vos mthodes, variables, commandes, externes, tables, listes et formulaires. Lditeur de rfrences croises dsigne tous les endroits de votre base o vos objets sont utiliss. 4D Insider vous permet aussi de dplacer des objets tels que des tables, formulaires, mthodes, barres de menus, numrations, externes et styles dune base une autre. 4D propose notamment les plug-ins suivants : 4D 4D 4D 4D Write : Traitement de textes Draw : Crateur de documents graphiques de type CAD View : Tableur et diteur de listes. Internet Commands (intgr) : Utilitaires de communication via Internet

4D ODBC 2004 : Connectivit via ODBC 4D for OCI : Connectivit avec ORACLE Call Interface 4D Open for Java : Connectivit avec les applications JAVA 4D Open for 4D : Connectivit de 4D 4D pour construire des systmes 4D d'information distribue. Pour plus d'informations, contactez 4D ou un Partenaire 4D, ou visitez notre site Web : http://www.4D.fr

66

4e Dimension - Langage

La communaut 4D et les produits des partenaires 4D Il existe une communaut internationale trs active organise autour de 4D, compose de groupes d'utilisateurs, de forums lectroniques et de partenaires 4D, qui dveloppe des produits lis 4D. Examinez le contenu de votre CD 4D, il contient des versions de dmonstration et des informations en provenance des Partenaires 4D. Vous pourrez les contacter sur le Web. Vous pouvez vous inscrire sur le forum public d'aide et d'change de 4e Dimension l'adresse suivante : http://forum.4D.fr La communaut 4D vous fournira de nombreux conseils et solutions, ainsi que des produits tiers vous permettant d'augmenter votre productivit. Vous aurez accs une foule d'informations et d'astuces qui vous feront conomiser votre temps et votre nergie.

4e Dimension - Langage

67

68

4e Dimension - Langage

2 ________________________ Prsentation du langage

4e Dimension - Langage

69

70

4e Dimension - Langage

Introduction au langage 4D

Prsentation du langage version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le langage de 4e Dimension est constitu de diffrents composants, vous permettant deffectuer de multiples oprations et de grer vos donnes. Types de donnes : Catgories de donnes stockes dans une base. Ce point est trait dans le paragraphe suivant. Pour une description dtaille, rfrez-vous la section Types de donnes. Variables : Adresses de stockage temporaires de donnes en mmoire. Pour une description dtaille, rfrez-vous la section Variables. Oprateurs : Symboles effectuant un calcul entre deux valeurs. Ce point est trait dans les paragraphes suivants. Pour une description dtaille, rfrez-vous la section Oprateurs et ses sous-sections. Expressions : Combinaisons de composants du langage ayant pour rsultat le renvoi dune valeur. Ce point est trait dans les paragraphes suivants. Commandes : Instructions intgres effectuant une opration. Toutes les commandes de 4D (par exemple AJOUTER ENREGISTREMENT) sont dcrites dans ce manuel, groupes par thme. Lorsque c'est ncessaire, les thmes comprennent une section d'introduction. Vous pouvez utiliser des Plug-ins 4D pour ajouter de nouvelles commandes votre environnement de dveloppement 4D. Par exemple, une fois que vous avez install le plug-in 4D Write dans votre base de donnes, vous pouvez utiliser les commandes de 4D Write pour crer et manipuler des fichiers de traitement de texte. Mthodes : Instructions que vous crivez laide de tous les lments du langage dcrits ci-dessus. Pour une description dtaille, rfrez-vous la section Mthodes et ses soussections. Cette section prsente les Types de donnes, les Oprateurs et les Expressions. Pour une description d'un autre composant, reportez-vous aux sections prcdemment cites. De plus : Les composants du langage tels que les variables sont identifis par leur nom. Pour une description dtaille des rgles de dfinition des noms d'objets, reportez-vous la section Nommer les objets du langage 4D. Pour plus d'informations sur les variables tableaux, reportez-vous la section Prsentation des tableaux. Pour plus d'informations sur les variables BLOB, reportez-vous la section Commandes du thme BLOB. Si vous avez l'intention de compiler votre base, reportez-vous la section Commandes du thme Compilateur ainsi qu'au manuel Mode Structure de 4e Dimension.

4e Dimension - Langage

71

Types de donnes
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

De nombreux types de donnes peuvent tre stocks dans une base 4e Dimension. Le langage distingue sept types de donnes lmentaires : chane, numrique, date, heure, boolen, image et pointeur. Chane : Une suite de caractres, telles que Bonjour tous. Les champs et variables alpha et texte sont des donnes de type Chane. Numrique : Nombres, tels que 2 ou 1 000,67. Les champs et variables entier, entier long et numrique (aussi appel rel) sont des donnes de type Numrique. Date : Dates telles que 20/11/97. Les champs et variables date sont des donnes de type Date. Heures : Heures, cest--dire heures, minutes et secondes, telles que 21:00:00 ou 4:35:30 de l'aprs-midi. Les champs et variables heure sont des donnes de type Heure. Boolen : Valeurs logiques de VRAI ou FAUX. Les champs et variables boolens sont des donnes de type Boolen. Image : Les champs et variables image sont des donnes de type Image. Pointeur : Type spcial de donnes, utilis en programmation avance. Les variables pointeur sont des donnes de type Pointeur. Il ny a pas de type de champ correspondant. Vous constatez que, dans cette liste de types de donnes, les types chane et numrique sont associs plus dun type de champ. Lorsque des donnes sont places dans un champ, le langage les convertit automatiquement dans le type du champ. Par exemple, si un champ de type entier est utilis, les valeurs quil contient sont automatiquement traites en tant que numriques. En dautres termes, vous navez pas vous proccuper du mlange de champs de types semblables lorsque vous programmez avec 4D ; le langage le gre pour vous. Cependant, il est important, lorsque vous utilisez le langage, de ne pas mlanger les types de donnes diffrents. Tout comme il est absurde de stocker la valeur ABC dans un champ de type Date, il est absurde de donner la valeur ABC une variable utilise pour des dates. Dans la plupart des cas, 4e Dimension est trs tolrant et tentera dutiliser de manire logique ce que vous faites. Par exemple, si vous additionnez un nombre x et une date, 4e Dimension dduira que vous voulez ajouter x jours la date, mais si vous tentez dajouter une chane une date, 4e Dimension vous prviendra que cette opration est impossible.

72

4e Dimension - Langage

Certains cas ncessitent que vous stockiez des donnes dans un type et que vous les utilisiez dans un autre. Le langage contient un ensemble complet de commandes vous permettant de convertir des types de donnes vers dautres types. Par exemple, si vous voulez crer un numro de matricule commenant par des chiffres et se terminant par des lettres, vous pouvez crire : [Produits]Matricule:=Chaine(Numro)+"abc" o, si Numro vaut 17, [Produits]Matricule prendra la valeur 17abc. Les types de donnes sont dtaills dans la section Types de donnes. Oprateurs
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lorsque vous programmez avec 4D, il est rare que vous ayez simplement besoin de donnes brutes. Le plus souvent, il sera ncessaire de traiter ces donnes d'une manire ou d'une autre. Vous effectuez ces calculs avec des oprateurs. Les oprateurs, en gnral, prennent deux valeurs et effectuent avec elles une opration dont le rsultat est une troisime valeur. Vous connaissez dj la plupart des oprateurs. Par exemple, 1 + 2 utilise loprateur daddition (ou signe plus) pour faire la somme de deux nombres, et le rsultat est 3. Le tableau ci-dessous prsente quelques oprateurs courants : Oprateur + * / Opration Addition Soustraction Multiplication Division Exemple 1 + 2 ce qui fait 3 3 2 ce qui fait 1 2 * 3 ce qui fait 6 6 / 2 ce qui fait 3

Les oprateurs numriques ne reprsentent quun seul des diffrents types doprateurs disponibles. Comme 4e Dimension traite de multiples types de donnes, tels que des nombres, des dates ou des images, vous disposez doprateurs particuliers effectuant des oprations sur ces donnes.

4e Dimension - Langage

73

Souvent, les mmes symboles sont utiliss pour des oprations diffrentes, en fonction du type de donnes traites. Par exemple, le signe (+) peut effectuer diverses oprations, comme le montre le tableau suivant : Type de donnes Numrique Chane Date et Numrique Opration Addition Concatnation Exemple 1 + 2 ajoute les nombres, le rsultat est 3 Bonjour + tous concatne (met bout bout) les chanes, le rsultat est Bonjour tous Addition de date !1/1/1997! + 20 ajoute 20 jours la date 1 janvier 1997, le rsultat est la date 21 janvier 1997

Les oprateurs sont dtaills dans la section Oprateurs et ses sous-sections. Expressions
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Pour parler simplement, les expressions retournent une valeur. En fait, lorsque vous programmez avec 4e Dimension, vous utilisez tout le temps des expressions et vous avez tendance les manipuler uniquement travers la valeur quelles reprsentent. Les expressions sont aussi appeles formules. Les expressions peuvent tre constitues de presque tous les composants du langage : commandes, oprateurs, variables et champs. Vous utilisez des expressions pour crire des lignes de code, qui sont leur tour utilises pour construire des mthodes. Des expressions sont employes chaque fois que le langage de 4D a besoin de connatre la valeur dune donne. Les expressions sont rarement indpendantes. Il ny a que peu dendroits dans 4e Dimension o une expression peut tre utilise en tant que telle : dans la bote de dialogue de Recherche par formule en mode Utilisation, dans la fentre du Dbogueur o la valeur des expressions peut tre value, dans la bote de dialogue Appliquer une formule, et dans lditeur dtats semi-automatiques en tant que formule dans une colonne. Une expression peut tre simplement une constante, telle que le chiffre 4 ou la chane Bonjour. Comme son nom lindique, la valeur dune constante ne change jamais. Cest lorsquelles contiennent des oprateurs que les expressions commencent devenir intressantes. Dans les paragraphes prcdents, vous avez dj pu voir des expressions utilisant des oprateurs. Par exemple, 4 + 2 est une expression qui utilise loprateur daddition pour additionner deux nombres, et dont le rsultat est 6.

74

4e Dimension - Langage

Vous vous rfrez une expression par l'intermdiaire du type de donnes quelle retourne. Il existe sept types dexpressions : Expression chane, Expression numrique (aussi appele nombre), Expression date, Expression heure, Expression boolenne, Expression image, Expression pointeur.

Le tableau suivant fournit un exemple pour chacun des sept types dexpressions. Expression Bonjour Bonjour + tous Type Chane Chane Description Le mot Bonjour est une constante chane, signale par les guillemets. Deux chanes, Bonjour et tous, sont mises bout bout (concatnes) l'aide de l'oprateur de concatnation de chanes (+). La chane Bonjour tous est retourne. Deux chanes sont concatnes : la chane M. et la valeur courante du champ Nom de la table Amis. Si le champ contient Dupont, l'expression retourne M. Dupont. Cette expression utilise Majusc, une commande du langage, pour convertir la chane dupont en majuscules. Elle retourne DUPONT. C'est une constante numrique, 4. Deux nombres, 4 et 2, sont multiplis l'aide de l'oprateur de multiplication (*). Le rsultat est le nombre 8. C'est le nom d'un bouton. Il retourne la valeur courante du bouton : 1 s'il y a eu un clic sur le bouton, 0 sinon. C'est une constante date pour la date 25/01/97 (25 janvier 1997). Notez l'emploi des points d'exclamation pour indiquer une constante date.

M. + [Amis]Nom

Chane

Majusc (dupont)

Chane

4 4*2

Numrique Numrique

MonBouton

Numrique

!25/1/97!

Date

4e Dimension - Langage

75

Date du jour + 30

Date

?8:05:30? ?2:03:04? + ?1:02:03? Vrai 10 # 20

Heure Heure Boolen Boolen

ABC = XYZ

Boolen

MonImage + 50

Image

->[Amis]Nom Table (1)

Pointeur Pointeur

C'est une expression de type Date qui utilise la fonction Date du jour pour rcuprer la date courante. Elle ajoute 30 jours la date d'aujourd'hui et retourne la nouvelle date. C'est une constante heure qui reprsente 8 heures, 5 minutes, et 30 secondes. Cette expression ajoute une heure une autre et retourne l'heure 3:05:07. Cette commande retourne la valeur boolenne VRAI. C'est une comparaison logique entre deux nombres. Le symbole (#) signifie est diffrent de. Comme 10 est diffrent de 20, l'expression retourne VRAI. C'est une comparaison logique entre deux chanes. Elles sont diffrentes, donc l'expression retourne FAUX. Cette expression considre l'image place dans MonImage, la dplace de 50 pixels vers la droite, et retourne l'image rsultante. Cette expression retourne un pointeur vers le champ [Amis]Nom. C'est une commande qui retourne un pointeur vers la premire table.

Rfrence Constantes, Mthodes, Oprateurs, Pointeurs, Prsentation des tableaux, Types de donnes, Variables.

76

4e Dimension - Langage

Types de donnes

Prsentation du langage version 6.7 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les champs, variables et expressions de 4e Dimension ont un type reprsentant les donnes qu'ils contiennent. 4e Dimension accepte le typage de ces lments en fonction du tableau suivant : Types de donnes Chane (cf. note 1) Numrique (cf. note 2) Date Heure Boolen Image Pointeur BLOB (cf. note 3) Tableau (cf. note 4) Sous-table Indfini Champ Oui Oui Oui Oui Oui Oui Non Oui Non Oui Non Variable Oui Oui Oui Oui Oui Oui Oui Oui Oui Non Oui Expression Oui Oui Oui Oui Oui Oui Oui Non Non Non Oui

Notes (1) Une chane peut tre un champ alphanumrique, une variable de longueur fixe, ou encore une variable ou un champ de type Texte. (2) Un numrique peut tre une variable ou un champ de type Rel (Numrique), Entier et Entier long. (3) BLOB est l'abrviation de Binary Large OBject. Pour plus d'informations sur les BLOBs, reportez-vous la section Commandes du thme BLOB. (4) Les tableaux peuvent tre de tout type. Pour plus d'informations, reportez-vous la section Prsentation des tableaux. Chane
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Chane est un terme gnrique utilis pour : les champs alphanumriques les variables de longueur fixe les variables ou champs de type Texte toute expression de type Alpha ou Texte

4e Dimension - Langage

77

Une chane se compose de caractres. Chaque caractre peut tre l'un des 256 caractres ASCII supports par Windows et MacOS. Pour plus d'informations sur les codes ASCII, reportez-vous la section Codes ASCII. Un champ alphanumrique peut contenir de 0 80 caractres (la limite est fixe lors de la dfinition du champ). Une variable de longueur fixe peut contenir de 0 255 caractres (la limite est fixe lors de la dclaration de la variable). Un champ, une variable ou une expression de type Texte peut contenir de 0 32 000 caractres. Vous pouvez assigner un alpha un texte et vice-versa, 4D effectue automatiquement la conversion, en tronquant les valeurs si ncessaire. Vous pouvez mlanger du texte et de l'alphanumrique dans les expressions. Note : Dans ce manuel de rfrence du langage 4D, les paramtres de type Alpha et Texte dans les descriptions des commandes sont indiffremment appels Chane, sauf spcification explicite. Numrique
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Numrique est un terme gnrique utilis pour : les champs, variables ou expression de type Rel (aussi appel type Numrique) les champs, variables ou expression de type Entier les champs, variables ou expression de type Entier long Les nombres de type Rel sont compris dans l'intervalle 1.7e308 (15 chiffres). Les nombres de type Entier (2 octets) sont compris dans l'intervalle -32 768..32 767 Les nombres de type Entier long (4 octets) sont compris dans l'intervalle -2^31..(2^31)-1 Vous pouvez assigner tout nombre d'un type numrique un nombre d'un autre type numrique, 4D effectue automatiquement la conversion, en tronquant ou en arrondissant les valeurs si ncessaire. Notez cependant que lorsqu'une valeur est situe en-dehors de l'intervalle du type de destination, 4D ne pourra la convertir. Vous pouvez mlanger tous les types de numriques au sein d'une mme expression. Note : Dans ce manuel de rfrence du langage 4D, quel que soit le type prcis des donnes, les paramtres de type Rel, Entier et Entier long dans les descriptions des commandes sont appels Numriques, sauf spcification explicite.

78

4e Dimension - Langage

Date
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les variables, champs ou expressions de type Date peuvent tre compris entre 1/1/100 et 31/12/32767. Une date est structure sous la forme jour/mois/anne (sur un systme franais). Si lanne est fournie avec deux chiffres seulement, 4e Dimension suppose que le sicle est le 20e si la valeur est suprieure ou gale 30 et le 21e si elle est infrieure (ce comportement par dfaut peut tre modifi l'aide de la commande SIECLE PAR DEFAUT). Note : Dans ce manuel de rfrence du langage 4D, les paramtres de type Date dans les descriptions des commandes sont appels Date, sauf spcification explicite. Heure
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les variables, champs ou expressions de type Heure peuvent tre compris entre 00:00:00 et 596 000:00:00. Une heure est structure sous la forme heure:minute:seconde (avec une version franaise de 4D). Les heures sont stockes dans un format de 24 heures. Une valeur de type Heure peut tre traite en tant que nombre. Le nombre correspondant est le nombre de secondes que cette valeur reprsente. Pour plus d'informations, reportez-vous la section Oprateurs sur les heures. Note : Dans ce manuel de rfrence du langage 4D, les paramtres de type Heure dans les descriptions des commandes sont appels Heure, sauf spcification explicite. Boolen
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les variables, champs ou expressions de type Boolen peuvent tre soit VRAI soit FAUX. Note : Dans ce manuel de rfrence du langage 4D, les paramtres de type Boolen dans les descriptions des commandes sont appels Boolen, sauf spcification explicite.

4e Dimension - Langage

79

Image
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les variables, champs ou expressions de type Image peuvent contenir des images Windows ou Macintosh. En gnral, ce type accepte toute image pouvant tre colle dans le Presse-papiers ou bien lue depuis le disque l'aide des commandes de 4D ou d'un plug-in. Note : Dans ce manuel de rfrence du langage 4D, les paramtres de type Image dans les descriptions des commandes sont appels Image, sauf spcification explicite. Pointeur
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les variables ou expressions de type Pointeur sont des rfrences d'autres variables (y compris des tableaux et des lments de tableaux), des tables ou des champs. Il n'existe pas de champs de type Pointeur. Pour plus d'informations sur les pointeurs, reportez-vous la section Pointeurs. Note : Dans ce manuel de rfrence du langage 4D, les paramtres de type Pointeur dans les descriptions des commandes sont appels Pointeur, sauf spcification explicite. BLOB
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les champs ou variables de type BLOB sont des sries d'octets (d'une longueur de 0 2 Go) que vous pouvez adresser individuellement ou l'aide des Commandes du thme BLOB. Il n'existe pas d'expressions de type BLOB. Note : Dans ce manuel de rfrence du langage 4D, les paramtres de type BLOB dans les descriptions des commandes sont appels BLOB. Tableau
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les tableaux ne sont pas vritablement un type de donnes. Sous cette appellation sont regroups les diffrents types de tableaux (comme les tableaux entier, tableaux texte, etc.). Les tableaux sont des variables. Il n'existe pas de champs ni d'expressions de type Tableau. Pour plus d'informations sur les tableaux, reportez-vous la section Prsentation des tableaux. Note : Dans ce manuel de rfrence du langage 4D, les paramtres de type Tableau dans les descriptions des commandes sont appels Tableau, sauf spcification explicite (par exemple Tableau Alpha, Tableau Rel...).

80

4e Dimension - Langage

Sous-table
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les sous-tables ne sont pas vritablement un type de donnes. Seuls les champs peuvent tre de type Sous-table. Il n'existe pas de variables ni d'expressions de type Sous-table. Pour plus d'informations sur les sous-tables, reportez-vous au manuel Mode Structure ainsi qu'aux commandes du thme Sous-enregistrements. Indfini
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Indfini n'est pas vritablement un type de donnes. Une variable dite "indfinie" est une variable n'ayant pas encore t dfinie. Une fonction utilisateur (c'est--dire une mthode projet qui retourne une valeur) peut retourner une valeur indfinie si, l'intrieur de la mthode, le rsultat de la fonction ($0) est assign une expression indfinie (une expression issue d'un calcul effectu avec au moins une variable indfinie). Un champ ne peut pas tre indfini. Convertir les types de donnes
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le langage de 4D comporte des fonctions et des oprateurs vous permettant de convertir des types de donnes en dautres types, dans la mesure o de telles conversions ont un sens. 4D assure la vrification des types de donnes. Ainsi, vous ne pouvez pas crire : "abc"+0.5+!25/12/96!-?00:30:45?, car cette opration gnre une erreur de syntaxe. Le tableau ci-dessous liste les types de donnes pouvant tre convertis, le type dans lequel ils peuvent tre convertis, ainsi que les fonctions 4D utiliser. Types convertir Chane Numrique (*) Date Heure Boolen en Chane Chaine Chaine Chaine Num en Numrique en Date Num Date en Heure Heure

(*) Les valeurs de type Heure peuvent tre utilises en tant que numriques. Note : Ce tableau ne traite pas les conversions de donnes plus complexes obtenues l'aide d'une combinaison d'oprateurs et d'autres commandes. Rfrence Conditions et boucles, Constantes, Mthodes, Nommer les objets du langage 4D, Oprateurs, Pointeurs, Prsentation des tableaux, Type, Variables.

4e Dimension - Langage

81

Constantes

Prsentation du langage version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Une constante est une expression dont la valeur est fixe. Il existe deux types de constantes : les constantes prdfinies que vous pouvez appeler en inscrivant leur nom et les constantes littrales, pour lesquelles vous devez saisir une valeur. Constantes prdfinies
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La version 6 de 4e Dimension a introduit les constantes prdfinies. Ces constantes sont listes dans la fentre de l'Explorateur :

Les constantes prdfinies sont listes par thmes. Pour utiliser une constante prdfinie dans la fentre de l'diteur de mthodes, vous pouvez : soit glisser-dposer la constante depuis la fentre de l'Explorateur vers la fentre de l'diteur de mthodes, soit saisir directement son nom dans la fentre de l'diteur de mthodes. Les noms des constantes prdfinies peuvent contenir jusqu' 31 caractres.

82

4e Dimension - Langage

Astuce : Si vous saisissez directement le nom d'une constante prdfinie, vous pouvez utiliser le symbole joker (@), ce qui vous vite d'avoir taper le nom en entier. Par exemple, si vous saisissez Donnes abs@, 4D inscrira en entier la constante Donnes absentes presse papiers lorsque vous appuierez sur la touche Retour chariot ou Entre pour valider la ligne de code. Note : Les constantes prdfinies (environ 500) sont listes par thmes dans ce manuel. Lorsque c'est utile, les constantes prdfinies sont galement listes dans les descriptions des commandes. Les constantes prdfinies apparaissent soulignes par dfaut dans la fentre de l'diteur de mthodes et dans la fentre du dbogueur :

Dans la fentre ci-dessus, Sur chargement est par exemple une constante prdfinie. Constantes littrales
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension accepte quatre types de donnes pour les constantes littrales : Chane, Numrique, Date, Heure. Constantes chanes Une constante de type chane est incluse entre des guillemets droits (""). Voici quelques exemples de constantes chane : "Ajouter Enregistrements" "Aucun enregistrement trouv." "Facture" Une chane vide est spcifie par la succession de deux guillemets ("").

4e Dimension - Langage

83

Constantes numriques Une constante numrique scrit comme un nombre rel. Voici quelques exemples de constantes numriques : 27 123,76 0,0076 Les nombres ngatifs scrivent prcds du signe moins (-). Par exemple: 27 123,76 0,0076 Constantes dates Une constante de type date est incluse entre deux points dexclamation (!!). Dans un environnement franais, une date est structure sous la forme jour/mois/anne, une barre oblique "/" sparant les valeurs. Voici quelques exemples de constantes dates : !1/1/76! !4/4/04! !25/12/99! Une date nulle scrit !00/00/00! Astuce : L'diteur de mthodes dispose d'un raccourci pour entrer une date nulle. Pour cela, tapez un point dexclamation (!) et appuyez sur la touche Entre. Note : Lorsquune anne est saisie sur deux chiffres, 4e Dimension considre quelle appartient au 20e sicle, sauf si ce fonctionnement par dfaut a t modifi l'aide de la commande SIECLE PAR DEFAUT. Constantes heures Une constante heure est incluse entre deux points dinterrogation (?...?). Note : Cette syntaxe peut tre utilise sous Windows et MacOS. Sous MacOS, vous pouvez galement utiliser le symbole (Option+t sur un clavier franais). Avec une version franaise de 4D, une heure est structure sous la forme heure:minute:seconde, deux points (:) sparant les valeurs. Les heures sont stockes dans un format de 24 heures.

84

4e Dimension - Langage

Voici quelques exemples de constantes heures : ?00:00:00? ?09:30:00? ?13:01:59? ` minuit ` 9:30 du matin ` 13 heures, 1 minute et 59 secondes

Une heure nulle scrit ?00:00:00?. Astuce : L'diteur de mthodes dispose d'un raccourci pour saisir une heure nulle. Pour cela, tapez un point d'interrogation (?) et appuyez sur la touche Entre. Rfrence Conditions et boucles, Mthodes, Nommer les objets du langage 4D, Oprateurs, Pointeurs, Types de donnes, Variables.

4e Dimension - Langage

85

Variables

Prsentation du langage version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Fondamentalement, dans 4e Dimension, les donnes peuvent tre stockes de deux manires. Les champs stockent les donnes sur disque, de manire permanente ; les variables stockent les donnes en mmoire, de manire temporaire. Lorsque vous dfinissez votre base, vous indiquez 4e Dimension les noms et les types de champs que vous voulez utiliser. Cest pratiquement la mme chose pour les variables vous leur donnez un nom et un type. Les types de variables suivants correspondent chacun des types de donnes : Chane : chane alphanumrique fixe pouvant comprendre jusqu 255 caractres Texte : chane alphanumrique pouvant comprendre jusqu 32 000 caractres Entier : nombre entier compris entre -32768 et 32767 Entier long : nombre entier compris entre -2^31 et (2^31) -1 Rel (ou Numrique) : nombre rel compris entre 1.7e308 (15 chiffres) Date : date comprise entre 1/1/100 et 31/12/32767 Heure : heure comprise entre 00:00:00 et 596000:00:00 (secondes depuis minuit) Boolen : Vrai ou Faux Image : toute image Windows ou MacOS BLOB (Binary Large OBject) : suite d'octets pouvant aller jusqu' 2 Go Pointeur : pointeur vers une table, un champ, une variable, un tableau ou un lment de tableau Vous pouvez afficher des variables lcran ( l'exception des pointeurs et des BLOB), les utiliser pour saisir des donnes, et les imprimer dans des tats. Dans ces cas, elles se comportent exactement comme des champs, et les mmes contrles intgrs sont disponibles lorsque vous les crez : Formats daffichage, Contrles de saisie tels que filtres de saisie et valeurs par dfaut, Filtrages des caractres, Enumrations (listes hirarchiques) Valeurs saisissables ou non-saisissables

86

4e Dimension - Langage

Les variables peuvent galement servir : contrler des boutons (boutons, cases cocher, boutons radio, boutons 3D, etc.), contrler des thermomtres, rgles et cadrans, contrler des zones de dfilement, des pop up menus et des listes droulantes, contrler des listes hirarchiques et des menus hirarchiques, contrler des grilles de boutons, onglets, boutons image, etc. afficher les rsultats de calculs ne devant pas tre sauvegards.

Crer des variables


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous crez des variables simplement en les utilisant ; il nest pas ncessaire de les dclarer formellement comme vous le faites avec les champs. Par exemple, si vous voulez crer une variable qui contient la date du jour plus 30 jours, il vous suffit dcrire dans 4e Dimension : MaDate:=Date du jour+30 MaDate est alors cre et contient la valeur que vous voulez. Le programme interprte la ligne comme MaDate prend la valeur de la date courante plus 30 jours. Vous pourrez utiliser MaDate chaque fois que vous le souhaiterez dans votre base. Par exemple, vous pouvez la stocker dans un champ du mme type : [MaTable]MonChamp:=MaDate Il est parfois ncessaire de dfinir explicitement le type dune variable. Pour plus dinformations sur le typage des variables dans une base que vous avez lintention de compiler, reportez-vous la section Commandes du thme compilateur. Assigner des valeurs aux variables
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez donner des valeurs aux variables et/ou rcuprer leur valeur. Donner une valeur une variable sappelle assigner une valeur (ou affecter une valeur) et seffectue laide de loprateur dassignation (:=). Loprateur dassignation est galement utilis pour assigner des valeurs aux champs.

4e Dimension - Langage

87

Loprateur dassignation est le premier moyen pour crer une variable et lui donner une valeur. Vous placez le nom de la variable que vous voulez crer gauche de loprateur. Par exemple : MonNombre:=3 cre la variable MonNombre et lui donne la valeur numrique 3. Si MonNombre existait dj, elle prend simplement la valeur 3. Bien entendu, les variables ne seraient pas trs utiles si vous ne pouviez pas rcuprer les valeurs quelles contiennent. De nouveau, vous utilisez loprateur dassignation. Si vous devez placer la valeur de MonNombre dans un champ nomm [Produits]Taille, il vous suffit de placer MonNombre droite de loprateur dassignation : [Produits]Taille:=MonNombre Dans ce cas, [Produits]Taille vaudrait 3. Cet exemple est plutt simple, mais il illustre le moyen lmentaire dont vous disposez pour transfrer des donnes dun objet vers un autre en utilisant le langage. Important : Ne confondez pas loprateur dassignation (:=) avec le signe gal (=) qui est un oprateur de comparaison. Lassignation et la comparaison sont deux oprations trs diffrentes. Pour plus dinformations sur les oprateurs de comparaison, reportez-vous la section Oprateurs. Variables locales, process et interprocess
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez crer trois types de variables : des variables locales, des variables process et des variables interprocess. La diffrence entre ces trois types de variables est leur porte, ou les objets pour lesquels elles sont disponibles. Variables locales Le premier type de variable est la variable locale. Une variable locale, comme son nom lindique, est locale une mthode cest--dire accessible uniquement lintrieur de la mthode dans laquelle elle a t cre et inaccessible lextrieur de cette mthode. Pour une variable, tre locale une mthode signifie avoir une porte locale. Vous utilisez une variable locale lorsque vous souhaitez limiter son fonctionnement la mthode, pour une des raisons suivantes : Eviter des conflits de noms avec les autres variables. Utiliser temporairement des valeurs, Rduire le nombre de variables process.

88

4e Dimension - Langage

Le nom dune variable locale commence toujours par le signe dollar ($) et peut contenir jusqu 31 autres caractres. Si vous saisissez un nom plus long, 4e Dimension le tronque pour le ramener 31 caractres. Lorsque vous dveloppez une base comportant de nombreuses mthodes et variables, il arrive souvent que vous nayez besoin dutiliser une variable que dans une mthode. Vous pouvez alors crer et utiliser une variable locale, sans devoir vous soucier de lexistence dune autre variable du mme nom ailleurs dans la base. Frquemment, dans une base de donnes, des informations ponctuelles sont demandes lutilisateur. La commande Demander peut tre appele pour obtenir ces informations. Elle affiche une bote de dialogue comportant un message demandant lutilisateur de rpondre et, lorsque la rponse est valide, la retourne. Gnralement, il nest pas ncessaire de conserver cette information trs longtemps dans vos mthodes. Cest lendroit parfait pour utiliser une variable locale. Voici un exemple : $vsID:=Demander("Saisissez votre numro d'identification :") Si (OK=1) CHERCHER ([Personnes];[Personnes]ID =$vsID) Fin de si Cette mthode demande simplement lutilisateur de saisir un numro didentification. La rponse est place dans une variable locale, $vsID, puis la mthode la recherche parmi les champs [Personnes]ID. Une fois la mthode termine, la variable locale $vsID est efface de la mmoire. Ce fonctionnement est bien adapt puisque la variable nest utile quune seule fois et dans cette mthode uniquement. Variables process
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le second type de variable est la variable process. Une variable process est visible uniquement dans le process o elle a t cre. Elle est utilisable par toutes les mthodes du process et toutes les mthodes appeles depuis le process. Le nom dune variable process ne comporte aucun prfixe. Une variable process peut comporter jusqu 31 caractres. En mode interprt, les variables sont gres dynamiquement : elles sont cres en mmoire et effaces la vole. En mode compil, tous les process que vous crez (process utilisateurs) partagent la mme dfinition des variables process, mais chaque process dispose de sa propre instance pour chaque variable. Par exemple, la variable maVar est une certaine variable dans le process P_1 et une autre variable dans le process P_2.

4e Dimension - Langage

89

A compter de la version 6, un process peut lire et crire des variables process dans un autre process l'aide des commandes LIRE VARIABLE PROCESS et ECRIRE VARIABLE PROCESS. Nous vous recommandons de n'utiliser ces commandes que dans le cadre des besoins dcrits cidessous (qui sont les raisons pour lesquelles ces commandes ont t cres dans 4D) : Communication interprocess des endroits particuliers de votre code Gestion du glisser-dposer interprocess En client/serveur, communication entre les process sur les postes clients et les procdures stockes excutes sur le serveur. Pour plus d'informations, reportez-vous la section Introduction aux process et la description de ces commandes. Variables interprocess
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le troisime type de variable est la variable interprocess. Les variables interprocess sont visibles dans toute la base et sont disponibles pour tous les process. Le nom dune variable interprocess dbute toujours par le symbole (<>) form du symbole infrieur suivi du symbole suprieur et peut comporter jusqu 31 caractres supplmentaires. Note : Cette syntaxe peut tre utilise sur les plates-formes Windows et Macintosh. En outre, sous MacOS uniquement, vous pouvez utiliser le symbole "diamant" (Option+v sur un clavier franais). Les variables interprocess sont principalement utilises pour le partage dinformations entre les process. En mode client/serveur, chaque poste (client et serveur) partage la mme dfinition des variables interprocess, mais chacun utilise une instance diffrente d'une variable. Variables objets dans les formulaires
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Dans lditeur de formulaires, le fait de donner un nom un objet actif bouton, bouton radio, case cocher, zone de dfilement, thermomtre, etc. cre automatiquement une variable du mme nom. Par exemple, si vous crez un bouton appel MonBouton, une variable MonBouton est galement cre. Notez bien que ce nom de variable nest pas le libell du bouton, mais son nom.

90

4e Dimension - Langage

Ces variables vous permettent de contrler et de grer vos objets. Par exemple, lorsque lutilisateur clique sur un bouton, la variable du bouton prend la valeur 1 ; sinon, le reste du temps, elle est 0. La variable associe un thermomtre ou un cadran vous permet de lire et de modifier les valeurs reprsentes. Par exemple, si lutilisateur clique dans un thermomtre pour fixer une nouvelle valeur, la valeur de la variable est modifie en consquence. De mme, si une mthode change la valeur de la variable, le thermomtre est redessin pour afficher cette nouvelle valeur. Pour plus d'informations sur les variables et les formulaires, reportez-vous au manuel Mode Structure de 4e Dimension ainsi qu' la description de la fonction Evenement formulaire. Variables systme
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension exploite un certain nombre de variables particulires appeles variables systme. Ces variables vous permettent de contrler de nombreuses oprations. Toutes les variables systme sont des variables process, disponibles lintrieur dun seul process. La plus importante de toutes est la variable systme OK. Comme son nom le laisse supposer, elle vous indique si tout est OK dans un process particulier. Est-ce que lenregistrement a bien t sauvegard ? Est-ce que limport denregistrements sest bien droul ? Est-ce que lutilisateur a cliqu sur le bouton OK ? La variable systme OK prend la valeur 1 lorsquune opration sest correctement droule, et 0 dans le cas contraire. Pour plus d'informations sur les variables systme, reportez-vous la section traitant des Variables systme. Rfrence Conditions et boucles, Constantes, Mthodes, Nommer les objets du langage 4D, Oprateurs, Pointeurs, Prsentation des tableaux, Types de donnes.

4e Dimension - Langage

91

Variables systme

Prsentation du langage version 2004 (Modifie)

__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension gre un certain nombre de variables appeles variables systme. Ces variables vous permettent de contrler le droulement de diverses oprations. Les variables systme sont toutes des variables process, accessibles uniquement l'intrieur d'un process. Cette section dcrit les variables systme de 4e Dimension. OK La variable systme OK est la plus couramment utilise. En gnral, elle prend la valeur 1 lorsqu'une opration s'est correctement droule, et 0 lorsque l'opration a chou. La plupart des commandes 4D modifient la valeur de la variable systme OK. Reportezvous la description de chaque commande pour savoir si elle met jour cette variable systme. Document La variable systme Document contient soit le nom, soit le chemin daccs et le nom (suivant la valeur passe en paramtre) du dernier fichier disque ayant t ouvert ou cr l'aide d'une des commandes suivantes : Ajouter a document Creer document ECRIRE FICHIER IMAGE ECRITURE ASCII ECRITURE SYLK EXPORTER DONNEES IMPORTER DONNEES LECTURE ASCII LECTURE SYLK LIRE VARIABLES Ouvrir fichier ressources STOCKER ENSEMBLE UTILISER FILTRE CHARGER ENSEMBLE Creer fichier ressources ECRIRE VARIABLES ECRITURE DIF QR ETAT FIXER HISTORIQUE IMPRIMER ETIQUETTES LECTURE DIF LIRE FICHIER IMAGE Ouvrir document Selectionner document REGLER SERIE

FldDelimit La variable systme FldDelimit contient le code ASCII du caractre utiliser comme dlimiteur de champs lorsque vous importez ou exportez du texte. Par dfaut, cette valeur est 9, c'est--dire le code ASCII du caractre Tabulation. Modifiez cette valeur pour changer de dlimiteur de champs. RecDelimit La variable systme RecDelimit contient le code ASCII du caractre utiliser comme dlimiteur d'enregistrements lorsque vous importez ou exportez du texte. Par dfaut, cette valeur est 13, c'est--dire le code ASCII du caractre Retour chariot. Modifiez cette valeur pour changer de dlimiteur d'enregistrements.

92

4e Dimension - Langage

Error La variable systme Error n'est utilisable que dans une mthode installe par la commande APPELER SUR ERREUR. Cette variable contient le code de l'erreur. Les codes des erreurs de 4e Dimension et des erreurs Systme sont lists dans les sections du thme Codes d'erreurs. MouseDown, MouseX, MouseY, KeyCode, Modifiers et MouseProc Ces variables systme ne sont utilisables que dans une mthode installe par APPELER SUR EVENEMENT. La variable systme MouseDown prend la valeur 1 si le bouton de la souris a t enfonc. Sinon, elle prend la valeur 0. Si l'vnement est un MouseDown (MouseDown=1), les variables systme MouseX et MouseY contiennent les coordonnes verticale et horizontale de l'endroit o le clic a eu lieu. Les deux valeurs sont exprimes en pixels et avec le systme de coordonnes locales de la fentre. La variable systme KeyCode contient le code ASCII de la touche ayant t enfonce. Si la touche enfonce tait une touche de fonction, KeyCode contient un code spcial. Les codes ASCII et les codes des touches de fonction sont lists dans les sections Codes ASCII et Codes des touches de fonction. La variable systme Modifiers contient les codes des modifiers du clavier (Ctrl/Commande, Alt/Option, Maj, Verr. Maj). Cette variable n'est significative que dans une mthode d'interruption sur vnement installe par la commande APPELER SUR EVENEMENT. La variable systme MouseProc contient le numro du process dans lequel le dernier vnement a eu lieu. Rfrence Prsentation des ensembles, Variables.

4e Dimension - Langage

93

Pointeurs

Prsentation du langage version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les pointeurs sont des outils de programmation avance. Lorsque vous utilisez le langage de 4e Dimension, vous vous rfrez aux diffrents objets par lintermdiaire de leur nom en particulier les tables, champs, variables et tableaux. Pour appeler lun dentre eux, vous crivez simplement son nom. Cependant, il est parfois utile de pouvoir appeler ou rfrencer ces lments sans ncessairement connatre leur nom. Cest ce que permettent les pointeurs. Le concept de pointeur nest pas tellement loign de la vie courante. Vous vous rfrez souvent des choses sans connatre leur identit exacte. Par exemple, vous dites un ami Allons-y avec ta voiture au lieu de Allons-y avec la voiture immatricule 123 ABD 99. Dans ce cas, vous faites rfrence la voiture immatricule 123 ABD 99 en utilisant lexpression ta voiture. Par analogie, lexpression la voiture immatricule 123 ABD 99 est le nom dun objet, et ta voiture est un pointeur rfrenant (ou pointant vers) lobjet. La capacit de se rfrer quelque chose sans connatre son identit exacte est trs utile. Si votre ami sachetait une nouvelle voiture, lexpression ta voiture serait toujours exacte ce serait toujours une voiture et vous pourriez toujours aller quelque part avec. Les pointeurs fonctionnent de la mme manire. Par exemple, un pointeur peut pointer un moment donn vers un champ numrique appel Age, et plus tard vers une variable numrique appele Ancien ge. Dans les deux cas, le pointeur rfrence des donnes numriques pouvant tre utilise dans des calculs. Vous pouvez utiliser des pointeurs pour rfrencer des tables, des champs, des variables, des tableaux et des lments de tableaux. Le tableau suivant vous fournit un exemple de chaque type : Objet Table Champ Variable Tableau Rfrencement vpTble:=->[Table] vpChp:=->[Table]Chp vpVar:=->Variable vpT:=->Tableau Utilisation TABLE DEFAUT(vpTble->) ALERTE(vpChp->) ALERTE(vpVar->) TRIER TABLEAU(vpT->;>) Affectation n/a vpChp->:="Jean" vpVar->:="Jean" COPIER TABLEAU(Tab; vpT->) vpElem->:="Jean"

Elm. tabl. vpElem:=->Tableau{1} ALERTE(vpElem->)

94

4e Dimension - Langage

Utiliser des pointeurs : un exemple


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Il est plus facile dexpliquer lutilisation des pointeurs au travers dun exemple. Cet exemple vous montre comment accder une variable par lintermdiaire dun pointeur. Nous commenons par crer la variable : MaVar:="Bonjour" MaVar est dsormais une variable contenant la chane Bonjour. Nous pouvons alors crer un pointeur vers MaVar : MonPointeur:=->MaVar Le symbole -> signifie pointer vers (ce symbole est form du caractre tiret (-) suivi du caractre suprieur ). Dans ce cas, il cre un pointeur qui rfrence ou pointe vers MaVar. Ce pointeur est assign MonPointeur via loprateur dassignation. MonPointeur est dsormais une variable qui contient un pointeur vers MaVar. MonPointeur ne contient pas Bonjour, la valeur de MaVar, mais vous pouvez utiliser MonPointeur pour obtenir la valeur contenue dans MaVar. Lexpression suivante retourne la valeur de MaVar : MonPointeur-> Dans ce cas, la chane Bonjour est retourne. Lorsque le symbole -> est plac derrire un pointeur, la valeur de lobjet vers lequel pointe le pointeur est rcupre. On dit alors quon dpointe le pointeur. Il est important de comprendre que vous pouvez utiliser un pointeur suivi du symbole -> partout o vous auriez pu utiliser lobjet point lui-mme. Vous pouvez placer lexpression MonPointeur-> partout o vous pourriez utiliser la variable originale MaVar. Par exemple, l'instruction suivante affiche une bote de dialogue dalerte comportant le mot Bonjour : ALERTE(MonPointeur->) Vous pouvez galement utiliser MonPointeur pour modifier la valeur de MaVar. Par exemple, linstruction suivante stocke la chane "Au revoir" dans la variable MaVar : MonPointeur->:="Au revoir"

4e Dimension - Langage

95

Si vous examinez les deux utilisations de lexpression MonPointeur-> ci-dessus, vous constatez que cette expression se comporte exactement comme si vous aviez utilis MaVar sa place. En rsum : les deux lignes suivantes effectuent la mme opration elles affichent une bote de dialogue dalerte contenant la valeur courante de la variable MaVar : ALERTE(MonPointeur->) ALERTE(MaVar) Les deux lignes suivantes effectuent la mme opration ; elles assignent la chane "Au revoir" MaVar : MonPointeur->:="Au revoir" MaVar:="Au revoir" Utiliser des pointeurs vers des boutons
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ce paragraphe dcrit lutilisation dun pointeur pour rfrencer un bouton. Un bouton (du point de vue du langage) nest rien dautre quune variable. Bien que les exemples de ce paragraphe utilisent des pointeurs pour rfrencer des boutons, les concepts prsents sappliquent lutilisation de tout type dobjet pouvant tre rfrenc par un pointeur. Imaginons que vous disposiez dans vos formulaires dun certain nombre de boutons devant tre actifs ou inactifs. Chaque bouton est associ une condition qui peut tre VRAI ou FAUX. La condition indique sil faut dsactiver ou activer le bouton. Vous pouvez utiliser un test comme celui-ci chaque fois que vous devez dsactiver ou activer le bouton : Si (Condition) ` Si la condition est VRAIE ACTIVER BOUTON (MonBouton) ` activer le bouton Sinon ` Dans lautre cas INACTIVER BOUTON (MonBouton) ` dsactiver le bouton Fin de si Vous pouvez avoir besoin, pour chaque bouton que vous avez cr, dutiliser un test similaire, dans lequel seul le nom du bouton change. Afin dtre plus efficace, vous pouvez crer un pointeur pour rfrencer chaque bouton puis utiliser une sous-routine pour le test lui-mme.

96

4e Dimension - Langage

Vous devez utiliser des pointeurs si vous appelez une sous-routine, car il nest pas possible de faire rfrence autrement aux variables des boutons. Par exemple, voici une mthode projet nomme FIXER_BOUTON, qui rfrence un bouton avec un pointeur : ` ` ` ` ` ` Mthode projet FIXER_BOUTON FIXER_BOUTON ( Pointeur ; Boolen ) FIXER_BOUTON ( -> Bouton ; Activ ou Dsactiv ) $1 Pointeur vers un bouton $2 Boolen. Si VRAI, active le bouton. Si FAUX, dsactive le bouton

Si ($2) ` Si la condition est VRAIE ACTIVER BOUTON($1->) ` activer le bouton Sinon ` Si ce n'est pas le cas INACTIVER BOUTON ($1->) ` dsactiver le bouton Fin de si Vous pouvez appeler la mthode projet FIXER_BOUTON de la manire suivante : ` ... FIXER_BOUTON (->bValider;Vrai) ` ... FIXER_BOUTON (->bValider;Faux) ` ... FIXER_BOUTON (->bValider;([Employs]Nom#"") ` ... Boucle ($vlRadioBouton;1;20) $vpRadioBouton:=Pointeur vers("r"+Chaine($vlRadioBouton)) FIXER_BOUTON ($vpRadioBouton;Faux) Fin de boucle Utiliser des pointeurs vers des tables
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Partout o le langage requiert un nom de table, vous pouvez utiliser un pointeur dpoint vers une table. Pour crer un pointeur vers une table, crivez une instruction du type : TablePtr:=->[touteTable] Vous pouvez galement rcuprer un pointeur vers une table laide de la fonction Table. Par exemple : TablePtr:=Table(20)

4e Dimension - Langage

97

Vous pouvez utiliser le pointeur dpoint dans vos commandes, comme ceci : TABLE PAR DEFAUT(TablePtr->) Utiliser des pointeurs vers des champs
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Partout o le langage requiert un nom de champ, vous pouvez utiliser un pointeur dpoint vers un champ. Pour crer un pointeur vers un champ, crivez une ligne d'instruction du type : ChampPtr:=->[uneTable]CeChamp Vous pouvez galement rcuprer un pointeur vers un champ laide de la fonction Champ. Par exemple : ChampPtr:=Champ(1; 2) Vous pouvez utiliser le pointeur dpoint avec les commandes, comme ceci : CHANGER JEU DE CARACTERES(ChampPtr->; "Arial")

Utiliser des pointeurs vers des lments de tableau


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez crer un pointeur vers un lment de tableau. Par exemple, les lignes d'instruction suivantes crent un tableau et assignent une variable appele ElmPtr un pointeur vers le premier lment : TABLEAU REEL(unTableau; 10) ` Crer un tableau ElmPtr:=->unTableau{1} ` Crer un pointeur vers llment de tableau Vous pouvez alors utiliser le pointeur dpoint pour assigner une valeur llment, comme ceci : ElmPtr->:=8

98

4e Dimension - Langage

Utiliser des pointeurs vers des tableaux


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez crer un pointeur vers un tableau. Par exemple, les lignes d'instruction suivantes crent un tableau et assignent la variable nomme TabPtr un pointeur vers le tableau : TABLEAU REEL(unTableau; 10) ` Crer un tableau TabPtr := ->unTableau ` Crer un pointeur vers le tableau Il est important de comprendre que ce pointeur pointe vers le tableau, et non vers un lment du tableau. Par exemple, vous pourriez utiliser le pointeur dpoint de la manire suivante : TRIER TABLEAU(TabPtr->; >) ` Tri du tableau Si vous devez vous rfrer au quatrime lment du tableau laide du pointeur, vous pouvez crire : TabPtr->{4} := 84 Utiliser un tableau de pointeurs
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Il est souvent utile de disposer dun tableau de pointeurs rfrenant un groupe dobjets homogne. Un exemple d'utilisation typique dun tel groupe dobjets est une grille de variables dans un formulaire. Chaque variable dans la grille est numrote de manire squentielle, par exemple : Var1, Var2,, Var10. Vous devez souvent vous rfrer ces variables, de manire indirecte par leur numro. Si vous crez un tableau de pointeurs et faites pointer les pointeurs vers chaque variable, il est alors facile de rfrencer les variables. Par exemple, pour crer un tableau et initialiser chaque lment, vous pouvez crire : TABLEAU POINTEUR(tabPointeurs; 10) ` Crer un tableau de 10 pointeurs Boucle ($i; 1; 10) ` Boucle une fois par variable tabPointeurs{$i}:=Pointeur vers("Var"+Chaine($i)) ` Initialiser chaque lment du tableau Fin de boucle La fonction Pointeur vers retourne un pointeur vers l'objet pass en paramtre. Important : Vous pouvez faire pointer des pointeurs vers des variables process ou interprocess, mais pas vers des variables locales.

4e Dimension - Langage

99

Pour rfrencer une des variables, il suffit dappeler les lments du tableau. Par exemple, pour remplir les variables avec les dix prochains jours (en supposant que les variables soient de type Date), vous pourriez crire : Boucle ($i; 1; 10) ` Boucle une fois par variable tabPointeurs{$i}->:=Date du jour+$i ` Assigner les jours Fin de boucle Slectionner un bouton avec un pointeur
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Si vous disposez dun groupe homogne de boutons radio dans un formulaire, vous devrez souvent pouvoir dfinir rapidement leur tat. La solution consistant rfrencer chacun dentre eux par son nom nest pas trs pratique. Imaginons que vous disposiez d'un groupe de cinq boutons radio libells Bouton1, Bouton2,, Bouton5. Dans un groupe de boutons radio, seul lun dentre eux est slectionn. Le numro du bouton slectionn peut tre stock dans un champ numrique. Par exemple, si le champ [Prfrences]EtatBouton contient 3, alors Bouton3 est slectionn. Dans la mthode formulaire, vous pouvez utiliser le code suivant pour paramtrer les boutons : Au cas ou :(Evenement formulaire=Sur chargement) ` ... Au cas ou : ([Prfrences]EtatBouton = 1) Bouton1:=1 : ([Prfrences]EtatBouton = 2) Bouton2:=1 : ([Prfrences]EtatBouton = 3) Bouton3:=1 : ([Prfrences]EtatBouton = 4) Bouton4:=1 : ([Prfrences]EtatBouton = 5) Bouton5:=1 Fin de cas ` ... Fin de cas Un cas particulier doit tre test pour chaque bouton radio. La mthode peut tre trs longue si le formulaire contient de nombreux boutons radio. Heureusement, vous pouvez utiliser des pointeurs pour rsoudre ce problme.

100

4e Dimension - Langage

La fonction Pointeur vers vous permet de retourner un pointeur vers un bouton radio. Lexemple suivant utilise un pointeur de ce type pour rfrencer le bouton radio devant tre slectionn. Voici la mthode optimise : Au cas ou :(Evenement formulaire=Sur chargement) ` ... $vpRadio:=Pointeur vers("Bouton"+Chaine([Prfrences]EtatBouton)) $vpRadio->:=1 ` ... Fin de cas Le numro du bouton radio trait doit tre stock dans le champ [Prfrences]EtatBouton. Cette opration peut tre effectue dans la mthode formulaire, pour l'vnement formulaire Sur clic : [Prfrences]EtatBouton:=Bouton1+(Bouton2*2)+(Bouton3*3)+(Bouton4*4)+(Bouton5*5) Passer des pointeurs aux mthodes
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez passer un pointeur en tant que paramtre dune mthode. A lintrieur de la mthode, vous pouvez modifier lobjet rfrenc par le pointeur. Par exemple, la mthode suivante, RECOIT DEUX, reoit deux paramtres qui sont des pointeurs. Elle passe lobjet rfrenc par le premier paramtre en caractres majuscules, et lobjet rfrenc par le second paramtre en caractres minuscules : ` Mthode projet RECOIT DEUX ` $1 Pointeur vers un champ ou une variable de type Chane. Passe la chane en majuscules. ` $2 Pointeur vers un champ ou une variable de type Chane. Passe la chane en minuscules. $1->:=Majusc($1->) $2->:=Minusc($2->) L'instruction suivante emploie la mthode RECOIT DEUX pour passer un champ en caractres majuscules et une variable en caractres minuscules : RECOIT DEUX (->[MaTable]MonChamp; ->MaVar) Si le champ, [MaTable]MonChamp, contenait la chane "dupont", celle-ci deviendrait "DUPONT". Si la variable MaVar contenait la chane "BONJOUR", celle-ci deviendrait "bonjour".

4e Dimension - Langage

101

Dans la mthode RECOIT DEUX (et, en fait, chaque fois que vous utilisez des pointeurs), il est important que les types de donnes des objets rfrencs soient corrects. Dans lexemple prcdent, les pointeurs doivent pointer vers des objets contenant une chane ou un texte. Pointeurs vers des pointeurs
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Si vous aimez compliquer les choses l'extrme (bien que cela ne soit pas ncessaire dans 4e Dimension), vous pouvez utiliser des pointeurs pour rfrencer d'autres pointeurs. Examinons lexemple suivant : MaVar := "Bonjour" PointeurUn := ->MaVar PointeurDeux := ->PointeurUn (PointeurDeux->)-> := "Au revoir" ALERTE((PointeurDeux->)->) Cet exemple affiche une bote de dialogue dalerte contenant Au revoir. Voici la description de chaque ligne de lexemple : MaVar := "Bonjour"

Cette ligne place simplement la chane "Bonjour" dans la variable MaVar.


PointeurUn := ->MaVar

PointeurUn contient dsormais un pointeur vers MaVar.


PointeurDeux :=->PointeurUn

PointeurDeux (une nouvelle variable) contient un pointeur vers PointeurUn, qui, elle,
pointe vers MaVar. (PointeurDeux->)-> := "Au revoir"

PointeurDeux-> rfrence le contenu de PointeurUn, qui elle-mme rfrence MaVar. Par


consquent, (PointeurDeux->)-> rfrence le contenu de MaVar. Donc, dans ce cas, la valeur "Au revoir" est assigne la MaVar. ALERTE ((PointeurDeux->)->)

C'est ici la mme chose que prcdemment : PointeurDeux-> rfrence le contenu de PointeurUn, qui elle-mme rfrence MaVar. Par consquent, (PointeurDeux->)-> rfrence le contenu de MaVar. Donc, dans ce cas, la bote de dialogue d'alerte affiche le contenu de maVar.

102

4e Dimension - Langage

La ligne suivante place la valeur "Bonjour" dans MaVar : (PointeurDeux->)->:="Bonjour" La ligne suivante rcupre "Bonjour" partir de MaVar et la place dans NouvelleVar : NouvelleVar:=(PointeurDeux->)-> Important : Vous devez utiliser des parenthses lors des drfrencements multiples. Rfrence Conditions et boucles, Constantes, Mthodes, Nommer les objets du langage 4D, Oprateurs, Prsentation des tableaux, Tableaux et pointeurs, Types de donnes, Variables.

4e Dimension - Langage

103

Nommer les objets du langage 4D

Prsentation du langage version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Cette section dcrit les conventions dcriture employes pour les nombreux objets du langage de 4e Dimension. Le nom de chaque objet doit respecter les rgles suivantes : Un nom doit commencer par un caractre alphabtique (une lettre). Le nom peut ensuite contenir des caractres alphabtiques, des caractres numriques, des espaces et des tirets bas (_). Les virgules, barres de fraction et deux points (:) sont interdits. Les caractres rservs car utiliss comme oprateurs, comme lastrisque (*) ou le +, sont interdits. 4e Dimension ignore les espaces superflus. Tables
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous indiquez quun objet est une table en plaant son nom entre crochets : [...]. Un nom de table peut contenir jusqu 31 caractres. Exemples TABLE PAR DEFAUT ([Commandes]) FORMULAIRE ENTREE ([Clients]; "Entre") AJOUTER ENREGISTREMENT ([Lettres]) Champs
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous indiquez quun objet est un champ en spcifiant dabord la table laquelle il appartient. Le nom du champ se place immdiatement derrire celui de la table. Un nom de champ peut contenir jusqu 31 caractres. Ne faites pas commencer un nom de champ par le tiret bas (_). Ce caractre est rserv pour lutilisation des plug-ins. Lorsque 4e Dimension rencontre dans lditeur de mthodes un nom de champ dbutant par le tiret bas, le caractre est supprim. Exemples [Commandes]Total:=Somme([Ligne]Montant) CHERCHER([Clients];[Clients]Nom="Dupont") [Lettres]Texte:=Capitaliser texte ([Lettres]Texte)

104

4e Dimension - Langage

Il nest pas obligatoire, dans les mthodes, de faire figurer systmatiquement le nom de la table laquelle le champ appartient avant le nom du champ. Nous vous conseillons cependant de prendre lhabitude de le faire car cest une technique de programmation efficace. Sous-tables
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous indiquez quun objet est une sous-table en spcifiant dabord le nom de la table parente laquelle elle appartient. Le nom de la sous-table se place immdiatement derrire celui de la table. Un nom de sous-table peut contenir jusqu 31 caractres. Exemples TOUS LES SOUS ENREGISTREMENTS ([Personnes]Enfants) AJOUTER SOUS ENREGISTREMENT ([Clients]Tl;"Ajout") SOUS ENREGISTREMENT SUIVANT ([Letters]Keywords) Une sous-table est considre comme un type de champ ; par consquent, les mmes rgles que pour les champs lui sont appliques lorsquelle est place dans un formulaire. Il nest pas obligatoire, dans les mthodes, de faire figurer systmatiquement le nom de la table parente devant celui de la sous-table. Nous vous conseillons cependant de prendre lhabitude de le faire car cest une bonne technique de programmation. Sous-champs
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous indiquez quun objet est un sous-champ de la mme manire que pour un champ. Vous spcifiez dabord le nom de la sous-table laquelle il appartient, puis placez le nom du sous-champ immdiatement derrire. Les deux noms sont spars par une apostrophe ('). Un nom de sous-champ peut contenir jusqu 31 caractres. Exemples [Personnes]Enfants'Prnom:=Majusc([Personnes]Enfants'Prnom) [Clients]Tl'Numro:="408 555 1212" [Lettres]Mots-cls'Mot:=Capitaliser texte ([Lettres]Mots-cls'Mot) Il nest pas obligatoire, dans les mthodes objet ou formulaire de la sous-table, de faire figurer systmatiquement les noms de la table parente et de la sous-table devant celui du sous-champ. Nous vous conseillons cependant de prendre lhabitude de le faire, car cest une bonne technique de programmation.

4e Dimension - Langage

105

Variables interprocess
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous indiquez quun objet est une variable interprocess en faisant prcder son nom des symboles (<>), forms des caractres infrieur suivi de suprieur . Note : Cette syntaxe peut tre utilise sous Windows et MacOS. De plus, sous MacOS, vous pouvez galement utiliser le caractre diamant (Option + v sur un clavier franais). Le nom dune variable interprocess peut contenir jusqu 31 caractres, symbole <> non compris. Exemples <>vlProcessID:=Numero du process courant <>vsKey:=Caractere(KeyCode) Si (<>vtNom#"") Variables process
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous indiquez quun objet est une variable process en crivant simplement son nom (qui ne doit pas commencer par les symboles $ ou <>). Ce nom peut contenir jusqu 31 caractres. Exemples vrGrandTotal:=Somme([Comptes]Montant) Si (bValider=1) vsNomCourant:="" Variables locales
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous indiquez quun objet est une variable locale en faisant prcder son nom du symbole dollar ($). Le nom dune variable locale peut contenir jusqu 31 caractres, signe dollar non compris. Exemples Boucle ($vlEnregistrement; 1; 100) Si ($vsTempVar="No") $vsMaChane:="Bonjour tous"

106

4e Dimension - Langage

Tableaux
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous indiquez quun objet est un tableau en crivant simplement son nom, qui est celui que vous passez une commande de dclaration de tableau (par exemple TABLEAU ENTIER LONG) lorsque vous crez le tableau. Les tableaux sont des variables, et comme pour les variables, il existe trois types de tableaux qui se diffrencient par leur porte : Tableaux interprocess, Tableaux process, Tableaux locaux. Tableaux interprocess Le nom dun tableau interprocess est prcd du symbole (<>), form des caractres infrieur suivi de suprieur . Note : Cette syntaxe peut tre utilise sous Windows et MacOS. De plus, sous MacOS, vous pouvez galement utiliser le caractre diamant (Option + v sur un clavier franais). Le nom dun tableau interprocess peut contenir jusqu 31 caractres, symbole <> non compris. Exemples TABLEAU TEXTE(<>atSujets;Enregistrements dans table([Topics])) TRIER TABLEAU (<>asMotsCls; >) TABLEAU ENTIER(<>aiGrosTableau;10000) Tableaux process Vous indiquez quun objet est un tableau process en crivant simplement son nom (qui ne doit pas commencer par les symboles $ ou <>). Ce nom peut contenir jusqu 31 caractres. Exemples TABLEAU TEXTE(atSujets;Enregistrements dans table([Topics])) TRIER TABLEAU (asMotsCls; >) TABLEAU ENTIER(aiGrosTableau;10000) Tableaux locaux Un tableau est dclar local lorsque son nom est prcd du signe dollar ($). Le nom dun tableau local peut contenir jusqu 31 caractres, signe dollar non compris.

4e Dimension - Langage

107

Exemples TABLEAU TEXTE($atSujets;Enregistrements dans table([Topics])) TRIER TABLEAU ($asMotsCls; >) TABLEAU ENTIER($aiGrosTableau;10000) Elments de tableaux Vous dsignez un lment dun tableau local, process ou interprocess laide daccolades ({}). Llment rfrenc (lindice) est indiqu par une expression numrique. Exemples ` Adresser un lment d'un tableau interprocess Si (<>asMotsCls{1}="Stop") <>atSujets{$vlElem}:=[Topics]Sujet $viValeurSuivante:=<>aiGrosTableau{Taille tableau(<>aiGrosTableau)} ` Adresser un lment d'un tableau process Si (asMotsCls{1}="Stop") atSujets{$vlElem}:=[Topics]Sujet $viValeurSuivante:=aiGrosTableau{Taille tableau(aiGrosTableau)} ` Adresser un lment d'un tableau local Si ($asMotsCls{1}="Stop") $atSujets{$vlElem}:=[Topics]Sujet $viValeurSuivante:=$aiGrosTableau{Taille tableau($aiGrosTableau)} Elments de tableaux deux dimensions Vous dsignez un lment dun tableau deux dimensions laide d'une double paire daccolades ({}). Llment rfrenc (lindice) est indiqu par deux expressions numriques dans deux paires daccolades. Exemples ` Adresser un lment d'un tableau interprocess deux dimensions Si (<>asMotsCls{$vlLigneSuivante}{1}="Stop") <>atSujets{10}{$vlElem}:=[Topics]Sujet $viValeurSuivante:=<>aiGrosTableau{$vlSet}{Taille tableau(<>aiGrosTableau{$vlSet})} ` Adresser un lment d'un tableau process deux dimensions Si (asMotsCls{$vlLigneSuivante}{1}="Stop") atSujets{10}{$vlElem}:=[Topics]Sujet $viValeurSuivante:=aiGrosTableau{$vlSet}{Taille tableau(aiGrosTableau{$vlSet})}

108

4e Dimension - Langage

` Adresser un lment d'un tableau interprocess deux dimensions Si ($asMotsCls{$vlLigneSuivante}{1}="Stop") $atSujets{10}{$vlElem}:=[Topics]Sujet $viValeurSuivante:=$aiGrosTableau{$vlSet}{Taille tableau($aiGrosTableau{$vlSet})} Formulaires
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous indiquez quun objet est un formulaire en utilisant une expression de type chane alphanumrique qui reprsente son nom. Le nom dun formulaire peut contenir jusqu 31 caractres. Exemples FORMULAIRE ENTREE([Personnes];"Entre") FORMULAIRE SORTIE([Personnes]; "Sortie") DIALOGUE([Stock];"Bote de note"+Chaine($vlStage)) Mthodes
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous indiquez quun objet est une mthode (sous-routine ou fonction utilisateur) en saisissant son nom. Ce nom peut contenir jusqu 31 caractres. Note : Une mthode qui ne retourne pas de rsultat est appele une procdure. Une mthode qui retourne un rsultat est appele une fonction utilisateur. Exemples Si (Nouveau client) EFFACER VALEURS DUPLIQUEES APPLIQUER A SELECTION ([Employs];AUGMENTER SALARIES) Conseil : Nous vous recommandons d'adopter, pour nommer vos mthodes, la mme convention que celle utilise dans le langage de 4D : crivez les noms de vos procdures en caractres majuscules, et vos fonctions en minuscules avec la premire lettre en majuscule. Ainsi, lorsque vous rouvrirez une base au bout de plusieurs mois, vous identifierez immdiatement si une mthode retourne ou non un rsultat, en regardant son nom dans la fentre de l'Explorateur. Note : Lorsque vous souhaitez appeler une mthode, vous saisissez simplement son nom. Toutefois, certaines commandes intgres telles que APPELER SUR ERREUR, ainsi que les commandes des plug-ins, ncessitent que vous passiez le nom d'une mthode en tant que chane lorsqu'un paramtre de type mthode est requis (cf. exemples ci-dessous).

4e Dimension - Langage

109

Exemples ` Cette commande attend une mthode (fonction) ou une formule CHERCHER PAR FORMULE ([aTable];Recherche Spciale) ` Cette commande attend une mthode (procdure) ou une formule APPLIQUER A SELECTION ([Employs];AUGMENTER SALARIES) ` Mais cette commande attend un nom de mthode APPELER SUR EVENEMENT ("GERER EVENEMENTS") ` Et cette commande de plug-in attend un nom de mthode wr_Erreur ("WR GERER ERREURS") Les mthodes peuvent accepter des paramtres (ou arguments). Le paramtres sont passs la mthode entre parenthses, la suite du nom de la mthode. Les paramtres sont spars par des points virgule (;). Les paramtres sont passs la mthode appele en tant que variables locales numrotes squentiellement : $1, $2,, $n. De plus, plusieurs paramtres conscutifs (s'ils sont les derniers) peuvent tre adresss l'aide de la syntaxe ${n} o n, expression numrique, est le numro du paramtre. A lintrieur d'une fonction, la variable locale $0 contient la valeur retourner. Exemples ` Dans ELIMINER ESPACES, $1 est pointeur sur le champ [Personnes]Nom ELIMINER ESPACES (->[Personnes]Nom) ` Dans Crateur tableau : ` - $1 est un numrique qui vaut 1 ` - $2 est un numrique qui vaut 5 ` - $3 est un texte ou un alpha qui vaut "Super" ` - La valeur rsultante est assigne $0 $vsRsultat:=Crateur tableau (1; 5; "Super") ` Dans Poubelle : ` - Les trois paramtres sont de type Texte ou Alpha ` - Vous pouvez y accder par $1, $2 ou $3 ` - Vous pouvez y accder en crivant, par exemple, ${$vlParam} ` o $vlParam vaut 1, 2 ou 3 ` - La valeur rsultante est assigne $0 vtClone:=Poubelle ("est"; "le"; "il")

110

4e Dimension - Langage

Commandes de plug-ins (procdures, fonctions et zones externes)


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous indiquez quun objet est une commande de plug-in en crivant son nom tel qu'il est dfini dans le plug-in. Le nom d'une commande de plug-in peut contenir jusqu' 31 caractres. Exemples WR SUPPRIMER SELECTION (wrZone) $pvNouvelleZone:=PV Creer zone hors ecran Ensembles
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Dans 4e Dimension, il existe deux types d'ensembles qui se distinguent par leur porte : Ensembles interprocess, Ensembles process. On peut galement distinguer un troisime type d'ensemble, spcifique 4D Server: Ensembles clients. Ensembles interprocess Un ensemble est dclar interprocess lorsque son nom, qui est une expression de type chane alphanumrique, est prcd du symbole (<>), form des caractres infrieur suivi de suprieur . Note : Cette syntaxe peut tre utilise sous Windows et MacOS. De plus, sous MacOS, vous pouvez galement utiliser le caractre diamant (Option + v sur un clavier franais). Le nom dun ensemble interprocess peut comporter jusqu 80 caractres, symbole <> non compris. Ensembles process Vous dclarez un ensemble process en passant simplement une expression de type chane qui reprsente son nom (et qui ne doit pas dbuter par les symboles <> ou $). Le nom dun ensemble process peut comporter jusqu 80 caractres. Ensembles client Le nom d'un ensemble client doit tre prcd du symbole dollar ($). Ce nom peut comporter jusqu' 80 caractres, symbole dollar non compris. Note : Dans les versions prcdentes de 4D Server, les ensembles taient grs par les postes clients sur lesquels ils avaient t crs. A partir de la version 6, les ensembles sont grs par le serveur. Dans certains cas, pour des raisons particulires ou d'optimisation, vous pourrez avoir besoin d'utiliser des ensembles localement, sur les postes clients. Pour cela, il vous suffit de crer des ensembles client.

4e Dimension - Langage

111

Exemples ` Ensembles interprocess UTILISER ENSEMBLE("<>Enregistrements supprims") NOMMER ENSEMBLE([Clients];"<>Commandes clients") Si (Enregistrements dans ensemble("<>Slection"+Chaine($i))>0) ` Ensembles process UTILISER ENSEMBLE("Enregistrements supprims") NOMMER ENSEMBLE([Clients];"Commandes clients") Si (Enregistrements dans ensemble("Slection"+Chaine($i))>0) ` Ensembles client UTILISER ENSEMBLE("$Enregistrements supprims") NOMMER ENSEMBLE([Clients];"$Commandes clients") Si (Enregistrements dans ensemble("$Slection"+Chaine($i))>0) Slections temporaires
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Dans 4e Dimension, il existe deux types de slections temporaires, qui se distinguent par leur porte : Slections temporaires interprocess, Slections temporaires process. Slections temporaires interprocess Vous dsignez une slection temporaire interprocess en utilisant une expression de type chane dbutant par le symbole (<>), form des caractres infrieur suivi de suprieur . Note : Cette syntaxe peut tre utilise sous Windows et MacOS. De plus, sous MacOS, vous pouvez galement utiliser le caractre diamant (Option + v sur un clavier franais). Le nom d'une slection temporaire interprocess peut contenir jusqu 80 caractres, symbole <> non compris. Slections temporaires process Vous dclarez une slection temporaire process en passant simplement une expression de type chane qui reprsente son nom (et qui ne doit pas dbuter par les symboles <> ou $). Le nom dune slection temporaire process peut comporter jusqu 80 caractres. Exemples ` Slection temporaire interprocess UTILISER SELECTION([Clients];"<>ParCodePostal") ` Slection temporaire process UTILISER SELECTION([Clients];"ParCodePostal")

112

4e Dimension - Langage

Process
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

En mode mono-utilisateur, ou sur le poste client en mode client/serveur, il existe deux types de process : Process globaux, Process locaux. Process globaux Vous dclarez un process global en passant une expression de type chane de caractres qui reprsente son nom (qui ne doit pas commencer par le symbole $). Le nom dun process peut comporter jusqu 30 caractres. Process locaux Vous dclarez un process local lorsque son nom est prcd du symbole dollar ($). Le nom dun process peut comporter jusqu 30 caractres, symbole dollar non compris. Exemple ` Lancer le process global "Ajouter Clients" $vlProcessID:=Nouveau process("P_AJOUT_CLIENTS";48*1024;"Ajouter Clients") ` Lancer le process local "$Suivre Souris" $vlProcessID:=Nouveau process("P_SUIVRE_SOURIS";16*1024;"$Suivre Souris") Rsum des conventions d'criture dans 4D
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le tableau suivant rsume les conventions utilises par 4e Dimension pour nommer les objets dans les mthodes. Objet Table Champ Sous-table Sous-champ Variable interprocess Variable process Variable locale Formulaire Tableau interprocess Tableau process Tableau local Mthode Commande de plug-in Ensemble interprocess Long. max. 31 31 31 31 <> + 31 31 $ + 31 31 <> + 31 31 $ + 31 31 31 <> + 80 Exemple [Factures] [Employs]Nom [Amis]Enfants [Documents]Mots-cls'Mot-cl <>vlProcessSuivantID vsNomCourant $vlCompteurLocal "Formulaire Web perso" <>apTableaux asGenre $atValeurs M_AJOUTER_CLIENTS wr_Inserer texte "<>Enregistrements archiver"

4e Dimension - Langage

113

Ensemble process 80 Ensemble client $ + 80 Slection temporaire 80 Slection temporaire interprocess <> + 80 Process local $ + 30 Process global 30 Rsoudre les conflits de noms

"Enregistrements actuels" "$Sujets prcdents" "Employs de A Z" "<>Employs de Z A" "$SuivreEvnements" "P_MODULE_FACTURES"

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Si un objet dun certain type a le mme nom quun autre objet dun autre type (par exemple, si un champ est baptis Personnes et quune variable est galement nomme Personnes), 4e Dimension utilise un systme de priorits pour identifier lobjet. Veillez utiliser des noms uniques pour les diffrents lments de votre base. 4e Dimension identifie les noms utiliss dans les mthodes en fonction de lordre de priorit suivant : 1. Champs 2. Commandes 3. Mthodes 4. Routines de plug-ins 5. Constantes prdfinies 6. Variables Par exemple, 4e Dimension dispose dune fonction interne appele Date. Si vous appelez Date une de vos mthodes, 4e Dimension considrera Date comme tant la fonction interne et non votre mthode. Vous ne pourrez pas appeler votre mthode. En revanche, si vous nommez un champ Date, 4e Dimension considrera que vous souhaitez appeler votre champ et non la fonction intgre. Rfrence Constantes, Mthodes, Oprateurs, Pointeurs, Prsentation des tableaux, Types de donnes, Variables.

114

4e Dimension - Langage

Conditions et boucles

Prsentation du langage version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Quelle que soit la simplicit ou la complexit dune mthode, vous utiliserez toujours un ou plusieurs types de structure de programmation. Les structures de programmation dterminent si et dans quel ordre les lignes dinstructions sont excutes lintrieur dune mthode. Il existe trois types de structures : squentielle, conditionnelle, rptitive. Le langage de 4e Dimension dispose dinstructions permettant de contrler chacune de ces structures. Structures squentielles Une structure squentielle est une structure simple, linaire. Une squence est une srie dinstructions que 4e Dimension excute les unes aprs les autres, de la premire la dernire. Par exemple : FORMULAIRE SORTIE ([Personnes]; "Listing") TOUT SELECTIONNER ([Personnes]) VISUALISER SELECTION ([Personnes]) Une instruction d'une ligne, frquemment utilise pour les mthodes objet, est le cas le plus simple de structure squentielle. Par exemple : [Personnes]Nom:=Majusc([Personnes]Nom) Structures conditionnelles Une structure conditionnelle permet aux mthodes de tester une condition et dexcuter des squences dinstructions diffrentes en fonction du rsultat. La condition est une expression boolenne, cest--dire pouvant retourner VRAI ou FAUX. Lune des structures conditionnelles est la structure Si...Sinon...Fin de si, qui aiguille le droulement du programme vers une squence ou une autre. Lautre structure conditionnelle est la structure Au cas ou...Sinon...Fin de cas, qui aiguille le programme vers une squence parmi une ou plusieurs alternatives.

4e Dimension - Langage

115

Structures rptitives (ou "boucles") Il est trs courant, lorsque vous crivez des mthodes, de rencontrer des cas o vous devez rpter une squence dinstructions un certain nombre de fois. Pour traiter ces besoins, le langage vous propose trois structures rptitives : Boucle...Fin de boucle, Tant que...Fin tant que, et Repeter...Jusque. Les boucles sont contrles de deux manires : soit elles se rptent jusqu ce quune condition soit remplie, soit elles se rptent un nombre fix de fois. Chaque structure rptitive peut tre utilise de lune ou lautre manire, mais les boucles Tant que et Repeter sont mieux adaptes la rptition jusqu ce quune condition soit remplie, alors que les boucles Boucle sont mieux adaptes la rptition un certain nombre de fois. Note : 4e Dimension vous permet dimbriquer des structures de programmation (Si/Tant que/Boucle/Au cas ou/Repeter) jusqu une profondeur de 512 niveaux. Rfrence Mthodes, Oprateurs logiques.

116

4e Dimension - Langage

Si...Sinon...Fin de si

Prsentation du langage version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La syntaxe de la structure conditionnelle Si...Sinon...Fin de si est la suivante : Si (Expression_boolenne) instruction(s) Sinon instruction(s) Fin de si A noter que l'lment Sinon est optionnel, vous pouvez crire : Si (Expression_boolenne) instruction(s) Fin de si La structure Si...Sinon...Fin de si permet votre mthode de choisir dans une alternative, en fonction du rsultat, VRAI ou FAUX, dun test (une expression boolenne). Si lexpression boolenne est VRAIE, les instructions qui suivent immdiatement le test sont excutes. Si lexpression boolenne est FAUSSE, les instructions suivant la ligne Sinon sont excutes. Le Sinon est optionnel ; lorsquil est omis, cest la premire ligne dinstructions suivant le Fin de si (sil y en a une) qui est excute. Exemple ` Demander l'utilisateur de saisir un nom $Rech:=Demander(Saisissez un nom :) Si (OK=1) CHERCHER([Personnes]; [Personnes]Nom=$Rech) Sinon ALERTE("Vous n'avez pas saisi de nom.") Fin de si

4e Dimension - Langage

117

Astuce : Il n'est pas obligatoire que des instructions soient excutes dans chaque branche de l'alternative. Lorsque vous dveloppez un algorithme, ou lorsque vous poursuivez un but prcis, rien ne vous empche d'crire : Si (Expression_boolenne) Sinon instruction(s) Fin de si ou : Si (Expression_boolenne) instruction(s) Sinon Fin de si Rfrence Au cas ou...Sinon...Fin de cas, Boucle...Fin de boucle, Conditions et boucles, Repeter...Jusque, Tant que...Fin tant que.

118

4e Dimension - Langage

Au cas ou...Sinon...Fin de cas

Prsentation du langage version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La syntaxe de la structure conditionnelle Au cas ou...Sinon...Fin de cas est la suivante : Au cas ou : (Expression_boolenne) instruction(s) : (Expression_boolenne) instruction(s) . . . : (Expression_boolenne) instruction(s) Sinon instruction(s) Fin de cas A noter que l'lment Sinon est optionnel, vous pouvez donc crire : Au cas ou : (Expression_boolenne) instruction(s) : (Expression_boolenne) instruction(s) . . . : (Expression_boolenne) instruction(s) Fin de cas Tout comme la structure Si...Sinon...Fin de si, la structure Au cas ou...Sinon...Fin de cas permet galement votre mthode de choisir parmi plusieurs squences dinstructions. A la diffrence de la structure prcdente, le Au cas ou...Sinon...Fin de cas peut tester un nombre illimit dexpressions boolennes et excuter la squence dinstructions correspondant la valeur VRAI.

4e Dimension - Langage

119

Chaque expression boolenne dbute par le caractre deux points (:). La combinaison de deux points et dune expression boolenne est appel un cas. Par exemple, la ligne suivante est un cas : : (bValider=1) Seules les instructions suivant le premier cas VRAI (et ce, jusquau cas suivant) seront excutes. Si aucun des cas nest VRAI, aucune instruction nest excute (s'il n'y a pas d'lment Sinon). Vous pouvez placer une instruction Sinon aprs le dernier cas. Si tous les cas sont FAUX, les instructions suivant le Sinon seront excutes. Exemple Cet exemple teste une variable numrique et affiche une bote de dialogue dalerte comportant un simple mot : Au cas ou : (vRsult = 1) ` Test si le numro est 1 ALERTE("Un.") ` Si cest 1, afficher une alerte : (vRsult = 2) ` Test si le numro est 2 ALERTE("Deux.") ` Si cest 2, afficher une alerte : (vRsult = 3) ` Test si le numro est 3 ALERTE("Trois.") ` Si cest 3, afficher une alerte Sinon ` Si ce nest ni 1 ni 2 ni 3, afficher une alerte ALERTE("Ce nest ni un, ni deux, ni trois.") Fin de cas A titre de comparaison, voici la version avec Si...Sinon...Fin de si de la mme mthode : Si (vRsult = 1) ` Test si le numro est 1 ALERTE ("Un.") ` Si cest 1, afficher une alerte Sinon Si (vRsult = 2) ` Test si le numro est 2 ALERTE ("Deux.") ` Si cest 2, afficher une alerte Sinon Si (vRsult = 3) ` Test si le numro est 3 ALERTE ("Trois.") ` Si cest 3, afficher une alerte Sinon ` Si ce nest ni 1, 2 ni 3, afficher lalerte ALERTE ("Ce nest ni un, ni deux, ni trois.") Fin de si Fin de si Fin de si

120

4e Dimension - Langage

Rappelez-vous quavec une structure de type Au cas ou...Sinon...Fin de cas, seul le premier cas VRAI rencontr est excut. Mme si dautres cas sont VRAIS, seules les instructions suivant le premier cas VRAI seront prises en compte. Par consquent, lorsque vous testez dans la mme mthode des cas simples et des cas complexes, vous devez placer les cas complexes avant les cas simples, sinon ils ne seront jamais excuts. Par exemple, si vous souhaitez traiter le cas simple (vRsult=1) et le cas complexe (vRsult=1) & (vDemande#2) et que vous structurez la mthode de la manire suivante : Au cas ou : (vRsult = 1) ... `instruction(s) : ((vRsult = 1) & (vDemande#2)) ... `instruction(s) Fin de cas ... les instructions associes au cas complexe ne seront jamais excutes. En effet, pour que ce cas soit VRAI, ses deux conditions boolennes doivent ltre. Or, la premire condition est celle du cas simple situ prcdemment. Lorsqu'elle est VRAIE, le cas simple est excut et 4D sort de la structure conditionnelle, sans valuer le cas complexe. Pour que ce type de mthode fonctionne, vous devez crire : Au cas ou : (vRsult = 1) & (vDemande#2) ... `Instruction(s) : (vRsult = 1) ... `Instruction(s) Fin de cas ` Les cas complexes doivent toujours tre placs ` en premier

` Les instructions suivant ce cas ne seront ` JAMAIS excutes

4e Dimension - Langage

121

Astuce Il n'est pas obligatoire que des instructions soient excutes dans toutes les alternatives. Lorsque vous dveloppez un algorithme, ou lorsque vous poursuivez un but particulier, rien ne vous empche d'crire : Au cas ou : (Expression_boolenne) : (Expression_boolenne) . . . : (Expression_boolenne) instruction(s) Sinon instruction(s) Fin de cas ou : Au cas ou : (Expression_boolenne) : (Expression_boolenne) instruction(s) . . . : (Expression_boolenne) instruction(s) Sinon Fin de cas ou : Au cas ou Sinon instruction(s) Fin de cas Rfrence Boucle...Fin de boucle, Conditions et boucles, Repeter...Jusque, Si...Sinon...Fin de si, Tant que...Fin tant que.

122

4e Dimension - Langage

Tant que...Fin tant que

Prsentation du langage version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La syntaxe de la structure rptitive (ou boucle) Tant que...Fin tant que est la suivante : Tant que (Expression_boolenne) instruction(s) Fin tant que Une boucle Tant que excute les instructions comprises entre Tant que et Fin tant que aussi longtemps que lexpression boolenne est VRAIE. Elle teste lexpression boolenne initiale et nentre pas dans la boucle (et donc n'excute aucune instruction) si lexpression est FAUX. Il est utile dinitialiser la valeur teste dans lexpression boolenne juste avant dentrer dans la boucle Tant que. Initialiser la valeur signifie lui affecter un contenu appropri, gnralement pour que lexpression boolenne soit VRAIE et que le programme entre dans la boucle. La valeur de l'expression boolenne doit pouvoir tre modifie par un lment situ l'intrieur de la boucle, sinon elle s'excutera indfiniment. La boucle suivante est sans fin car Infini est toujours VRAI : Infini:=Vrai Tant que (Infini) Fin tant que Si vous vous retrouvez dans une telle situation (o une mthode s'excute de manire incontrle), vous pouvez utiliser les fonctions de dbogage de 4D et remonter la source du problme. Pour plus d'informations sur ce point, reportez-vous la section Dbogage.

4e Dimension - Langage

123

Exemple ` Est-ce que l'utilisateur veut ajouter un enregistrement? CONFIRMER ("Ajouter un enregistrement?") Tant que (OK = 1) ` Tant que l'utilisateur accepte AJOUTER ENREGISTREMENT([Table]) ` Ajouter un nouvel enregistrement Fin tant que ` Une boucle Tant que se termine toujours par Fin tant que Dans cet exemple, la valeur de la variable systme OK est dfinie par la commande CONFIRMER avant que le programme nentre dans la boucle. Si lutilisateur clique sur le bouton OK dans la bote de dialogue de confirmation, la variable OK prend la valeur 1 et la boucle est excute. Dans le cas contraire, la variable OK prend la valeur 0 et la boucle est ignore. Une fois que le programme entre dans la boucle, la commande AJOUTER ENREGISTREMENT permet de continuer lexcuter car elle met la variable systme OK 1 lorsque lutilisateur sauvegarde lenregistrement. Lorsque lutilisateur annule (ne valide pas) le dernier enregistrement, la variable systme OK prend la valeur 0 et la boucle sarrte. Rfrence Au cas ou...Sinon...Fin de cas, Boucle...Fin de boucle, Conditions et boucles, Repeter...Jusque, Si...Sinon...Fin de si.

124

4e Dimension - Langage

Repeter...Jusque

Prsentation du langage version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La syntaxe de la structure rptitive (ou boucle) Repeter...Jusque est la suivante : Repeter instruction(s) Jusque (Expression_boolenne) La boucle Repeter...Jusque est semblable la boucle Tant que...Fin tant que, la diffrence quelle teste la valeur de lexpression boolenne aprs lexcution de la boucle et non avant. Ainsi, la boucle est toujours excute au moins une fois, tandis que si lexpression boolenne est initialement FAUX, la boucle Tant que...Fin tant que ne sexcute pas du tout. L'autre particularit de la boucle Repeter...Jusque est quelle se poursuit jusqu ce que lexpression boolenne soit VRAI. Exemple Comparez lexemple suivant avec celui de la boucle Tant que...Fin tant que : vous constatez quil nest pas ncessaire dinitialiser lexpression boolenne il ny a pas de commande CONFIRMER pour initialiser la variable OK. Repeter AJOUTER ENREGISTREMENT([aTable]) Jusque (OK=0) Rfrence Au cas ou...Sinon...Fin de cas, Boucle...Fin de boucle, Conditions et boucles, Si...Sinon...Fin de si, Tant que...Fin tant que.

4e Dimension - Langage

125

Boucle...Fin de boucle

Prsentation du langage version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La syntaxe de la structure rptitive Boucle...Fin de boucle est la suivante : Boucle (Variable_Compteur; Expression_Dbut;Expression_Fin {; Expression_Incrment}) instructions(s) Fin de boucle La structure Boucle...Fin de boucle est une boucle contrle par un compteur : La variable compteur Variable_Compteur est une variable numrique (Rel, Entier ou Entier long) initialise par Boucle...Fin de boucle la valeur spcifie par Expression_Dbut. La variable Variable_Compteur est incrmente de la valeur spcifie par le paramtre optionnel Expression_Incrment chaque fois que la boucle est excute. Si vous ne passez pas de valeur dans Expression_Incrment, la variable compteur est incrmente par dfaut de un (1). Lorsque le compteur atteint la valeur dfinie par Expression_Fin, la boucle s'arrte. Important : Les expressions numriques Expression_Dbut, Expression_Fin et Expression_Incrment sont values une seule fois, au dbut de la boucle. Si ces expressions sont des variables, leur modification depuis l'intrieur de la boucle n'affectera pas l'excution de la boucle. Astuce : En revanche, vous pouvez, si vous le souhaitez, modifier la valeur de la variable Variable_Compteur depuis l'intrieur de la boucle et cela affectera l'excution de la boucle. Gnralement, Expression_Dbut est infrieure Expression_Fin. Si les deux expressions sont gales, la boucle ne sera excute qu'une fois. Si Expression_Dbut est suprieure Expression_Fin, la boucle ne s'excutera pas du tout, moins que vous ne spcifiiez une Expression_Incrment ngative. Reportez-vous ci-dessous au paragraphe dcrivant ce point. Exemples lmentaires (1) La boucle suivante s'excute 100 fois : Boucle (vCompteur;1;100) ` Faire quelque chose Fin de boucle

126

4e Dimension - Langage

(2) L'exemple suivant permet de traiter tous les lments du tableau unTableau : Boucle ($vlElem;1;Taille tableau(unTableau)) ` Faire quelque chose avec l'lment unTableau{$vlElem}:=... Fin de boucle (3) L'exemple suivant permet d'examiner chaque caractre du texte vtDuTexte : Boucle ($vlCar;1;Longueur(vtDuTexte)) ` Faire quelque chose avec le caractre si c'est une tabulation Si (Code ascii(vtDuTexte[[$vlCar]])=Caractere(Tab)) ` ... Fin de si Fin de boucle (4) L'exemple suivant permet de traiter tous les enregistrements de la slection de la table [uneTable]: DEBUT SELECTION([uneTable]) Boucle ($vlEnrg;1;Enregistrements trouves([uneTable])) ` Faire quelque chose avec chaque enregistrement ENVOYER ENREGISTREMENT([uneTable]) ` ... ` Passer l'enregistrement suivant ENREGISTREMENT SUIVANT([uneTable]) Fin de boucle La plupart des structures Boucle...Fin de boucle que vous crirez dans vos bases ressembleront celles prsentes ci-dessus. Dcrmenter la variable Compteur Dans certains cas, vous pouvez souhaiter disposer d'une boucle dont la valeur de la variable compteur dcrot au lieu de crotre. Pour cela, Expression_Dbut doit tre suprieure Expression_Fin et Expression_Increment doit tre ngative. Les exemples suivants effectuent les mmes tches que les prcdents, mais en sens inverse : (5) La boucle suivante s'excute 100 fois : Boucle (vCompteur;100;1;-1) ` Faire quelque chose Fin de boucle

4e Dimension - Langage

127

(6) L'exemple suivant permet de traiter tous les lments du tableau unTableau : Boucle ($vlElem;Taille tableau(unTableau);1;-1) ` Faire quelque chose avec l'lment unTableau{$vlElem}:=... Fin de boucle (7) L'exemple suivant permet d'examiner chaque caractre du texte vtDuTexte : Boucle ($vlCar;Longueur(vtDuTexte);1;-1) ` Faire quelque chose avec le caractre si c'est une tabulation Si (Code ascii(vtDuTexte[[$vlCar]])=Caractere(Tab)) ` ... Fin de si Fin de boucle (8) L'exemple suivant permet de traiter tous les enregistrements de la slection de la table [uneTable]: ALLER A DERNIER ENREGISTREMENT([uneTable]) Boucle ($vlEnrg;Enregistrements trouves([uneTable]);1;-1) ` Faire quelque chose avec chaque enregistrement ENVOYER ENREGISTREMENT([uneTable]) ` ... ` Passer l'enregistrement prcdent ENREGISTREMENT PRECEDENT([uneTable]) Fin de boucle Incrementer la variable compteur de plus de 1 Si vous le souhaitez, vous pouvez passer dans Expression_Incrment une valeur (positive ou ngative) dont la valeur absolue est suprieure un. (9) La boucle suivante ne traite que les lments pairs du tableau unTableau : Boucle ($vlElem;2;((Taille tableau(unTableau)+1)\2)*2;2) ` Faire quelque chose avec l'lment 2,4...2n unTableau{$vlElem}:=... Fin de boucle Notez l'expression ((Taille tableau(unTableau)+1)\2)*2 qui permet de traiter indiffremment les tableaux de taille paire et impaire.

128

4e Dimension - Langage

Sortir d'une boucle en modifiant la variable compteur Dans certains cas, vous voudrez excuter une boucle un certain nombre de fois, mais galement pouvoir sortir si une autre condition devient Vraie. Pour cela, il vous suffit de tester cette condition l'intrieur de la boucle et, si elle devient Vraie, de "forcer" la valeur de la variable compteur, de manire ce qu'elle soit suprieure celle de Expression_Fin. (10) Dans l'exemple suivant, vous effectuez une boucle parmi les enregistrements d'une slection jusqu' ce que la fin de la slection soit atteinte, ou bien jusqu' ce que la variable interprocess <>vbStop, initialement fixe Faux, prenne la valeur Vrai. Cette variable est gre par une mthode projet APPELER SUR EVENEMENT utilise pour interrompre l'opration : <>vbStop:=Faux APPELER SUR EVENEMENT ("GESTION STOP") ` GESTION STOP dfinit <>vbStop Vrai si les touches Ctrl+point (Windows) ou ` Commande+point (MacOS) sont enfonces $vlNbEnrgs:=Enregistrements trouves([aTable]) DEBUT SELECTION([aTable]) Boucle ($vlEnrgs;1;$vlNbEnrgs) ` Faire quelque chose avec l'enregistrement ENVOYER ENREGISTREMENT([aTable]) ` ... ` Aller l'enregistrement suivant Si (<>vbStop) $vlEnrgs:=$vlNbEnrgs+1 ` Forcer la variable compteur stopper la boucle Sinon ENREGISTREMENT SUIVANT([aTable]) Fin de si Fin de boucle APPELER SUR EVENEMENT("") Si (<>vbStop) ALERTE("L'opration a t interrompue.") Sinon ALERTE("L'opration s'est termine avec succs.") Fin de si

4e Dimension - Langage

129

Comparaison des structures rptitives Reprenons le premier exemple employ pour la structure Boucle...Fin de boucle : (1) La boucle suivante s'excute 100 fois : Boucle (vCompteur;1;100) ` Faire quelque chose Fin de boucle Il est intressant d'examiner la manire dont les boucles Tant que...Fin tant que et Repeter...Jusque effectuent la mme action : Voici la boucle Tant que...Fin tant que quivalente : $i := 1 ` Initialisation du compteur Tant que ($i<=100) ` Boucle 100 fois ` Faire quelque chose $i := $i + 1 ` Il faut incrmenter le compteur Fin tant que Voici la boucle Repeter...Jusque quivalente : $i := 1 ` Initialisation du compteur Repeter ` Faire quelque chose $i := $i + 1 ` Il faut incrmenter le compteur Jusque ($i=100) ` Boucle 100 fois Astuce : La boucle Boucle...Fin de boucle est gnralement plus rapide que les boucles Tant que...Fin tant que et Repeter...Jusque car 4e Dimension teste la condition en interne pour chaque cycle de la boucle et incrmente lui-mme le compteur. Par consquent, nous vous conseillons de prfrer chaque fois que c'est possible la structure Boucle...Fin de boucle. Optimiser l'excution de Boucle...Fin de boucle Vous pouvez utiliser comme compteur une variable interprocess, process ou locale, et lui attribuer le type Rel, Entier ou Entier long. Pour des boucles longues, et particulirement en mode compil, nous vous conseillons d'employer des variables locales de type Entier long.

130

4e Dimension - Langage

(11) Voici un exemple : C_ENTIER LONG($vlCompteur) ` Utilisons une variable locale de type Entier long Boucle ($vlCompteur;1;10000) ` Faire quelque chose Fin de boucle Structures Boucle...Fin de boucle embotes Vous pouvez emboter autant de structures rptitives que vous voulez (dans les limites du raisonnable). Cela s'applique aux structures de type Boucle...Fin de boucle. Il y a dans ce cas une erreur courante viter : assurez-vous d'utiliser une variable compteur diffrente par structure de boucle. Voici deux exemples : (12) Cet exemple permet de traiter tous les lments d'un tableau deux dimensions : Boucle ($vlElem;1;Taille tableau(unTableau)) ` ... ` Faire quelque chose avec la ligne ` ... Boucle ($vlSousElem;1;Taille tableau(unTableau{$vlElem})) ` Faire quelque chose avec l'lment unTableau{$vlElem}{$vlSousElem}:=... Fin de boucle Fin de boucle (13) L'exemple suivant construit un tableau de pointeurs vers tous les champs de type Date prsents dans la base : TABLEAU POINTEUR($apChampsDate;0) $vlElem:=0 Boucle ($vlTable;1;Nombre de tables) Boucle($vlChamp;1;Nombre de champs($vlTable)) $vpChamp:=Champ($vlTable;$vlChamp) Si (Type($vpChamp>)=Est une date) $vlElem:=$vlElem+1 INSERER LIGNES($apChampsDate;$vlElem) $apChampsDate{$vlElem}:=$vpChamp Fin de si Fin de boucle Fin de boucle Rfrence Au cas ou...Sinon...Fin de cas, Conditions et boucles, Repeter...Jusque, Si...Sinon...Fin de si, Tant que...Fin tant que.

4e Dimension - Langage

131

Mthodes

Prsentation du langage version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Pour faire fonctionner les commandes, les oprateurs, et les autres composants du langage, vous les placez dans des mthodes. Ce chapitre dcrit les fonctionnalits communes tous les types de mthodes. Il existe plusieurs types de mthodes : les mthodes objet, les mthodes formulaire, les mthodes table (ou triggers), les mthodes projet et les mthodes base. Une mthode est compose de plusieurs lignes dinstructions. Une ligne dinstructions effectue une action. Cette ligne dinstruction peut tre simple ou complexe. Cette ligne peut tre aussi longue que vous voulez (elle peut comporter jusqu 32 000 caractres, ce qui est normalement suffisant pour la plupart des instructions). Par exemple, la ligne suivante est une instruction qui ajoute un nouvel enregistrement la table [Personnes] : AJOUTER ENREGISTREMENT([Personnes]) Une mthode contient galement des tests et des boucles qui structurent son excution. Pour plus d'informations sur les structures de programmation, reportez-vous la section Conditions et boucles. Note : La taille maximale dune mthode est limite 2 Go de texte ou 32 000 lignes dinstructions. Au-del de ces limites, un message dalerte apparat, indiquant que les lignes supplmentaires ne seront pas affiches. Types de mthodes
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Il existe cinq types de mthodes dans 4e Dimension : Mthodes objet : une mthode objet est une courte mthode associe un objet actif dans un formulaire. En gnral, les mthodes objet grent lobjet au moment de laffichage ou de limpression du formulaire. Vous ne pouvez pas appeler une mthode objet, 4D l'excute automatiquement lorsqu'un vnement implique l'objet auquel la mthode est rattache. Mthodes formulaire : Une mthode formulaire est associe un formulaire. Vous pouvez utiliser une mthode formulaire pour grer les donnes et les objets, mais il est gnralement plus simple et plus efficace dutiliser des mthodes objet dans ce cas. Vous ne pouvez pas appeler une mthode formulaire, 4D gre automatiquement son excution lorsqu'un vnement implique le formulaire auquel la mthode est attache.

132

4e Dimension - Langage

Mthodes table/triggers : Un trigger est associ une table. Vous ne pouvez pas appeler un trigger. 4D les excute automatiquement chaque opration lmentaire effectue sur les enregistrements de la table (Chargement, Ajout, Suppression et Modification). Les triggers sont des mthodes pouvant prvenir toute action "illgale" opre sur les enregistrements. Par exemple, dans un systme de facturation, vous pouvez empcher les utilisateurs d'ajouter des factures sans avoir spcifi le client concern. Les triggers constituent un outil trs puissant pour contrler les oprations effectues sur les tables ainsi que pour prvenir toute perte de donnes accidentelle. Vous pouvez crire des triggers trs simples ou trs sophistiqus. Pour plus d'informations sur les triggers, reportez-vous la section Prsentation des triggers. Mthodes projet : A la diffrence des prcdents types de mthodes, les mthodes projet ne sont associes aucun objet, formulaire ou table, elles peuvent tre utilises n'importe quel endroit de votre base. Les mthodes projet sont rutilisables et disponibles tout moment, pour toute autre mthode. Si vous devez rpter certaines tches, vous n'avez pas besoin de rcrire plusieurs mthodes identiques dans chaque cas. Vous pouvez appeler une mthode projet partout o vous en avez besoin depuis d'autres mthodes projet, objet ou formulaire. Lorsque vous appelez une mthode projet, elle se comporte comme si vous l'aviez crite l'endroit d'o vous l'appelez. Les mthodes projet utilises par d'autres mthodes sont appeles des sous-routines. Une mthode projet qui retourne un rsultat peut aussi tre appele une fonction. Il existe une autre manire d'appeler les mthodes projet : il suffit de les associer des commandes de menus. Lorsque vous associez une mthode projet une commande de menu, la mthode est excute lorsque la commande du menu est slectionne par un utilisateur. Mthodes base : Tout comme les mthodes formulaire ou objet sont excutes lorsqu'un vnement se produit dans un formulaire, il existe des mthodes associes la base entire, et qui sont excutes lorsqu'un vnement de session de travail se produit. Ce sont les mthodes base. Par exemple, chaque fois que vous ouvrez la base, vous pouvez vouloir initialiser des variables qui seront utilises pendant toute la session de travail. Pour cela, vous pouvez crire des instructions dans la Mthode base Sur ouverture, excute automatiquement par 4D lorsque vous lancez la base. Pour plus d'informations sur les mthodes base, reportez-vous la section Prsentation des mthodes base.

4e Dimension - Langage

133

Notes de compatibilit Il n'est pas ncessaire de lire ces notes si vous travaillez sur de nouvelles bases cres avec la version 6 de 4e Dimension. (1) La version 6 de 4e Dimension a introduit de nombreux nouveaux objets ainsi que les vnements formulaire (tels que Sur double clic, Sur gain focus, etc.) qui remplacent les cycles d'excution des versions precdentes. Si vous avez converti une base version 5 en version 6, vos formulaires ont t convertis de manire ce que leur comportement corresponde ce que vous en attendez. Si vous souhaitez tirer parti des nouveaux vnements formulaires avec des objets crs dans une version prcdente de 4D, vous devrez slectionner ces nouveaux vnements dans les fentres des Proprits des objets et des formulaires. Pour plus d'informations sur ce point, reportez-vous la description de la commande Evenement formulaire et au manuel Mode Structure de 4e Dimension. (2) Les triggers appartiennent un nouveau type de mthodes introduit avec la version 6 de 4e Dimension. Dans les versions prcdentes de 4e Dimension, les mthodes table (appeles alors formules-fichiers) n'taient excutes par 4D que lorsqu'un formulaire d'une table tait utilis pour la saisie, l'affichage ou l'impression. Elles taient rarement utilises. Il est noter que les triggers sont excuts un niveau considrablement plus bas que ne l'taient les formules-fichiers. Quelle que soit l'action ralise sur un enregistrement (actions des utilisateurs i.e. saisie ou saisie par programmation i.e. un appel la commande STOCKER ENREGISTREMENT), le trigger d'une table sera appel par 4D. Les triggers sont rellement diffrents des anciennes formules-fichiers. Si vous avez converti une base version 5 en version 6 de 4D et que vous souhaitez tirer avantage des triggers, vous devez dslectionner la proprit Utiliser les anciennes formules-fichiers dans la bote de dialogue des Prfrences, prsente ci-dessous. (3) Les mthodes base sont un nouveau type de mthodes introduit avec la version 6 de 4e Dimension. Avec les versions prcdentes de 4e Dimension, il n'existait qu'une mthode (appele alors procdure) que 4D excutait automatiquement au moment o vous ouvriez la base. Cette procdure devait tre appele STARTUP dans les versions de langue anglaise et DEBUT dans la version franaise afin d'tre excute. Si vous avez converti une base version 5 en version 6 de 4D et que vous souhaitez tirer parti des capacits nouvelles de la Mthode base Sur ouverture, vous devez dslectionner la proprit Utiliser la mthode Debut de la V5.x.x dans la bote de dialogue des Prfrences de la base, prsente ci-aprs. Cette proprit n'affecte que l'option Sur ouverture/Procdure dbut.

134

4e Dimension - Langage

Si vous ne dslectionnez pas cette proprit et que vous ajoutez, par exemple, une Mthode base Sur fermeture, cette dernire sera quand mme excute par 4D.

Un exemple de mthode projet


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Toutes les mthodes sont fondamentalement identiques elles dbutent sur la premire ligne et traitent chaque ligne dinstruction jusqu ce quelles atteignent la dernire ligne (cest--dire quelles sexcutent squentiellement). Voici un exemple de mthode projet : CHERCHER([Personnes]) ` Afficher lditeur de recherches Si (OK=1) ` Lutilisateur a cliqu sur OK (et non sur Annuler) Si (Enregistrements trouves ([Personnes])=0) ` Aucun enregistrement nest trouv ? AJOUTER ENREGISTREMENT([Personnes]) ` Permettre lutilisateur dajouter un enregistrement Fin de si Fin de si ` Fin

4e Dimension - Langage

135

Chaque ligne de lexemple est une ligne dinstruction. Tout ce que vous crivez dans le langage de 4D est appel du code. Le code est excut ce qui signifie que 4e Dimension effectue laction spcifie par le code. Nous allons examiner trs attentivement la premire ligne ; nous irons plus rapidement par la suite : CHERCHER([Personnes]) ` Afficher lditeur de recherches

Le premier mot de la ligne, CHERCHER, est une commande. Une commande est un lment du langage de 4e Dimension elle effectue une action. Dans ce cas, CHERCHER affiche lditeur de recherches, tout comme le fait la commande Recherche... du menu Slection en mode Utilisation. Les parenthses signifient quun paramtre est pass la commande CHERCHER. Un paramtre (ou argument) est une valeur ncessaire une commande pour remplir son rle. Dans ce cas, [Personnes] est le nom dune table. Les noms des tables sont toujours crits entre crochets ([]). Nous pouvons donc dire : La table Personnes est un paramtre de la commande CHERCHER . Une commande qui accepte plusieurs paramtres. Enfin, il y a un commentaire la fin de la ligne. Un commentaire vous informe (ainsi que toute personne qui examinera votre mthode) de ce qui se passe dans le code. Un commentaire est signal par une apostrophe inverse (`). Dans une ligne, tout ce qui suit un signe de commentaire est ignor lorsque le code est excut. Un commentaire peut tre plac sur sa propre ligne, ou la suite du code, comme dans lexemple. Nhsitez pas utiliser les commentaires dans vos mthodes ; la lecture et la comprhension de votre code sont facilites, aussi bien pour vous-mme que pour dautres personnes. Note : Un commentaire peut contenir jusqu 32 000 caractres. La ligne suivante de notre exemple vrifie quaucun enregistrement na t trouv : Si (Enregistrements trouves ([Personnes])=0) ` Si aucun enregistrement nest trouv La ligne dinstruction Si est un test conditionnel une instruction qui contrle lexcution au pas pas de votre mthode. Le Si effectue un test, et si le test est VRAI, la ou les lignes suivantes sont excutes. Enregistrements trouves est une fonction cest--dire une commande qui retourne une valeur. Ici, Enregistrements trouves retourne le nombre denregistrements de la slection courante de la table passe en paramtre. Note : Seule la premire lettre du nom dune fonction est en majuscule. Cest la convention dcriture utilise pour les fonctions de 4e Dimension.

136

4e Dimension - Langage

Vous savez dj ce quest la slection courante : le groupe denregistrements avec lequel vous travaillez un instant donn. Si le nombre denregistrements est gal 0 (cest-dire, si aucun enregistrement na t trouv), la ligne de code suivante est excute : AJOUTER ENREGISTREMENT([Personnes]) La commande AJOUTER ENREGISTREMENT affiche un formulaire pour permettre lutilisateur de crer un nouvel enregistrement. Notez que cette ligne comporte une indentation. 4e Dimension formate votre code automatiquement ; lindentation vous permet didentifier facilement ce qui est dpendant du test conditionnel (Si). Fin de si ` Fin

La ligne dinstruction Fin de si conclut la squence dinstructions contrle par le test Si. Pour chaque ligne dinstruction de test conditionnel, votre code doit comporter une instruction correspondante indiquant au langage o sarrte le test. Nous vous conseillons de bien matriser les concepts voqus dans ce chapitre. Sils sont nouveaux pour vous, nhsitez pas relire les explications fournies jusqu ce quelles vous semblent claires. Pour en savoir plus... Pour plus d'informations sur les mthodes objet et formulaire, reportez-vous la description de la commande Evenement formulaire ainsi qu'au manuel Mode Structure de 4e Dimension. Pour travailler avec les triggers, reportez-vous la section Prsentation des triggers. Pour une description dtaille des mthodes projet, reportez-vous la section Mthodes projet. Les mthodes base sont dtailles dans la section Prsentation des mthodes base et ses sous-sections. Rfrence Conditions et boucles, Constantes, Nommer les objets du langage 4D, Oprateurs, Pointeurs, Prsentation des mthodes base, Prsentation des tableaux, Prsentation des triggers, Types de donnes, Variables.

4e Dimension - Langage

137

Mthodes projet

Prsentation du langage version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les mthodes projet, comme leur nom lindique, sappliquent la totalit de votre projet, cest--dire votre base de donnes. Alors que les mthodes formulaire ou les mthodes objet par exemple sont associes des formulaires ou des objets, une mthode projet est disponible partout elle n'est associe aucun lment particulier de la base. Une mthode projet peut tenir les rles suivants, en fonction de la manire dont elle est excute et utilise : Mthode de menu Sous-routine et fonction Mthode de gestion de process Mthode de gestion dvnements Mthode de gestion derreurs

Ces appellations ne qualifient pas la nature des mthodes (ce qu'elles sont), mais leur fonction (ce qu'elles font). Une mthode de menu est une mthode projet appele depuis une commande de menu personnalis. Elle se comporte comme un agent de police charg de la circulation, dirigeant les flux de votre application. Les mthodes de menu contrlent, aiguillent lorsque cest ncessaire, affichent les formulaires, gnrent des tats ou encore grent votre base. Le deuxime type de mthode projet peut tre considr comme une mthode asservie dautres mthodes lui demandent deffectuer des tches. Ce type de mthode est appel sous-routine. Une sous-routine qui retourne une valeur est appele une fonction. Une mthode de gestion de process est une mthode projet appele lorsquun process est dmarr. Le process existera tant que la mthode sera en cours d'excution. Pour plus d'informations sur les process, reportez-vous la section Introduction aux process. A noter qu'une mthode de menu associe une commande de menu pour laquelle la proprit Dmarrer un nouveau process est slectionne, est aussi la mthode de gestion de process pour le process cr.

138

4e Dimension - Langage

Une mthode de gestion dvnements est une mthode ddie la gestion des vnements, qui s'excute dans un process diffrent de celui de la mthode de gestion des process. Gnralement, pour la gestion des vnements, vous pouvez laisser 4D faire le gros du travail. Par exemple, lors de la saisie de donnes, 4D dtecte les clics souris et les touches enfonces, puis appelle les mthodes objet et formulaire correspondantes, vous permettant ainsi de prvoir dans ces mthodes les traitements appropris aux vnements. Dans d'autres circonstances, vous devez grer directement les vnements. Si, par exemple, vous excutez une opration de longue dure (telle qu'une Boucle...Fin de boucle applique chaque enregistrement), vous souhaitez pouvoir interrompre l'opration en tapant la touche Esc. Dans ce cas, une mthode de gestion d'vnements est parfaitement adapte. Pour plus d'informations, reportez-vous la description de la commande APPELER SUR EVENEMENT. Une mthode de gestion derreurs est une mthode projet d'interruption. Elle s'excute l'intrieur du process dans lequel elle a t installe chaque fois qu'une erreur se produit. Pour plus d'informations, reportez-vous la description de la commande APPELER SUR ERREUR. Mthodes de menu
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Une mthode de menu est appele en mode Menus crs lorsque la commande de menu personnalis laquelle elle est associe est slectionne. Vous assignez la mthode la commande de menu dans lditeur de menus de 4e Dimension. Lorsque lutilisateur slectionne la commande de menu, la mthode est excute. Ce fonctionnement est lun des principaux aspects de la personnalisation dune base de donnes. Cest en crant des menus qui appellent des mthodes de menu que vous personnalisez votre base. Reportezvous au manuel Mode Structure de 4e Dimension pour plus dinformations sur lditeur de menus. Les commandes de menus personnaliss peuvent dclencher une ou plusieurs actions. Par exemple, une commande de menu de saisie denregistrements peut appeler une mthode effectuant deux actions : afficher le formulaire entre appropri et appeler la commande AJOUTER ENREGISTREMENT jusqu ce que lutilisateur annule la saisie de nouveaux enregistrements. Lautomatisation de squences dactions est une possibilit trs puissante du langage de programmation de 4D. A laide des menus crs, vous pouvez automatiser des squences de tches qui devraient sinon tre excutes manuellement dans le mode Utilisation. Avec les menus crs, vous permettez aux utilisateurs de naviguer plus facilement dans votre base.

4e Dimension - Langage

139

Sous-routines
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lorsque vous avez crit une mthode projet, elle devient partie intgrante du langage de la base dans laquelle elle a t cre. Vous pouvez alors l'appeler de la mme manire que vous appelez les commandes intgres de 4e Dimension. Une mthode projet utilise de cette manire est appele une sous-routine. L'utilisation de sous-routines procure les avantages suivants : Rduction du code rptitif, Clarification des mthodes, Modification plus facile des mthodes, Cration de code modulaire. Imaginons par exemple que vous travaillez avec une base de clients. A mesure que vous construisez la base, vous vous apercevez que vous rptez souvent certaines tches, telles que la recherche dun client et la modification de son enregistrement. Le code ncessaire laccomplissement de cette opration pourrait tre : ` Recherche d'un client CHERCHER PAR EXEMPLE([Clients]) ` Slection du formulaire entre FORMULAIRE ENTREE([Clients];"Saisie de donnes") ` Modification de l'enregistrement du client MODIFIER ENREGISTREMENT([Clients]) Si vous nutilisez pas de sous-routines, vous devrez crire ce code chaque fois que vous voudrez modifier lenregistrement dun client. Si cette opration peut tre ralise dans dix endroits diffrents de votre base, vous devrez la rcrire dix fois. Grce aux sousroutines, vous ne lcrirez quune seule fois en tout. Cest le premier avantage des sousroutines : rduire la quantit de code crire. Si le code ci-dessus tait une mthode projet appele MODIFIER CLIENT, vous lexcuteriez simplement en inscrivant son nom dans une autre mthode. Par exemple, pour modifier lenregistrement dun client puis limprimer, vous nauriez qu crire : MODIFIER CLIENT IMPRIMER SELECTION([Clients]) Cette possibilit simplifie normment vos mthodes. Dans lexemple ci-dessus, il nest pas ncessaire de savoir comment fonctionne la mthode MODIFIER CLIENT, mais uniquement ce quelle fait. Cest le deuxime avantage que vous pouvez tirer de lutilisation de sous-routines : la clarification de votre code. Ainsi, ces mthodes deviennent en quelque sorte des extensions du langage de 4e Dimension.

140

4e Dimension - Langage

Si vous devez modifier votre mode de recherche des clients, comme dans notre exemple, il vous suffit de modifier une seule mthode, et non dix. Cest un autre avantage des sousroutines : faciliter les modifications de votre code. Avec les sous-routines, vous rendez votre code modulaire. Cela signifie simplement que vous dissociez votre code en modules (sous-routines), chacun dentre eux effectuant une tche logique. Examinez le code suivant, tir dune base de gestion de comptes chques : CHERCHER CHEQUES EMIS ` Rechercher les chques mis RAPPROCHER COMPTE ` Rapprocher le compte IMPRIMER RELEVE ` Imprimer un relev Mme pour quelquun qui ne connat pas la base, le code est clair. Il nest pas ncessaire dexaminer chaque sous-routine. Elles peuvent contenir de nombreuses lignes dinstructions et effectuer des oprations complexes, mais limportant est ce quelles font. Nous vous conseillons de dcouper votre code en tches logiques, ou modules, chaque fois que cest possible. Passer des paramtres aux mthodes
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous aurez souvent besoin de fournir des valeurs vos mthodes. Vous pouvez facilement effectuer cette opration grce aux paramtres. Les paramtres (ou arguments) sont des donnes dont les mthodes ont besoin pour sexcuter le terme "paramtres" ou "arguments" est utilis indiffremment dans ce manuel. Des paramtres sont galement passs aux commandes intgres de 4e Dimension. Dans lexemple ci-dessous, la chane Bonjour est un paramtre de la commande ALERTE : ALERTE("Bonjour") Les paramtres sont passs de la mme manire aux mthodes. Par exemple, si la mthode FAIRE QUELQUE CHOSE accepte trois paramtres, l'appel cette mthode pourrait tre de la forme suivante : FAIRE QUELQUE CHOSE(AvecCeci;EtCela;CommeCeci) Les paramtres sont spars par des points-virgules (;).

4e Dimension - Langage

141

Dans la sous-routine (la mthode appele), la valeur de chaque paramtre est automatiquement copie squentiellement dans des variables locales numrotes : $1, $2, $3, etc. La numrotation des variables locales reprsente lordre des paramtres. Ces variables/paramtres locaux ne sont pas rellement les champs, variables ou expressions passes la mthode appelante : elles contiennent simplement leurs valeurs. A l'intrieur de la sous-routine, vous pouvez utiliser les paramtres $1, $2... de la mme manire que vous utilisez les autres variables locales. Puisque ces variables sont locales, elles ne sont dfinies qu lintrieur de la sous-routine et sont effaces la fin de son excution. Pour cette raison, une sous-routine ne peut pas modifier au niveau de la mthode appelante la valeur relle des champs ou des variables pass(e)s en paramtre. Par exemple : ` Voici une partie de la mthode MA METHODE ` ... FAIRE QUELQUE CHOSE ([Personnes]Nom) ` Admettons que [Personnes]Nom ="william" ALERTE([Personnes]Nom) ` Voici le code de la mthode FAIRE QUELQUE CHOSE $1:=Majusc($1) ALERTE($1) La bote de dialogue d'alerte affiche par FAIRE QUELQUE CHOSE contiendra "WILLIAM" et celle affiche par MA METHODE contiendra "william". La mthode a modifi localement la valeur du paramtre $1, mais cela n'affecte pas la valeur du champ [Personnes]Nom pass en paramtre par la mthode MA METHODE. Si vous voulez rellement que la mthode FAIRE QUELQUE CHOSE modifie la valeur du champ, deux solutions s'offrent vous : 1. Plutt que de passer le champ la mthode, vous lui passez un pointeur : ` Voici une partie de la mthode MA METHODE ` ... ` Admettons que [Personnes]Nom = "william" FAIRE QUELQUE CHOSE (->[Personnes]Nom) ALERTE([Personnes]Nom) ` Voici le code de la mthode FAIRE QUELQUE CHOSE $1->:=Majusc($1->) ALERTE($1->)

142

4e Dimension - Langage

Ici, le paramtre n'est pas le champ lui-mme, mais un pointeur vers le champ. Ainsi, l'intrieur de la mthode FAIRE QUELQUE CHOSE, $1 ne contient plus la valeur du champ mais un pointeur vers le champ. L'objet rfrenc par $1 ($1-> dans le code ci-dessus) est le champ lui-mme. Par consquent, la modification de l'objet rfrenc dpasse les limites de la sous-routine et le champ lui-mme est affect. Dans cet exemple, les deux botes de dialogue d'alerte afficheront "WILLIAM". Pour plus d'informations sur les pointeurs, reportez-vous la section Pointeurs. 2. Plutt que la mthode FAIRE QUELQUE CHOSE fasse quelque chose, vous pouvez la rcrire de manire ce qu'elle retourne une valeur : ` Voici une partie de la mthode MA METHODE ` ... ` Admettons que [Personnes]Nom est gal "william" [Personnes]Nom:=FAIRE QUELQUE CHOSE ([Personnes]Nom) ALERTE([Personnes]Nom) ` Voici le code de la mthode FAIRE QUELQUE CHOSE $0:=$1 ALERTE($0) Une sous-routine retournant une valeur est appele une fonction. Ce point est trait dans les paragraphes suivants. Note de programmation avance : Les paramtres l'intrieur de la sous-routine sont accessibles par l'intermdiaire des variables locales $1, $2... De plus, des paramtres peuvent tre optionnels et tre rfrencs l'aide de la syntaxe ${...}. Pour plus d'informations sur ce point, reportez-vous la description de la commande Nombre de parametres. Les fonctions, mthodes projet retournant une valeur
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les mthodes peuvent retourner des valeurs. Une mthode qui retourne une valeur est appele une fonction. Les commandes de 4D ou de plug-ins qui retournent une valeur sont galement appeles fonctions.

4e Dimension - Langage

143

Par exemple, la ligne dinstruction suivante utilise une fonction intgre, Longueur, qui retourne la longueur dune chane. La valeur retourne par Longueur est place dans une variable appele MaLongueur : MaLongueur:=Longueur("Comment suis-je arriv l ?") Toute sous-routine peut retourner une valeur. La valeur retourner est place dans la variable locale $0. Par exemple, la fonction suivante, appele Majuscules4, retourne une chane dont les quatre premiers caractres ont t passs en majuscules : $0:=Majusc(Sous chaine($1; 1; 4))+Sous chaine($1; 5) Voici un exemple qui utilise la fonction Majuscules4 : NouvellePhrase:=Majuscules4 ("Bien jou.") Dans ce cas, la variable NouvellePhrase prend la valeur BIEN jou. Le retour de fonction, $0, est une variable locale la sous-routine. Elle peut tre utilise en tant que telle l'intrieur de la sous-routine. Par exemple, dans le cas de la mthode FAIRE QUELQUE CHOSE utilise prcdemment, $0 recevait d'abord la valeur de $1, puis tait utilise en tant que paramtre de la commande ALERTE. Dans une sous-mthode, vous pouvez utiliser $0 comme n'importe quelle autre variable locale. C'est 4D qui retourne sa valeur finale (sa valeur courante au moment o la sous-routine se termine) la mthode appele. Mthode projet rcursives
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Des mthodes projet peuvent s'appeler les unes les autres, et en particulier : Une mthode A peut appeler une mthode B, qui appelle A, donc A appelle B de nouveau, etc. Une mthode peut s'appeler elle-mme. Cela s'appelle la rcursivit. Le langage de 4D supporte pleinement la rcursivit. Examinons l'exemple suivant : vous disposez d'une table [Amis et relations] compose de l'ensemble de champs suivant (trs simplifi) : - [Amis et parents]Nom - [Amis et parents]Enfant'Nom

144

4e Dimension - Langage

Pour cet exemple, nous supposons que les valeurs des champs sont uniques (il n'existe pas deux personnes avec le mme nom). A partir d'un nom, vous voulez crire la phrase Un de mes amis, Pierre, qui est le rejeton de Paul qui est le rejeton de Martine qui est le rejeton de Robert qui est le rejeton de Gertrude, fait cela pour gagner sa vie ! : 1. Vous pouvez procder de la manire suivante : $vsNom:=Demander("Saisissez le nom :";"Pierre") Si (OK=1) CHERCHER([Amis et parents];[Amis et parents]Nom=$vsNom) Si (Enregistrements trouves([Amis et parents])>0) $vtHistoireComplte:="Un de mes amis, "+$vsNom Repeter CHERCHER([Amis et parents];[Amis et parents]Enfant'Nom=$vsNom) $vlResultRecherche:=Enregistrements trouves([Amis et parents]) Si ($vlResultRecherche>0) $vtHistoireComplte:=$vtHistoireComplte+" qui est le rejeton de "+ [Amis et parents]Nom $vsNom:=[Amis et parents]Nom Fin de si Jusque ($vlResultRecherche=0) $vtHistoireComplte:=$vtHistoireComplte+", fait cela pour gagner sa vie !" ALERTE($vtHistoireComplte) Fin de si Fin de si 2. Vous pouvez galement procder ainsi : $vsNom:=Demander("Saisissez le nom :";"Pierre") Si (OK=1) CHERCHER([Amis et parents];[Amis et parents]Nom=$vsNom) Si (Enregistrements trouves([Amis et parents])>0) ALERTE("Un de mes amis, "+Gnalogie de ($vsNom)+", fait cela pour gagner sa vie !") Fin de si Fin de si

4e Dimension - Langage

145

Vous utilisez la fonction rcursive Gnalogie de suivante : ` Mthode projet Gnalogie de ` Gnalogie de ( Chane ) -> Texte ` Gnalogie de ( Nom ) -> Partie de la phrase $0:=$1 CHERCHER([Amis et parents];[Amis et parents]Enfant'Nom=$1) Si (Enregistrements trouves([Amis et parents])>0) $0:=$0+" qui est le rejeton de "+Gnalogie de ([Amis et parents]Nom) Fin de si Vous notez que la mthode Gnalogie de s'appelle elle-mme. La premire manire de procder utilise un algorithme itratif. La seconde manire utilise un algorithme rcursif. Lorsque vous implmentez du code pour traiter des cas comme celui dcrit ci-dessus, vous aurez toujours le choix entre crire des mthodes utilisant des algorithmes itratifs ou rcursifs. Gnralement, la rcursivit permet d'crire du code plus concis, lisible et plus facilement modifiable, mais utiliser la rcursivit n'est absolument pas obligatoire. Dans 4D, la rcursivit est typiquement utilise pour : Traiter les enregistrements de tables lies les unes aux autres de la mme manire que dcrit dans l'exemple ci-dessus. Naviguer parmi les documents et les dossiers de votre disque l'aide des commandes LISTE DES DOSSIERS et LISTE DES DOCUMENTS. Un dossier peut contenir des dossiers et des documents, les sous-dossiers peuvent eux-mmes contenir des dossiers et des documents, etc. Important : Les appels rcursifs doivent toujours se terminer un moment donn. Dans l'exemple ci-dessus, la mthode Gnalogie de cesse de s'appeler elle-mme lorsque la recherche ne trouve plus d'enregistrement. Sans ce test conditionnel, la mthode s'appellerait indfiniment et 4D pourrait au bout d'un certain temps retourner l'erreur La pile est pleine car le programme n'aurait plus assez de place pour "empiler" les appels (ainsi que les paramtres et les variables locales utiliss dans la mthode). Rfrence Conditions et boucles, Mthodes, Prsentation des mthodes base.

146

4e Dimension - Langage

3 ________________________ Barres d'outils

4e Dimension - Langage

147

148

4e Dimension - Langage

CACHER BARRE OUTILS

Barres d'outils version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CACHER BARRE OUTILS Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande CACHER BARRE OUTILS rend invisible la barre d'outils. Si la barre d'outils tait dj cache, CACHER BARRE OUTILS ne fait rien. Rfrence AFFICHER BARRE DE MENUS, AFFICHER BARRE OUTILS, CACHER BARRE DE MENUS.

4e Dimension - Langage

149

AFFICHER BARRE OUTILS

Barres d'outils version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

AFFICHER BARRE OUTILS Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande AFFICHER BARRE OUTILS rend visible la barre d'outils. Si la barre d'outils tait dj visible, AFFICHER BARRE OUTILS ne fait rien. Rfrence AFFICHER BARRE DE MENUS, CACHER BARRE DE MENUS, CACHER BARRE OUTILS.

150

4e Dimension - Langage

4 ________________________ BLOB

4e Dimension - Langage

151

152

4e Dimension - Langage

Commandes du thme BLOB

BLOB version 6.7 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Definition La version 6 de 4e Dimension a introduit le support des donnes de type BLOB (Binary Large OBjects). Vous pouvez dfinir des champs de type BLOB et des variables de type BLOB : Pour crer un champ de type BLOB, slectionnez BLOB dans la liste droulante Type de champ dans la fentre des Proprits de champ. Pour crer une variable de type BLOB, utilisez la directive de compilation C_BLOB. Vous pouvez crer des variables BLOB locales, process et interprocess. Note : Les tableaux ne peuvent avoir le type BLOB. Dans 4e Dimension, un BLOB est une srie contigu d'octets de longueur variable qui peut tre traite comme un seul objet ou dont les octets peuvent tre adresss individuellement. Un BLOB peut tre vide (longueur nulle) ou contenir jusqu' 2147483647 octets (2 Go). Les BLOBs et la mmoire Lorsque vous travaillez avec un BLOB, il est stock entirement en mmoire. Si vous travaillez avec une variable de type BLOB, elle n'existe qu'en mmoire. Si vous travaillez avec un champ de type BLOB, il est charg en mmoire partie du disque, comme le reste de l'enregistrement auquel il appartient. A l'instar des autres types de champs pouvant contenir une grande quantit de donnes (comme les champs de type Image et Sous-table), les champs de type BLOB ne sont pas dupliqus en mmoire lorsque vous modifiez un enregistrement. Par consquent, les rsultats renvoys par Ancien et Modifie ne sont pas significatifs lorsque ces fonctions sont appliques des champs de type BLOB. Afficher des BLOBs Comme un BLOB peut contenir n'importe quel type de donnes, il n'existe pas de mode de reprsentation l'cran par dfaut des BLOBs. Si vous affichez un champ ou une variable de type BLOB dans un formulaire, l'objet sera toujours vide, quel que soit son contenu. Champs de type BLOB Vous pouvez utiliser des champs de type BLOB pour stocker tout type de donnes dont la taille est infrieure ou gale 2 Giga-octets. Vous ne pouvez pas indexer un champ de type BLOB. Si vous voulez rechercher des enregistrements partir d'une valeur contenue dans un champ BLOB, il sera ncessaire d'crire une formule. N'utilisez pas de champs de type BLOB pour stocker des donnes sur lesquelles vous voulez effectuer des recherches rapides. Par exemple, ne stockez pas de mots-cls dans un champ de type BLOB, utilisez plutt une sous-table que vous pourrez indexer. 4e Dimension - Langage 153

Passage des paramtres, pointeurs et rsultats de fonctions Les BLOBs dans 4e Dimension peuvent tre passs comme paramtres aux commandes 4D ou aux routines des Extensions 4D (plug-ins) qui attendent un paramtre de type BLOB. En revanche, les BLOBs ne peuvent pas tre passs aux mthodes que vous crez. Un BLOB ne peut pas tre retourn comme un rsultat de fonction. Pour passer un BLOB une de vos mthodes, il vous faut dfinir un pointeur vers le BLOB et passer le pointeur comme paramtre. Voici quelques exemples : ` Dclarer une variable de type BLOB C_BLOB (touteVarBLOB) ` Le BLOB est pass comme paramtre une commande 4D FIXER TAILLE BLOB (touteVarBLOB;1024*1024) ` Le BLOB est pass comme paramtre une routine externe $CodeErr:= Faites_Quelque_chose_avec_ce_BLOB (touteVarBLOB) ` Un pointeur vers le BLOB est pass comme paramtre une de vos mthodes REMPLIR BLOB AVEC DES ZEROS (->touteVarBLOB ) ` Dclarez une variable de type Pointeur C_POINTEUR (aPointeur) ` Dfinir un pointeur vers le BLOB aPointeur := ->touteVarBLOB ` Un pointeur vers le BLOB est pass comme paramtre une de vos mthodes REMPLIR BLOB AVEC DES ZEROS (aPointeur) Note pour les dveloppeurs de plug ins 4D : Un paramtre de type BLOB se dclare &O (la lettre O et non le chiffre 0). Affectation Vous pouvez affecter la valeur d'un BLOB d'autres BLOBs, comme dans l'exemple suivant : ` Dclarer deux variables de type BLOB C_BLOB (vBlobA;vBlobB) ` Fixer la taille du premier BLOB 10Ko FIXER TAILLE BLOB (vBlobA;10*1024) ` Affectez le premier BLOB au second vBlobB:=vBlobA En revanche, il n'existe pas d'oprateur pouvant tre utilis avec des BLOBs ; il n'existe pas d'expression de type BLOB. Adresser le contenu d'un BLOB Chaque octet d'un BLOB peut tre adress individuellement, l'aide des accolades {...}. Dans un BLOB, les octets sont numrots de 0 N-1, N tant la taille du BLOB. Voici un exemple : ` Dclarer une variable de type BLOB C_BLOB (vBlob) ` Fixer la taille du BLOB 256 octets FIXER TAILLE BLOB (vBlob;256)

154

4e Dimension - Langage

` La boucle suivante initialise les 256 octets du BLOB zro Boucle (vOctet; 0;Taille BLOB (vBlob)-1) vBlob{vOctet}:=0 Fin de boucle Comme vous pouvez adresser individuellement tous les octets d'un BLOB, vous pouvez littralement stocker tout ce que vous voulez dans une variable ou un champ de type BLOB. Routines 4e Dimension pour manipuler les BLOBs 4e Dimension fournit les routines suivantes pour travailler avec les BLOBs : FIXER TAILLE BLOB redimensionne la taille d'un champ ou d'une variable de type BLOB. Taille BLOB retourne la taille d'un champ ou d'une variable de type BLOB. DOCUMENT VERS BLOB et BLOB VERS DOCUMENT vous permettent de charger et d'crire un document entier dans un champ ou une variable de type BLOB et inversement (en option, les data forks et les resource forks sur Macintosh). VARIABLE VERS BLOB et BLOB VERS VARIABLE, ainsi que LISTE VERS BLOB et BLOB vers liste vous permettent de stocker et de charger des variables 4D dans des BLOBs. COMPRESSER BLOB, DECOMPRESSER BLOB et LIRE PROPRIETES BLOB vous permettent de travailler avec des BLOBs compresss. Les commandes BLOB vers entier, BLOB vers entier long, BLOB vers reel, BLOB vers texte, ENTIER VERS BLOB, ENTIER LONG VERS BLOB, REEL VERS BLOB et TEXTE VERS BLOB vous permettent de manipuler et de structurer les donnes en provenance du disque, des ressources, du systme d'exploitation, etc. SUPPRIMER DANS BLOB, INSERER DANS BLOB et COPIER BLOB permettent de grer les gros volumes de donnes l'intrieur des BLOBs. CRYPTER BLOB et DECRYPTER BLOB permettent de crypter et de dcrypter des donnes dans vos bases 4D. Ces commandes sont dcrites dans ce chapitre. De plus, vous disposez des routines suivantes : C_BLOB dclare une variable de type BLOB (reportez-vous la section Commandes du thme Compilateur). LIRE PRESSE PAPIERS et AJOUTER A PRESSE PAPIERS vous permettent de grer tout type de donnes stockes dans le presse-papiers (rfrez-vous la section Commandes du thme Presse-papiers). LIRE RESSOURCE et ECRIRE RESSOURCE vous permettent de grer tout type de donnes stockes dans une ressource qui se trouve sur disque (rfrez-vous la section Ressources). ENVOYER BLOB HTML vous permet d'envoyer tout type de donnes un navigateur Web. Cette commande est incluse dans le thme Serveur Web. IMAGE VERS BLOB, BLOB VERS IMAGE et IMAGE VERS GIF vous permettent douvrir et de convertir des images via des BLOBs. Ces commandes sont incluses dans le thme Images. GENERER CLES CRYPTAGE et GENERER DEMANDE CERTIFICAT permettent dexploiter le protocole SSL (Secured Socket Layer) pour crypter des donnes ou les connexions Web. Ces commandes sont incluses dans le thme Protocole scuris.

4e Dimension - Langage

155

FIXER TAILLE BLOB

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER TAILLE BLOB (blob; taille{; remplisseur}) Paramtre blob taille remplisseur Type BLOB Numrique Numrique Description Champ ou variable de type BLOB Nouvelle taille de BLOB Code ASCII du caractre de remplissage

Description FIXER TAILLE BLOB redimensionne blob selon la valeur passe dans le paramtre taille. Si vous souhaitez que les nouveaux octets rservs (s'il y en a) pour le BLOB soient initialiss avec une valeur particulire, passez cette valeur (comprise entre 0 et 255) dans le paramtre optionnel remplisseur. Exemples (1) Lorsque vous n'avez plus besoin d'un BLOB process ou interprocess, il est prfrable de librer la mmoire qu'il occupe. Pour cela, crivez le code suivant :

FIXER TAILLE BLOB(vProcessBLOB;0) FIXER TAILLE BLOB(vInterprocessBLOB;0)

(2) L'exemple suivant cre un BLOB de 16 Ko et remplit chaque octet avec la valeur 0xFF :

C_BLOB(vxData) FIXER TAILLE BLOB(vxData;16*1024;0xFF)

Rfrence Taille BLOB. Gestion des erreurs Si vous ne pouvez pas redimensionner le BLOB parce qu'il n'y a pas assez de mmoire, l'erreur 108 est gnre. Vous pouvez installer une mthode avec la commande APPELER SUR ERREUR pour interrompre la mthode lorsqu'une erreur survient.

156

4e Dimension - Langage

Taille BLOB

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Taille BLOB (blob) Entier long Paramtre blob Rsultat Type BLOB Entier long Description Champ ou variable de type BLOB Taille en octets du BLOB

Description Taille BLOB retourne la taille de blob exprime en octets. Exemple La ligne de code suivante ajoute 100 octets au BLOB monBlob :

FIXER TAILLE BLOB (Taille BLOB(monBlob)+100)

Rfrence FIXER TAILLE BLOB.

4e Dimension - Langage

157

COMPRESSER BLOB

BLOB version 6.5.3 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

COMPRESSER BLOB (blob{; compression}) Paramtre blob compression Type BLOB Numrique Description BLOB compresser Si ce paramtre est pass : 1= taux de compression maximum 2 = vitesse de compression maximum

Description COMPRESSER BLOB compresse le BLOB blob l'aide de l'algorithme de compression interne de 4e Dimension. Le paramtre optionnel compression vous permet de fixer la faon dont le BLOB sera compress : Si vous passez 1, le BLOB est compress de manire aussi compacte que possible, au dtriment de la vitesse laquelle la compression et la dcompression sont effectues. Si vous passez 2, le BLOB est compress de manire aussi rapide que possible (et sera dcompress aussi vite que possible) au dtriment du taux de compression (une fois compress, le BLOB prend plus de place). Si vous passez une autre valeur ou si vous omettez ce paramtre, le BLOB est compress de manire aussi compacte que possible (mthode de compression 1). 4e Dimension fournit les constantes suivantes: Constante Type Valeur Mthode de compression compacte Entier long 1 Mthode de compression rapide Entier long 2 Note : La commande compresse uniquement les BLOBs de taille suprieure ou gale 255 octets. Aprs que cette commande ait t appele, la variable systme OK prend la valeur 1 si le BLOB a t correctement compress. Si la compression n'a pu tre effectue, OK prend la valeur 0. Dans ce cas, si l'erreur provient du fait que la taille du BLOB est infrieure 255 octets ou que la mmoire disponible est insuffisante pour effectuer l'opration, aucune erreur n'est gnre, la mthode poursuit son excution. En revanche, si l'erreur est cause par un problme plus important (le BLOB est endommag), l'erreur -10600 est gnre. Cette erreur, relativement rare, peut tre intercepte l'aide d'une mthode installe par la commande APPELER SUR ERREUR.

158

4e Dimension - Langage

Lorsqu'un BLOB a t compress, vous pouvez le dcompresser l'aide de la commande DECOMPRESSER BLOB. Pour savoir si un BLOB a t compress, utilisez la commande LIRE PROPRIETES BLOB. ATTENTION : Un BLOB compress est toujours un BLOB, rien ne vous empche donc de modifier son contenu. Cependant, si vous le modifiez, la commande DECOMPRESSER BLOB ne pourra plus dcompresser correctement le BLOB. Exemples (1) L'exemple suivant teste si le BLOB vxMonBlob est compress et, sinon, le compresse : LIRE PROPRIETES BLOB (vxMonBlob;$vlCompress;$vlTailleDcompresse; $vlTailleCourante) Si ($vlCompress=Non compress) COMPRESSER BLOB (vxMonBlob) Fin de si Notez que si vous appliquez COMPRESSER BLOB un BLOB dj compress, la commande le dtecte et ne fait rien. (2) L'exemple suivant vous permet de slectionner un document puis de le compresser : $vhDocRef := Ouvrir document ("") Si (OK=1) FERMER DOCUMENT ($vhDocRef) DOCUMENT VERS BLOB (Document;vxBlob) Si (OK=1) COMPRESSER BLOB (vxBlob) Si (OK=1) BLOB VERS DOCUMENT (Document;vxBlob) Fin de si Fin de si Fin de si Rfrence DECOMPRESSER BLOB, LIRE PROPRIETES BLOB. Variables et ensembles systme La variable OK prend la valeur 1 si le BLOB a t correctement compress, sinon elle prend la valeur 0.

4e Dimension - Langage

159

DECOMPRESSER BLOB

BLOB version 6.5.3 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DECOMPRESSER BLOB (blob) Paramtre blob Type BLOB Description BLOB dcompresser

Description DECOMPRESSER BLOB dcompresse le BLOB blob pralablement compress l'aide de la commande COMPRESSER BLOB. Aprs l'appel de la commande, la variable systme OK prend la valeur 1 si le BLOB a t correctement dcompress. Si la dcompression n'a pas pu tre effectue, OK prend la valeur 0. Dans ce cas, si l'erreur provient du fait que la mmoire disponible est insuffisante pour effectuer l'opration, aucune erreur n'est gnre et la mthode poursuit son excution. En revanche, si l'erreur est cause par un problme plus important (le BLOB n'avait pas t compress ou le BLOB est endommag), l'erreur -10600 est gnre. Cette erreur peut tre intercepte l'aide d'une mthode installe par la commande APPELER SUR ERREUR. De manire gnrale, il est prfrable d'appeler la commande LIRE PROPRIETES BLOB pour savoir si le BLOB a t compress avant d'excuter DECOMPRESSER BLOB. Exemples (1) L'exemple suivant teste si le BLOB vxMonBlob est compress et, si oui, le dcompresse : LIRE PROPRIETES BLOB (vxMonBlob;$vlCompress;$vlTailleDcompresse; $vlTailleCourante) Si ($vlCompress#Non compress) DECOMPRESSER BLOB (vxMonBlob) Fin de si

160

4e Dimension - Langage

(2) L'exemple suivant vous permet de slectionner un document et puis de le dcompresser s'il tait compress : $vhDocRef := Ouvrir document ("") Si (OK=1) FERMER DOCUMENT ($vhDocRef) DOCUMENT VERS BLOB (Document;vxBlob) Si (OK=1) LIRE PROPRIETES BLOB (vxBlob;$vlCompress;$vlTailleDcompresse; $vlTailleCourante) Si ($vlCompress#Non compress) DECOMPRESSER BLOB (vxBlob) Si (OK=1) BLOB VERS DOCUMENT (Document;vxBlob) Fin de si Fin de si Fin de si Fin de si

Rfrence COMPRESSER BLOB, LIRE PROPRIETES BLOB. Variables et ensembles systme La variable OK prend la valeur 1 si le BLOB a t correctement dcompress, sinon elle prend la valeur 0.

4e Dimension - Langage

161

LIRE PROPRIETES BLOB

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE PROPRIETES BLOB (blob; compress{; tailleDcompresse{; tailleCourante}}) Paramtre blob compress tailleDcompresse tailleCourante Type BLOB Numrique Numrique Numrique Description BLOB sur lequel vous voulez obtenir des informations 0 = BLOB n'est pas compress 1 = BLOB compress mthode compacte 2 = BLOB compress mthode rapide Taille du BLOB dcompress en octets Taille courante du BLOB en octets

Description LIRE PROPRIETES BLOB retourne des informations sur le BLOB blob. Le paramtre compress vous indique si le BLOB est compress ou non et retourne une des valeurs suivantes : Constante Type Valeur Non compress Entier long 0 Mthode de compression compacte Entier long 1 Mthode de compression rapide Entier long 2 Note : Les constantes ci-dessus sont fournies par 4e Dimension. Quel que soit l'tat de compression du BLOB, le paramtre tailleDcompresse retourne la taille du BLOB non compress. Le paramtre tailleCourante retourne la taille courante du BLOB. Si le BLOB est compress, tailleCourante sera infrieur tailleDcompresse. Si le BLOB n'est pas compress, tailleCourante sera gal tailleDcompresse.

162

4e Dimension - Langage

Exemples (1) Rfrez-vous aux exemples des commandes COMPRESSER BLOB et DECOMPRESSER BLOB. (2) Lorsqu'un BLOB est compress, la mthode projet suivante vous permet de connatre le taux de place gagne en compressant le BLOB : ` Mthode projet Place gagne par compression ` Place gagne par compression (Pointeur {; Pointeur } ) -> Entier long ` Place gagne par compression ( -> BLOB {; -> octetsGagns } ) -> Pourcentage C_POINTEUR ($1;$2) C_ENTIER LONG ($0;$vlCompress;$vlTailleDcompresse;$vlTailleCourante)

LIRE PROPRIETES BLOB ($1->;$vlCompress;$vlTailleDcompresse;$vlTailleCourante) Si ($vlTailleDcompresse=0) $0:=0 Si (Nombre de parametres>=2) $2->:=0 Fin de si Sinon $0:=100-(($vlTailleCourante/$vlTailleDcompresse)*100) Si (Nombre de parametres>=2) $2->:=$vlTailleDcompresse-$vlTailleCourante Fin de si Fin de si

Lorsque cette mthode est place dans votre application, vous pouvez crire : ` ... COMPRESSER BLOB (vxBlob) $vlPourcent:=Place gagne par compression (->vxBlob;->vlTailleBlob) ALERTE ("La compression permet de gagner "+Chaine (vlTailleBlob) +" octets, donc "+Chaine($vlPourcent;"#0%")+" d'espace.") Rfrence COMPRESSER BLOB, DECOMPRESSER BLOB.

4e Dimension - Langage

163

DOCUMENT VERS BLOB

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOCUMENT VERS BLOB (document; blob{; *}) Paramtre document blob Type Alpha BLOB Description Nom du document Champ ou variable de type BLOB devant recevoir le document Contenu du document Macintosh seulement : la resource fork est charge si * est pass ; sinon, la data fork est charge

Description DOCUMENT VERS BLOB charge le contenu de document dans blob. Vous devez passer un nom de document valide, c'est--dire qui dsigne un document existant qui n'est pas dj ouvert, sinon une erreur sera gnre. Si vous voulez que l'utilisateur choisisse le document, utilisez la routine Ouvrir document et la variable systme Document (cf. exemple ci-dessous). Note pour les utilisateurs MacOS : les documents Macintosh peuvent tre composs de deux lments, la resource fork et la data fork ("partie des ressources" et "partie des donnes"). Par dfaut, la commande DOCUMENT VERS BLOB charge la data fork du document. Si vous voulez charger la resource fork du document, passez le paramtre optionnel *. Sous Windows, le paramtre * est ignor. Notez que l'environnement 4D vous fournit l'quivalent des resource forks de MacOS sous Windows : par exemple, la data fork d'une base 4D est stocke dans un fichier comportant l'extension .4DB et la resource fork est stocke dans un fichier du mme nom, mais comportant l'extension .RSR. Si vous dveloppez une application 4D qui gre les data forks et les resource forks stockes dans des BLOBs, sous Windows, il vous suffit d'accder au fichier correspondant la "fork" avec laquelle vous voulez travailler.

164

4e Dimension - Langage

Exemple Notre exemple est une base qui vous permet de stocker et chercher rapidement des documents. Dans un formulaire entre, vous crez un bouton qui vous permet de charger un document de votre choix dans un champ de type BLOB. La mthode pour ce bouton peut tre la suivante : $vhRefDoc:=Ouvrir document("") ` Slectionner un document Si (OK=1) ` Si un document a t choisi FERMER DOCUMENT($vhRefDoc) ` Nous voulons pas qu'il reste ouvert ` Charger le document DOCUMENT VERS BLOB (Document;[VotreTable]VotreChampBLOB) Si (OK=0) ` Grer l'erreur Fin de si Fin de si

Rfrence BLOB VERS DOCUMENT, Ouvrir document. Variables systme La variable systme OK prend la valeur 1 si le document est correctement lu. Sinon, elle prend la valeur 0 et une erreur est gnre. Gestion des erreurs Si vous essayez de charger dans un BLOB un document qui n'existe pas ou qui est dj ouvert par un(e) autre process ou application, une des Erreurs du gestionnaire de fichiers du systme sera gnre. Une erreur d'Entre/Sortie peut survenir si le document est verrouill, s'il se trouve sur un volume verrouill ou si un problme survient pendant la lecture du document. S'il n'y a pas assez de mmoire pour charger le document, une erreur -108 est gnre. Dans tous les cas, vous pouvez grer les erreurs en utilisant la commande APPELER SUR ERREUR.

4e Dimension - Langage

165

BLOB VERS DOCUMENT

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

BLOB VERS DOCUMENT (document; blob{; *}) Paramtre document blob * Type Alpha BLOB * Description Nom du document Nouveau contenu du document Macintosh seulement : si * est pass, la resource fork est crite ; sinon, la data fork est crite

Description BLOB VERS DOCUMENT crit le contenu de document en utilisant les donnes stockes dans blob. Vous pouvez passer dans document le nom dun document existant ou non. Si le document nexiste pas, la commande le cre. Si vous passez le nom dun document existant, assurez-vous qu'il n'est pas dj ouvert, sinon une erreur est gnre. Si vous voulez que l'utilisateur choisisse le document, appelez les routines Ouvrir document ou Creer document et utilisez la variable systme Document (cf. exemple ci-dessous). Note pour les utilisateurs MacOS : les documents Macintosh peuvent tre composs de deux lments, la resource fork et la data fork ("partie des ressources" et "partie des donnes"). Par dfaut, la commande BLOB VERS DOCUMENT rcrit la data fork du document. Si vous voulez rcrire la resource fork du document, passez le paramtre optionnel *. Sous Windows, le paramtre * est ignor. Notez que l'environnement 4D vous fournit l'quivalent des resource forks de MacOS sous Windows : par exemple, la data fork d'une base 4D est stocke dans un fichier comportant l'extension .4DB et la resource fork est stocke dans un fichier du mme nom, mais comportant l'extension .RSR. Si vous dveloppez une application 4D qui gre les data forks et les resource forks stockes dans des BLOBs, sous Windows, il vous suffit d'accder au fichier correspondant la "fork" avec laquelle vous voulez travailler.

166

4e Dimension - Langage

Exemple Notre exemple est une base qui permet de stocker et de rechercher rapidement des documents. Dans un formulaire entre, vous crez un bouton vous permettant de sauvegarder un document de votre choix qui contient des donnes provenant d'un champ de type BLOB. La mthode de ce bouton peut tre la suivante : $vhRefDoc:=Ouvrir document("") ` Slectionner un document Si (OK=1) ` Si un document a t choisi FERMER DOCUMENT($vhRefDoc) ` Nous ne voulons pas qu'il reste ouvert ` Ecrire le contenu du document BLOB VERS DOCUMENT(Document;[VotreTable]VotreChampBLOB) Si (OK=0) ` Grer l'erreur Fin de si Fin de si

Rfrence Creer document, DOCUMENT VERS BLOB, Ouvrir document. Variables systme La variable systme OK prend la valeur 1 si le document est correctement crit. Sinon, elle prend la valeur 0 et une erreur est gnre. Gestion des erreurs Si vous essayez de rcrire un document qui est dj ouvert par un autre process ou une autre application, une des Erreurs du gestionnaire de fichiers du systme sera gnre. L'espace sur disque peut tre insuffisant pour lcriture du contenu du document. Une erreur d'Entre/Sortie peut survenir si le document est verrouill, s'il se trouve sur un volume verrouill ou si un problme survient lors de l'criture du document. Dans tous les cas, vous pouvez grer les erreurs en utilisant la commande APPELER SUR ERREUR.

4e Dimension - Langage

167

VARIABLE VERS BLOB

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

VARIABLE VERS BLOB (variable; blob{; offset | *}) Paramtre variable blob offset | * Type Variable BLOB Variable | * Description Variable stocker dans le BLOB BLOB devant recevoir la variable Offset de la variable (en octets) dans BLOB ou * pour ajouter la variable la fin du BLOB Nouvel offset aprs criture si * omis

Description VARIABLE VERS BLOB stocke la variable variable dans le BLOB blob. Si vous passez le paramtre optionnel *, la variable est ajoute la fin de blob et la taille du BLOB est redimensionne en consquence. A l'aide du paramtre optionnel *, vous pouvez stocker les unes derrire les autres autant de variables ou de listes (cf. les autres commandes BLOB) que vous voulez dans un BLOB, la seule limite tant celle de la mmoire disponible. Si vous ne passez pas le paramtre optionnel * ni de variable dans le paramtre offset, variable est stocke partir du dbut du BLOB en crasant son contenu prcdent. La taille du BLOB est redimensionne en consquence. Si vous passez la variable offset en paramtre, la variable est crite dans le BLOB l'offset ( partir de zro) spcifi par offset. Quel que soit l'endroit o vous placez la variable, la taille du BLOB sera augmente si ncessaire en fonction de l'emplacement que vous avez dfini (ainsi que de la taille de la variable). Les octets redfinis (autres que ceux que vous venez d'crire) sont initialiss la valeur zro. Aprs l'excution de la commande, la variable du paramtre offset est incrmente du nombre d'octets ayant t crits. Vous pouvez par consquent rutiliser la mme variable avec une autre commande d'criture de BLOB afin de placer une autre variable ou liste juste aprs celle que vous venez d'crire. VARIABLE VERS BLOB accepte tous les types de variables (y compris d'autres BLOBs), l'exception des types suivants : Pointeurs Tableaux de pointeurs Tableaux deux dimensions

168

4e Dimension - Langage

Notez cependant que si vous stockez une variable de type Entier long qui est une rfrence une liste hirarchique (ListRef), VARIABLE VERS BLOB stockera la variable Entier long, pas la liste. Pour stocker et rcuprer des listes hirarchiques dans un BLOB, utilisez les commandes LISTE VERS BLOB et BLOB vers liste. ATTENTION : Si vous utilisez un BLOB pour stocker les variables, utilisez par la suite la commande BLOB VERS VARIABLE pour rcuprer le contenu du BLOB car les variables sont stockes dans les BLOBs avec un format interne 4D. La variable OK prend la valeur 1 si la variable a t correctement stocke. Si l'opration n'a pas pu tre effectue cause d'un manque de mmoire, la variable OK prend la valeur 0. Note sur l'indpendance de plate-forme : VARIABLE VERS BLOB et BLOB VERS VARIABLE utilisent un format interne 4D pour grer les variables stockes dans les BLOBs. Vous n'avez donc pas besoin de vous proccuper de la conversion des octets ("byte swapping") entre les diffrentes plates-formes lors de l'utilisation de ces deux commandes. Un BLOB cr sous Windows l'aide de ces deux commandes peut tre rutilis sans la moindre manipulation sous MacOS et vice-versa. Exemples (1) Les mthodes projet suivantes vous permettent de stocker et de rcuprer rapidement des variables dans les documents sur disque : ` Mthode projet STOCKER VARIABLES ` STOCKER VARIABLES ( Alpha ; Pointeur ) ` STOCKER VARIABLES ( Document ; -> Tableau ) C_ALPHA (255;$1) C_POINTEUR ($2) C_BLOB ($vxDonnesTableau) VARIABLE VERS BLOB ($2->;$vxDonnesTableau) ` Stocker le tableau dans le BLOB COMPRESSER BLOB ($vxDonnesTableau) ` Compresser le BLOB BLOB VERS DOCUMENT ($1;$vxDonnesTableau) ` Enregistrer le BLOB sur disque ` Mthode projet CHARGER VARIABLES ` CHARGER VARIABLES ( Alpha ; Pointeur ) ` CHARGER VARIABLES ( Document ; -> Tableau ) C_ALPHA (255;$1) C_POINTEUR ($2) C_BLOB ($vxDonnesTableau) DOCUMENT VERS BLOB ($1;$vxDonnesTableau) ` Charger le BLOB du disque DECOMPRESSER BLOB ($vxDonnesTableau) ` Dcompresser le BLOB BLOB VERS VARIABLE ($vxDonnesTableau;$2->) ` Rcuprer le tableau du BLOB

4e Dimension - Langage

169

Lorsque ces mthodes ont t ajoutes votre application, vous pouvez crire : TABLEAU ALPHA (...;taToutTableau;...) ` ... STOCKER VARIABLES ( $vaNomDoc;->taToutTableau) ` ... CHARGER VARIABLES ( $vaNomDoc;->taToutTableau) (2) Les deux mthodes projet suivantes vous permettent de stocker et de rcuprer des variables dans un BLOB : ` Mthode projet STOCKER VARIABLES DANS BLOB ` STOCKER VARIABLES DANS BLOB ( Pointeur { ; Pointeur ... { ; Pointeur } } ) ` STOCKER VARIABLES DANS BLOB ( BLOB { ; Var1 ... { ; Var2 } } ) C_POINTEUR (${1}) C_ENTIER LONG ($vlParam) FIXER TAILLE BLOB ($1->;0) Boucle ($vlParam;2;Nombre de parametres) VARIABLE VERS BLOB (${$vlParam}->;$1->;*) Fin de boucle ` Mthode projet RECUPERER VARIABLES DANS BLOB ` RECUPERER VARIABLES DANS BLOB ( Pointeur { ; Pointeur ... { ; Pointeur } } ) ` RECUPERER VARIABLES DANS BLOB ( BLOB { ; Var1 ... { ; Var2 } } ) C_POINTEUR (${1}) C_ENTIER LONG ($vlParam;$vlOffset) $vlOffset:=0 Boucle ($vlParam;2;Nombre de parametres) BLOB VERS VARIABLE ($1->;${$vlParam}->;$vlOffset) Fin de boucle Lorsque ces mthodes ont t ajoutes votre application, vous pouvez crire : STOCKER VARIABLES DANS BLOB ( ->vxBLOB;->vgImage;->taTableau1;->taTableau2) ` ... RECUPERER VARIABLES DANS BLOB ( ->vxBLOB;->vgImage;->taTableau1;->taTableau2) Rfrence BLOB vers liste, BLOB VERS VARIABLE, LISTE VERS BLOB. Variables et ensembles systme La variable OK prend la valeur 1 si la variable a t correctement stocke, sinon elle prend la valeur 0.

170

4e Dimension - Langage

BLOB VERS VARIABLE

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

BLOB VERS VARIABLE (blob; variable{; offset}) Paramtre blob variable offset Type BLOB Variable Numrique Description BLOB contenant une ou plusieurs variable(s) 4D Variable crire avec le contenu de BLOB Position de la variable dans BLOB Position de la variable suivante dans BLOB

Description BLOB VERS VARIABLE rcrit la variable variable avec les donnes stockes dans le BLOB blob l'offset d'octet ( partir de zro) spcifi par offset. Les donnes dans le BLOB doivent tre compatibles avec la variable de destination : vous utiliserez gnralement des BLOBs que vous avez prcdemment remplis l'aide de VARIABLE VERS BLOB. Si vous ne spcifiez pas le paramtre offset, les donnes de la variable sont lues partir du dbut du BLOB. Si le BLOB contient plusieurs variables, vous devez passer le paramtre offset ainsi qu'une variable numrique. Avant d'appeler la commande, dfinissez cette variable numrique avec l'offset correspondant. Aprs l'appel, la mme variable numrique retourne l'offset de la variable suivante stocke dans le BLOB. La variable OK prend la valeur 1 si l'opration s'est correctement droule. Si l'opration n'a pas pu tre effectue, par exemple cause d'un manque de mmoire, la variable OK prend la valeur 0. Note sur l'indpendance de plate-forme : BLOB VERS VARIABLE et VARIABLE VERS BLOB utilisent un format interne 4D pour grer les variables stockes dans les BLOBs. Vous n'avez donc pas besoin de vous proccuper de la conversion des octets ("byte swapping") entre les diffrentes plates-formes lors de l'utilisation de ces deux commandes. Un BLOB cr sous Windows l'aide de ces deux commandes peut tre rutilis sans la moindre manipulation sous MacOS et vice-versa. Exemple Rfrez-vous aux exemples de VARIABLE VERS BLOB.

4e Dimension - Langage

171

Rfrence VARIABLE VERS BLOB. Variables et ensembles systme La variable OK prend la valeur 1 si la variable a t correctement rcrite, sinon elle prend la valeur 0.

172

4e Dimension - Langage

LISTE VERS BLOB

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LISTE VERS BLOB (liste; blob{; *}) Paramtre liste blob * Type RefList BLOB * Description Liste hirarchique stocker dans le BLOB BLOB devant recevoir la liste hirarchique Ajouter la liste la fin du BLOB

Description La commande LISTE VERS BLOB stocke la liste hirarchique liste dans le BLOB blob. Si vous passez le paramtre optionnel *, la liste hirarchique est ajoute la fin du BLOB et la taille de blob est modifie en consquence. Ainsi, l'aide du paramtre optionnel *, vous pouvez stocker les unes derrire les autres autant de variables ou de listes (rfrez-vous aux autres commandes sur les BLOBs) que vous voulez dans un BLOB, la seule limite tant celle de la mmoire disponible. Si vous ne passez pas le paramtre optionnel *, la liste hirarchique est stocke au dbut de blob en remplaant son contenu prcdent, et la taille du BLOB est modifie en consquence. Quel que soit l'endroit o vous placez la liste, la taille du BLOB sera augmente si ncessaire en fonction de l'emplacement que vous avez dfini (plus jusqu' la taille de la liste le cas chant). Les octets redfinis (autres que ceux que vous venez d'crire) sont initialiss la valeur zro. ATTENTION : Si vous utilisez un BLOB pour stocker des listes, appelez ensuite la commande BLOB vers liste pour relire le contenu du BLOB car les listes sont stockes dans les BLOBs avec un format interne 4D. Aprs l'excution de la commande, la variable OK prend la valeur 1 si la liste hirarchique a t correctement stocke. Si l'opration n'a pas pu tre effectue car, par exemple, il n'y avait pas assez de mmoire disponible, la variable OK prend la valeur 0. Note pour l'indpendance de plate-forme : LISTE VERS BLOB et BLOB vers liste utilisent un format interne 4D pour grer les listes stockes dans des BLOBs. L'avantage est que vous n'avez pas besoin de vous soucier de la conversion des octets ("byte swapping") entre les plates-formes lorsque vous utilisez ces deux commandes. Autrement dit, avec ces commandes, un BLOB cr sous Windows peut tre rutilis sous MacOS et vice-versa.

4e Dimension - Langage

173

Exemple Reportez-vous l'exemple de la fonction BLOB vers liste. Rfrence BLOB vers liste, BLOB VERS VARIABLE, VARIABLE VERS BLOB. Variables et ensembles systme La variable OK prend la valeur 1 si la liste a t correctement crite, sinon elle prend la valeur 0.

174

4e Dimension - Langage

BLOB vers liste

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

BLOB vers liste (blob{; offset}) RefList Paramtre blob offset Type BLOB Numrique Description BLOB contenant la liste hirarchique Offset (en octets) dans le BLOB Nouvel offset aprs la lecture Rfrence de la liste nouvellement cre

Rsultat

RefList

Description BLOB vers liste cre une nouvelle liste hirarchique avec les donnes stockes dans le BLOB blob l'offset d'octet ( partir de zro) spcifi par offset et retourne un numro de rfrence de liste hirarchique pour cette nouvelle liste. Les donnes prsentes dans le BLOB doivent tre compatibles avec la commande : gnralement, vous utilisez des BLOBs pralablement remplis avec la commande LISTE VERS BLOB. Si vous ne passez pas le paramtre optionnel offset, les valeurs de la liste sont lues partir du dbut du BLOB. Si vous grez un BLOB dans lequel plusieurs variables ou listes ont t stockes, vous devez passer le paramtre offset ainsi qu'une variable numrique. Avant l'appel, fixez cette variable numrique l'offset dsir. Aprs l'appel, cette mme variable numrique retourne l'offset de la variable suivante stocke dans le BLOB. Aprs l'appel, la variable OK prend la valeur 1 si la liste hirarchique a t correctement cre. Si l'opration ne peut pas tre effectue cause, par exemple, d'un manque de mmoire, la variable OK prend la valeur 0. Note pour l'indpendance de plate-forme : BLOB vers liste et LISTE VERS BLOB utilisent un format interne 4D pour grer les listes stockes dans des BLOBs. L'avantage est que vous n'avez pas besoin de vous soucier de la conversion des octets ("byte swapping") entre les plates-formes lorsque vous utilisez ces deux commandes. Autrement dit, avec ces commandes, un BLOB cr sous Windows peut tre rutilis sous MacOS et vice-versa.

4e Dimension - Langage

175

Exemple Dans l'exemple suivant, la mthode d'un formulaire entre extrait une liste d'un champ BLOB avant que le formulaire ne s'affiche puis le stocke dans le champ BLOB lorsque la saisie est valide : ` Mthode du formulaire [Choses Faire];"Entre" Au cas ou

: (Evenement formulaire=Sur chargement) hListe:=BLOB vers liste([Choses Faire]Ides) Si (OK=0) hListe:=Nouvelle liste Fin de si : (Evenement formulaire=Sur libration) SUPPRIMER LISTE(hListe;*) : (bValider=1) LISTE VERS BLOB(hListe;[Choses Faire]Ides) Fin de cas

Rfrence LISTE VERS BLOB. Variables et ensembles systme La variable OK prend la valeur 1 si la liste a t correctement cre, sinon elle prend la valeur 0.

176

4e Dimension - Langage

ENTIER VERS BLOB

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENTIER VERS BLOB (entier; blob; ordreOctet{; offset | *}) Paramtre entier blob ordreOctet offset | * Type Numrique BLOB Numrique Variable | * Description Valeur entire crire dans le BLOB BLOB devant recevoir la valeur entire 0 Ordre des octets en mode natif 1 Ordre des octets Macintosh 2 Ordre des octets PC Offset (en octets) de l'entier dans le BLOB ou * pour ajouter la valeur la fin du BLOB Nouvel offset aprs criture si * omis

Description ENTIER VERS BLOB crit la valeur entire (2 octets) entier dans le BLOB blob. Le paramtre ordreOctet fixe l'ordre des octets ("byte ordering") de la valeur entire crire. Vous pouvez passer une des constantes fournies par 4e Dimension : Constante Ordre octets natif Ordre octets Macintosh Ordre octets PC Type Entier long Entier long Entier long Valeur 0 1 2

Note sur l'indpendance de plate-forme : Si vous changez des BLOBs entre les platesformes Macintosh et PC, il vous incombe de traiter les conversions d'octets ("byte swapping") lorsque vous utilisez cette commande. Si vous passez le paramtre optionnel *, la valeur entire sur 2 octets est ajoute la fin du BLOB et sa taille est modifie en consquence. Ainsi, l'aide du paramtre optionnel *, vous pouvez stocker les unes derrire les autres autant de valeurs de type Entier, Entier long, Numrique ou Texte (rfrez-vous aux autres commandes sur les BLOBs) que vous voulez dans un BLOB, la seule limite tant celle de la mmoire disponible. Si vous ne passez pas le paramtre optionnel * ni de variable dans le paramtre offset, la valeur entire est stocke au dbut de blob en remplaant son contenu prcdent, et la taille du BLOB est modifie en consquence.

4e Dimension - Langage

177

Si vous passez une variable dans le paramtre offset, la valeur entire est crite partir de l'offset offset, exprim en octets ( partir de zro), du BLOB. Quel que soit l'endroit o vous placez l'entier, la taille du BLOB sera augmente si ncessaire en fonction de l'emplacement que vous avez dfini (plus jusqu' 2 octets le cas chant). Les octets redfinis (autres que ceux que vous venez d'crire) sont initialiss la valeur zro. Aprs l'excution de la commande, la variable du paramtre offset est incrmente du nombre d'octets ayant t crits. Vous pouvez par consquent rutiliser la mme variable avec une autre commande d'criture de BLOB afin de placer une autre valeur juste aprs celle que vous venez d'crire. Exemples (1) Aprs l'excution de ce code :

ENTIER VERS BLOB (0x0206;vxBlob;Ordre octets natif)

La taille de vxBlob est 2 octets Sur Macintosh vxBLOB{0} = $02 et vxBLOB{1} = $06 Sur PC vxBLOB{0} = $06 et vxBLOB{1} = $02 (2) Aprs l'excution de ce code :

ENTIER VERS BLOB (0x0206;vxBlob;Ordre octets Macintosh)

La taille de vxBlob est 2 octets Sur toutes les plates-formes vxBLOB{0} = $02 et vxBLOB{1} = $06 (3) Aprs l'excution de ce code :

ENTIER VERS BLOB (0x0206;vxBlob;Ordre octets PC)

La taille de vxBlob est 2 octets Sur toutes les plates-formes vxBLOB{0} = $06 et vxBLOB{1} = $02 (4) Aprs l'excution de ce code: FIXER TAILLE BLOB (vxBlob;100) ENTIER VERS BLOB (0x0206;vxBlob;Ordre octets PC;*) La taille de vxBlob est 102 octets Sur toutes les plates-formes vxBLOB{100} = $06 et vxBLOB{101} = $02 Les autres octets du BLOB restent inchangs

178

4e Dimension - Langage

(5) Aprs l'excution de ce code : FIXER TAILLE BLOB (vxBlob;100) vlOffset:=50 ENTIER VERS BLOB (518;vxBlob;Ordre octets Macintosh;vlOffset) La taille de vxBlob est 100 octets Sur toutes les plates-formes vxBLOB{50} = $02 et vxBLOB{51} = $06 Les autres octets du BLOB restent inchangs La variable vlOffset est incrmente de 2 (et est alors gale 52)

Rfrence BLOB vers entier, BLOB vers entier long, BLOB vers reel, BLOB vers texte, ENTIER LONG VERS BLOB, REEL VERS BLOB, TEXTE VERS BLOB.

4e Dimension - Langage

179

ENTIER LONG VERS BLOB

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENTIER LONG VERS BLOB (entierLong; blob; ordreOctets{; offset | *}) Paramtre entierLong blob ordreOctets offset | * Type Numrique BLOB Numrique Variable | * Description Valeur de type Entier long crire dans BLOB BLOB devant recevoir l'entier long 0 Ordre d'octets natif 1 Ordre d'octets Macintosh 2 Ordre d'octets PC Offset (en octets) dans le BLOB ou * pour ajouter la valeur la fin du BLOB Nouvel offset aprs l'criture si * omis

Description La commande ENTIER LONG VERS BLOB crit la valeur de type Entier long (4 octets) entierLong dans le BLOB blob. Le paramtre ordreOctet fixe l'ordre des octets ("byte ordering") de la valeur Entier long crire. Vous passez une des constantes fournies par 4e Dimension : Constante Ordre octets natif Ordre octets Macintosh Ordre octets PC Type Entier long Entier long Entier long Valeur 0 1 2

Note sur l'indpendance de plate-forme : Si vous changez des BLOBs entre les platesformes Macintosh et PC, il vous incombe de traiter les conversions d'octets ("byte swapping") lorsque vous utilisez cette fonction. Si vous passez le paramtre optionnel *, l'entier long sur 4 octets est ajout la fin du BLOB et la taille de blob est modifie en consquence. Ainsi, l'aide du paramtre optionnel *, vous pouvez stocker les unes derrire les autres autant de valeurs de type Entier, Entier long, Numrique ou Texte (rfrez-vous aux autres commandes sur les BLOBs) que vous voulez dans un BLOB, la seule limite tant celle de la mmoire disponible. Si vous ne passez pas le paramtre optionnel * ni de variable dans le paramtre offset, l'entier long est stock au dbut de blob en remplaant son contenu prcdent, et la taille du BLOB est modifie en consquence.

180

4e Dimension - Langage

Si vous passez une variable dans le paramtre offset, l'entier long est crit partir de l'offset offset, exprim en octets ( partir de zro), du BLOB. Quel que soit l'endroit o vous placez l'entier long, la taille du BLOB sera augmente si ncessaire en fonction de l'emplacement que vous avez dfini (plus jusqu' 4 octets le cas chant). Les octets redfinis (autres que ceux que vous venez d'crire) sont initialiss la valeur zro. Aprs l'excution de la commande, la variable du paramtre offset est incrmente du nombre d'octets ayant t crits. Vous pouvez par consquent rutiliser la mme variable avec une autre commande d'criture de BLOB afin de placer une autre valeur juste aprs celle que vous venez d'crire. Exemples (1) Aprs l'excution de ce code :

ENTIER LONG VERS BLOB (0x01020304;vxBlob;Ordre octets natif)

La taille de vxBlob est 4 octets SurMacintosh vxBLOB{0}=$01, vxBLOB{1}=$02, vxBLOB{2}=$03, vxBLOB{3}=$04 Sur PC vxBLOB{0}=$04, vxBLOB{1}=$03, vxBLOB{2}=$02, vxBLOB{3}=$01 (2) Aprs l'excution de ce code :

ENTIER LONG VERS BLOB (0x01020304;vxBlob;Ordre octets Macintosh)

La taille de vxBlob est 4 octets Sur toutes les plates-formes vxBLOB{0}=$01, vxBLOB{1}=$02, vxBLOB{2}=$03, vxBLOB{3}=$04 (3) Aprs l'excution de ce code :

ENTIER LONG VERS BLOB (0x01020304;vxBlob;Ordre octets PC)

La taille de vxBlob est 4 octets Sur toutes les plates-formes vxBLOB{0}=$04, vxBLOB{1}=$03, vxBLOB{2}=$02, vxBLOB{3}=$01 (4) Aprs l'excution de ce code : FIXER TAILLE BLOB (vxBlob;100) ENTIER LONG VERS BLOB (0x01020304;vxBlob;Ordre octets PC) La taille de vxBlob est 104 octets Sur toutes les plates-formes vxBLOB{100}=$04, vxBLOB{101}=$03, vxBLOB{102}=$02, vxBLOB{103}=$01 Les autres octets du BLOB sont inchangs

4e Dimension - Langage

181

(5) Aprs l'excution de ce code : FIXER TAILLE BLOB (vxBlob;100) vlOffset:=50 ENTIER LONG VERS BLOB (0x01020304;vxBlob;Ordre octets Macintosh;vlOffset) La taille de vxBlob est 100 K Sur toutes les plates-formes vxBLOB{50}=$01, vxBLOB{51}=$02, vxBLOB{52}=$03, vxBLOB{53}=$04 Les autres octets du BLOB restent inchangs La variable vlOffset a t incrmente de 4 (et est alors gale 54) Rfrence BLOB vers entier, BLOB vers entier long, BLOB vers reel, BLOB vers texte, ENTIER VERS BLOB, REEL VERS BLOB, TEXTE VERS BLOB.

182

4e Dimension - Langage

REEL VERS BLOB

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

REEL VERS BLOB (rel; blob; formatRel{; offset | *}) Paramtre rel blob formatRel Type Numrique BLOB Numrique Description Valeur de type Rel crire dans le BLOB BLOB devant recevoir la valeur Rel 0 Format rel natif 1 Format rel tendu 2 Format rel double Macintosh 3 Format rel double Windows Offset (en octets) dans le BLOB ou * pour ajouter la valeur la fin du BLOB Nouvel offset aprs l'criture si * omis

offset | *

Variable | *

Description La commande REEL VERS BLOB crit la valeur de type Rel (ou Numrique) rel dans le BLOB blob. Le paramtre formatRel fixe le format interne et l'ordre des octets ("byte ordering") de la valeur de type Rel crire. Vous passez une des constantes fournies par 4e Dimension : Constante Format rel Format rel Format rel Format rel natif tendu double Macintosh double PC Type Entier Entier Entier Entier long long long long Valeur 0 1 2 3

Note sur l'indpendance de plate-forme : Si vous changez des BLOBs entre les platesformes Macintosh et PC, il vous incombe de traiter les conversions d'octets ("byte swapping") lorsque vous utilisez cette fonction. Si vous passez le paramtre optionnel *, la valeur relle est ajoute la fin du BLOB et la taille de blob est modifie en consquence. Ainsi, l'aide du paramtre optionnel *, vous pouvez stocker les unes derrire les autres autant de valeurs de type Entier, Entier long, Numrique ou Texte (rfrez-vous aux autres commandes sur les BLOBs) que vous voulez dans un BLOB, la seule limite tant celle de la mmoire disponible.

4e Dimension - Langage

183

Si vous ne passez pas le paramtre optionnel * ni de variable dans le paramtre offset, la valeur relle est stocke au dbut de blob en remplaant son contenu prcdent, et la taille du BLOB est modifie en consquence. Si vous passez une variable dans le paramtre offset, le rel est crit partir de l'offset offset, exprim en octets ( partir de zro), du BLOB. Quel que soit l'endroit o vous placez la valeur, la taille du BLOB sera augmente si ncessaire en fonction de l'emplacement que vous avez dfini (plus jusqu' 8 ou 10 octets le cas chant). Les octets redfinis (autres que ceux que vous venez d'crire) sont initialiss la valeur zro. Aprs l'excution de la commande, la variable du paramtre offset est incrmente du nombre d'octets ayant t crits. Vous pouvez par consquent rutiliser la mme variable avec une autre commande d'criture de BLOB afin de placer une autre valeur juste aprs celle que vous venez d'crire. Exemples (1) Aprs l'excution de ce code : C_REEL (vrValeur) vrValeur := ... REEL VERS BLOB (vrValeur;vxBlob;Format rel natif) Sur PC et Power Macintosh, la taille de vxBlob est 8 octets Sur Macintosh 68K, la taille de vxBlob est 10 octets (2) Aprs l'excution de ce code : C_REEL (vrValeur) vrValeur := ... REEL VERS BLOB (vrValeur;vxBlob;Format rel tendu) Sur toutes les plates-formes, la taille de vxBlob est 10 octets (3) Aprs l'excution de ce code : C_REEL (vrValeur) vrValeur := ... REEL VERS BLOB (vrValeur;vxBlob;Format rel double Macintosh) ` ou Format rel double PC Sur toutes les plates-formes, la taille de vxBlob est 8 octets

184

4e Dimension - Langage

(4) Aprs l'excution de ce code : FIXER TAILLE BLOB (vxBlob;100) C_REEL (vrValeur) vrValeur := ... REEL VERS BLOB (vrValeur;vxBlob;Format rel double PC) ` ou Format rel double Macintosh Sur toutes les plates-formes, la taille de vxBlob est 8 octets (5) Aprs l'excution de ce code : FIXER TAILLE BLOB (vxBlob;100) REEL VERS BLOB (vrValeur;vxBlob;Format rel tendu;*) Sur toutes les plates-formes, la taille de vxBlob est 110 octets Sur toutes les plates-formes, la valeur numrique est stocke dans les octets #100 #109 Les autres octets du BLOB restent inchangs (6) Aprs l'excution de ce code : FIXER TAILLE BLOB (vxBlob;100) C_REEL (vrValeur) vrValeur := ... vlOffset:=50 REEL VERS BLOB (vrValeur;vxBlob;Format rel double PC;vlOffset) ` ou Format rel double Macintosh Sur toutes les plates-formes, la taille de vxBlob est 100 octets Sur toutes les plates-formes, la valeur numrique est stocke dans les octets #50 #57 Les autres octets du BLOB restent inchangs La variable vlOffset est incrmente de 8 (et est alors gale 58)

Rfrence BLOB vers entier, BLOB vers entier long, BLOB vers reel, BLOB vers texte, ENTIER LONG VERS BLOB, ENTIER VERS BLOB, TEXTE VERS BLOB.

4e Dimension - Langage

185

TEXTE VERS BLOB

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TEXTE VERS BLOB (texte; blob; formatTexte{; offset | *}) Paramtre texte blob formatTexte Type Alpha BLOB Numrique Description Valeur de type Texte crire dans le BLOB BLOB devant recevoir la valeur de type Texte 0 Chane en C 1 Chane pascal 2 Texte avec longueur 3 Texte sans longueur Offset (en octets) dans le BLOB ou * pour ajouter la valeur la fin du BLOB Nouvel offset aprs l'criture si * omis

offset | *

Variable | *

Description La commande TEXTE VERS BLOB crit la valeur de type Texte texte dans le BLOB blob. Le paramtre formatTexte dfinit le format interne de la valeur de type Texte crire. Vous passez une des constantes fournies par 4e Dimension : Constante Chane en C Chane pascal Texte avec longueur Texte sans longueur Type Entier Entier Entier Entier long long long long Valeur 0 1 2 3

Le tableau suivant dcrit chacun de ces formats : Format texte Chane en C Description & Exemples Le texte se termine par un caractre NULL (code ASCII $00). ""

$00 $48 65 6C 6C 6F 20 57 6F 72 6C 64 21 00

"Hello World!" Chane pascal

Le texte est prcd d'un octet de longueur. ""

$00 $0C 48 65 6C 6C 6F 20 57 6F 72 6C 64 21

"Hello World!"

186

4e Dimension - Langage

Texte avec longueur

Le texte est prcd de 2 octets de longueur. ""

$00 00 $00 0C 48 65 6C 6C 6F 20 57 6F 72 6C 64 21

"Hello World!" Texte sans longueur

Le texte est compos seulement de ses caractres.

Pas de valeur "Hello World!" $48 65 6C 6C 6F 20 57 6F 72 6C 64 21


"" Note : Cette commande accepte des expressions de type Texte (dclares avec C_TEXTE) et de type Alpha (dclares avec C_ALPHA). Notez bien que les variables de type Texte peuvent contenir jusqu' 32 000 caractres et que les variables de type Alpha peuvent contenir un nombre de caractres fixe, dfini lors de leur dclaration (255 caractres maximum). Si vous passez le paramtre optionnel *, la valeur de type Texte est ajoute la fin du BLOB et la taille de blob est modifie en consquence. Ainsi, l'aide du paramtre optionnel *, vous pouvez stocker les unes derrire les autres autant de valeurs de type Entier, Entier long, Numrique ou Texte (rfrez-vous aux autres commandes sur les BLOBs) que vous voulez dans un BLOB, la seule limite tant celle de la mmoire disponible. Si vous ne passez pas le paramtre optionnel * ni de variable dans le paramtre offset, la valeur de type Texte est stocke au dbut de blob en remplaant son contenu prcdent, et la taille du BLOB est modifie en consquence. Si vous passez une variable dans le paramtre offset, la valeur de type Texte est crite l'offset offset, exprim en octets ( partir de zro), du BLOB. Quel que soit l'endroit o vous placez la valeur, la taille du BLOB sera augmente si ncessaire en fonction de l'emplacement que vous avez dfini (plus jusqu' la taille du texte le cas chant). Les octets redfinis (autres que ceux que vous venez d'crire) sont initialiss la valeur zro. Aprs l'excution de la commande, la variable du paramtre offset est incrmente du nombre d'octets ayant t crits. Vous pouvez par consquent rutiliser la mme variable avec une autre commande d'criture de BLOB afin de placer une autre valeur juste aprs celle que vous venez d'crire.

4e Dimension - Langage

187

Exemple Aprs l'excution de ce code : FIXER TAILLE BLOB (vxBlob;0) C_TEXTE (vtValeur) vtValeur := "Hello World!" ` La longueur de vtValeur est de 12 octets TEXTE VERS BLOB (vtValeur;vxBlob;Chane en C) ` La taille du BLOB devient 13 octets TEXTE VERS BLOB (vtValeur;vxBlob;Chane pascal) ` La taille du BLOB devient 13 octets TEXTE VERS BLOB (vtValeur;vxBlob;Texte avec longueur) ` La taille du BLOB devient 14 octets TEXTE VERS BLOB (vtValeur;vxBlob;Texte sans longueur) ` La taille du BLOB devient 12 octets Rfrence BLOB vers entier, BLOB vers entier long, BLOB vers reel, BLOB vers texte, ENTIER LONG VERS BLOB, ENTIER VERS BLOB, REEL VERS BLOB.

188

4e Dimension - Langage

BLOB vers entier

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

BLOB vers entier (blob; ordreOctet{; offset}) Numrique Paramtre blob ordreOctet offset Type BLOB Numrique Variable Description BLOB duquel obtenir la valeur entire 0 Ordre d'octets mode natif 1 Ordre d'octets Macintosh 2 Ordre d'octets PC Offset (en octets) dans le BLOB Nouvel offset aprs la lecture Valeur entire (2 octets)

Rsultat

Numrique

Description BLOB vers entier retourne une valeur entire (2 octets) lue dans le BLOB blob. Le paramtre ordreOctet fixe l'ordre des octets ("byte ordering") de la valeur entire lire. Vous pouvez passer une des constantes fournies par 4e Dimension : Constante Ordre octets natif Ordre octets Macintosh Ordre octets PC Type Entier long Entier long Entier long Valeur 0 1 2

Note sur l'indpendance de plate-forme : Si vous changez des BLOBs entre les platesformes Macintosh et PC, il vous incombe de traiter les conversions d'octets ("byte swapping") lorsque vous utilisez cette fonction. Si vous ne passez pas de variable dans le paramtre optionnel offset, les deux premiers octets de BLOB sont lus. Si vous passez une variable dans le paramtre optionnel offset, la valeur entire sur 2 octets est lue depuis l'offset exprim en octets ( partir de zro) du BLOB. Note : Vous devez passer un offset compris entre 0 (zro) et la taille du BLOB moins 2. Sinon, une erreur -111 est gnre.

4e Dimension - Langage

189

Aprs l'excution de la commande, la variable offset est incrmente du nombre d'octets qui a t lu. Vous pouvez donc rutiliser la mme variable avec une autre commande de lecture de BLOBs pour lire une autre valeur place juste aprs celle que vous venez de lire. Exemple L'exemple suivant lit 20 valeurs entires d'un BLOB partir de l'offset 0x200 : $vlOffset:=0x200 Boucle ($viBoucle;0;19) $viValeur:=BLOB vers entier(vxUnBlob;Ordre octets PC;$vlOffset) ` Faire quelque chose avec $viValeur Fin de boucle Rfrence BLOB vers entier long, BLOB vers reel, BLOB vers texte, ENTIER LONG VERS BLOB, ENTIER VERS BLOB, REEL VERS BLOB, TEXTE VERS BLOB.

190

4e Dimension - Langage

BLOB vers entier long

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

BLOB vers entier long (blob; ordreOctet{; offset}) Numrique Paramtre blob ordreOctet offset Type BLOB Numrique Variable Description BLOB duquel extraire la valeur de type Entier long 0 = Ordre d'octets natif 1 = Ordre d'octets Macintosh 2 = Ordre d'octets PC Offset (en octets) dans le BLOB Nouvel offset aprs lecture Valeur de type Entier long (4 octets)

Rsultat

Numrique

Description La fonction BLOB vers entier long retourne une valeur de type Entier long (4 octets) lue dans le BLOB blob. Le paramtre ordreOctet fixe l'ordre des octets ("byte ordering") de la valeur Entier long lire. Vous passez une des constantes fournies par 4e Dimension : Constante Ordre octets natif Ordre octets Macintosh Ordre octets PC Type Entier long Entier long Entier long Valeur 0 1 2

Note sur l'indpendance de plate-forme : Si vous changez des BLOBs entre les platesformes Macintosh et PC, il vous incombe de traiter les conversions d'octets ("byte swapping") lorsque vous utilisez cette fonction. Si vous ne passez pas de variable dans le paramtre optionnel offset, les quatre premiers octets de BLOB sont lus. Si vous passez une variable dans le paramtre optionnel offset, l'entier long sur 4 octets est lu depuis l'offset exprim en octets ( partir de zro) du BLOB. Note : Vous devez passer un offset compris entre 0 (zro) et la taille du BLOB moins 4. Sinon, une erreur -111 est gnre.

4e Dimension - Langage

191

Aprs l'excution de la commande, la variable offset est incrmente du nombre d'octets qui a t lu. Vous pouvez donc rutiliser la mme variable avec une autre commande de lecture de BLOBs pour lire une autre valeur place juste aprs celle que vous venez de lire. Exemple L'exemple suivant lit 20 valeurs de type Entier long dans un BLOB, partir de l'offset 0x200 : $vlOffset:=0x200 Boucle ($viBoucle;0;19) $vlValeur:=BLOB vers entier long(vxUnBlob;Ordre octets PC;$vlOffset) ` Faire quelque chose avec $vlValeur Fin de boucle Rfrence BLOB vers entier, BLOB vers reel, BLOB vers texte, ENTIER LONG VERS BLOB, ENTIER VERS BLOB, REEL VERS BLOB, TEXTE VERS BLOB.

192

4e Dimension - Langage

BLOB vers reel

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

BLOB vers reel (blob; formatRel{; offset}) Numrique Paramtre blob formatRel Type BLOB Numrique Description BLOB duquel extraire la valeur de type Rel 0 Format rel natif 1 Format rel tendu 2 Format rel double Macintosh 3 Format rel double Windows Offset (en octets) dans le BLOB Nouvel offset aprs lecture Valeur de type Rel

offset

Variable

Rsultat

Numrique

Description La fonction BLOB vers reel retourne une valeur de type Rel (ou Numrique) lue dans le BLOB blob. Le paramtre formatRel fixe le format interne et l'ordre des octets ("byte ordering") de la valeur de type Rel lire. Vous passez une des constantes fournies par 4e Dimension : Constante Format rel Format rel Format rel Format rel natif tendu double Macintosh double PC Type Entier Entier Entier Entier long long long long Valeur 0 1 2 3

Note sur l'indpendance de plate-forme : Si vous changez des BLOBs entre les platesformes Macintosh et PC, il vous incombe de traiter les conversions d'octets ("byte swapping") lorsque vous utilisez cette fonction. Si vous ne passez pas de variable dans le paramtre optionnel offset, les 8 ou 10 premiers octets de BLOB sont lus. Si vous passez une variable dans le paramtre optionnel offset, la valeur relle est lue depuis l'offset exprim en octets ( partir de zro) du BLOB. Note : Vous devez passer un offset compris entre 0 (zro) et la taille du BLOB moins 8 ou 10. Sinon, une erreur -111 est gnre.

4e Dimension - Langage

193

Aprs l'excution de la commande, la variable offset est incrmente du nombre d'octets qui a t lu. Vous pouvez donc rutiliser la mme variable avec une autre commande de lecture de BLOBs pour lire une autre valeur place juste aprs celle que vous venez de lire. Exemple L'exemple suivant lit 20 valeurs relles dans un BLOB partir de l'offset 0x200 : $vlOffset:=0x200 Boucle ($viBoucle;0;19) $vrValeur:=BLOB vers reel(vxUnBlob;Format rel double PC;$vlOffset) ` Faire quelque chose avec $vrValeur Fin de boucle Rfrence BLOB vers entier, BLOB vers entier long, BLOB vers texte, ENTIER LONG VERS BLOB, ENTIER VERS BLOB, REEL VERS BLOB, TEXTE VERS BLOB.

194

4e Dimension - Langage

BLOB vers texte

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

BLOB vers texte (blob; formatTexte{; offset{; longueurTexte}}) Chane Paramtre blob formatTexte Type BLOB Numrique Description BLOB duquel extraire la valeur de type Texte 0 Chane en C 1 Chane pascal 2 Texte avec longueur 3 Texte sans longueur Offset (en octets) dans le BLOB Nouvel offset aprs la lecture Nombre de caractres lire Valeur de type Texte

offset longueurTexte Rsultat

Variable Numrique Chane

Description La fonction BLOB vers texte retourne une valeur de type Texte lue dans le BLOB blob. Le paramtre formatTexte dfinit le format interne de la valeur de type Texte crire. Vous passez une des constantes fournies par 4e Dimension : Constante Chane en C Chane pascal Texte avec longueur Texte sans longueur Type Entier Entier Entier Entier long long long long Valeur 0 1 2 3

Le tableau suivant dcrit chacun de ces formats : Format texte Chane en C Description & Exemples Le texte se termine par un caractre NULL (code ASCII $00). ""

$00 $48 65 6C 6C 6F 20 57 6F 72 6C 64 21 00

"Hello World!" Chane pascal

Le texte est prcd d'un octet de longueur. ""

$00 $0C 48 65 6C 6C 6F 20 57 6F 72 6C 64 21

"Hello World!"

4e Dimension - Langage

195

Texte avec longueur

Le texte est prcd de 2 octets de longueur. ""

$00 00 $00 0C 48 65 6C 6C 6F 20 57 6F 72 6C 64 21

"Hello World!" Texte sans longueur

Le texte est compos seulement de ses caractres.

Pas de valeurs "Hello World!" $48 65 6C 6C 6F 20 57 6F 72 6C 64 21


"" ATTENTION : Le nombre de caractres lire est dtermin par le paramtre formatTexte, SAUF dans le cas du dernier format, Texte sans longueur, pour lequel vous devez spcifier le nombre de caractres lire dans le paramtre longueurTexte. Pour les autres formats, longueurTexte est ignor et vous pouvez l'omettre. Notez bien que les variables de type Texte peuvent contenir jusqu' 32 000 caractres et que les variables de type Alpha peuvent contenir un nombre de caractres fixe, dfini lors de leur dclaration (255 caractres maximum). Si vous tentez de lire plus de valeurs que la variable ne peut en contenir, 4D tronque le rsultat de la commande. Si vous ne passez pas de variable dans le paramtre optionnel offset, les premiers octets de BLOB sont lus, en fonction de la valeur passe dans formatTexte. Notez que vous devez passer une variable dans le paramtre offset lorsque vous lisez une valeur de type Texte sans longueur. Si vous passez une variable dans le paramtre optionnel offset, la valeur de type Texte est lue depuis l'offset exprim en octets ( partir de zro) du BLOB. Note : Vous devez passer un offset compris entre 0 (zro) et la taille du BLOB moins la taille du texte extraire. Sinon, le rsultat de la fonction ne sera pas exploitable.

196

4e Dimension - Langage

Exemple L'exemple suivant lit une ressource type MacOS imaginaire dont le format interne est identique celui des ressources 'STR#' : LIRE RESSOURCE ("ABCD";viRfRes;vxDonnesRes;viMonFichierRes) vlTaille:=Taille BLOB(vxDonnesRes) Si (vlTaille>0) ` La ressource commence par un entier sur 2 octets qui spcifie le nombre de ` chanes vlOffset:=0 viNbSaisies:=BLOB vers entier(vxDonnesRes;Ordre octets Macintosh;vlOffset) ` Ensuite la ressource contient des chanes Pascal concatnes sans octet de ` ralignement Boucle (viSaisie;1;viNbSaisies) Si (vlOffset<vlTaille) vaSaisie:=BLOB vers texte(vxDonnesRes;Chane pascal;vlOffset) ` Faire quelque chose avec vaSaisie Sinon ` Les donnes de la ressource sont invalides, sortir de la boucle viSaisie:=viNbSaisies+1 Fin de si Fin de boucle Fin de si Rfrence BLOB vers entier, BLOB vers entier long, BLOB vers reel, ENTIER LONG VERS BLOB, ENTIER VERS BLOB, REEL VERS BLOB, TEXTE VERS BLOB.

4e Dimension - Langage

197

INSERER DANS BLOB

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

INSERER DANS BLOB (blob; offset; nombre{; dfaut}) Paramtre blob offset nombre dfaut Type BLOB Variable Numrique Numrique Description BLOB dans lequel insrer les octets Position de dbut d'insertion des octets Nombre d'octets insrer Valeur d'octet par dfaut (0x00..0xFF) 0x00 si ce paramtre est omis

Description INSERER DANS BLOB insre le nombre d'octets spcifi par nombre dans le BLOB blob la position spcifie par offset. La taille du BLOB est augmente de nombre d'octets. Si vous ne passez pas le paramtre optionnel dfaut, la valeur des octets insrs dans le BLOB est fixe 0x00. Sinon, les octets prennent la valeur passe dans dfaut (modulo 256 0..255). Vous passez dans la variable du paramtre offset la position (relative l'origine du BLOB) de l'insertion. Rfrence SUPPRIMER DANS BLOB.

198

4e Dimension - Langage

SUPPRIMER DANS BLOB

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER DANS BLOB (blob; offset; nombre) Paramtre blob offset nombre Type BLOB Numrique Numrique Description BLOB duquel supprimer des octets Offset partir duquel supprimer les octets Nombre d'octets supprimer

Description SUPPRIMER DANS BLOB supprime le nombre d'octets spcifi par nombre du BLOB blob partir de la position dfinie par offset (exprime de manire relative l'origine du BLOB). La taille du BLOB est rduite de nombre d'octets. Rfrence INSERER DANS BLOB.

4e Dimension - Langage

199

COPIER BLOB

BLOB version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

COPIER BLOB (srcBLOB; dstBLOB; srcOffset; dstOffset; nombre) Paramtre srcBLOB dstBLOB srcOffset dstOffset nombre Type BLOB BLOB Variable Variable Numrique Description BLOB source BLOB de destination Position dans la source pour la copie Position dans la destination pour la copie Nombre d'octets copier

Description COPIER BLOB copie le nombre d'octets spcifi par nombre du BLOB srcBLOB vers le BLOB dstBLOB. La copie commence la position (exprime par rapport l'origine du BLOB source) dfinie par srcOffset et est place partir de la position (exprime par rapport l'origine du BLOB de destination) dfinie par dstOffset. Notez que le BLOB de destination peut tre redimensionn si ncessaire. Rfrence INSERER DANS BLOB, SUPPRIMER DANS BLOB.

200

4e Dimension - Langage

CRYPTER BLOB

BLOB version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CRYPTER BLOB (aCrypter; clPrivEmetteur{; clPubRcepteur}) Paramtre aCrypter clPrivEmetteur clPubRcepteur Type BLOB BLOB BLOB Description Donnes crypter Donnes cryptes Cl prive de lmetteur Cl publique du rcepteur

Description La commande CRYPTER BLOB permet de crypter le contenu du BLOB aCrypter laide de la cl prive de lmetteur clPrivEmetteur ainsi que, optionnellement, de la cl publique du rcepteur clPubRcepteur. Pour obtenir une paire de cls de cryptage (cl publique et cl prive), utilisez la routine GENERER CLES CRYPTAGE, place dans le thme Protocole scuris. Note : La commande CRYPTER BLOB exploite lalgorithme et les fonctions de cryptage du protocole SSL. Par consquent, pour pouvoir utiliser cette commande, vous devez veiller ce que les composants ncessaires au fonctionnement du protocole SSL soient installs sur la machine mme si vous ne souhaitez pas utiliser SSL dans le cadre de connexions un serveur Web 4D. Pour plus d'informations, reportez-vous la section Services Web, Utiliser le protocole SSL. Lutilisation dune seule cl pour le cryptage (cl prive de lmetteur) garantit limpossibilit pour toute personne ne disposant pas de la cl publique de lire les donnes. Elle garantit galement que cest bien lmetteur qui a crypt les donnes. Lutilisation dune paire de cls pour le cryptage (cl prive de lmetteur + cl publique du rcepteur) garantit en outre quun seul rcepteur pourra lire les donnes. Le format interne des BLOBs contenant des cls est le PKCS. Ce format standard, multiplate-forme, permet lchange ou la manipulation des cls par simple copier-coller dans un Email ou un fichier texte. Aprs lexcution de la commande, le BLOB aCrypter contient les donnes cryptes. Ces donnes ne pourront tre dcryptes quavec la commande DECRYPTER BLOB, laquelle la cl publique de lmetteur sera passe en paramtre. En outre, si la cl publique (optionnelle) du rcepteur avait t utilise pour le cryptage, la cl prive du rcepteur sera galement ncessaire pour le dcryptage.

4e Dimension - Langage

201

Principe du cryptage cls publiques/prives pour lchange de messages entre deux individus, Alice et Bob :
Cl prive dAlice Message en clair Cl publique de Bob Cl publique dAlice Cl prive de Bob Message en clair

Alice

Message Crypt

Transmission

Message Crypt

Bob

Alice

Message en clair Message Crypt

Transmission

Message Crypt

Message en clair

Bob

Cl prive dAlice Cls optionnelles

Cl publique de Bob

Cl publique dAlice

Cl prive de Bob

Note : Lalgorithme de cryptage comporte une fonction de vrification dintgrit (checksum), afin dempcher toute modification malveillante ou accidentelle du contenu du BLOB. Par consquent, un BLOB crypt ne doit pas tre modifi, sous peine de ne pas pouvoir tre dcrypt. Optimisation des commandes de cryptage Le cryptage des donnes ralentit lexcution de lapplication, en particulier si une paire de cls est utilise. Deux types doptimisations sont toutefois possibles : Suivant la quantit de mmoire disponible, la commande sexcute en mode synchrone ou asynchrone. Le mode asynchrone est plus rapide, car il ne bloque pas les autres process. Ce mode est automatiquement utilis si la mmoire disponible est au moins gale 2 fois la taille de la source crypter. Dans le cas contraire, pour des raisons de scurit, le mode synchrone est utilis. Ce mode est plus lent car les autres process sont bloqus. Dans le cas de BLOBs volumineux, lastuce consiste crypter uniquement une partie dtermine et sensible du BLOB, afin de rduire la taille des donnes traiter et donc le temps dexcution.

202

4e Dimension - Langage

Exemples Utilisation dune seule cl Une socit veut garantir la confidentialit dinformations stockes dans une base 4D. Elle doit rgulirement envoyer ces donnes ses filiales, par exemple sous la forme de fichiers via Internet. 1. La socit commence par gnrer une paire de cls laide de la commande GENERER CLES CRYPTAGE. `Mthode GENERE_CLES_TXT C_BLOB($BclPublique; $BclPrive) GENERER CLES CRYPTAGE($BclPrive;$BclPublique) BLOB VERS DOCUMENT("clPublique.txt"; $BclPublique) BLOB VERS DOCUMENT("clPrive.txt"; $BclPrive) 2. La socit conserve la cl prive, et remet chaque filiale une copie du document contenant la cl publique. Il faut, bien entendu, que cette transmission seffectue dune faon sre, par exemple par la copie sur une disquette donne physiquement aux filiales. 3. Par la suite, la socit copie les informations confidentielles (stockes par exemple dans un champ texte) dans des BLOBs et les crypte avec sa cl prive : `Mthode CRYPTER_INFOS C_BLOB($vbCrypt;$vbclPrive) C_TEXTE($vtCrypter) $vtCrypter:=[Confidentiel]Info VARIABLE VERS BLOB ($vtCrypter;$vbCrypt) DOCUMENT VERS BLOB("clPrive.txt"; $vbclPrive) Si (OK=1) CRYPTER BLOB ($vbCrypt; $vbclPrive) BLOB VERS DOCUMENT ("MiseAJour.txt";$vbCrypt) Fin de si

4. Le fichier de mise jour peut alors tre envoy aux filiales (mme en passant par un canal non scuris comme Internet). Si un tiers intercepte le fichier crypt, il sera dans lincapacit de le dcrypter sans la cl publique. 5. Chaque filiale peut, quant elle, dcrypter le document laide de la cl publique : `Mthode DECRYPTER_INFOS C_BLOB($vbCrypt;$vbclPublique) C_TEXTE($vtDcrypt) C_HEURE ($vhRefDoc) ALERTE ("Veuillez slectionner le document crypt.") $vhRefDoc:=Ouvrir document("") `Slection du fichier MiseAJour.txt Si (OK=1) FERMER DOCUMENT($vhRefDoc) DOCUMENT VERS BLOB(Document;$vbCrypt) 4e Dimension - Langage 203

DOCUMENT VERS BLOB("clPublique.txt"; $vbclPublique) Si (OK=1) DECRYPTER BLOB ($vbCrypt; $vbclPublique) BLOB VERS VARIABLE($vbCrypt; $vtDcrypt) CREER ENREGISTREMENT ([Confidentiel]) [Confidentiel]Info:=$vtDcrypt STOCKER ENREGISTREMENT([Confidentiel]) Fin de si Fin de si

Utilisation de deux cls Une socit souhaite utiliser un systme dchange de donnes via Internet dans lequel chaque filiale reoit des informations confidentielles mais envoie galement ses propres informations la maison-mre. Ce systme a donc les impratifs suivants : - Seul le destinataire doit pouvoir lire un message, - On doit avoir la garantie que le message provient bien de lexpditeur. 1. La maison-mre ainsi que chaque filiale gnrent leurs propres paires de cls ( laide de la mthode GENERE_CLES_TXT). `Mthode GENERE_CLES_TXT C_BLOB($BclPublique; $BclPrive) GENERER CLES CRYPTAGE($BclPrive;$BclPublique) BLOB VERS DOCUMENT("clPublique.txt"; $BclPublique) BLOB VERS DOCUMENT("clPrive.txt"; $BclPrive) 2. Chacune garde sa cl prive. Chaque filiale envoie sa cl publique la maison-mre, qui elle-mme envoie sa cl publique chaque filiale. Cette transmission ne doit pas ncessairement tre effectue par un canal protg, car la seule dtention de la cl publique dans ce cas sera insuffisante pour dcrypter une information. 3. Pour crypter une information envoyer, une filiale ou la maison-mre excute la mthode CRYPTER_INFOS_2 qui utilise la cl prive de lmetteur et la cl publique du destinataire pour crypter les donnes : `Mthode CRYPTER_INFOS_2 C_BLOB($vbCrypt;$vbclPrive;$vbclPublique) C_TEXTE($vtCrypter) C_HEURE ($vhRefDoc) $vtCrypter:=[Confidentiel]Info VARIABLE VERS BLOB ($vtCrypter;$vbCrypt) ` On charge sa propre cl prive... DOCUMENT VERS BLOB("clPrive.txt"; $vbclPrive) Si (OK=1) ` ...et la cl publique du rcepteur ALERTE ("Veuillez slectionner la cl publique du destinataire.") $vhRefDoc:=Ouvrir document("") `Slection de la cl publique charger 204 4e Dimension - Langage

Si (OK=1) FERMER DOCUMENT($vhRefDoc) DOCUMENT VERS BLOB(Document;$vbclPublique) `Cryptage du BLOB avec les deux cls en paramtres CRYPTER BLOB ($vbCrypt; $vbclPrive; $vbclPublique) BLOB VERS DOCUMENT ("MiseAJour.txt";$vbCrypt) Fin de si Fin de si

4. Le fichier crypt peut alors tre envoy au destinataire via Internet. Si un tiers lintercepte, il sera dans lincapacit de le dcrypter, mme en connaissant les cls publiques, car il lui manquera la cl prive du destinataire. 5. Chaque destinataire peut, quant lui, dcrypter le document reu, en utilisant sa cl prive et la cl publique de lmetteur : `Mthode DECRYPTER_INFOS_2 C_BLOB($vbCrypt;$vbclPublique;$vbclPrive) C_TEXTE($vtDcrypt) C_HEURE ($vhRefDoc) ALERTE ("Veuillez slectionner le document crypt.") $vhRefDoc:=Ouvrir document("") `Slection du fichier MiseAJour.txt Si (OK=1) FERMER DOCUMENT($vhRefDoc) DOCUMENT VERS BLOB(Document;$vbCrypt) `On charge sa propre cl prive DOCUMENT VERS BLOB("clPrive.txt"; $vbclPrive) Si (OK=1) ` ...et la cl publique de lmetteur ALERTE ("Veuillez slectionner la cl publique de lenvoyeur.") $vhRefDoc:=Ouvrir document("") `Slection de la cl publique Si (OK=1) FERMER DOCUMENT($vhRefDoc) DOCUMENT VERS BLOB(Document;$vbclPublique) `Dcryptage du BLOB avec les deux cls en paramtres DECRYPTER BLOB ($vbCrypt; $vbclPublique;$vbclPrive) BLOB VERS VARIABLE($vbCrypt; $vtDcrypt) CREER ENREGISTREMENT ([Confidentiel]) [Confidentiel]Info:=$vtDcrypt STOCKER ENREGISTREMENT([Confidentiel]) Fin de si Fin de si Fin de si

Rfrence DECRYPTER BLOB, GENERER CLES CRYPTAGE.

4e Dimension - Langage

205

DECRYPTER BLOB

BLOB version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DECRYPTER BLOB (aDcrypter; clPubEmetteur{; clPrivRcepteur}) Paramtre aDcrypter clPubEmetteur clPrivRcepteur Type BLOB BLOB BLOB Description Donnes dcrypter Donnes dcryptes Cl publique de lmetteur Cl prive du rcepteur

Description La commande DECRYPTER BLOB permet de dcrypter le contenu du BLOB aDcrypter laide de la cl publique de lmetteur clPubEmetteur ainsi que, optionnellement, de la cl prive du rcepteur clPrivRcepteur. Vous passez dans le paramtre clPubEmetteur le BLOB contenant la cl publique de lmetteur. Cette cl a t gnre par lmetteur ( laide de la commande GENERER CLES CRYPTAGE), quil doit ensuite transmettre au rcepteur. Le paramtre optionnel clPrivRcepteur doit recevoir la cl prive du rcepteur. Dans ce cas, le rcepteur doit galement avoir gnr une paire de cls de cryptage laide de GENERER CLES CRYPTAGE et transmis sa cl publique lmetteur. Le systme de cryptage deux cls permet de garantir que seul lmetteur peut avoir crypt le message et seul le rcepteur peut le dcrypter. Pour plus dinformations sur le systme de cryptage deux cls, reportez-vous la description de la commande CRYPTER BLOB. La commande DECRYPTER BLOB comporte une fonction de vrification dintgrit (checksum), afin dempcher toute modification malveillante ou accidentelle du contenu du BLOB. Si le BLOB crypt est endommag ou modifi, la commande ne fera rien et retournera une erreur. Exemple Reportez-vous aux exemples de la commande CRYPTER BLOB. Rfrence CRYPTER BLOB, GENERER CLES CRYPTAGE.

206

4e Dimension - Langage

5 ________________________ Boolens

4e Dimension - Langage

207

208

4e Dimension - Langage

Commandes du thme Boolens

Boolens version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les fonctions boolennes de 4D sont utilises pour les oprations de type boolennes, c'est--dire ne traitant que deux valeurs, VRAI ou FAUX. Ces fonctions sont les suivantes : Vrai Faux Non L'exemple suivant retourne Vrai dans la variable monBoolen si l'utilisateur a cliqu sur le bouton monBouton et Faux s'il n'a pas cliqu dessus. Lorsqu'un bouton reoit un clic, la variable du bouton prend la valeur 1. Dans cet exemple, la valeur de la variable boolenne est base sur la valeur d'un bouton. Si (monBouton=1) ` Si le bouton a reu un clic monBoolen:=Vrai ` monBoolen prend la valeur Vrai Sinon ` Si le bouton n'a pas reu de clic, monBoolen:=Faux ` monBoolen prend la valeur Faux Fin de si L'exemple ci-dessus peut tre simplifi et crit en une seule ligne, plus efficace : monBoolen:=(monBouton=1) Rfrence Faux, Non, Oprateurs logiques, Vrai.

4e Dimension - Langage

209

Vrai

Boolens version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vrai Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Vrai

Description Vrai retourne la valeur boolenne Vrai. Exemple L'exemple suivant met la variable vbOptions Vrai :

vbOptions:=Vrai

Rfrence Faux, Non.

210

4e Dimension - Langage

Faux

Boolens version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Faux Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Faux

Description Faux retourne la valeur boolenne Faux. Exemple L'exemple suivant met la variable vbOptions Faux :

vbOptions:=Faux

Rfrence Non, Vrai.

4e Dimension - Langage

211

Non

Boolens version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Non (boolen) Boolen Paramtre boolen Rsultat Type Boolen Boolen Description Valeur boolenne inverser Inverse de boolen

Description La fonction Non retourne la valeur inverse de boolen, changeant un Vrai en Faux ou un Faux en Vrai. Exemples Dans l'exemple suivant, la valeur Vrai est assigne une variable. Cette valeur est alors modifie en Faux puis de nouveau en Vrai : Rsultat:= Vrai ` Rsultat prend la valeur VRAI Rsultat:= Non (Rsultat) ` Rsultat prend la valeur FAUX Rsultat:= Non (Rsultat) ` Rsultat prend la valeur VRAI Rfrence Faux, Vrai.

212

4e Dimension - Langage

6 ________________________ Chanes de caractres

4e Dimension - Langage

213

214

4e Dimension - Langage

Chaine

Chanes de caractres version 3

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Chaine (expression{; format}) Alpha Paramtre expression format Rsultat Type Alpha | Num Alpha Description Expression convertir en chane (peut tre de type Numrique, Entier, Entier long, Date ou Heure) Format d'affichage expression convertie en chane alphanumrique

Description La commande Chaine retourne sous forme de chane alphanumrique l'expression de type numrique, Date ou Heure, que vous avez passe dans le paramtre expression. Si vous ne passez pas le paramtre optionnel format, la chane est retourne dans le format par dfaut du type de donnes correspondant. Si vous passez le paramtre format, vous pouvez dfinir suivant vos besoins le formatage de la chane retourne. Expressions numriques Si expression est du type numrique (Rel, Entier, Entier long), vous pouvez passer le paramtre optionnel de formatage de la chane. Voici quelques exemples : Exemple Chaine(2^15) `Utiliser format dfaut Chaine(2^15;"### ##0 habitants") Chaine(1/3;"##0,00000") Chaine(1/3) `Utiliser format dfaut Chaine(Arctan(1)*4) Chaine(Arctan(1)*4;"##0,00") Chaine(-1;"&x") Chaine(-1;"&$") Chaine(0 ?+ 7;"&x") Chaine(0 ?+ 7;"&$") Chaine(0 ?+ 14;"&x") Chaine(0 ?+ 14;"&$") Chaine(Num(1=1);"Vrai;;Faux") Chaine(Num(1=2);"Vrai;;Faux") Rsultat 32768 (Format par dfaut) 32 768 habitants 0,33333 0,3333333333333333 (Format dfaut) 3,1415926535897931 (Format dfaut) 3,14 0xFFFFFFFF $FFFFFFFF 0x80 $80 0x4000 $4000 Vrai Faux

4e Dimension - Langage

215

Le format est dfini de la mme manire que pour un champ numrique dans un formulaire. Pour plus d'informations sur le formatage des numriques, reportez-vous au manuel Mode Structure de 4e Dimension. Vous pouvez galement passer le nom d'un style personnalis dans format. Dans ce cas, le nom du style doit tre prcd du caractre |. Expressions de type Date Si expression est de type Date, la chane est retourne dans le format par dfaut du pays (par exemple, JJ-MM-AA pour la version franaise). Vous pouvez passer une valeur dans le paramtre format, en fonction du tableau ci-dessous : Numro 1 2 3 4 5 6 7 Format Court Abrg Long Spcial Jour Mois Anne Abrg Jour Mois Anne Spcial forc Exemple 06-12-96 ven 6 dc 1996 vendredi 6 dcembre 1996 06-12-96 (mais 06-12-1896 ou 06-12-2096) 6 dcembre 1996 6 dc 1996 06-12-1996

4D fournit les constantes prdfinies suivantes : Constante Format court Format abrg Format long Format spcial Jour Mois Anne Abrg Jour Mois Anne Spcial forc Type Entier Entier Entier Entier Entier Entier Entier long long long long long long long Valeur 1 2 3 4 5 6 7

Voici quelques exemples (en supposant que nous soyons mardi 4 mars 1997) : $vsRsultat:=Chaine(Date du jour) ` $vsRsultat prend la valeur "04-03-97" $vsRsultat:=Chaine(Date du jour;Jour Mois Anne) ` $vsRsultat prend la valeur "4 Mars 1997"

216

4e Dimension - Langage

Expressions de type Heure Si expression est de type Heure, la chane est retourne dans le format par dfaut hh:mm:ss. Vous pouvez passer une valeur dans le paramtre format, en fonction du tableau cidessous : Numro 1 2 3 4 5 Format hh:mm:ss hh:mm heure minute seconde heure minute h:mm matin/aprs-midi Exemple 01:02:03 01:02 1 heure 2 minutes 3 secondes 1 heure 2 minutes 1:02 du matin

4D fournit les constantes suivantes : Constante h mn s h mn Heure Minute Seconde Heure Minute h mn Matin Aprs Midi Type Entier Entier Entier Entier Entier long long long long long Valeur 1 2 3 4 5

Voici quelques exemples (en supposant qu'il soit 17h30 et 45 secondes) :


$vsRsultat:=Chaine(Heure courante) ` $vsRsultat prend la valeur "17:30:45" $vsRsultat:=Chaine(Heure courante;Heure Minute Seconde) ` $vsRsultat prend la valeur "17 heures 30 minutes 45 secondes"

Rfrence Chaine heure, Date, Num.

4e Dimension - Langage

217

Num

Chanes de caractres version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Num (expression) Numrique Paramtre expression Rsultat Type Alpha | Boolen Numrique Description Chane convertir en numrique ou Boolen convertir en 0 ou 1 Valeur numrique d'une chane ou d'un boolen

Description La fonction Num retourne sous forme de numrique l'expression de type Alpha ou Boolen que vous avez passe dans le paramtre expression. Expressions de type Alpha Si expression ne contient que des caractres alphabtiques, Num retourne zro. Si expression contient des caractres alphabtiques et des caractres numriques, Num ignore les caractres alphabtiques. Ainsi, Num transformera la chane "a1b2c3" en nombre 123. Note : Seuls les 32 premiers caractres de expression sont pris en compte. Il existe trois caractres rservs que Num traite de manire particulire. Il s'agit du spateur dcimal (c'est--dire la virgule (,) dans une version franaise), du tiret (-) et du e (ou E). Ils seront interprts en tant que caractres de formatage des nombres : Le sparateur dcimal est interprt en tant que tel et doit tre inclus dans une chane de caractres numriques. Le tiret dfinit un nombre ou un exposant ngatif (signe moins). Le tiret doit tre plac devant tout caractre numrique ngatif ou derrire le e pour un exposant. Si le tiret est inclus dans une chane numrique, la chane est considre comme invalide et la fonction Num retourne zro. Par exemple, Num("123-456") retourne 0, mais Num("-9") retourne -9. Le e ou E dsigne tout caractre numrique se trouvant sa droite comme tant la puissance d'un exposant. Le e doit tre inclus dans une chane numrique. Ainsi, Num ("123e2") retourne 1,23. Expressions de type Boolen Si vous passez une expression boolenne dans le paramtre expression, Num retourne 1 si expression est VRAI, sinon Num retourne 0.

218

4e Dimension - Langage

Exemples (1) L'exemple suivant illustre la manire dont Num fonctionne lorsqu'un argument numrique lui est pass. A chaque ligne, un numrique est assign la variable vRsultat. Les commentaires dcrivent les rsultats :

vRsultat vRsultat vRsultat vRsultat vRsultat vRsultat

:= := := := := :=

Num Num Num Num Num Num

("ABCD") ` vRsultat vaut 0 ("A1B2C3") ` vRsultat vaut 123 ("123") ` vRsultat vaut 123 ("123,4") ` vRsultat vaut 123,4 ("123") ` vRsultat vaut 123 ("123e2") ` vRsultat vaut 12300

(2) Dans l'exemple suivant, [Client]Dette est compar la valeur 5000 (francs). La fonction Num applique cette comparaison retourne 0 ou 1. La multiplication d'une chane par 0 ou 1 retourne soit la chane, soit une chane vide. En dfinitive, le champ [Client]Risque reoit la valeur Acceptable ou Inacceptable : ` Si le client a des dettes infrieures 5000, le risque est acceptable. ` Si le client a des dettes suprieures 5000, le risque est inacceptable. [Client]Risque:=("Acceptable"* Num([Client]Dettes < 5000))+("Inacceptable" * Num([Client]Dettes >= 5000))

Rfrence Chaine, Oprateurs logiques, Oprateurs sur les chanes.

4e Dimension - Langage

219

Position

Chanes de caractres version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Position (Chercher; chane) Numrique Paramtre Chercher chane Rsultat Type Alpha Alpha Numrique Description Chane rechercher Chane dans laquelle effectuer la recherche Position de la premire occurrence de Chercher

Description Position retourne la position de la premire occurrence de Chercher dans chane. Si chane ne contient pas Chercher, la fonction retourne zro (0). Si Position trouve une occurrence de Chercher, la fonction retourne la position du premier caractre de cette occurrence dans chane. Si vous demandez la position d'une chane vide l'intrieur d'une chane vide, Position retourne zro (0). Attention : Vous ne pouvez pas utiliser le caractre joker (@) avec Position. Si, par exemple, vous passez "abc@" dans Chercher, la fonction recherchera effectivement la chane "abc@" et non pas "abc suivi de toute valeur". Exemple L'exemple suivant illustre l'utilisation de Position. Les rsultats sont assigns la variable vRsultat. Les commentaires fournissent la valeur de vRsultat :

vRsultat := Position ("ll"; "Billard") ` vRsultat prend la valeur 3 ` Position de la premire occurrence de vText1 dans vText2 vRsultat := Position (vText1; vText2)

Rfrence Oprateurs de comparaison, Sous chaine.

220

4e Dimension - Langage

Sous chaine

Chanes de caractres version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Sous chaine (source; PartirDe{; nbCars}) Alpha Paramtre source PartirDe nbCars Rsultat Type Alpha Numrique Numrique Alpha Description Chane de laquelle extraire une sous-chane Position du premier caractre Nombre de caractres extraire Sous-chane de source

Description La fonction Sous chaine retourne la partie de source dlimite par les paramtres PartirDe et nbCars. Le paramtre PartirDe indique le premier caractre de la chane retourner, et nbCars dfinit le nombre de caractres retourner. Si nbCars n'est pas dfini ou si le total de PartirDe plus nbCars est suprieur au nombre de caractres de la chane source, Sous chaine retourne tous les caractres de la chane partir du caractre spcifi par PartirDe. Si PartirDe est suprieur au nombre de caractres de la chane, Sous chaine retourne une chane vide (""). Exemples (1) L'exemple suivant illustre l'utilisation de Sous chaine. Les rsultats sont assigns la variable vRsultat. Les commentaires fournissent la valeur de vRsultat : vRsultat := Sous chaine ("08/04/62"; 4; 2) ` vRsultat prend la valeur "04" vRsultat := Sous chaine ("Important"; 1; 6) ` vRsultat prend la valeur "Import" vRsultat := Sous chaine (var; 2) ` vRsultat retourne tous les caractres sauf le premier

4e Dimension - Langage

221

(2) La mthode projet suivante ajoute au tableau de type texte ou alpha, dont le pointeur est pass en second paramtre, les paragraphes tirs du texte pass en premier paramtre : ` EXTRAIRE PARAGRAPHES ` EXTRAIRE PARAGRAPHES ( Texte ; Pointeur ) ` EXTRAIRE PARAGRAPHES ( Texte tudier ; -> Tableau de paragraphes ) C_TEXTE ($1) C_POINTEUR ($2) $vlElem:=Taille tableau($2->) Repeter $vlElem:=$vlElem+1 INSERER LIGNES($2->;$vlElem) $vlPos:=Position(Caractere(Retour chariot);$1) Si ($vlPos>0) $2->{$vlElem}:=Sous chaine($1;1;$vlPos-1) $1:=Sous chaine($1;$vlPos+1) Sinon $2->{$vlElem}:=$1 Fin de si Jusque ($1="") Rfrence Position.

222

4e Dimension - Langage

Longueur

Chanes de caractres version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Longueur (chane) Numrique Paramtre chane Rsultat Type Alpha Numrique Description Chane dont vous voulez connatre la longueur Nombre de caractres de chane

Description Longueur vous permet d'obtenir la longueur de chane. Longueur retourne le nombre de caractres alphanumriques contenus dans chane. Note : Le test Si(vTexte="") quivaut au test Si(Longueur(vTexte)=0). Exemple L'exemple suivant illustre l'utilisation de Longueur. Les valeurs retournes sont assignes la variable vRsultat. Les commentaires fournissent la valeur de vRsultat :

vRsultat := Longueur ("Topaze") ` vRsultat prend la valeur 6 vRsultat := Longueur ("Citoyen") ` vRsultat prend la valeur 7

4e Dimension - Langage

223

Code ascii

Chanes de caractres version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Code ascii (caractre) Numrique Paramtre caractre Rsultat Type Alpha Numrique Description Caractre dont vous voulez obtenir le code ASCII Code ASCII de caractre

Description La commande Code ascii retourne le code ASCII de caractre. Si la chane caractre comporte plus d'un caractre, Code ascii retourne uniquement le code du premier caractre. La fonction Caractere est l'inverse de Code ascii. Elle retourne le caractre dsign par un code ASCII. Important : Dans 4D, toutes les valeurs de texte, champs ou variables, utilisent la table ASCII de MacOS, sur les plates-formes Macintosh et Windows si aucune conversion vers une autre table ASCII n'a t effectue. Pour plus d'informations sur ce point, reportezvous la section Codes ASCII. Exemples (1) Les caractres majuscules et minuscules ne sont pas diffrencis lors d'une comparaison ou d'une recherche. Vous pouvez utiliser la fonction Code ascii si vous souhaitez tablir une distinction entre les caractres majuscules et les minuscules. En effet, cette ligne retourne VRAI : ("A" = "a") En revanche, cette ligne retourne FAUX :

(Code ascii ("A") = Code ascii ("a"))

(2) L'exemple suivant retourne la valeur ASCII du premier caractre de la chane "ABC" : RcupAsc := Code ascii ("ABC") ` RcupAsc prend la valeur 65, le code ASCII de A

224

4e Dimension - Langage

(3) Le code suivant : Boucle($vlCar;1;Longueur(vtText)) Au cas ou : (vtText$vlCar=Caractere(Retour chariot)) ` Faire quelque chose : (vtText$vlCar=Caractere(Tab)) ` Faire autre chose : (...) ` ... Fin de cas Fin de boucle ... lorsqu'il est utilis de nombreuses fois avec des textes de taille importante, s'excutera plus vite, une fois compil, s'il est crit ainsi :

Boucle($vlCar;1;Longueur(vtText)) $vlAscii:=Code ascii(vtText$vlCar) Au cas ou : ($vlAscii=Retour chariot) ` Faire quelque chose : ($vlAscii=Tab) ` Faire autre chose : (...) ` ... Fin de cas Fin de boucle

... et ce, pour deux raisons principales : il ne rfrence un caractre qu'une seule fois par itration, et compare des entiers longs et non des chanes de caractres lorsqu'il teste la prsence de retours chariot et de tabulations. Nous vous conseillons d'employer cette technique lorsque vous travaillez avec des caractres ASCII standard tels que des Retours chariot et des Tabulations. Rfrence Caractere, Codes ASCII, Symboles d'indice de chane.

4e Dimension - Langage

225

Caractere

Chanes de caractres version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Caractere (codeASCII) Chane Paramtre codeASCII Rsultat Type Numrique Chane Description Code ASCII de 0 255 Caractre reprsent par codeASCII

Description La fonction Caractere retourne le caractre dont le code ASCII est codeASCII. Astuce : La fonction Caractere est gnralement utilise pour insrer des caractres qui ne peuvent tre saisis au clavier ou des caractres de contrle dans l'diteur de mthodes. Important : Dans 4D, toutes les valeurs de texte, champs ou variables, utilisent la table ASCII de MacOS, sur les plates-formes Macintosh et Windows si aucune conversion vers une autre table ASCII n'a t effectue. Pour plus d'informations sur ce point, reportezvous la section Codes ASCII. Exemple L'exemple suivant utilise la fonction Caractere pour insrer un retour chariot dans une bote de dialogue d'alerte afin de sparer deux lignes d'information :

ALERTE ("Employs : "+Chaine(Enregistrements dans table([Employs])) +Caractere (13)+"Cliquez sur OK pour continuer.")

Rfrence Code ascii, Codes ASCII, Symboles d'indice de chane.

226

4e Dimension - Langage

Symboles d'indice de chane

Chanes de caractres version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Introduction Les symboles d'indice de chane sont les suivants :

Ces symboles sont utiliss pour dsigner un caractre particulier dans une chane. Cette syntaxe vous permet de rfrencer un caractre dans un champ ou une variable de type Alpha ou Texte. Note : Sous MacOS, vous obtenez les deux premiers symboles en appuyant sur les touches Option+< et Option+>. Lorsque les symboles d'indice de chane sont placs gauche de l'oprateur d'affectation (:=), un caractre est affect la position rfrence dans la chane. Par exemple, en postulant que la chane vsNom n'est pas une chane vide, le code suivant passe le premier caractre de la chane vsNom en majuscule :

Si (vsNom#"") vsNom[[1]]:=Majusc(vsNom[[1]]) Fin de si

Lorsque les symboles d'indice de chane apparaissent dans une expression, ils retournent le caractre auquel ils font rfrence sous la forme d'une chane d'un caractre. En voici un exemple : ` L'exemple suivant teste si le dernier caractre de vtText est le caractre "@" Si (vtText # "") Si (Code ascii(Sous chaine(vtText;Longueur(vtText);1))=Arobase) ` ... Fin de si Fin de si

4e Dimension - Langage

227

` En utilisant la syntaxe des caractres d'indice de chane, vous cririez, ` plus simplement : Si (vtText # "") Si (Code ascii(vtText[[Longueur(vtText)]]=Arobase) ` ... Fin de si Fin de si

Note avance sur la rfrence des caractres invalides Lorsque vous utilisez les symboles d'indice de chane, il est de votre responsabilit de vous rfrer des caractres existant dans la chane, de la mme manire que pour les lments d'un tableau. Si, par exemple, vous rfrencez le 20e caractre d'une chane, cette chane doit contenir au moins 20 caractres. Ne pas respecter cette condition en mode interprt n'est pas signal comme une erreur par 4D. Ne pas respecter cette condition en mode compil (sans options) peut entraner une "corruption" de la mmoire, si, par exemple, vous crivez un caractre au-del de la fin d'une chane ou d'un texte. Ne pas respecter cette condition en mode compil est signal lorsque le contrle d'excution est activ. Si, par exemple, vous excutez le code suivant : ` Ne pas faire a ! vsToutTexte:="" vsToutTexte[[1]]:="A" L'alerte suivante s'affichera :

228

4e Dimension - Langage

Exemples La mthode projet suivante ajoute une lettre capitale tous les mots du texte pass en paramtre et retourne le texte modifi : ` Mthode projet de passage en capitale ` PasserEnCap ( Texte ) -> Texte ` PasserEnCap ( Texte source ) -> Texte avec des lettres capitales $0:=$1 $vlLen:=Longueur($0) Si ($vlLen>0) $0[[1]]:=Majusc($0[[1]]) Boucle ($vlChar;1;$vlLen-1) Si (Position($0[[$vlChar]];" !&()-{}:;<>?/,.=+*")>0) $0[[$vlChar+1]]:=Majusc($0[[$vlChar+1]]) Fin de si Fin de boucle Fin de si Une fois cette mthode place dans la base, la ligne : ALERTE(PasserEnCap ("Bonjour, mon nom est Jean Bon et je me prsente aux prsidentielles !")) ... affiche l'alerte suivante :

Rfrence Caractere, Code ascii, Codes ASCII.

4e Dimension - Langage

229

Majusc

Chanes de caractres version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Majusc (chane) Alpha Paramtre chane Rsultat Type Alpha Alpha Description Chane convertir en majuscules chane en majuscules

Description Majusc retourne une chane de caractres gale chane dont tous les caractres alphabtiques ont t convertis en majuscules. Exemples Reportez-vous l'exemple de Minusc. Rfrence Minusc.

230

4e Dimension - Langage

Minusc

Chanes de caractres version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Minusc (chane) Alpha Paramtre chane Rsultat Type Alpha Alpha Description Chane convertir en minuscules chane en minuscules

Description Minusc retourne une chane de caractres gale chane dont tous les caractres alphabtiques ont t convertis en minuscules. Exemple L'exemple suivant est une mthode projet qui met en majuscule (capitale) le premier caractre de la chane ou du texte qui lui est pass(e). Par exemple, Nom := Capitale ("jean") donnerait Nom la valeur "Jean" : ` Mthode projet Capitale ` Capitale ( Chane ) -> Chane ` Capitale ( Tout texte ou chane ) -> texte avec une lettre capitale

$0:=Minusc($1) Si (Longueur($0)>0) $01:=Majusc($01) Fin de si

Rfrence Majusc.

4e Dimension - Langage

231

Remplacer caracteres

Chanes de caractres version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Remplacer caracteres (source; nouveau; position) Alpha Paramtre source nouveau position Rsultat Type Alpha Alpha Numrique Alpha Description Chane de dpart Nouveaux caractres Position de dpart du remplacement Chane rsultante

Description Remplacer caracteres retourne une chane rsultant du remplacement des caractres, dans la chane source, partir de position, par la chane nouveau. Si nouveau est une chane vide (""), Remplacer caracteres retourne source inchang. Remplacer caracteres retourne toujours une chane de la mme longueur que source. Si position est infrieur ou suprieur la longueur de source, Remplacer caracteres retourne source. La fonction Remplacer caracteres est diffrente de Inserer chaine car elle remplace des caractres au lieu de les insrer. Exemples L'exemple suivant illustre l'utilisation de Remplacer caracteres. Les rsultats sont affects la variable vRsultat.

vRsultat := Remplacer caracteres ("Acme"; "CME"; 2) ` vRsultat est gal "ACME" ` vRsultat est gal "dcembre" vRsultat := Remplacer caracteres ("novembre";"dc"; 1)

Rfrence Inserer chaine, Remplacer chaine, Supprimer chaine.

232

4e Dimension - Langage

Inserer chaine

Chanes de caractres version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Inserer chaine (source; insertion; position) Alpha Paramtre source insertion position Rsultat Type Alpha Alpha Numrique Alpha Description Chane dans laquelle effectuer l'insertion Chane insrer dans source Position de l'insertion Chane rsultante

Description Inserer chaine insre la chane de caractres alphanumriques insertion dans la chane source partir de position et retourne la chane de caractres rsultante. La chane insertion est place avant le caractre dsign par position. Si insertion est une chane vide (""), Inserer chaine retourne source inchang. Si position est suprieur la longueur de source, insertion est ajout la fin de source. Si position est infrieur un (1), insertion est insr au dbut de source. Inserer chaine est diffrent de Remplacer caracteres puisque cette fonction insre des caractres au lieu de les remplacer. Exemples L'exemple suivant illustre l'utilisation de Inserer chaine. Les rsultats sont affects la variable vRsultat.

vRsultat := Inserer chaine ("L'arbre"; " vert"; 8) ` vRsultat est gal "L'arbre vert" vRsultat := Inserer chaine ("Tale"; "b"; 3) ` vRsultat est gal "Table" vRsultat := Inserer chaine ("Indention"; "ta"; 6) ` vRsultat est gal "Indentation"

Rfrence Remplacer caracteres, Remplacer chaine, Supprimer chaine.

4e Dimension - Langage

233

Supprimer chaine

Chanes de caractres version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Supprimer chaine (source; position; nombreCar) Alpha Paramtre source position nombreCar Rsultat Type Alpha Numrique Numrique Alpha Description Chane de dpart Premier caractre supprimer Nombre de caractres supprimer Chane rsultante

Description Supprimer chaine supprime nombreCar dans source partir de position et retourne la chane rsultante. Supprimer chaine retourne la mme chane que source dans les cas suivants : source est une chane vide, position est suprieur la longueur de source, nombreCar est gal zro (0). Si position est infrieur un (1), les caractres sont supprims partir du dbut de la chane. Si position + nombreCar est suprieur ou gal la longueur de source, les caractres sont supprims partir de position jusqu' la fin de source. Exemples L'exemple suivant illustre l'utilisation de Supprimer chaine. Les rsultats sont affects la variable vRsultat.

vRsultat := Supprimer chaine ("Lamborghini"; 6; 6) ` vRsultat est gal "Lambo" vRsultat := Supprimer chaine ("Indentation"; 6; 2) ` vRsultat est gal "Indention" ` vRsultat est gal aux deux premiers caractres de var vRsultat := Supprimer chaine (var; 3; 32000)

Rfrence Inserer chaine, Remplacer caracteres, Remplacer chaine.

234

4e Dimension - Langage

Remplacer chaine

Chanes de caractres version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Remplacer chaine (source; obsolte; nouveau{; remplacements}) Alpha Paramtre source obsolte nouveau remplacements Rsultat Type Alpha Alpha Alpha Numrique Alpha Description Chane de dpart Caractre(s) remplacer Chane de remplacement (si chane vide, toutes les occurrences sont effaces) Nombre de remplacements effectuer Chane rsultante

Description Remplacer chaine retourne une chane de caractres rsultant du remplacement dans source de obsolte par nouveau. Si nouveau est une chane vide (""), Remplacer chaine supprime chaque occurrence de obsolte dans source. Si remplacements est spcifi, Remplacer chaine ne remplace que le nombre d'occurrences de obsolte spcifi, partir du premier caractre de source. Si remplacements est omis, toutes les occurrences de obsolte sont remplaces. Si obsolte est une chane vide, Remplacer chaine retourne source inchang. Exemples (1) L'exemple suivant illustre l'utilisation de Remplacer chaine. Les rsultats sont affects la variable vRsultat. Les commentaires fournissent la valeur de la variable :

vRsultat := Remplacer chaine ("Ville"; "ll"; "d") ` vRsultat est gal "Vide" vRsultat := Remplacer chaine ("Table"; "b"; "") ` vRsultat est gal "Tale" ` Remplacer toutes les tabulations par des virgules vRsultat := Remplacer chaine (var; Caractere (9); ",")

4e Dimension - Langage

235

(2) L'exemple suivant limine les retours chariot et les tabulations du texte contenu dans la variable vRsultat :

vRsultat := Remplacer chaine (Remplacer chaine(vRsultat;Caractere(13);""); Caractere(9);"")

Rfrence Inserer chaine, Remplacer caracteres, Supprimer chaine.

236

4e Dimension - Langage

Mac vers Windows

Chanes de caractres version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Mac vers Windows (texte) Chane Paramtre texte Rsultat Type Chane Chane Description Texte exprim en ASCII MacOS Texte exprim en ANSI Windows

Description Mac vers Windows retourne un texte exprim avec la table ANSI Windows quivalent au texte pass dans texte, exprim avec la table ASCII MacOS. Cette commande attend un paramtre de type Texte exprim en ASCII MacOS. En gnral, vous n'avez pas besoin d'utiliser cette commande. Dans 4D, chaque valeur, champ ou variable de texte est encode sur la base de la table ASCII MacOS sous Macintosh et Windows, dans la mesure o vous ne les avez pas convertis l'aide d'un filtre ASCII. Pour plus d'informations sur ce point, rfrez-vous la section Codes ASCII. Sous Windows, vous n'avez pas besoin de vous proccuper de la conversion des codes ASCII. Lorsque vous copiez ou collez du texte entre 4D et Windows ou lorsque vous importez/exportez des donnes, 4D effectue automatiquement ces conversions. Cependant, lorsque vous utilisez des commandes de lecture/criture telles que ENVOYER PAQUET ou RECEVOIR PAQUET, vous devez explicitement effectuer des conversions ASCII. C'est, en fait, le principal rle de cette commande (voir exemple ci-dessous). Exemple Sous Windows, lorsque vous crivez des caractres dans un document l'aide de ENVOYER PAQUET, et si vous n'utilisez pas de filtre ASCII d'exportation pour convertir les caractres MacOS vers Windows (cf. la commande UTILISER FILTRE), il vous faut convertir vousmme le texte de MacOS vers Windows. Vous pouvez le faire de la manire suivante : ` ... ENVOYER PAQUET ($vhDocRef;Mac vers Windows(vtTexte)) ` ...

Rfrence Codes ASCII, ENVOYER PAQUET, UTILISER FILTRE, Windows vers Mac.

4e Dimension - Langage

237

Windows vers Mac

Chanes de caractres version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Windows vers Mac (texte) Chane Paramtre texte Rsultat Type Chane Chane Description Texte en ANSI Windows Texte en ASCII MacOS

Description Windows vers Mac retourne un texte exprim avec la table ASCII MacOS quivalent au texte pass dans texte, exprim avec la table ANSI Windows. Cette commande attend un paramtre de type Texte exprim en ANSI Windows. Normalement, vous n'avez pas besoin d'utiliser cette commande. Dans 4D, chaque valeur, champ ou variable de texte est encode sur la base de la table ASCII MacOS sous Macintosh et Windows, dans la mesure o vous ne les avez pas convertis l'aide d'un filtre ASCII. Pour plus d'informations sur ce point, rfrez-vous la section Codes ASCII. Sous Windows, vous n'avez pas besoin de vous proccuper de la conversion des codes ASCII. Lorsque vous copiez ou collez du texte entre 4D et Windows ou lorsque vous importez/exportez des donnes, 4D effectue automatiquement ces conversions. Cependant, lorsque vous utilisez des commandes de lecture/criture telles que ENVOYER PAQUET ou RECEVOIR PAQUET, vous devez explicitement effectuer des conversions ASCII. C'est, en fait, le principal rle de cette commande (reportez-vous l'exemple ci-dessous). Exemple Lorsque vous lisez des caractres d'un document Windows l'aide de RECEVOIR PAQUET, si vous n'utilisez pas de filtre ASCII d'importation pour convertir les caractres Windows vers MacOS (cf. la commande UTILISER FILTRE), il vous faut convertir vous-mme le texte de Windows vers MacOS. Vous pouvez le faire de la manire suivante : ` ... RECEVOIR PAQUET ($vhDocRef;vtTexte;16*1024) vtTexte:=Windows vers Mac(vtTexte) ` ...

Rfrence Codes ASCII, Mac vers Windows, RECEVOIR PAQUET, UTILISER FILTRE.

238

4e Dimension - Langage

Mac vers ISO

Chanes de caractres version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Mac vers ISO (texte) Chane Paramtre texte Rsultat Type Chane Chane Description Texte en ASCII MacOS Texte en ISO Latin-1

Description Mac vers ISO retourne un texte quivalent celui pass dans le paramtre texte mais exprim l'aide de la table de caractres Web dfinie dans le menu Jeu standard de la page Web/Configuration des Prfrences de l'application. Par dfaut, le jeu de caractres ISO Latin-1 (ISO-8859-1) est utilis :

4e Dimension - Langage

239

Cette commande attend un paramtre de type texte exprim l'aide de la table ASCII MacOS. Vous n'aurez gnralement pas besoin d'utiliser cette commande. 4D convertit, dans les deux sens, les caractres reus et envoys par les navigateurs Web. En rsultat, les valeurs textes que vous manipulez, l'intrieur d'un process de connexion Web, sont toutes exprimes l'aide de la table ASCII MacOS. Dans 4D, chaque valeur, champ ou variable de texte est encod sur la base de la table ASCII MacOS sous Macintosh et Windows, dans la mesure o vous ne les avez pas convertis l'aide d'un filtre ASCII. Pour plus d'informations sur ce point, rfrez-vous la section Codes ASCII. Sous Windows, vous n'avez pas besoin de vous proccuper de la conversion des codes ASCII. Lorsque vous copiez ou collez du texte entre 4D et Windows ou lorsque vous importez/exportez des donnes, 4D effectue automatiquement ces conversions. Cependant, lorsque vous utilisez des commandes de lecture/criture telles que ENVOYER PAQUET ou RECEVOIR PAQUET, 4D n'effectue aucune conversion de code ASCII. Par consquent, quelle que soit la plate-forme sur laquelle vous travaillez, si vous voulez crire sur disque des documents HTML ISO Latin-1 ou utilisant d'autres jeux de caractres Web, vous avez juste besoin de convertir le texte l'aide de la fonction Mac vers ISO. C'est en fait le principal rle de cette commande. Sous Windows, dans ce cas, vous ne devez pas filtrer les caractres l'aide d'un filtre d'exportation ASCII. Exemples (1) La ligne suivante convertit par dfaut le texte encod MacOS stock dans vtTexte en texte encod ISO-Latin 1 :

vtTexte:=Mac vers ISO(vtTexte)

240

4e Dimension - Langage

(2) Lors du dveloppement d'une application 4D Web Server, vous crez par programmation des pages HTML que vous enverrez par la suite sur Intranet ou Internet l'aide de la commande ENVOYER FICHIER HTML. Dans certains de ces documents se trouvent des rfrences ou des liens vers d'autres documents. La mthode projet ci-dessous calcule le chemin d'accs HTML partir du chemin d'accs Windows ou Macintosh reu en paramtre : ` Mthode projet Chemin HTML ` Chemin HTML ( Texte ) -> Texte ` Chemin HTML ( Chemin d'accs du gestionnaire de fichier natif ) -> Chemin d'accs HTML C_TEXTE($0;$1) C_ENTIER LONG($vlCar;$vlAscii) C_ALPHA(31;$vsCar) $0:="" Si (Sous Windows ) $1:=Remplacer chaine($1;"\";"/") Sinon $1:=Remplacer chaine($1;":";"/") Fin de si $1:=Mac vers ISO($1) Boucle ($vlCar;1;Longueur($1)) $vlAscii:=Code ascii($1$vlCar) Au cas ou : ($vlAscii>=127) $vsCar:="%"+Sous chaine(Chaine($vlAscii;"&$");2) : (Position(Caractere($vlAscii);":<>&%= "+Caractere(34))>0) $vsCar:="%"+Sous chaine(Chaine($vlAscii;"&$");2) Sinon $vsCar:=Caractere($vlAscii) Fin de cas $0:=$0+$vsCar Fin de boucle

Note : La mthode projet Sous Windows est liste dans la section Prsentation des documents systme.

4e Dimension - Langage

241

Une fois cette mthode projet place dans votre base, si vous voulez inclure une liste de liens FTP vers des documents prsents dans un rpertoire particulier, vous pouvez crire par exemple : ` Variables interprocess dfinies, par exemple, dans la mthode base Sur ouverture vsFTPURL:="ftp://123.4.56.78/Spiders/" vsFTPDirectory:="APS500:Spiders:" ` Ici, un chemin du gestionnaire de fichier MacOS ` ... ` ... TABLEAU ALPHA(31;$asDocuments;0) LISTE DES DOCUMENTS(...;$asDocuments) $vlNbDocuments:=Taille tableau($asDocuments) jsHandler:=... Boucle ($vlDocument;1;$vlNbDocuments) vtHTMLCode:=vtHTMLCode+"<P><A HREF="+Caractere(34)+vsFTPURL+ Chemin HTML (Sous chaine($1+$asDocuments{$vlDocument}; Longueur (vsFTPDirectory)+1)) + Caractere(34)+jsHandler+ "> "+$asDocuments{$vlDocument}+"</A></P>"+Caractere(13) Fin de boucle ` ... Rfrence Codes ASCII, ENVOYER FICHIER HTML, ENVOYER PAQUET, ISO vers Mac, UTILISER FILTRE.

242

4e Dimension - Langage

ISO vers Mac

Chanes de caractres version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ISO vers Mac (texte) Chane Paramtre texte Rsultat Type Chane Chane Description Texte en ISO Latin-1 Texte en ASCII MacOS

Description ISO vers Mac retourne un texte, exprim l'aide de la table ASCII MacOS, quivalent au texte pass dans texte, exprim l'aide de la table ISO Latin-1. Cette commande attend un paramtre de type Texte exprim en ISO Latin-1. Vous n'aurez gnralement pas besoin d'utiliser cette commande. 4D convertit, dans les deux sens, les caractres reus et envoys par les browsers Web. Comme rsultat, les valeurs textes que vous grez, dans un process de connexion Web, sont exprimes l'aide du filtre MacOS ASCII. Dans 4D, tous les valeurs, champs ou variables de texte que vous n'avez pas convertis l'aide d'un autre filtre ASCII sont encods MacOS sous Macintosh et Windows. Pour de plus amples informations sur ce sujet, rfrez-vous la section Codes ASCII. Sous Windows, vous n'avez pas besoin de vous soucier de la conversion des codes ASCII. Lorsque vous copiez ou collez du texte entre 4D et Windows ou lorsque vous importez/exportez des donnes, 4D effectue automatiquement ces conversions. Cependant, lorsque vous utilisez des commandes lecture/criture comme ENVOYER PAQUET ou RECEVOIR PAQUET, il faut faire les conversions ASCII. Par consquent, quelle que soit la plate-forme sur laquelle vous travaillez, si vous voulez lire des documents HTML ISO Latin-1 stocks sur disque l'aide de RECEPTION PAQUET, vous avez juste besoin de convertir le texte l'aide de ISO vers Mac. C'est en fait le principal rle de cette fonction. Sous Windows, dans ce cas, vous ne devez pas filtrer les caractres l'aide d'un filtre d'import ASCII. Note : La commande ISO vers Mac utilise la ressource Conversion (MapC), si elle existe. Pour plus d'informations sur ce point, reportez-vous la documentation de Customizer Plus.

4e Dimension - Langage

243

Exemple La ligne suivante convertit le texte encod ISO Latin-1 stock dans vtTexte en un texte encod MacOS : ` Lire du texte d'un document HTML ISO Latin-1 RECEVOIR PAQUET ($vhDocRef;vtTexte;16*1024) vtTexte:=ISO vers Mac(vtTexte)

Rfrence Codes ASCII, Mac vers ISO, RECEVOIR PAQUET, UTILISER FILTRE.

244

4e Dimension - Langage

7 ________________________ Commandes obsoltes

4e Dimension - Langage

245

246

4e Dimension - Langage

CHERCHER SUR CLE

Commandes obsoltes version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHERCHER SUR CLE Cette commande est conserve dans 4e Dimension pour des raisons de compatibilit avec les versions prcdentes du programme. Pour toute nouvelle programmation, utilisez la commande CHERCHER. ATTENTION : Cette commande disparatra dans les prochaines versions de 4D. Nous vous conseillons de ne plus l'utiliser.

4e Dimension - Langage

247

TRIER SUR INDEX

Commandes obsoltes version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TRIER SUR INDEX Cette commande est conserve pour des raisons de compatibilit avec les versions prcdentes de 4e Dimension. Elle est avantageusement remplace par la commande TRIER. ATTENTION : N'utilisez plus cette commande, elle disparatra dans les prochaines versions de 4D.

248

4e Dimension - Langage

8 ________________________ Communications

4e Dimension - Langage

249

250

4e Dimension - Langage

REGLER SERIE

Communications version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

REGLER SERIE (port | opration{; param | document}) Paramtre port | opration param | document Type Numrique Num | Alpha Description Numro de port srie ou opration effectuer sur document Paramtres de communication ou Nom du document

Description La commande REGLER SERIE permet d'ouvrir un port srie ou un document. Vous ne pouvez ouvrir qu'un port srie ou un document la fois avec cette commande. Note historique : A l'origine, REGLER SERIE a t la premire commande 4D permettant de travailler avec les ports srie et des documents sur disque. Depuis, de nouvelles commandes ont t ajoutes. Aujourd'hui, vous pouvez gnralement travailler avec des documents sur disque l'aide des commandes Ouvrir document, Creer document et Ajouter a document, puis lire et crire des caractres dans les documents avec RECEVOIR PAQUET et ENVOYER PAQUET (ces deux commandes fonctionnent aussi avec REGLER SERIE). Cependant, si vous souhaitez utiliser les commandes ENVOYER VARIABLE, RECEVOIR VARIABLE, ENVOYER ENREGISTREMENT et RECEVOIR ENREGISTREMENT, vous devez appeler REGLER SERIE pour accder aux documents sur disque. La description de la commande REGLER SERIE se compose de deux sections : Travailler avec les ports srie Travailler avec des documents Travailler avec les ports srie : REGLER SERIE(port;param)
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La premire syntaxe de REGLER SERIE ouvre un port srie et dfinit le protocole de communication ainsi que des informations supplmentaires. Les donnes peuvent tre envoyes par les commandes ENVOYER PAQUET, ENVOYER ENREGISTREMENT ou ENVOYER VARIABLE, et reues par les commandes RECEVOIR BUFFER, RECEVOIR PAQUET, RECEVOIR ENREGISTREMENT ou RECEVOIR VARIABLE. Le premier paramtre, port, dfinit le port et le protocole utiliss. Vous pouvez adresser jusqu' 99 ports srie (un par un).

4e Dimension - Langage

251

Le tableau suivant liste les valeurs possibles du paramtre port : Valeurs port 0 1 20 21 30 31 101 199 201 299 301 399 Description Port imprimante (Mac) ou COM2 (Windows) sans protocole Port modem (Mac) ou COM1 (Windows) sans protocole Port imprimante (Mac) ou COM2 (Windows) avec protocole logiciel tel que XON/XOFF Port modem (Mac) ou COM1 (Windows) avec protocole logiciel tel que XON/XOFF Port imprimante (Mac) ou COM2 (Windows) avec protocole matriel tel que RTS/CTS) Port modem (Mac) ou COM1 (Windows) avec protocole matriel tel que RTS/CTS) Communication srie sans protocole* Communication srie avec protocole logiciel tel que XON/XOFF* Communication srie avec protocole matriel tel que RTS/CTS*

* Important : La valeur que vous passez dans port doit dsigner un port srie "logique" reconnu par votre systme d'exploitation. Par exemple, pour que vous puissiez utiliser les valeurs 101, 203 et 325, les ports srie COM1, COM3 et COM25 doivent avoir t correctement configurs. Note sur les ports srie En standard, les systmes MacOS et Windows reconnaissent deux ports srie logiques : sous MacOS, le port modem et le port imprimante ; sous Windows, les ports COM1 et COM2. Toutefois, des ports srie supplmentaires peuvent tre ajouts, par l'intermdiaire de cartes d'extension. 4e Dimension nadressait l'origine que les deux ports srie standard, et a intgr par la suite la gestion des ports srie supplmentaires. Pour des raisons de compatibilit, les deux systmes dadressage ont t conservs. - Si vous souhaitez adresser uniquement un port srie standard (imprimante/COM2 ou modem/COM1), vous pouvez passer dans le paramtre port soit une des valeurs 0, 1, 20, 21, 30 et 31 (correspondant lancien mode de fonctionnement de 4D), soit une valeur > 100 (cf. ci-dessous). - Si vous souhaitez adresser des ports srie "tendus", vous devez passer dans port (pour adresser le Nime port srie) la valeur N+100, augmente ventuellement de 100 ou de 200, si vous voulez utiliser respectivement un protocole logiciel ou matriel. Exemples : (1) Vous souhaitez utiliser le port imprimante/COM2 sans protocole, vous pouvez utiliser l'une des syntaxes suivantes :

REGLER SERIE (0;param) REGLER SERIE (102;param)

ou

252

4e Dimension - Langage

(2) Vous souhaitez utiliser le port modem/COM1 avec le protocole XON/XOFF, vous pouvez utiliser l'une des syntaxes suivantes :

REGLER SERIE (21;param) REGLER SERIE (201;param)

ou

(3) Vous souhaitez utiliser le port COM25 avec le protocole RTS/CTS :

REGLER SERIE (325;param)

Le paramtre param permet de fixer la vitesse, le nombre de bits de donnes, le nombre de bits de stop et la parit. La valeur de param se calcule en additionnant les valeurs de vitesse, de bits de donnes, de bits de stop et de parit, telles que dfinies dans le tableau cidessous. Par exemple, pour paramtrer la communication 1200 bauds, 8 bits de donnes, 1 bit de stop et aucune parit, passez 19550 (soit 94+3072+16384+0) dans param. Contrle Vitesse (en bauds) Valeur param ( cumuler) 380 189 94 62 46 30 22 14 10 4 2 1 0 1022 1021 0 2048 1024 3072 16384 32768 16384 0 4096 12288 Fonction 300 600 1200 1800 2400 3600 4800 7200 9600 19200 28800 38400 57600 115200 230400 5 6 7 8 1 1,5 2 Aucune Impaire Paire

Bits de donnes

Bits de stop Parit

4e Dimension - Langage

253

Astuce : Les diffrentes valeurs numrique cumuler et passer dans les paramtres port et param ( l'exception des valeurs de COM1...COM99) sont disponibles en tant que Constantes prdfinies dans le thme Communications de l'Explorateur, en mode Structure. Pour les valeurs de COM1...COM99, vous devez utiliser des valeurs numriques littrales. Lorsque vous n'avez plus besoin d'un port srie, vous devez le refermer. Pour cela, appelez de nouveau REGLER SERIE et passez-lui la valeur 11. Exemple :

REGLER SERIE(11)

`Referme un port srie pralablement ouvert

Travailler avec des documents : REGLER SERIE(opration;document)


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La seconde syntaxe de la commande REGLER SERIE vous permet de crer, ouvrir ou fermer un document. A la diffrence des commandes du thme Documents systme, REGLER SERIE ne permet d'ouvrir qu'un document la fois. Le document peut tre "lu partir de" ou "crit dans". Reportez-vous la section Prsentation des documents systme pour plus d'informations sur ce point. Le premier paramtre, opration, dfinit l'opration effectuer avec le document dsign par document. Le tableau suivant dresse la liste les valeurs d'opration et le rsultat obtenu, en fonction de la valeur de document. La premire colonne fournit les valeurs possibles du paramtre opration. La deuxime colonne fournit les valeurs possibles du paramtre document. La troisime colonne dcrit le rsultat obtenu. Par exemple, pour afficher un fichier de type texte dans une bote de dialogue standard d'ouverture de document, vous pouvez crire l'instruction suivante :

REGLER SERIE (13; "") Document Chane "" (chane vide) Aucun "" (chane vide) "" (chane vide) Rsultat Ouvre le document dont le nom est spcifi par Chane. Si le document n'existe pas, il est cr et ouvert. Affiche la bote de dialogue d'ouverture de fichier. Tous les types de fichiers sont prsents. Referme un fichier ouvert. Affiche la bote de dialogue standard d'enregistement de fichier, permettant de crer un nouveau fichier. Affiche la bote de dialogue d'ouverture de fichier. Seuls les fichiers de type Texte sont prsents.

Opration 10 10 11 12 13

254

4e Dimension - Langage

Toutes les oprations dcrites dans ce tableau modifient la variable systme Document en consquence. De plus, la variable systme OK prend la valeur 1 si l'opration s'est droule correctement, 0 sinon. Exemples Reportez-vous aux exemples des commandes RECEVOIR BUFFER, FIXER TIMEOUT et RECEVOIR ENREGISTREMENT. Rfrence Ajouter a document, Creer document, ENVOYER ENREGISTREMENT, ENVOYER PAQUET, ENVOYER VARIABLE, FIXER TIMEOUT, LIRE CORRESPONDANCE PORT SERIE, Ouvrir document, RECEVOIR BUFFER, RECEVOIR ENREGISTREMENT, RECEVOIR PAQUET, RECEVOIR VARIABLE.

4e Dimension - Langage

255

FIXER TIMEOUT

Communications version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER TIMEOUT (secondes) Paramtre secondes Type Numrique Description Nombre de secondes jusqu'au timeout

Description La commande FIXER TIMEOUT vous permet de dfinir le temps d'attente maximum pour l'excution d'une commande de communication srie. Si la commande ne se termine pas dans le temps secondes qui lui est imparti, la communication srie est annule, l'erreur 9990 est gnre, et la variable systme OK prend la valeur 0. Vous pouvez intercepter cette erreur l'aide d'une mthode installe par la commande APPELER SUR ERREUR. Notez que le dlai dfini reprsente la dure totale permise pour que la commande s'excute, et non le dlai d'attente entre chaque caractre reu. Pour annuler un paramtrage prcdent et ne pas spcifier de temps d'attente maximum, passez 0 dans le paramtre secondes. Les commandes de communication srie affectes par ce paramtrage sont les suivantes : RECEVOIR PAQUET RECEVOIR ENREGISTREMENT RECEVOIR VARIABLE

256

4e Dimension - Langage

Exemple L'exemple suivant dfinit le port srie devant recevoir des donnes et le timeout. Les donnes sont lues l'aide de RECEVOIR PAQUET. Si les donnes ne sont pas bien reues dans le temps imparti, une erreur survient : ` Ouverture du port srie REGLER SERIE (Port srie MacOS; Vitesse 9600 + Bits de donnes 8 + Bit de stop un + Pas de parit) FIXER TIMEOUT (10) ` Fixer le timeout 10 secondes ` Traiter les interruptions ventuelles APPELER SUR ERREUR ("INTERCEPTER ERREURS COMMUNICATIONS") RECEVOIR PAQUET (vBuffer; Caractere (Retour chariot)) ` Lire jusqu'au retour chariot Si (OK = 0) ` Si une erreur survient ALERTE ("Erreur lors de la rception des donnes.") ` Informer l'utilisateur Sinon [Personnes]Nom := vBuffer ` Sauvegarder les donnes dans un champ Fin de si

Rfrence APPELER SUR ERREUR, RECEVOIR BUFFER, RECEVOIR ENREGISTREMENT, RECEVOIR PAQUET, RECEVOIR VARIABLE.

4e Dimension - Langage

257

UTILISER FILTRE

Communications version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

UTILISER FILTRE (filtre | *{; typeFiltre}) Paramtre filtre | * typeFiltre Type Alpha | * Numrique Description Nom du document filtre ASCII utiliser ou * pour restaurer le filtre ASCII par dfaut 0 = Filtre d'exportation, 1 = Filtre d'importation

Description La commande UTILISER FILTRE a deux syntaxes. La premire charge en mmoire le document de filtre ASCII filtre pralablement sauvegard et l'utilise. Si typeFiltre est gal 0, le filtre est utilis en tant que filtre d'exportation. Si typeFiltre est gal 1, il est utilis en tant que filtre d'importation. Si vous ne passez pas le paramtre typeFiltre, le filtre d'exportation est utilis par dfaut. Le filtre ASCII doit avoir t pralablement cr en mode Utilisation, dans la bote de dialogue de cration de filtres. Une fois charg en mmoire, ce filtre sera utilis par 4e Dimension pour toutes les oprations de transfert entre la base et un document ou un port srie. Cela inclut les donnes transfres par les commandes d'import/export ASCII, SYLK et DIF, ainsi que celles envoyes par les commandes ENVOYER PAQUET, RECEVOIR PAQUET et RECEVOIR BUFFER. Les filtres n'ont pas d'effet sur les donnes transfres par les commandes ENVOYER ENREGISTREMENT, ENVOYER VARIABLE, RECEVOIR ENREGISTREMENT et RECEVOIR VARIABLE. Si vous passez une chane vide dans le paramtre filtre, UTILISER FILTRE affiche une bote de dialogue standard d'ouverture de fichiers pour que l'utilisateur puisse slectionner un filtre ASCII. Lorsque vous appelez UTILISER FILTRE, la variable systme OK prend la valeur 1 si le filtre est correctement charg, sinon elle prend la valeur 0. La deuxime syntaxe de UTILISER FILTRE, lorsque vous passez un astrisque * au lieu du paramtre filtre, restaure le filtre ASCII par dfaut. Si typeFiltre est gal 0, le filtre d'exportation est restaur. Si typeFiltre est gal 1, le filtre d'importation est restaur. Le filtre ASCII par dfaut n'tablit pas de traduction entre les caractres. Lorsque cette seconde syntaxe est utilise, la variable systme OK prend la valeur 0.

258

4e Dimension - Langage

Exemple L'exemple suivant charge en mmoire un document de filtre ASCII. Les donnes sont exportes, puis le filtre ASCII par dfaut est restaur :

UTILISER FILTRE ("MactoPC"; 0) ` Charger un filtre ASCII ECRITURE ASCII ([Ma Table]; "Mon Texte") ` Exporter les donnes avec le filtre ASCII UTILISER FILTRE (*; 0) ` Restaurer le filtre ASCII par dfaut

Rfrence ECRITURE ASCII, ECRITURE DIF, ECRITURE SYLK, ENVOYER PAQUET, LECTURE ASCII, LECTURE DIF, LECTURE SYLK, Mac vers Windows, RECEVOIR BUFFER, RECEVOIR PAQUET, Windows vers Mac.

4e Dimension - Langage

259

LIRE CORRESPONDANCE PORT SERIE

Communications version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE CORRESPONDANCE PORT SERIE (tabNums; tabNoms) Paramtre tabNums tabNoms Type Tab numrique Tableau chane Description Tableau de numros de ports srie Tableau de noms de ports srie

Description La commande LIRE CORRESPONDANCE PORT SERIE retourne deux tableaux tabNums et tabNoms contenant respectivement la liste des numros et des noms des ports srie de la machine courante. Cette commande est utile sous MacOS X car le systme alloue dynamiquement les numros des ports srie lorsque vous utilisez un adaptateur srie USB. A laide de cette commande, vous pouvez adresser les ports srie via leur nom (invariable), quel que soit leur numro. Rfrence REGLER SERIE.

260

4e Dimension - Langage

ENVOYER PAQUET

Communications version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENVOYER PAQUET ({docRef; }paquet) Paramtre docRef paquet Type docRef Alpha Description Rfrence de document ou canal courant (port srie ou document) Chane ou texte envoyer

Description La commande ENVOYER PAQUET envoie paquet vers un port srie ou un document. Si docRef est spcifi, le paquet est crit dans le document rfrenc par docRef. Si docRef n'est pas spcifi, le paquet est envoy vers le port srie ou un document pralablement ouvert par la commande REGLER SERIE. paquet reprsente une simple srie de donnes, gnralement une chane de caractres. Avant d'utiliser ENVOYER PAQUET, vous devez ouvrir un port srie ou un document avec la commande REGLER SERIE, ou un document avec une commande de gestion des documents. Lorsque vous envoyez un paquet vers un document, le premier ENVOYER PAQUET commence crire les donnes au dbut du document moins que ce dernier n'ait t ouvert par la fonction Ajouter a document. Puis, jusqu' ce que le document soit referm, chaque paquet envoy y est crit la suite du prcdent. Note 4D version 6 : Ce fonctionnement est toujours valide avec un document ouvert par REGLER SERIE. Cependant, pour un document ouvert par Ouvrir document, Creer document ou Ajouter a document, vous pouvez dsormais utiliser les nouvelles commandes Position dans document et CHANGER POSITION DANS DOCUMENT pour connatre et modifier la position laquelle, dans le document, la prochaine criture (ENVOYER PAQUET) ou lecture (RECEVOIR PAQUET) aura lieu. Important : ENVOYER PAQUET envoie des caractres ASCII MacOS sous Windows et sous MacOS. Chacun d'entre eux est cod sur huit bits. Les caractres ASCII standard utilisent uniquement les sept bits infrieurs. De nombreux ordinateurs et priphriques n'utilisent pas le huitime bit de la mme manire que Windows/MacOS. Si la chane envoyer contient des caractres utilisant le huitime bit, crez un filtre ASCII pour convertir les caractres ASCII, et excutez UTILISER FILTRE avant d'utiliser ENVOYER PAQUET. Vous pouvez aussi utiliser la fonction Mac vers Windows (voir l'exemple de cette fonction). Des protocoles tels que XON/XOFF utilisent certains codes ASCII infrieurs pour tablir la communication entre les machines. Assurez-vous de ne pas envoyer de tels codes ASCII pour ne pas risquer d'interfrer avec le protocole, voire de rompre la communication.

4e Dimension - Langage

261

Exemple L'exemple suivant crit, dans un document, des donnes en provenance de champs. Les valeurs sont crites sous forme de champs de taille fixe. Dans ce cas, si la longueur d'un champ est infrieure la taille fixe, le champ est combl avec des espaces (c'est--dire que des espaces sont ajouts de manire ce que le champ corresponde la taille dfinie). Bien que les champs de valeurs fixes soient un moyen peu efficace de stocker des donnes, certains systmes informatiques et certaines applications l'utilisent encore : $Doc := Creer document ("") ` Cration d'un document Si (OK=1) ` Est-ce que le document a bien t cr ? ` Boucle pour chaque enregistrement Boucle ($i; 1; Enregistrements trouves ([Personnes])) ` Envoi du paquet cr partir d'une chane de 15 espaces contenant le ` champ Prnom ENVOYER PAQUET ($Doc; Remplacer caracteres(15 * Caractere(Espacement); [Personnes]Prnom;1)) ENVOYER PAQUET ($Doc; Remplacer caracteres(15 * Caractere(Espacement); [Personnes]Nom;1)) ` Envoi d'un second paquet cr partir d'un chane de 15 espaces contenant ` le champ Nom. Cela aurait pu tre mis dans le premier paquet, mais est ` spar pour des raisons de clart ENREGISTREMENT SUIVANT([Personnes]) Fin de boucle ` Envoi du code ASCII SUB, utilis comme marqueur de fin d'enregistrement par ` certains ordinateurs. ENVOYER PAQUET ($Doc; Caractere (ASCII SUB)) FERMER DOCUMENT ($Doc) ` Fermeture du document Fin de si

Rfrence CHANGER POSITION DANS DOCUMENT, Position dans document, RECEVOIR PAQUET.

262

4e Dimension - Langage

RECEVOIR PAQUET

Communications version 6.8 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

RECEVOIR PAQUET ({docRef; }rceptVar; stopCar | nbCar) Paramtre docRef rceptVar stopCar | nbCar Type docRef Variable Alpha | Num Description Numro de rfrence de document ou canal courant (port srie ou document) Variable devant recevoir les donnes Caractre(s) au(x)quel(s) stopper la rception des donnes ou Nombre de caractres recevoir

Description La commande RECEVOIR PAQUET lit des caractres depuis un port srie ou un document. Si docRef est spcifi, la commande rcupre des caractres depuis un document ouvert par la fonction Ouvrir document, Creer document ou Ajouter a document. Si docRef est omis, la commande rcupre des caractres depuis un port srie ou un document ouvert par la commande REGLER SERIE. Dans tous les cas, les caractres lus sont retourns dans la variable rceptVar, qui doit tre une variable de type Texte ou Alpha. Si vous voulez lire un nombre prdfini de caractres, passez ce nombre dans le paramtre nbCar. Si vous voulez lire des caractres jusqu' ce qu'une chane de caractres (comportant un ou plusieurs caractres) soit lue, passez-la dans le paramtre stopCar (la chane n'est pas retourne dans rceptVar). Lorsque RECEVOIR PAQUET lit un document, si vous n'avez spcifi ni nbCar ni stopCar, l'excution de la commande se terminera la fin du document. Cependant, rappelez-vous que si une variable chane a une taille fixe, une variable texte quant elle accepte jusqu' 32000 caractres. Si RECEVOIR PAQUET doit lire des donnes en provenance du port srie, la commande s'excutera indfiniment, jusqu' ce que le dlai d'attente (s'il est fix) soit coul (cf. la commande FIXER TIMEOUT) ou que l'utilisateur interrompe la rception (voir ci-dessous). Pendant l'excution d'un RECEVOIR PAQUET, l'utilisateur peut interrompre l'opration en appuyant sur les touches Ctrl+Alt+Maj (sous Windows) ou Commande+Option+Maj (sous MacOS). Cette interruption gnre une erreur 9994 que vous pouvez intercepter l'aide d'une mthode installe par la commande APPELER SUR ERREUR. Gnralement, vous devez grer les interruptions d'une rception uniquement lors d'une communication srie.

4e Dimension - Langage

263

Lors de la lecture d'un document, le premier RECEVOIR PAQUET commence par lire le dbut du document. La lecture des paquets suivants dbute au caractre situ immdiatement aprs le dernier caractre lu. Note 4D version 6 : Ce fonctionnement est toujours valide avec un document ouvert par REGLER SERIE. Cependant, pour un document ouvert par Ouvrir document, Creer document ou Ajouter a document, vous pouvez dsormais utiliser les nouvelles commandes Position dans document et CHANGER POSITION DANS DOCUMENT pour connatre et modifier la position laquelle, dans le document, la prochaine criture (ENVOYER PAQUET) ou lecture (RECEVOIR PAQUET) aura lieu. En cas de tentative de lecture aprs la fin d'un document, RECEVOIR PAQUET retourne les donnes lues jusqu' ce point et la variable systme OK prend la valeur 1. Les RECEVOIR PAQUET suivants retourneront une chane vide et OK prendra la valeur zro. Note : Lorsque vous lisez des caractres d'un document windows avec RECEVOIR PAQUET, si vous n'utilisez pas de filtre ASCII d'importation pour convertir les caractres Windows vers MacOS (cf. la commande UTILISER FILTRE), vous pouvez utiliser la fonction Windows vers Mac (voir l'exemple de cette fonction). Exemples (1) L'exemple suivant lit 20 caractres depuis un port srie et les place dans la variable RcupVingt :

RECEVOIR PAQUET (RcupVingt; 20)

(2) L'exemple suivant lit des donnes depuis le document rfrenc par la variable MonDoc et les place dans la variable vData. La commande rcupre les donnes jusqu' ce qu'elle rencontre un retour chariot :

RECEVOIR PAQUET (MonDoc; vData; Caractere (Retour chariot))

3) L'exemple suivant lit des donnes du document rfrenc par la variable MonDoc et les place dans la variable vData. La commande rcupre les donnes jusqu' ce qu'elle rencontre une balise HTML de fin de tableau (</TD>) :

RECEVOIR PAQUET (MonDoc; vData; "</TD>")

264

4e Dimension - Langage

(4) L'exemple suivant lit des donnes d'un document et les place dans des champs. Les donnes sont stockes dans des champs de longueur fixe. La mthode fait appel une sous-routine pour liminer les espaces superflus (situs derrire les valeurs). Le code de la sous-routine est prsent aprs la mthode : $Doc := Ouvrir document ("";"TEXT") ` Ouverture d'un document de type Texte Si (OK=1) ` Si le document est ouvert Repeter ` Boucle jusqu' ce qu'il n'y ait plus de donnes RECEVOIR PAQUET ($Doc; $Var1; 15) ` Lecture de 15 caractres RECEVOIR PAQUET ($Doc; $Var2; 15) ` Mme chose pour le second champ Si (OK = 1) ` Si ce n'est pas la fin du document CREER ENREGISTREMENT([Personnes]) ` Crer un nouvel enregistrement [Personnes]Prnom := Elimine ($Var1) ` Sauvegarder le prnom [Personnes]Nom := Elimine ($Var2) ` Sauvegarder le nom STOCKER ENREGISTREMENT([Personnes]) ` Sauvegarder l'enregistrement Fin de si Jusque (OK =0) FERMER DOCUMENT ($Doc) ` Fermeture du document Fin de si

Les espaces superflus derrire les valeurs sont limins par la mthode suivante, appele Elimine : Boucle ($i; Longueur ($1); 1; 1) ` Boucle sur la fin de la chane d'o dmarrer Si ($1$i # " ") ` Si ce n'est pas un espace $i := $i ` Forcer la boucle stopper Fin de si Fin de boucle $0 := Supprimer chaine($1; $i;Longueur($1)) ` Suppression des espaces Rfrence CHANGER POSITION DANS DOCUMENT, ENVOYER PAQUET, FIXER TIMEOUT, Position dans document, RECEVOIR PAQUET. Variables et ensembles systme Aprs un appel RECEVOIR PAQUET, la variable systme OK prend la valeur 1 si le paquet est reu sans erreur. Sinon, OK prend la valeur 0.

4e Dimension - Langage

265

RECEVOIR BUFFER

Communications version 6.8.3 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

RECEVOIR BUFFER (varRception) Paramtre varRception Type Variable Description Variable devant recevoir les donnes

Description La commande RECEVOIR BUFFER lit les donnes du port srie pralablement ouvert par la commande REGLER SERIE. Le port srie comporte un buffer qui se remplit de caractres jusqu' ce qu'une commande les charge. RECEVOIR BUFFER rcupre les caractres prsents dans le buffer, les place dans la variable varRception puis vide le buffer. S'il n'y a pas de caractres dans le buffer, la variable varRception est vide. Sous Windows Le buffer du port srie sous Windows a une capacit limite 10 Ko. Cela signifie que le buffer peut tre satur. Lorsqu'il est plein et que de nouveaux caractres sont reus, ils remplacent les plus anciens caractres. Les anciens caractres sont perdus ; par consquent, il est important que le buffer soit lu rapidement lorsque des nouvelles donnes sont reues. Sous MacOS Le buffer du port srie sous MacOS 9.x a une capacit limite 10 Ko. Sous MacOS X, sa capacit est en principe illimite (elle dpend de la mmoire disponible). Si le buffer est satur et que de nouveaux caractres sont reus, ils remplacent les plus anciens caractres. Les anciens caractres sont perdus ; par consquent, il est important que le buffer soit lu rapidement lorsque des nouvelles donnes sont reues. Note : Il existe des plug-ins 4D qui vous permettent d'augmenter la capacit du port srie. La commande RECEVOIR BUFFER est diffrente de RECEVOIR PAQUET dans la mesure o elle rcupre tout ce qui se trouve dans le buffer et le retourne immdiatement. RECEVOIR PAQUET, pour sa part, attend de rcuprer un caractre spcifique ou un certain nombre de caractres. Pendant l'excution d'un RECEVOIR BUFFER, l'utilisateur peut interrompre l'opration en appuyant sur les touches Ctrl+Alt+Maj (sous Windows) ou Commande+Option+Maj (sous MacOS). Cette interruption gnre une erreur 9994 que vous pouvez intercepter l'aide d'une mthode installe par la commande APPELER SUR ERREUR.

266

4e Dimension - Langage

Exemple La mthode projet ECOUTER PORT SRIE utilise RECEVOIR BUFFER pour rcuprer du texte depuis le port srie et l'accumuler dans une variable interprocess : ` ECOUTER PORT SRIE ` Ouvrir le port srie REGLER SERIE (201; Vitesse 9600 + Bits de donnes 8 + Bit de stop un + Pas de parit) IP_Ecouter_Port_Srie:=Vrai Tant que (IP_Ecouter_Port_Srie) RECEVOIR BUFFER($vtBuffer) Si ((Longueur($vtBuffer)+Longueur(vtBuffer))>MAXLARGTEXTE) vtBuffer:="" Fin de si vtBuffer:=vtBuffer+$Buffer Fin tant que

A ce stade, tout autre process peut lire la variable interprocess vtBuffer pour exploiter les donnes en provenance du port srie. Pour cesser d'couter le port srie, excutez simplement la mthode suivante : ` Fin de l'coute du port srie IP_Ecouter_Port_Srie:=Faux Notez que l'accs la variable interprocess vtBuffer doit tre protg par un smaphore, de manire ce que les process n'entrent pas en conflit (reportez-vous la description de la fonction Semaphore pour plus d'informations). Rfrence APPELER SUR ERREUR, RECEVOIR PAQUET, REGLER SERIE, Semaphore, Variables.

4e Dimension - Langage

267

ENVOYER VARIABLE

Communications version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENVOYER VARIABLE (variable) Paramtre variable Type Variable Description Variable envoyer

Description ENVOYER VARIABLE envoie variable vers le document ou le port srie pralablement ouvert par la commande REGLER SERIE. La variable est envoye dans un format interne spcial qui ne peut tre relu que par la commande RECEVOIR VARIABLE. ENVOYER VARIABLE envoie la totalit de la variable (y compris son type et sa valeur). Notes 1. Si vous envoyez une variable un document avec cette commande, le document doit avoir t ouvert par la commande REGLER SERIE. Vous ne pouvez pas utiliser ENVOYER VARIABLE avec un document ouvert par Ouvrir document, Ajouter a document ou Creer document. 2. Cette commande ne fonctionne pas avec les variables de type tableau. Si vous voulez envoyer et recevoir des tableaux via un document ou un port srie, utilisez les nouvelles Commandes du thme BLOB, apparues avec la version 6 de 4D. Exemple Reportez-vous l'exemple de la commande RECEVOIR ENREGISTREMENT. Rfrence ENVOYER ENREGISTREMENT, RECEVOIR ENREGISTREMENT, RECEVOIR VARIABLE, REGLER SERIE.

268

4e Dimension - Langage

RECEVOIR VARIABLE

Communications version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

RECEVOIR VARIABLE (variable) Paramtre variable Type Variable Description Variable dans laquelle recevoir une variable

Description La commande RECEVOIR VARIABLE reoit variable, une variable envoye par la commande ENVOYER VARIABLE, depuis un document ou un port srie pralablement ouvert par la commande REGLER SERIE. En mode interprt, si la variable n'existe pas pralablement l'appel de RECEVOIR VARIABLE, elle sera cre, type et remplie en fonction de ce qui a t reu. En mode compil, la variable doit tre du mme type que celle qui est reue. Dans les deux cas, le contenu de la variable est remplac par celui de la variable reue. Notes 1. Si vous recevez une variable depuis un document avec cette commande, le document doit avoir t ouvert par la commande REGLER SERIE. Vous ne pouvez pas utiliser RECEVOIR VARIABLE avec un document ouvert par Ouvrir document, Ajouter a document ou Creer document. 2. Cette commande ne fonctionne pas avec les variables de type tableau. Si vous voulez envoyer et recevoir des tableaux via un document ou un port srie, utilisez les nouvelles Commandes du thme BLOB, apparues avec la version 6 de 4D. 3. Pendant l'excution d'un RECEVOIR VARIABLE, l'utilisateur peut interrompre l'opration en appuyant sur les touches Ctrl+Alt+Maj (sous Windows) ou Commande+Option+Maj (sous MacOS). Cette interruption gnre une erreur 9994 que vous pouvez intercepter l'aide d'une mthode installe par la commande APPELER SUR ERREUR. Gnralement, vous devez grer les interruptions d'une rception uniquement lors d'une communication srie. Exemple Reportez-vous l'exemple de la commande RECEVOIR ENREGISTREMENT. Rfrence APPELER SUR ERREUR, ENVOYER ENREGISTREMENT, ENVOYER VARIABLE. Variables et ensembles systme La variable systme OK vaut 1 si la variable est correctement reue, sinon elle vaut 0.

4e Dimension - Langage

269

ENVOYER ENREGISTREMENT

Communications version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENVOYER ENREGISTREMENT {(table)} Paramtre table Type Table Description Table de laquelle envoyer l'enregistrement courant ou Table par dfaut si ce paramtre est omis

Description ENVOYER ENREGISTREMENT envoie l'enregistrement courant de table vers le port srie ou vers un document ouvert par la commande REGLER SERIE. L'enregistrement est envoy dans un format interne particulier ne pouvant tre interprt que par la commande RECEVOIR ENREGISTREMENT. S'il n'y a pas d'enregistrement courant, ENVOYER ENREGISTREMENT ne fait rien. L'enregistrement est envoy en totalit, ce qui signifie que les sous-enregistrements, les images et les BLOBs stocks dans l'enregistrement sont galement envoys. Important : Lorsque des enregistrements sont envoys et reus par ENVOYER ENREGISTREMENT et RECEVOIR ENREGISTREMENT, la structure de la table source et celle de la table de destination doivent tre compatibles. Si ce n'est pas le cas, 4D convertira les valeurs en fonction des dfinitions des tables lorsque RECEVOIR ENREGISTREMENT sera excute. Note : Si vous envoyez un enregistrement un document avec cette commande, le document doit avoir t ouvert par la commande REGLER SERIE. Vous ne pouvez pas utiliser ENVOYER ENREGISTREMENT avec un document ouvert par Ouvrir document, Ajouter a document ou Creer document. Exemple Reportez-vous l'exemple de la commande RECEVOIR ENREGISTREMENT. Rfrence ENVOYER VARIABLE, RECEVOIR ENREGISTREMENT, RECEVOIR VARIABLE.

270

4e Dimension - Langage

RECEVOIR ENREGISTREMENT

Communications version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

RECEVOIR ENREGISTREMENT {(table)} Paramtre table Type Table Description Table dans laquelle recevoir l'enregistrement ou Table par dfaut si ce paramtre est omis

Description RECEVOIR ENREGISTREMENT ajoute dans table un enregistrement reu par l'intermdiaire du port srie ou d'un document ouvert par la commande REGLER SERIE. L'enregistrement doit avoir t envoy par la commande ENVOYER ENREGISTREMENT. Lorsque vous excutez RECEVOIR ENREGISTREMENT, un nouvel enregistrement est automatiquement cr dans table. Si l'enregistrement a t correctement reu, vous pouvez le sauvegarder l'aide de STOCKER ENREGISTREMENT. L'enregistrement est reu en totalit, ce qui signifie que tous les sous-enregistrements, images et BLOBs stocks dans l'enregistrement sont galement reus. Important : Lorsque des enregistrements sont envoys et reus par ENVOYER ENREGISTREMENT et RECEVOIR ENREGISTREMENT, la structure de la table source et celle de la table de destination doivent tre compatibles. Si ce n'est pas le cas, 4D convertira les valeurs en fonction des dfinitions des tables lorsque RECEVOIR ENREGISTREMENT sera excute. Notes 1. Si vous recevez un enregistrement provenant d'un document avec cette commande, le document doit avoir t ouvert par la commande REGLER SERIE. Vous ne pouvez pas utiliser RECEVOIR ENREGISTREMENT avec un document ouvert par Ouvrir document, Ajouter a document ou Creer document. 2. Pendant l'excution d'un RECEVOIR ENREGISTREMENT, l'utilisateur peut interrompre l'opration en appuyant sur les touches Ctrl+Alt+Maj (sous Windows) ou Commande+Option+Maj (sous MacOS). Cette interruption gnre une erreur 9994 que vous pouvez intercepter l'aide d'une mthode installe par la commande APPELER SUR ERREUR. Gnralement, vous devez grer les interruptions d'une rception uniquement lors d'une communication srie.

4e Dimension - Langage

271

Exemple L'utilisation combine de ENVOYER VARIABLE, ENVOYER ENREGISTREMENT, RECEVOIR VARIABLE et RECEVOIR ENREGISTREMENT est idale pour archiver des donnes ou changer des donnes entre des bases monopostes identiques utilises diffrents endroits. Certes, vous pouvez changer des donnes entre des bases 4D l'aide des commandes d'import/export telles que ECRITURE ASCII et LECTURE ASCII. Cependant, si vos donnes contiennent des images, des sous-tables et/ou des tables lies, l'utilisation de ENVOYER ENREGISTREMENT et RECEVOIR ENREGISTREMENT s'avre, de loin, plus pratique. Par exemple, la documentation que vous tes en train de lire a t cre l'aide de 4D et 4D Write. Comme plusieurs rdacteurs bass dans diffrents pays travaillaient sur ce projet, nous avions besoin d'un systme simple pour changer les donnes entre les diffrentes bases. Voici une vue simplifie de la structure de la base :

La table [Commands] contient la description de chaque commande ou section. Les tables [CM US Params] et [CM FR Params] contiennent respectivement les paramtres de chaque commande en anglais et en franais. La table [CM See Also] contient les commandes indiques en tant que Rfrences pour chaque commande ou section. L'change de la documentation entre les bases consiste donc envoyer les enregistrements de [Commands] ainsi que leurs enregistrements lis. Pour cela, nous utilisons ENVOYER ENREGISTREMENT et RECEVOIR ENREGISTREMENT. De plus, nous utilisons ENVOYER VARIABLE et RECEVOIR VARIABLE pour "cocher" les enregistrements imports/exports.

272

4e Dimension - Langage

Voici la mthode projet (simplifie) d'export de la documentation : ` Mthode projet CM_EXPORT_SEL ` Cette mthode fonctionne avec la slection courante de la table [Commands]

REGLER SERIE(12;"") ` Laissons l'utilisateur crer et ouvrir un document srie Si (OK=1) ` Marquons le document avec une variable dcrivant son contenu ` Note: la variable process BUILD_LANG indique si des donnes US (anglaises) ` ou FR (franaises) sont envoyes $vsTag:="4DV6COMMAND"+BUILD_LANG ENVOYER VARIABLE($vsTag) ` Envoyer une variable indiquant combien de [Commands] sont exportes $vlNbCmd:=Enregistrements trouves([Commands]) ENVOYER VARIABLE($vlNbCmd) DEBUT SELECTION([Commands]) ` Pour chaque commande Boucle ($vlCmd;1;$vlNbCmd) ` Envoyer l'enregistrement [Commands] ENVOYER ENREGISTREMENT([Commands]) ` Slection de tous les enregistrements lis LIEN RETOUR([Commands]) ` En fonction de la langue, envoyer une variable indiquant ` le nombre de paramtres qui va suivre Au cas ou : (BUILD_LANG="US") $vlNbParm:=Enregistrements trouves([CM US Params]) : (BUILD_LANG="FR") $vlNbParm:=Enregistrements trouves([CM FR Params]) Fin de cas ENVOYER VARIABLE($vlNbParm) ` Envoyer les enregistrements des paramtres (s'il y en a) Boucle ($vlParm;1;$vlNbParm) Au cas ou : (BUILD_LANG="US") ENVOYER ENREGISTREMENT([CM US Params]) ENREGISTREMENT SUIVANT([CM US Params]) : (BUILD_LANG="FR") ENVOYER ENREGISTREMENT([CM FR Params]) ENREGISTREMENT SUIVANT([CM FR Params]) Fin de cas Fin de boucle ` Envoyer une variable indiquant combien de Rfrences vont suivre $vlNbSee:=Enregistrements trouves([CM See Also])

4e Dimension - Langage

273

ENVOYER VARIABLE($vlNbSee) ` Envoyer les enregistrements [See Also] (s'il y en a) Boucle ($vlSee;1;$vlNbSee) ENVOYER ENREGISTREMENT([CM See Also]) ENREGISTREMENT SUIVANT([CM See Also]) Fin de boucle ` Aller l'enregistrement [Commands] suivant et continuer l'export ENREGISTREMENT SUIVANT([Commands]) Fin de boucle REGLER SERIE(11) ` Fermer le document Fin de si

Voici la mthode projet (simplifie) d'import de la documentation : ` Mthode projet CM_IMPORT_SEL


REGLER SERIE(10;"") ` Laissons l'utilisateur ouvrir un document existant Si (OK=1) ` Si un document a t ouvert RECEVOIR VARIABLE($vsTag) ` Essayons de recevoir la variable marqueur attendue Si ($vsTag="4DV6COMMAND@") ` Avons-nous le bon marqueur ? ` Extrayons la langue du marqueur $CurLang:=Sous chaine($vsTag;Longueur($vsTag)-1) Si (($CurLang="US") | ($CurLang="FR")) ` Avons-nous reu un langage valide ? ` Combien de commandes dans ce document ? RECEVOIR VARIABLE($vlNbCmd) Si ($vlNbCmd>0) ` S'il en existe une au moins ` Pour chaque enregistrement [Commands] archiv Boucle ($vlCmd;1;$vlNbCmd) ` Rception de l'enregistrement RECEVOIR ENREGISTREMENT([Commands]) ` Appelons une sous-routine qui sauvegarde le nouvel ` enregistrement ou le copie dans un enregistrement existant CM_IMP_CMD ($CurLang) ` Rception du nombre de paramtres (s'il y en a) RECEVOIR VARIABLE($vlNbParm) Si ($vlNbParm>=0) ` Appelons une sous-routine qui appelle RECEVOIR ` ENREGISTREMENT puis stocke les nouveaux enregistrements ou ` les copie dans des enregistrements existants CM_IMP_PARM ($vlNbParm;$CurLang) Fin de si

274

4e Dimension - Langage

` Rception du nombre de Rfrences (s'il y en a) RECEVOIR VARIABLE($vlNbSee) Si ($vlNbSee>0) ` Appelons une sous-routine qui appelle RECEVOIR ` ENREGISTREMENT puis stocke les nouveaux enregistrements ` ou les copie dans des enregistrements existants CM_IMP_SEEA ($vlNbSee;$CurLang) Fin de si Fin de boucle Sinon ALERTE("Le nombre de commandes dans ce document d'export est invalide.") Fin de si Sinon ALERTE("Le langage de ce document d'export est inconnu.") Fin de si Sinon ALERTE("Ce document n'est pas un document d'export.") Fin de si REGLER SERIE(11) ` Fermer document Fin de si

Notez que nous n'avons pas test la variable OK pendant la rception des donnes, ni intercept les ventuelles erreurs. Cependant, comme nous avons stock dans le document des variables dcrivant le document lui-mme, si ces variables, une fois reues, sont correctes, la probabilit d'erreur est trs faible. Si par exemple un utilisateur ouvre un mauvais document, le premier test stoppe toute l'opration. Rfrence ENVOYER ENREGISTREMENT, ENVOYER VARIABLE, RECEVOIR VARIABLE. Variables et ensembles systme La variable systme OK prend la valeur 1 si l'enregistrement est correctement reu, sinon elle prend la valeur 0.

4e Dimension - Langage

275

276

4e Dimension - Langage

9 ________________________ Compilateur

4e Dimension - Langage

277

278

4e Dimension - Langage

Commandes du thme Compilateur

Compilateur version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le compilateur intgr de 4e Dimension vous permet de traduire vos applications de base de donnes en instructions de niveau assembleur. Les avantages procurs par le compilateur sont les suivants : Vitesse : votre base de donnes s'excute de 3 1000 fois plus vite. Vrification du code : la cohrence interne du code de votre application de base de donnes est entirement contrle. Les conflits de logique et de syntaxe sont dtects. Protection : une fois votre base compile, vous pouvez en supprimer le code interprt. Alors, la base compile dispose des mmes fonctionnalits que la base originale, la diffrence prs que la structure et les mthodes ne peuvent plus tre visualises ni modifies dlibrment ou par inadvertance. Application indpendantes "double-cliquables" : une base compile peut galement tre transforme en application indpendante (sous Windows, des fichiers ".EXE") comportant sa propre icne. Pour une description du fonctionnement du compilateur de 4e Dimension, reportez-vous au manuel Mode Structure. Les commandes de ce thme sont lies l'utilisation du compilateur. Elles vous permettent de normaliser les types de donnes exploites dans votre base. La commande APPELER 4D est utilise spcifiquement dans les bases compiles. C_BLOB C_BOOLEEN C_DATE C_GRAPHE C_ENTIER C_ENTIER LONG C_IMAGE C_POINTEUR C_REEL C_ALPHA C_TEXTE C_HEURE APPELER 4D

A l'exception d'APPELER 4D, ces commandes dclarent des variables et leur assignent un type. La dclaration des variables permet de lever toute ambigut en ce qui concerne leur type. Lorsqu'une variable n'est pas dclare par l'une de ces commandes, le compilateur dduit son type. Mais il lui est souvent difficile de dduire le type d'une variable utilise dans les formulaires. Par consquent, il est particulirement important d'utiliser ces commandes pour dclarer les variables places dans les formulaires. Note : Pour gagner du temps, vous pouvez utiliser l'option de gnration et de mise jour des mthodes de typage (appeles Mthodes compilateur), propose dans la fentre du compilateur. Cette option cre automatiquement des mthodes de typage recensant et donnant un type l'ensemble des variables utilises dans la base.

4e Dimension - Langage

279

Les tableaux sont des variables devant respecter les mmes rgles que les variables standard en vue de la compilation. Les commandes de dclaration des tableaux sont groupes dans le thme Tableaux. Principes gnraux d'criture de code destin tre compil Vous ne devez pas donner le mme nom des mthodes ou des variables diffrentes. Vous ne devez pas avoir une mthode qui aurait le mme nom quune variable. Vous ne pouvez pas modifier le type d'une variable ou d'un tableau. Vous ne pouvez pas convertir un tableau simple en tableau deux dimensions, et viceversa. Vous ne pouvez pas modifier la longueur d'une variable chane ni celle des lments d'un tableau alphanumrique. Bien que le compilateur dduise le type des variables si ncessaire, il est conseill de dclarer le type des variables l'aide des directives de compilation lorsque le type de donnes est ambigu, en particulier dans un formulaire. Une autre raison de dclarer explicitement le type des variables est l'optimisation de votre code. Cela est particulirement vrai pour les variables utilises comme compteurs. Dans ce cas, l'utilisation de variables de type Entier long assure un maximum de performances. Pour effacer une variable (c'est--dire l'initialiser une valeur nulle), utilisez la commande EFFACER VARIABLE avec le nom de la variable. N'utilisez pas de chane alphanumrique pour dsigner le nom de la variable avec la commande EFFACER VARIABLE. La fonction Indefinie retournera toujours Faux. Les variables sont toujours dfinies. Les oprations numriques effectues sur des variables de type Entier long ou Entier sont gnralement beaucoup plus rapides que celles effectues sur des valeurs Numrique (rel). Les indirections de variables, utilises dans la version 3 de 4D, ne sont pas permises. Vous ne pouvez pas utiliser l'indirection alphanumrique, l'aide du symbole 'paragraphe' (), pour rfrencer des variables indirectement. Vous ne pouvez pas non plus utiliser les indirections numriques, l'aide des accolades ({...}). Les accolades ne peuvent tre utilises que pour accder un lment de tableau ayant t dclar. En revanche, vous pouvez utiliser le passage de paramtres.

280

4e Dimension - Langage

Ces principes sont dtaills dans les sections suivantes : Utilisation des directives de compilation, expliquant quand et o crire des directives de compilation Guide du typage, dcrivant les diffrents types de conflits pouvant se produire lors de la compilation des bases 4e Dimension, Prcisions de syntaxe, fournissant des informations supplmentaires concernant plusieurs commandes 4e Dimension, Conseils d'optimisation, proposant des conseils permettant d'acclrer l'excution des applications en mode compil. Exemples (1) Voici quelques dclarations de variables standard pour le compilateur :

C_BLOB(vxMonBlob) ` La variable process vxMonBlob est dclare avec le type BLOB C_BOOLEEN(SousWindows) ` La variable interprocess SousWindows est dclare avec le type boolen C_DATE($vdCurDate) ` La variable locale $vdCurDate est dclare avec le type Date C_GRAPHE(vg1;vg2;vg3) ` Les 3 variables process vg1, vg2 et vg3 sont dclares avec le type Graphe

(2) Dans cet exemple, la mthode projet uneMthodeParmiD'Autres dclare 3 paramtres: ` Mthode projet uneMthodeParmiD'Autres ` uneMthodeParmiD'Autres ( Numrique ; Entier { ; Entier long } ) ` uneMthodeParmiD'Autres ( Montant ; Pourcentage { ; Ratio } )

C_REEL($1) ` le 1er paramtre est du type Rel (Numrique) C_ENTIER($2) ` le 2e paramtre est du type Entier C_ENTIER LONG($3) ` le 3e paramtre est du type Entier long ` ...

(3) Dans l'exemple suivant, la mthode projet ajoutCapitale accepte un paramtre de type Chane et retourne une chane : ` Mthode projet ajoutCapitale ` ajoutCapitale ( Alpha ) -> Alpha ` ajoutCapitale ( Chane source ) -> Chane avec la premire lettre capitale

C_ALPHA(255;$0;$1) $0:=Majusc(Sous chaine($1;1;1))+Minusc(Sous chaine($1;2))

4e Dimension - Langage

281

(4) Dans l'exemple suivant, la mthode projet envoyerPaquets accepte un paramtre de type Heure suivi d'un nombre variable de paramtres de type Texte : ` Mthode projet envoyerPaquets ` envoyerPaquets ( Heure ; Texte { ; Texte2... ; TextN } ) ` envoyerPaquets ( docRef ; Donnes { ; Donnes2... ; DonnesN } )

C_HEURE ($1) C_TEXTE (${2}) C_ENTIER LONG ($vlPaquet) Boucle ($vlPaquet;2;Nombre de parametres) ENVOYER PAQUET ($1;${$vlPaquet}) Fin de boucle

(5) Dans l'exemple suivant, la mthode projet compiler_Param_Prdclare28 pr-dclare la syntaxe d'autres mthodes projet, l'intention du compilateur : ` Mthode projet compiler_Param_Prdclare28

C_REEL(uneMthodeParmiDautres;$1) ` uneMthodeParmiDautres ( Rel ; Entier { ; Entier long } ) C_ENTIER(uneMthodeParmiDautres;$2) ` ... C_ENTIER LONG(uneMthodeParmiDautres;$3) ` ... C_ALPHA(ajoutCapitale;255;$0;$1) ` ajoutCapitale ( Alpha ) -> Alpha C_HEURE(envoyerPaquets;$1) ` envoyerPaquets ( Heure ; Texte { ; Texte2... ; TexteN } ) C_TEXTE(envoyerPaquets;${2}) ` ...

Rfrence APPELER 4D, C_ALPHA, C_BLOB, C_BOOLEEN, C_DATE, C_ENTIER, C_ENTIER LONG, C_GRAPHE, C_HEURE, C_IMAGE, C_POINTEUR, C_REEL, C_TEXTE.

282

4e Dimension - Langage

Utilisation des directives de compilation

Compilateur version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Typage des variables


________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension utilise trois catgories de variables : les variables locales, les variables process, les variables interprocess. Pour plus d'informations sur ce point, reportez-vous la section Variables. Les variables process et les variables interprocess sont structurellement de mme nature pour le compilateur. Types des variables Toutes les variables ont un type. Comme dcrit dans la section Types de donnes, vous disposez de 12 types pour les variables simples : Boolen Alphanumrique (ou Chane fixe) Date Entier Entier long Graphe Heure Image Numrique (ou Rel) Pointeur Texte BLOB Pour les variables de type Tableau, vous disposez des 9 types suivants : Tableau Boolen Tableau Alpha (ou Chane fixe) Tableau Date Tableau Entier Tableau Entier long Tableau Image Tableau Numrique (ou Rel) Tableau Pointeur Tableau Texte Cration de la table des symboles Lorsque vous travaillez avec 4e Dimension en mode interprt, une variable peut avoir plusieurs types. Cette tolrance se justifie parfaitement puisque vous tes en mode interprt. En effet, chaque ligne de code, 4e Dimension interprte linstruction et comprend le contexte. 4e Dimension - Langage 283

Lorsque vous travaillez en mode compil, vous tes dans une situation diffrente. Alors que linterprtation agit ligne par ligne, la compilation sintresse une base dans sa globalit. La manire doprer du compilateur est la suivante : Le programme explore systmatiquement les objets qui lui sont proposs par 4e Dimension. Ces objets sont les mthodes base, les mthodes projet, les mthodes formulaire, les mthodes table (triggers) et les mthodes objet. Le programme peigne ces objets pour retrouver le type de chacune des variables utilises dans la base et gnre la table des variables et des mthodes. Une fois quil a retrouv le type de toutes les variables, le compilateur traduit la base. Encore faut-il quil puisse identifier un type dune manire univoque pour chacune des variables. Si le compilateur trouve un mme nom de variable avec deux types diffrents, il na aucune raison de privilgier lun par rapport lautre. En dautres termes, avant de pouvoir ranger un objet, de lui donner une adresse mmoire, le compilateur a besoin de connatre lidentit exacte de cet objet, cest--dire son nom et son type, le type permettant au compilateur de dduire sa taille. Ainsi, pour chaque application compile, le compilateur cre un plan, contenant, pour chaque variable, son nom (ou identificateur), son emplacement (ou adresse mmoire) et la taille quelle occupe (reprsente par son type). Ce plan sappelle la table de symboles. Une option des Prfrences vous permet de gnrer ou non cette table sous forme de fichier lors de la compilation. Ce plan est galement utilis pour la gnration automatique des mthodes compilateur. Typage des variables Le compilateur doit respecter les critres didentification des variables. Il existe deux possibilits : Si les variables ne sont pas types, le compilateur sen occupera automatiquement pour vous. Toutes les fois que cest possible, dans la mesure o il ny a pas dambiguts, le compilateur dduit automatiquement pour vous le type des variables utilises. Si, par exemple, vous crivez : V1 := Vrai le compilateur pourra en dduire que la variable V1 est de type Boolen. De mme, si vous crivez : V2:= "Ceci est une phrase exemple" le compilateur en dduira que V2 est une variable de type Texte. Le programme peut galement dduire le type des variables dans des cas moins faciles : V3:= V1 `V3 est du mme type que V1 V4:= 2*V2 `V4 est du mme type que V2

284

4e Dimension - Langage

Le compilateur dduit galement le type de vos variables daprs les appels aux commandes 4e Dimension et vos propres mthodes. Si vous passez une mthode un paramtre de type Boolen et un paramtre de type Date, le compilateur donnera le type Boolen et le type Date aux variables locales $1 et $2 de la mthode appele. Lors de ces dductions, sauf indication contraire dans les Prfrences, le compilateur ne donne pas vos variables des types limitatifs : Entier, Entier long ou Alphanumrique. Par dfaut, le compilateur donne toujours le type le plus large possible vos variables. Si vous crivez : LeNombre :=4 le compilateur donnera la variable LeNombre le type Rel, mme si en toute rigueur la valeur 4 est entire. En dautres termes, le compilateur nexclut pas que dans dautres occurrences de la variable, la valeur puisse tre 4,5. Si vous ne voulez pas de cette interprtation gnrale, vous pouvez prciser vos choix : cest lobjet de ce quon appelle les directives de compilation. Les directives de compilation servent dclarer de faon explicite les variables simples que vous utilisez dans vos bases. Leur utilisation se fait de la faon suivante : C_BOOLEEN(Var) Par cette directive, vous forcez le compilateur crer une variable Var dont le type sera Boolen. Dans le cas o une application comporte des directives de compilation, le compilateur les dtecte et na pas se livrer une quelconque estimation. Une directive a la priorit sur une dduction partir dune affectation ou dune utilisation. Les variables simples dclares par la directive de compilation C_ENTIER sont considrs comme des Entiers longs, compris entre 2147483648 et +2147483647 comme pour les variables dclares par la directive C_ENTIER LONG. Quand utiliser des directives de compilation ?
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les directives de compilation sont utiles dans deux cas : lorsque le compilateur ne peut pas dduire seul le type dune variable, lorsque vous voulez viter que le compilateur fasse des dductions. Par ailleurs, utiliser des directives de compilation peut vous permettre de rduire le temps de compilation. Cas dambigut Il arrive que le compilateur ne puisse pas dduire le type dune variable, et cela pour plusieurs raisons. Il est impossible de recenser tous les cas de figure. Une chose est certaine, cest quen cas dimpossibilit compiler, le compilateur vous en donnera la raison prcise ainsi que les moyens dy remdier.

4e Dimension - Langage

285

On peut cependant distinguer trois causes majeures dhsitation pour le compilateur : lambigut proprement dite, lambigut sur une dduction force, et limpossibilit totale de dduire un type. Lambigut proprement dite Lambigut sur le nom de la variable est gnr dans le cas suivant : le compilateur choisit la premire variable quil rencontre et assigne arbitrairement la suivante, de mme nom mais de type diffrent, le type quil a prcdemment attribu. Prenons un exemple simple : dans une mthode A, LaVariable:=Vrai dans une mthode B, LaVariable:="La lune est verte" Dans le cas o la mthode A est compile avant la mthode B, le compilateur considrera que LaVariable:="La lune est verte" est un changement de type dune variable prcdemment rencontre. Il vous signalera quil y a retypage. Il gnre une erreur quil vous appartient de corriger. Ne vous inquitez pas, le compilateur ne transformera pas votre variable LaVariable:="La lune est verte" en variable boolenne sans vous demander ce que vous en pensez ! Lambigut sur une dduction force Il peut arriver que le compilateur dduise un type sur un objet qui ne convient pas son utilisation finale. Dans ce cas, vous devrez typer explicitement vos variables laide des directives de compilation. Voici un exemple de cas dambigut lors de lutilisation des listes de valeurs par dfaut sur un objet : dans les formulaires, il est possible de spcifier une liste de valeurs par dfaut pour les objets de type combo box, pop up menu, menu/liste droulante, onglet, zone de dfilement et liste droulante laide du bouton ddition Valeurs (voir ce sujet le manuel Mode Structure de 4e Dimension). Les valeurs par dfaut sont automatiquement charges dans un tableau dont le nom est le mme que celui de lobjet. Dans le cas simple o lobjet nest pas utilis dans une mthode, le compilateur peut dduire son type sans ambigut et lobjet sera typ en tableau texte par dfaut. En revanche, dans le cas o vous devez initialiser la position de votre tableau pour son affichage dans le formulaire, vous pouvez crire les instructions suivantes dans la mthode formulaire : Au cas ou : (Evenement formulaire=Sur chargement) MonPopUp:=2 ... Fin de cas

286

4e Dimension - Langage

Cest dans ce cas que lambigut apparat : lors de lanalyse des mthodes, le compilateur dduira par dfaut le type Rel pour la variable MonPopUp. Dans ce cas trs prcis, vous devez explicitement dclarer le tableau dans une mthode compilateur ou dans la mthode formulaire : Au cas ou : (Evenement formulaire=Sur chargement) TABLEAU TEXTE(MonPopUp;2) MonPopUp:=2 ... Fin de cas Limpossibilit totale de dduire un type Dans ce cas, seule une directive de compilation peut orienter le compilateur. Le compilateur peut se trouver dans cette situation lorsquune variable est utilise sans tre dclare et dans un cadre qui ne donne aucune information sur son type possible. Le phnomne se produit principalement dans quatre cas : - lorsque vous utilisez des pointeurs, - lorsque vous utilisez une commande syntaxe multiple, - lorsque vous utilisez une commande 4D avec des paramtres optionnels de types diffrents, - lorsque vous utilisez une mthode appele via un URL. - Cas des pointeurs Un pointeur tant un outil universel qui a donc pour premire caractristique la flexibilit, il est inutile desprer quil renvoie un type dune manire ou dune autre, hormis le sien propre. Supposons que vous criviez dans une mthode la squence suivante : LaVar1:=5,2 (1) LePointeur:=->LaVar1 (2) LaVar2:=LePointeur-> (3) Bien que la ligne (2) dfinisse le type de la variable pointe par le pointeur LePointeur, LaVar2 nest pas pour autant type. Lors de la compilation, le compilateur peut reconnatre un pointeur, mais na aucun moyen de savoir sur quel type de variable il pointe. Il ne peut donc pas dduire le type de LaVar2 ; une directive de compilation du type C_REEL(LaVar2) est donc indispensable. - Cas des commandes syntaxe multiple Lorsque vous utilisez une variable associe la fonction Annee de, la variable ne peut tre, compte tenu de la nature mme de la fonction, que de type Date. En revanche, prenons un cas extrme : la commande LIRE PROPRIETES CHAMP admet deux syntaxes : LIRE PROPRIETES CHAMP(NoTable;NoChamp;Type;Longueur;Indexe) LIRE PROPRIETES CHAMP(Pointeur_Champ;Type;Longueur;Indexe) Lorsque vous utilisez cette commande, le compilateur ne peut pas deviner quelle syntaxe et quels paramtres vous avez choisis. Il vous appartient alors dorienter le compilateur par une directive de compilation.

4e Dimension - Langage

287

- Cas des commandes 4D ayant des paramtres optionnels de types diffrents Lorsque vous utilisez une commande 4e Dimension qui accepte plusieurs paramtres optionnels de diffrents types, le compilateur ne peut pas deviner quels paramtres ont t passs. Par exemple, la commande INFORMATION ELEMENT admet deux paramtres optionnels. Le premier est de type Entier long, le second est de type Boolen. La commande peut donc tre utilise comme ceci : INFORMATION ELEMENT(liste;position;num;texte;sous-liste;dploy) ou comme cela : INFORMATION ELEMENT(liste;position;num;texte;dploy) Vous devez donc utiliser des directives de compilation pour typer les paramtres optionnels passs la commande (sils nont pas dj t typs suite leur utilisation dans un autre endroit de la base). - Cas des mthodes appeles via un URL Si vous crivez des mthodes appeles via un URL, il est ncessaire de dclarer explicitement la variable Texte $1 dans vos mthodes, par lintermdiaire de linstruction C_TEXTE($1), dans le cas o vous nutilisez pas $1 dans la mthode. En effet, le compilateur ne peut pas deviner quune mthode 4D va tre appele via un URL. Rduction du temps de compilation Si toutes les variables utilises dans votre base sont explicitement dclares, il nest pas ncessaire que le compilateur refasse tout le typage. Dans ce cas, vous pouvez lui demander deffectuer uniquement la phase de traduction de vos mthodes dans le chemin de compilation. Ainsi, vous conomiserez environ 50 % du temps de compilation. Cas doptimisation Les directives de compilation peuvent vous aider acclrer vos mthodes. Pour plus de prcision ce sujet, reportez-vous la section Conseils doptimisation. Pour nous en tenir un exemple simple dans cette section de prsentation, imaginez que vous incrmentiez un compteur. Si vous navez pas dclar la variable, le compilateur considrera par dfaut quelle est de type Numrique (ou rel). Si vous prenez soin de prciser quil sagit dun Entier, lexcution de la base compile sera plus satisfaisante. En effet, un Rel occupe, sur PC par exemple, 8 octets en mmoire alors que si vous choisissez un type limitatif, Entier ou Entier long, le compteur nen occupera que 4. Il est bien vident que lincrmentation dun compteur de 8 octets est plus longue que celle dun compteur de 4 octets.

288

4e Dimension - Langage

O placer les directives de compilation ?


________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous avez deux possibilits selon que vous voulez que le compilateur vrifie ou non votre typage. Typage des variables par le compilateur Si vous voulez que le compilateur vrifie votre typage ou bien sen charge lui-mme, placer une directive de compilation est simple. Vous avez le choix entre deux possibilits, qui correspondent dailleurs deux mthodes de travail : ou bien vous crivez cette directive lors de la premire utilisation de la variable, quil sagisse dune variable locale, process ou interprocess. La seule recommandation en la matire est que vous linscriviez bien la premire utilisation de la variable dans la premire mthode excute. Attention, lors de la compilation le compilateur prend les mthodes dans lordre de leur cration, et non dans lordre dans lequel elles apparaissent dans lExplorateur. ou bien, si vous tes systmatique, regroupez toutes vos variables process ou interprocess avec les directives affrentes dans la Mthode base Sur ouverture ou une mthode appele par la Mthode base Sur ouverture. Pour les variables locales, regroupez ces directives en tte de la mthode o elles sont utilises. Typage assur par vos soins Si vous voulez que le compilateur nait pas vrifier votre typage, vous devez lui donner les cls de lidentification de ses objets. La convention respecter est la suivante : les directives de compilation des variables process ou interprocess, ainsi que les paramtres, devront tre places dans une ou plusieurs mthodes dont le nom commence par Compiler. Par dfaut, le compilateur vous permet de gnrer automatiquement cinq types de mthodes Compilateur regroupant les directives pour les variables, les tableaux et les paramtres des mthodes (pour plus d'informations sur ce point, reportez-vous au manuel Mode Structure). Note : La dclaration des paramtres des mthodes obit la syntaxe suivante : Directive (nom de mthode; param). Cette syntaxe nest pas excutable en mode interprt. Paramtres particuliers Les paramtres reus par les mthodes base Ces paramtres sont typs par dfaut par le compilateur, si la dclaration na pas t faite explicitement. Nanmoins, si vous les dclarez, la dclaration doit se faire lintrieur des mthodes base. La dclaration de ces paramtres ne peut pas se faire dans une mthode compilateur. Exemple : la Mthode base Sur connexion Web reoit six paramtres $1 $6 de type texte. En dbut de mthode, vous devez crivez : C_TEXTE($1;$2;$3;$4;$5;$6) Les triggers Le paramtre $0 (Entier long), rsultat d'un trigger, est typ par dfaut par le compilateur, si la dclaration na pas t faite explicitement. Nanmoins si vous le dclarez, la dclaration doit se faire lintrieur du trigger. La dclaration de ce paramtre ne peut pas se faire dans une mthode compilateur. 4e Dimension - Langage 289

Les objets acceptant l'vnement formulaire Sur glisser Le paramtre $0 (Entier long), rsultat dun vnement formulaire Sur glisser, est typ par dfaut par le compilateur, si la dclaration na pas t faite explicitement. Nanmoins si vous le dclarez, la dclaration doit se faire lintrieur de la mthode objet. La dclaration de ce paramtre ne peut pas se faire dans une mthode compilateur. Note : Le compilateur ninitialise pas le paramtre $0. Ds que vous utilisez lvnement formulaire Sur glisser, vous devez donc initialiser $0. Par exemple : C_ENTIER LONG($0) Si (Evenement formulaire=Sur glisser) $0:=0 ... Si ($TypeDeDonnes=Est une image) $0:=-1 Fin de si ... Fin de si Une syntaxe particulire : C_ALPHA La syntaxe de toutes les directives de compilation est extrmement simple ; seule la commande C_ALPHA requiert une attention particulire puisquelle admet un paramtre supplmentaire : la longueur maximale de la chane. C_ALPHA(Longueur;Var1{;Var2;;VarN}) Par dfinition, C_ALPHA porte sur des chanes fixes, il est donc naturel de donner la longueur de cette chane. A cet gard, il convient de rappeler une diffrence de comportement entre une base interprte et une base compile. Dans une base interprte, la squence suivante : LaLongueur:=15 C_ALPHA(LaLongueur; LaChaine) serait parfaitement logique. 4e Dimension interprterait LaLongueur puis remplacerait LaLongueur par sa valeur dans la directive. En revanche, le compilateur utilise cette commande durant le typage des variables et en dehors de toute affectation particulire. Il ne peut donc pas savoir que LaLongueur est gale 15. Ne connaissant pas la longueur de la chane, il ne peut pas lui rserver de place dans la table des symboles. Par consquent, dans loptique dune compilation, il convient dutiliser une constante pour spcifier la longueur de la chane de caractres dclare. Cette dclaration se fera donc de la faon suivante : C_ALPHA(15;LaChaine) Il en va de mme pour la dclaration de tableaux dalphas par la commande : TABLEAU ALPHA(LaLongueur;LeTableau;Nombre dlments) Le paramtre indiquant la longueur des chanes du tableau sera une constante.

290

4e Dimension - Langage

En revanche, vous pouvez utiliser les constantes 4D ou des valeurs hexadcimales pour spcifier la longueur des chanes dans ces deux directives de compilation. Exemple : C_ALPHA(Constante4D;LaChane) TABLEAU ALPHA(Constante4D;LeTableau;2) C_ALPHA(0x000A;LaChane) TABLEAU ALPHA(0x000A;LeTableau;2) Ne confondez pas la longueur dun champ Alphanumrique qui peut tre au maximum de 80 caractres avec une variable Alphanumrique. La longueur dune chane dclare par la directive C_ALPHA ou appartenant un TABLEAU ALPHA peut tre comprise entre 1 et 255. Note : La syntaxe de cette commande vous permet de dclarer plusieurs variables de mme longueur en une seule ligne. Si vous souhaitez dclarer plusieurs chanes fixes de longueur diffrente, il faudra le faire en plusieurs lignes. Une libert permise par le compilateur Les directives de compilation lvent toute ambigut sur les types et, pour le cas des chanes alphanumriques, sur les longueurs. Lexigence de rigueur ne se fait pas pour autant intolrance. Sil vous arrive dutiliser un Numrique l o vous avez dclar un Entier ou de manipuler une chane de 30 caractres l o vous en avez dclar une de 10, le compilateur ne considre pas quil y a conflit et suit simplement vos directives. Ainsi, si vous crivez : C_ENTIER(vEntier) vEntier:=2,6 Le compilateur ne verra pas un conflit de types de nature empcher la compilation et prendra automatiquement en compte la partie entire arrondie du nombre affect (3 au lieu de 2,6). De la mme faon, sil vous arrive de dclarer une chane plus courte que la chane que vous manipulez, le compilateur ne prend que le nombre de caractres dclars. Ainsi, dans la squence suivante : C_ALPHA(10;LaChaine) LaChaine:="Il fait trs beau aujourdhui" le compilateur prend en compte les 10 premiers caractres de la constante, soit Il fait tr. Rfrence Conseils doptimisation, Guide du typage, Messages d'erreurs, Prcisions de syntaxe.

4e Dimension - Langage

291

Guide du typage

Compilateur version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Cette section dcrit les principales causes de conflits de types sur les variables, ainsi que les manires de les viter. Conflits sur les variables simples
______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les conflits de types simples peuvent se rsumer comme suit : conflit entre deux utilisations, conflit entre une utilisation et une directive de compilation, conflit par retypage implicite, conflit entre deux directives de compilation. Conflit entre deux utilisations Le conflit de types le plus simple est celui pour lequel un mme nom de variable dsigne deux objets diffrents. Imaginez que dans une application, vous criviez : LaVariable:=5 et que, quelque part ailleurs, dans la mme application, vous criviez : LaVariable:=Vrai Vous gnrez un conflit de types. Le remde est simple : renommez lune des deux variables. Conflit entre une utilisation et une directive de compilation Imaginez que dans une application, vous criviez : LaVariable:=5 et que, quelque part ailleurs, dans la mme application, vous criviez : C_BOOLEEN(LaVariable) Le compilateur, peignant dabord les directives de compilation, fera de LaVariable un Boolen mais lorsquil dcouvrira : LaVariable:=5 il signalera un conflit de types. Ici encore, le remde est simple : renommez votre variable ou modifiez la directive de compilation. Lutilisation de variables de types diffrents dans une expression gnre des incohrences. Le compilateur signale trs logiquement les incompatibilits. Prenons un exemple simple. Vous crivez : vBoolen:=Vrai `Le compilateur dduit que vBoolen est de type Boolen C_ENTIER(<>vEntier) `Dclaration dun Entier par une directive de compilation <>vEntier:=3 `Commande compatible avec la directive de compilation LaVar:= <>vEntier+vBoolen `Opration contenant des variables dont les types sont incompatibles

292

4e Dimension - Langage

Conflit par retypage implicite Certaines fonctions renvoient des variables dun type bien prcis. Laffectation du rsultat dune de ces variables une variable dj type diffremment provoquera un conflit de types si vous ne faites pas attention. Dans une application interprte, vous pouvez crire : No_Ident:=Demander("Numro didentification") `No_Ident est de type Texte Si(Ok=1) No_Ident:=Num(No_Ident) `No_Ident est de type Numrique CHERCHER([Personnes]Id= No_Ident) Fin de si Vous gnrez ici un conflit de type sur la troisime ligne. Le remde consiste contrler le comportement de la variable. Dans certains cas, vous aurez crer des variables intermdiaires dun nom diffrent. Dans dautres cas, comme celui-ci en particulier, vous pouvez structurer diffremment votre mthode : No_Ident:=Num(Demander("Numro didentification")) `No_Ident est de type Numrique Si(Ok=1) CHERCHER([Personnes]Id=No_Ident) Fin de si Conflit entre deux directives de compilation Dclarer deux fois la mme variable par deux directives de compilation diffrentes constitue, bien sr, un retypage. Si, dans la mme base, vous crivez : C_BOOLEEN(LaVariable) C_TEXTE(LaVariable) le compilateur est confront un dilemme et vous demande quelles taient vos intentions. Le remde est simple : renommez lune des deux variables. Il ne faut pas oublier que le conflit de types pour une directive C_ALPHA peut surgir si vous modifiez la longueur maximale de la chane de caractres. Ainsi, si vous crivez : C_ALPHA(5;MaChaine) MaChaine:="Fleur" C_ALPHA(7;MaChaine) MaChaine:="Bonjour" le compilateur est dans une situation de conflit puisque dans la dclaration des variables de type Alphanumrique, il doit rserver un emplacement de taille adquate. Dans ce cas, le remde consiste donner une directive de compilation qui prenne la longueur maximale, puisque par dfaut, le compilateur acceptera une longueur infrieure. Vous pouvez donc crire : C_ALPHA(7;LaChaine) LaChaine:="Fleur" LaChaine:="Bonjour"

4e Dimension - Langage

293

Note : Si vous aviez crit deux fois C_ALPHA(7;LaChaine), cest--dire : C_ALPHA(7;LaChaine) LaChaine:="Fleur" C_ALPHA(7;LaChaine) LaChaine:="Bonjour" le compilateur laccepterait tout fait. Cest simplement redondant. Note sur les variables locales Les conflits de types pour les variables locales sont absolument identiques aux conflits de types pour les variables process et interprocess, ceci prs que ces conflits se droulent dans un espace plus restreint. Les conflits se jouent au niveau gnral de la base pour les variables process et interprocess. Les conflits se jouent au niveau particulier de la mthode pour les variables locales. Vous ne pouvez donc pas crire dans la mme mthode : $Temp:="Bonjour" et puis plus loin $Temp:=5 En revanche, vous pouvez crire dans une mthode M1 : $Temp:="Bonjour" et dans une mthode M2 : $Temp:=5 Conflits sur les variables tableau
______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les conflits possibles pour un tableau ne portent jamais sur la taille du tableau. En mode compil comme en mode interprt, les tableaux sont grs dynamiquement. La taille dun tableau peut varier au fil des mthodes et vous navez pas, bien sr, dclarer une taille maximale pour un tableau. Vous pouvez, en consquence, dimensionner un tableau zro, ajouter ou retirer des lments, en effacer le contenu. Dans loptique de la compilation, et ce, dans une mme mthode, pour un tableau local ou dans toute la base pour un tableau process ou interprocess, vous devez veiller aux points suivants : ne pas changer le type des lments du tableau, ne pas changer le nombre de dimensions dun tableau, dans le cas des tableaux Alpha, ne pas changer la longueur des chanes de caractres. Changement de type des lments dun tableau Si vous dclarez un tableau comme tant un tableau dEntiers, il doit rester un tableau dEntiers pour toute la base. Il ne pourra jamais contenir, par exemple, des lments de type Boolen. Si, dans une application, vous crivez : TABLEAU ENTIER(LeTableau;5) TABLEAU BOOLEEN(LeTableau;5) le compilateur ne peut identifier pour vous le type de LeTableau. Renommez simplement lun des deux tableaux.

294

4e Dimension - Langage

Changement du nombre de dimensions dun tableau En version interprte, il peut vous arriver de changer le nombre de dimensions dun tableau. Lorsque le compilateur tablit sa table des symboles, il gre diffremment les tableaux une dimension et les tableaux deux dimensions. En consquence, un tableau dclar une fois comme tant un tableau une dimension ne peut tre re-dclar ou utilis comme un tableau deux dimensions et vice versa. Dans une mme base, vous ne pouvez donc pas avoir : TABLEAU ENTIER(LeTableau1;10) TABLEAU ENTIER(LeTableau1;10;10) En revanche, vous pouvez, videmment, avoir dans la mme application TABLEAU ENTIER(LeTableau1;10) TABLEAU ENTIER(LeTableau2;10;10) Par ailleurs, vous pouvez parfaitement crire : TABLEAU BOOLEEN(LeTableau;5) TABLEAU BOOLEEN(LeTableau;10) Comme vous pouvez le noter dans nos exemples, cest le nombre de dimensions dun tableau quon ne peut changer en cours dapplication et non la valeur des dimensions du tableau. Note : Un tableau deux dimensions est en fait un ensemble de plusieurs tableaux une dimension. Pour plus de prcisions, reportez-vous la section Tableaux deux dimensions. Cas des tableaux de chanes fixes Les tableaux de chanes fixes, aussi appels tableaux Alpha, suivent la mme rgle que les variables Alphanumriques et pour les mmes raisons. Si vous crivez : TABLEAU ALPHA(5;LeTableau;10) TABLEAU ALPHA(10;LeTableau;10) le compilateur dtecte un conflit de longueur. Le remde est simple : comme dans les chanes Alpha, vous dclarez la longueur maximale. Le compilateur gre automatiquement les longueurs infrieures. Retypages implicites Lors de lutilisation des commandes COPIER TABLEAU, ENUMERATION VERS TABLEAU, TABLEAU VERS ENUMERATION, SELECTION VERS TABLEAU, SELECTION LIMITEE VERS TABLEAU, TABLEAU VERS SELECTION, VALEURS DISTINCTES, vous pouvez, volontairement ou involontairement, tre conduit des changements de type dlments ou de nombre de dimensions, ou pour un tableau Alpha, des changements de longueur de chane. Vous vous retrouverez donc dans un des trois cas cits prcdemment. Le compilateur vous dlivrera un message derreur et la correction que vous aurez faire sera en gnral vidente. Des exemples de retypage implicite de tableaux sont fournis dans la section Prcisions de syntaxe. Tableaux locaux Si vous souhaitez compiler une base de donnes qui utilise des tableaux locaux (tableaux visibles uniquement par les mthodes qui les ont crs), il est ncessaire de les dclarer explicitement dans 4D avant de les utiliser.

4e Dimension - Langage

295

La dclaration explicite dun tableau signifie lutilisation dune commande de type TABLEAU REEL, TABLEAU ENTIER, etc. Par exemple, si une mthode gnre un tableau local dentiers contenant 10 valeurs, vous devez crire au pralable la ligne suivante : TABLEAU ENTIER($MonTableau;10) Typage des variables dessines dans les formulaires
______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les variables dessines dans un formulaire, quil sagisse dune case cocher ou dune zone externe, sont toutes des variables soit process, soit interprocess. En mode interprt, la question des types de ces variables ne se pose pas dans la pratique. Elle peut se poser, en revanche, dans loptique dune application compile. Les rgles du jeu sont cependant transparentes : soit vous avez typ votre variable, soit le compilateur lui attribue un type par dfaut qui peut tre dfini dans les Prfrences de compilation (voir le manuel Mode Structure). Variables considres par dfaut comme des Numriques Les variables suivantes sont considres comme des Numriques par dfaut : Case cocher Case a cocher 3D Bouton Bouton invers Bouton invisible Bouton 3D Bouton image Grille de boutons Bouton radio Bouton radio 3D Radio image Menu image Menu droulant hirarchique Liste hirarchique Rgle Cadran Thermomtre Note : Les variables de type Rgle, Cadran et Thermomtre seront toujours types comme des Numriques, mme si vous avez choisi loption Entier long par dfaut pour le type des boutons dans les Prfrences. Pour ces variables, vous ne pouvez jamais vous trouver dans un conflit de types puisquelles ne peuvent avoir dautres types que ce type-l, quon soit en interprt ou en compil. Les seuls conflits de types possibles sur lune de ces variables viendraient du fait que le nom dune variable serait le mme que celui dune autre variable place un autre endroit dans lapplication. Dans ce cas, le remde consiste renommer cette deuxime variable.

296

4e Dimension - Langage

Variable Graphe Une zone de graphe a automatiquement le type Graphe (Entier long). Il ne peut jamais y avoir de conflit de type. Les seuls conflits de type possibles sur une variable de type Graphe viendraient du fait que le nom de cette variable serait le mme que celui dune autre variable place un autre endroit dans lapplication. Dans ce cas, le remde consiste renommer cette deuxime variable. Variable Zone externe Une zone externe est toujours un Entier long. Il ne peut jamais y avoir de conflit de types. Les seuls conflits de types possibles sur une variable Zone externe viendraient du fait que le nom de cette variable serait le mme que celui dune autre variable place un autre endroit dans lapplication. Dans ce cas, le remde consiste renommer cette deuxime variable. Variables considres par dfaut comme du Texte Ces variables sont les suivantes : Variable non-saisissable, Variable saisissable, Liste droulante, Menu/liste droulante, Zone de dfilement, Combo box, Pop-up Menu, Onglet. Ces variables se divisent en deux catgories : les variables simples (variables saisissables et variables non-saisissables), les variables daffichage de tableaux (listes droulantes, menus/listes droulantes, zone de dfilement, pop-up menu, combo box, onglets). Variables simples Par dfaut, ces variables reoivent le type Texte. Si elles sont utilises dans une mthode objet ou une mthode formulaire, cest le type que vous avez choisi qui leur sera attribu. Vous navez aucun risque de conflit de types autre que celui qui serait gnr par une attribution pralable du mme nom une autre variable. Variables daffichage de tableaux De nombreuses variables vous servent afficher des tableaux dans les formulaires. Si les valeurs par dfaut ont t saisies au niveau des contrles de saisie des variables en mode structure, il est conseill de typer les variables correspondantes explicitement par une dclaration de type tableau (TABLEAU ALPHA, TABLEAU TEXTE...).

4e Dimension - Langage

297

Questions de type autour des pointeurs


______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Si vous utilisez des pointeurs dans vos applications, vous avez pu profiter de la puissance et de la flexibilit de cet outil dans 4e Dimension. Le compilateur en conserve intgralement les avantages. Un pointeur peut pointer indiffremment sur une table, une variable ou un champ. Un mme pointeur peut pointer sur des variables de type diffrent : veillez ne pas gnrer des conflits artificiellement, en attribuant une mme variable des types diffrents. Faites simplement attention ne pas changer en cours de route le type de la variable sur laquelle pointe le pointeur en faisant, par exemple, une manipulation du type suivant : LaVariable:=5,3 LePointeur:=-> LaVariable LePointeur->:=6,4 LePointeur->:=Faux Dans ce cas de figure, votre pointeur dpoint est une variable Numrique. En affectant cette variable une valeur boolenne, vous provoquez un conflit de types. Si vous avez besoin dans une mme mthode dutiliser les pointeurs pour des propos diffrents, prenez soin de dfinir votre pointeur : LaVariable:=5,3 LePointeur:=-> LaVariable LePointeur->:=6,4 LeBool:=Vrai LePointeur:=->LeBool LePointeur->:=Faux Un pointeur na aucune existence propre. Il est toujours dfini en fonction de lobjet quil reprsente. Cest pourquoi le compilateur ne peut pas dtecter des conflits de types gnrs par une utilisation sans contrle des pointeurs. Vous naurez donc pas, en cas de conflit, de message derreur durant la phase de typage ou celle de compilation. Cela ne veut pas dire que lorsque vous utilisez des pointeurs, vous travaillez sans filet. Le compilateur peut vrifier vos utilisations de pointeurs lorsque vous cochez loption Contrle dexcution dans les Prfrences de compilation (cf. manuel Mode Structure). Plug-ins
______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Gnralits Le compilateur a besoin, au moment de la compilation, des dfinitions des commandes des plug-ins utilises dans la base compiler, cest--dire du nombre et du type des paramtres de ces commandes. Les risques derreur de typage sont inexistants partir du moment o le compilateur trouve effectivement dans lapplication ce que vous avez dclar.

298

4e Dimension - Langage

Placez vos plug-ins PC dans le rpertoire WIN4DX et vos plug-ins Macintosh dans le dossier MAC4DX, l'un des emplacements autoriss par 4e Dimension : ct du fichier de structure de la base, ct de lapplication excutable (Windows) / dans le progiciel (MacOS), ou dans le dossier 4D actif du poste (pour plus d'informations, reportez-vous au Guide d'installation de 4e Dimension). Le compilateur ne duplique pas le fichier mais tient compte des dclarations des commandes sans rien vous demander en supplment. Si vos plug-ins sont placs ailleurs, le compilateur vous demande de les localiser lors du typage, via une bote de dialogue douverture de documents. Compilation multi-plate-forme Compilation indpendante de plate-forme sous Windows Si vous souhaitez compiler sous Windows une base contenant des plug-ins destins tre excuts sur une plate-forme MacOS avec 4e Dimension ou 4D Client version MacOS ou avec des 4D Client versions MacOS et Windows, vous devez procder de la manire suivante : 1. Installez votre plug-in version MacOS sur votre Macintosh. 2. Transportez le fichier vers Windows, laide de lutilitaire 4D Transporter. 3. Sous Windows, crez un nouveau dossier et nommez-le Mac4DX. 4. Copiez les fichiers de votre plug-in transports vers Windows dans ce dossier. Le plug-in transport se compose des fichiers Nomplug-in.4CX ou Nomplug-in.4DX et Nomplug-in.RSR. 5. Placez ce dossier au mme niveau que le dossier Win4DX de la base. Compilation indpendante de plate-forme sous MacOS Si vous souhaitez compiler sous MacOS une base contenant des plug-ins destins tre excuts sur une plate-forme Windows avec 4e Dimension ou 4D Client version Windows ou 4D Client version MacOS et Windows, vous devez procder de la manire suivante : 1. Recopiez les fichiers Windows de votre plug-in sur votre Macintosh. Un plug-in version Windows se compose, par exemple, des fichiers Nomplug-in.4DX et Nomplug-in.RSR. 2. Sous MacOS, crez un nouveau dossier et nommez-le Win4DX. 3. Copiez les fichiers Windows de votre plug-in dans ce rpertoire. 4. Placez ce rpertoire au mme niveau que le dossier Mac4DX de la base. Routines recevant des paramtres implicites Certains plug-ins, par exemple 4D Write, utilisent des commandes qui provoquent lappel implicite des commandes 4e Dimension. Prenons un exemple avec 4D Write. Vous disposez dune commande appele WR APPELER SUR EVENEMENT. La syntaxe de cette commande est : WR APPELER SUR EVENEMENT(LaZone;Evnement;MthodeEvnement)

4e Dimension - Langage

299

Le dernier paramtre que vous passez cette routine est le nom dune mthode, que vous aurez vous-mme crite dans 4e Dimension. Cette mthode sera appele par 4D Write chaque fois que lvnement attendu sera reu et cette mthode recevra automatiquement les paramtres suivants : Paramtres Type Description $0 Entier long Retour de fonction $1 Entier long Zone 4D Write $2 Entier long Touche Maj. $3 Entier long Touche Alt (Windows), Option (MacOS) $4 Entier long Touche Ctrl (Windows), Commande (MacOS) $5 Entier long Type dvnement qui a provoqu lappel $6 Entier long Valeur variant en fonction du paramtre Evnement Afin que le compilateur connaisse lexistence de ces paramtres et les prenne en compte, vous devez vous assurer quils peuvent effectivement tre typs, soit par une directive de compilation, soit parce que leur utilisation, suffisamment explicite, permet de dduire leur type. Variables cres par des commandes de plug-ins Les variables cres par le biais de commandes de plug-ins, et napparaissant pas dans le code de la structure, ne sont pas vues par le compilateur lors de la compilation. MacOS Pour que le compilateur tienne compte de ces variables, il faut crer une nouvelle ressource dans le fichier structure de votre base de donnes, laide dun diteur de type ResEdit. Cette ressource devra sappeler VAR# si vos variables sont de type process et VAR dans le cas de variables interprocess (le caractre diamant est obtenu par la combinaison de touches Option-v). Il suffit ensuite de dclarer vos variables lintrieur de ces ressources. Windows Pour que le compilateur tienne compte des variables VAR# et VAR cres par des commandes de plug-ins, il faut avoir au pralable cr une ressource VAR# ou VAR. Ceci doit se faire sur une plate-forme MacOS laide dun diteur de ressources de type ResEdit. Note : Pour plus dinformations sur le traitement des commandes de plug-ins, reportezvous au kit 4D Plugin API. Composants 4D
______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension et 4D Insider permettent de crer et de manipuler des composants 4D. Les composants sapparentent des librairies dobjets, dans lesquelles chaque objet dispose dun attribut (Priv, Protg ou Public) indiquant sil sera visible, modifiable, etc. Pour plus dinformations sur la gestion des composants 4D, reportez-vous la documentation de 4D Insider.

300

4e Dimension - Langage

En principe, le dveloppeur de composants 4D doit sassurer que le composant est compilable et ne risque pas de gnrer de conflits. Cette possibilit ne peut toutefois tre totalement exclue. En cas derreur de compilation provoque par un objet appartenant un composant, le compilateur affichera les informations suivantes, en fonction de lattribut de lobjet : Priv : le compilateur ne fournit pas le nom de lobjet en cause, mais celui du composant 4D. Protg ou Public : le compilateur dsigne lobjet en cause, comme pour tout autre objet de la base (fonctionnement standard). Manipulation des locales $0$N et passation des paramtres
______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les manipulations des variables locales suivent toutes les rgles dj nonces. De mme que toutes les autres variables, elles ne peuvent tre retypes en cours de mthode. Dans ce paragraphe, nous abordons deux cas de figure o linattention pourrait conduire des conflits de types : Lorsque vous avez en fait besoin dun retypage. Lutilisation de pointeurs vous permet alors dviter les conflits de types. Lorsque vous avez besoin dadresser des paramtres par indirection. Utiliser les pointeurs pour viter les retypages Il nest pas possible de retyper une variable. Il est, en revanche, tout fait possible de faire pointer un pointeur successivement sur des variables de type diffrent. Un exemple nous permet dillustrer ce propos : crivons une fonction qui nous renvoie loccupation mmoire dun tableau une dimension suivant son type. Le rsultat est un numrique dans tous les cas sauf deux : dans le cas des tableaux Texte et des tableaux Image, la taille mmoire occupe par le tableau dpend de valeurs inexprimables sous forme numrique (cf. section Tableaux et mmoire). Dans le cas des tableaux Texte et des tableaux Image, nous renverrons comme rsultat une chane de caractres. Cette fonction requiert un paramtre : un pointeur sur le tableau dont on veut connatre loccupation mmoire. Pour effectuer cette opration, vous avez le choix entre deux mthodes : ne travailler quavec des variables locales et ne pas vous soucier de leur type mais dans ce cas, la mthode ne fonctionnera quen mode interprt. utiliser des pointeurs et alors travailler indiffremment en interprt et en compil. Fonction OccupMm en interprt seulement (exemple pour Macintosh) $Taille:=Taille tableau($1->) $Type:=Type($1->) Au cas ou :($Type=Est un tableau numrique) $0:=8+($Taille*10) ` $0 est un Numrique :($Type=Est un tableau entier) $0:=8+($Taille*2) :($Type=Est un tableau entierlong) $0:=8+($Taille*4) :($Type=Est un tableau date) $0:=8+($Taille*6) 4e Dimension - Langage 301

:($Type=Est un tableau texte) $0:=Chaine(8+($Taille*4))+("+Somme des longueurs des textes") :($Type=Est un tableau image) $0:=Chaine(8+($Taille*4))+("+Somme des tailles des images") :($Type=Est un tableau pointeur) $0:=8+($Taille*16) :($Type=Est un tableau boolen) $0:=8+($Taille/8) Fin de cas

` $0 est un Texte

` $0 est un Texte

Dans la mthode ci-dessus, il y a changement de type de $0 suivant les valeurs de $1. Fonction OccupMm en mode interprt et compil (exemple pour Macintosh) Ecrivons maintenant cette mthode en utilisant un pointeur : $Taille:=Taille tableau($1->) $Type:=Type($1->) VarNum:=0 Au cas ou :($Type=Est un tableau numrique) VarNum:=8+($Taille*10) ` VarNum est un Numrique :($Type=Est un tableau entier) VarNum:=8+($Taille*2) :($Type=Est un tableau entierlong) VarNum:=8+($Taille*4) :($Type=Est un tableau date) VarNum:=8+($Taille*6) :($Type=Est un tableau texte) VarText:=Chaine(8+($Taille*4))+("+Somme des longueurs des textes") :($Type=Est un tableau image) VarText:=Chaine(8+($Taille*4))+("+Somme des tailles des images") :($Type=Est un tableau pointeur) VarNum:=8+($Taille*16) :($Type=Est un tableau boolen) VarNum:=8+($Taille/8) Fin de cas Si (VarNum#0) $0:=->VarNum Sinon $0:=->VarText Fin de si Il faut noter la diffrence entre ces deux squences : dans le premier cas, le rsultat de la fonction est la variable que lon attendait, dans le second cas, le rsultat de la fonction est un pointeur sur cette variable. Il vous appartient alors de simplement dpointer le rsultat reu.

302

4e Dimension - Langage

Indirections sur les paramtres Le compilateur gre la puissance et la souplesse de lindirection sur les paramtres. En mode interprt, 4e Dimension vous donne toute latitude concernant le nombre et le type des paramtres. Vous gardez en mode compil cette mme libert condition de ne pas introduire de conflit de types et de ne pas utiliser, dans la mthode appele, plus de paramtres que vous en avez passs, ce qui est facile. Afin de contourner un ventuel conflit, les paramtres adresss par indirection doivent tous tre du mme type. Pour une bonne gestion de cette indirection, il est important de respecter la convention suivante : si tous les paramtres ne sont pas adresss par indirection, ce qui est le cas le plus frquent, il faut que les paramtres adresss par indirection soient passs en fin de liste. A lintrieur de la mthode, ladressage par indirection se fait sous la forme : ${$i}, $i tant une variable numrique. ${$i} est appel paramtre gnrique. Illustrons notre propos par un exemple : crivons une fonction qui prend des valeurs, fait leur somme et renvoie cette somme formate suivant un format qui peut varier avec les valeurs. A chaque appel cette mthode, le nombre de valeurs additionner peut varier. Il faudra donc passer comme paramtre notre mthode les valeurs, en nombre variable, et le format, exprim sous forme dune chane de caractres. Un appel cette fonction se fera de la faon suivante : Rsultat:=LaSomme("##0,00";125,2;33,5;24) La mthode appelante rcuprera dans ce cas la chane : 182,70, somme des nombres passs, formate suivant le format spcifi. Daprs ce que lon a vu plus haut, les paramtres de la fonction doivent tre passs dans un ordre prcis : le format dabord et ensuite les valeurs, dont le nombre peut varier dun appel lautre. Examinons maintenant la fonction que nous appelons LaSomme : $Somme:=0 Boucle($i;2;Nombre de parametres) $Somme:=$Somme+${$i} Fin de boucle $0:=Chaine($Somme;$1) Cette fonction pourra tre appele de diverses manires : Rsultat:=LaSomme("##0,00";125,2;33,5;24) Rsultat:=LaSomme("000";1;18;4;23;17) De mme que pour les autres variables locales, la dclaration du paramtre gnrique par directive de compilation nest pas obligatoire. Si elle est ncessaire (cas dambigut ou doptimisation), elle se fait avec la syntaxe suivante : C_ENTIER(${4})

4e Dimension - Langage

303

La commande ci-dessus signifie que tous les paramtres partir du quatrime (inclus) seront adresss par indirection. Ils seront tous de type Entier. Les types de $1, $2 et $3 pourront tre quelconques. En revanche, si vous utilisez $2 par indirection, le type utilis sera le type gnrique. Il sera donc de type Entier, mme si pour vous, par exemple, il tait de type Rel. Note : Le compilateur utilisant cette commande durant le typage, le nombre, dans la dclaration, doit toujours tre une constante et jamais une variable. Variables rserves et constantes
______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Des variables et des constantes de 4e Dimension ont un type et une identit fixs par le compilateur. On ne peut donc crer une nouvelle variable, une mthode, une fonction ou une commande de plug-in portant le nom dune de ces variables ou dune de ces constantes. Bien entendu, vous pouvez tester leur valeur et les utiliser comme auparavant. Variables systme Voici la liste complte des variables systme de 4e Dimension accompagnes de leur type. Variable Type OK Entier long Document Alpha (Chane fixe) : 255 FldDelimit Entier long RecDelimit Entier long Error Entier long MouseDown Entier long KeyCode Entier long Modifiers Entier long MouseX Entier long MouseY Entier long MouseProc Entier long Variables des tats rapides Lorsquon cre une colonne calcule dans un tat, 4e Dimension cre automatiquement une variable C1 pour la premire, C2, C3... pour les autres. Gnralement, cette cration est faite de faon transparente pour vous. Dans le cas o vous utiliseriez ces variables dans des mthodes, souvenez-vous que, comme les autres variables, les variables C1, C2... ne peuvent tre retypes. Constantes prdfinies 4D La liste des constantes prdfinies de 4e Dimension peut tre consulte dans ce manuel, vous pouvez galement les visualiser dans lExplorateur, en mode Structure. Rfrence Conseils doptimisation, Messages d'erreurs, Prcisions de syntaxe, Utilisation des directives de compilation.

304

4e Dimension - Langage

Prcisions de syntaxe

Compilateur version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le compilateur suit la syntaxe habituelle des commandes 4e Dimension et, en ce sens, ne vous demande aucun comportement particulier dans loptique de la compilation. Cette section propose cependant certains rappels et quelques prcisions : Certaines commandes influant sur le type dune variable peuvent, si vous ny prtez pas attention, conduire des conflits de type. Certaines commandes admettant des syntaxes ou des paramtres diffrents, il est prfrable de savoir ce quil est plus appropri de choisir. Chanes de caractres
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Code ascii (LaChaine) Pour les routines oprant sur les chanes, seule la fonction Code ascii rclame une attention plus particulire. Lorsque vous travaillez en mode interprt, vous pouvez indiffremment passer une chane non vide ou vide cette fonction. En compil, vous ne pouvez pas passer une chane vide. Si vous le faites, le compilateur ne peut dtecter une erreur la compilation si largument pass Code ascii est une variable. Communications
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENVOYER VARIABLE(LaVariable) RECEVOIR VARIABLE(LaVariable) Ces deux commandes permettent dcrire et de relire des variables envoyes sur disque. On passe des variables en paramtres ces commandes. Souvenez-vous simplement quil faudra toujours relire une variable dun type dans une variable de mme type. Supposons que vous souhaitiez envoyer une liste de variables dans un fichier. Afin de ne pas prendre de risque de changement de type par inattention, nous vous recommandons dadopter une mthode de travail simple qui consiste indiquer en dbut de liste le type des variables envoyes. Ainsi, lorsque vous relirez ces variables, vous commencerez toujours par rcuprer cet indicateur dont vous connaissez le type. Ensuite, vous appellerez RECEVOIR VARIABLE en toute connaissance de cause par lintermdiaire dun Au cas ou. Exemple : REGLER SERIE(12;"LeFichier") Si (OK=1) $Type:=Type([Client]CA_Cumul) ENVOYER VARIABLE($Type)

4e Dimension - Langage

305

Boucle($i;1;Enregistrements trouves) $CA_Envoi:=[Client]CA_Cumul ENVOYER VARIABLE($CA_Envoi) Fin de boucle Fin de si REGLER SERIE(11) REGLER SERIE(13;"LeFichier") Si (OK=1) RECEVOIR VARIABLE($Type) Au cas ou :($Type=Est une variable chane) RECEVOIR VARIABLE($LaChaine) `Traitement de la variable reue :($Type=Est un numrique) RECEVOIR VARIABLE($LeRel) `Traitement de la variable reue :($Type=Est un texte) RECEVOIR VARIABLE($LeTexte) `Traitement de la variable reue Fin de cas Fin de si REGLER SERIE(11) Dfinition structure
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Champ (Ptr_Champ) ou (NoDeTable;NoDeChamp) Table(Ptr_Table) ou (Ptr_Champ) ou (NoDeTable) Dans loptique du compilateur, ces deux commandes ne comportent rien de spcifique. Nous appelons simplement votre attention sur un cas pratique : ces deux commandes retournent des rsultats de type diffrent suivant le paramtre qui leur est pass : si vous passez un pointeur la fonction Table, le rsultat retourn sera de type Numrique. si vous passez un Numrique la fonction Table, le rsultat retourn sera de type Pointeur. On comprend aisment que ces deux fonctions ne suffisent pas au compilateur pour dterminer le type du rsultat. Dans ce cas, pour quil ny ait aucune ambigut, utilisez une directive de compilation. Documents systme
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nous rappellerons simplement que la rfrence dun document renvoye par les fonctions Ouvrir document, Ajouter a document et Creer document est de type Heure.

306

4e Dimension - Langage

Fonctions mathmatiques
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Modulo (LaValeur;Diviseur) Lexpression 25 modulo 3 peut scrire de deux faons diffrentes dans 4e Dimension : LaVariable:=Modulo(25;3) ou LaVariable:=25%3 Il existe pour le compilateur une diffrence entre ces deux critures : Modulo sapplique tous les types de Numriques tandis que loprateur % sapplique exclusivement aux Entiers et Entiers longs (si les oprandes de loprateur % dpassent les limites des Entiers longs, le rsultat renvoy sera probablement faux). Interruptions
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

APPELER 4D APPELER SUR EVENEMENT (LaMthode {; NomProcess}) STOP APPELER SUR EVENEMENT Pour la gestion des interruptions, le langage de 4e Dimension dispose de la commande APPELER 4D. Cette commande devra tre utilise lorsque vous vous servirez de la commande APPELER SUR EVENEMENT. On pourrait dfinir cette commande comme une directive de gestion des vnements. Seul le noyau de 4e Dimension peut dtecter un vnement Systme (clic souris, action sur le clavier). Dans la plupart des cas, des appels au noyau sont lancs par le code compil lui-mme, de faon transparente pour vous. En revanche, dans le cas o vous attendez un vnement sans rien faire, comme dans une boucle dattente, il est bien vident quaucun appel nest effectu. Exemple sous Windows `Mthode projet ClicSouris Si (MouseDown=1) <>vTest:=Vrai ALERTE("Quelquun a cliqu avec la souris") Fin de si `Mthode projet Attente <>vTest:=Faux APPELER SUR EVENEMENT("ClicSouris") Tant que(<>vTest=Faux) `Boucle dattente de lvnement Fin tant que APPELER SUR EVENEMENT("")

4e Dimension - Langage

307

Dans ce cas, vous ajouterez la directive APPELER 4D de la faon suivante : `Mthode projet Attente <>vTest:=Faux APPELER SUR EVENEMENT("ClicSouris") Tant que(<>vTest=Faux) APPELER 4D `Appel au noyau pour discerner un vnement Fin tant que APPELER SUR EVENEMENT("") STOP Cette commande ne doit tre utilise que dans des mthodes projet dinterception derreurs. Cette commande fonctionne comme en mode interprt, sauf dans une mthode ayant t appele par lune des commandes suivantes : EXECUTER, APPLIQUER A SELECTION et APPLIQUER A SOUS SELECTION. Il convient dviter cette situation. Tableaux
______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Sept routines de 4e Dimension sont utilises par le compilateur pour dterminer le type dun tableau. Il sagit de : COPIER TABLEAU(TableauSource;TableauDestination) SELECTION VERS TABLEAU(LeChamp;LeTableau) TABLEAU VERS SELECTION(LeTableau; LeChamp) SELECTION LIMITEE VERS TABLEAU(Dbut;Fin;LeChamp;LeTableau) ENUMERATION VERS TABLEAU(LaListe; LeTableau{;ItemRefs}) TABLEAU VERS ENUMERATION(LeTableau; LaListe{;ItemRefs}) VALEURS DISTINCTES(LeChamp;LeTableau) COPIER TABLEAU COPIER TABLEAU admet deux paramtres de type Tableau. Lorsque le compilateur rencontre cette commande pendant le typage et que lun des paramtres tableau nest pas dclar ailleurs, le compilateur dduit le type du tableau non dclar suivant le type de celui qui lest. Cette dduction est faite dans les deux cas suivants : le tableau typ ailleurs est le premier paramtre. Le compilateur donne au second tableau le type du premier. le tableau dclar est le second paramtre. Dans ce cas, le compilateur donne au premier tableau le type du second. Le compilateur tant rigoureux sur les types, un COPIER TABLEAU ne peut se faire que dun tableau dun type vers un tableau de mme type. En consquence, si vous souhaitez faire une copie dun tableau dlments de types voisins, cest--dire les Entiers, Entiers longs et Numrique ou les Textes et les Alphas ou les Alphas de longueurs diffrentes, vous devrez le faire lment par lment.

308

4e Dimension - Langage

Imaginez que vous vouliez faire une copie dun tableau dEntiers vers un tableau de Numriques. Procdez comme suit : $Taille:=Taille tableau(TabEntier) TABLEAU REEL(TabRel;$Taille) `Donnons la mme taille au tableau de Rels quau tableau dEntiers Boucle($i;1;$Taille) TabRel{$i}:=TabEntier{$i} `Recopions chacun des lments Fin de boucle Souvenez-vous que vous ne pouvez changer le nombre de dimensions dun mme tableau en cours de route. Vous provoqueriez une erreur de typage en copiant un tableau une dimension dans un tableau deux dimensions. SELECTION VERS TABLEAU, TABLEAU VERS SELECTION, VALEURS DISTINCTES, SELECTION LIMITEE VERS TABLEAU De mme que pour 4e Dimension en mode interprt, ces quatre commandes nexigent pas de dclaration de tableau. Le tableau non dclar recevra le mme type que le champ spcifi dans la commande. Si vous crivez : SELECTION VERS TABLEAU([LaTable]ChampEntier;LeTableau) le type de LeTableau sera donc Tableau dEntiers une dimension. Dans le cas o le tableau a dj t dclar, veillez ce que les champs soient du mme type. Bien quEntier, Entier long et Rel soient des types voisins, vous ne pouvez pas supposer quil soient quivalents. Vous avez en revanche plus de latitude lorsquil sagit des types Texte et Alpha. Par dfaut, lorsquun tableau na pas t dclar au pralable et que vous appliquez lune de ces commandes avec pour paramtre un champ de type Alpha, le type attribu au tableau sera Texte. Si le tableau a t dclar auparavant comme tant de type Alpha ou de type Texte, ces commandes respecteront vos directives. Il en est de mme dans le cas des champs de type Texte : vos directives sont prioritaires. Souvenez-vous que les commandes SELECTION VERS TABLEAU, SELECTION LIMITEE VERS TABLEAU, TABLEAU VERS SELECTION et VALEURS DISTINCTES ne sappliquent qu des tableaux une dimension. La commande SELECTION VERS TABLEAU admet aussi une seconde syntaxe : SELECTION VERS TABLEAU(LaTable;LeTableau) Dans ce cas, la variable LeTableau sera de type Tableau dEntiers longs. Il en est de mme pour la commande SELECTION LIMITEE VERS TABLEAU. ENUMERATION VERS TABLEAU, TABLEAU VERS ENUMERATION Les commandes ENUMERATION VERS TABLEAU et TABLEAU VERS ENUMERATION ne concernent que deux types de tableaux : les tableaux Alpha une dimension, les tableaux Texte une dimension.

4e Dimension - Langage

309

Ces deux commandes nexigent pas la dclaration du tableau qui leur est pass en paramtre. Par dfaut, un tableau non dclar recevra le type Texte. Si le tableau a t dclar auparavant comme tant de type Alpha ou de type Texte, ces commandes respecteront vos directives. Utilisation des pointeurs dans les commandes sappliquant aux tableaux Le compilateur ne peut pas, durant le typage ou la compilation, dtecter un conflit de type dans le cas o vous utiliseriez des pointeurs dpoints comme paramtre de commande de dclaration dun tableau. Si vous crivez : SELECTION VERS TABLEAU([LaTable]LeChamp;LePointeur->) o LePointeur-> reprsente un tableau, le compilateur ne peut vrifier que le type du champ et du tableau sont identiques. Il vous appartient dviter alors ce type de conflit. Pour cela, le compilateur vous fournit une aide prcieuse : les Warnings. Chaque fois quil rencontre une routine de dclaration de tableau dans laquelle lun des paramtres est un pointeur, il vous dlivre un message vous invitant la vigilance. Tableaux locaux Si vous souhaitez compiler une base de donnes qui utilise des tableaux locaux (tableaux visibles uniquement par les mthodes qui les ont crs), il est ncessaire de les dclarer explicitement dans 4e Dimension avant de les utiliser. La dclaration explicite dun tableau signifie lutilisation dune commande de type TABLEAU REEL, TABLEAU ENTIER, etc. Par exemple, si une mthode gnre un tableau local dentiers contenant 10 valeurs, vous devez crire au pralable la ligne suivante : TABLEAU ENTIER($MonTableau;10) Langage
______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Pointeur vers(NomVariable) Type (Objet) EXECUTER(Instruction) TRACE PAS DE TRACE Pointeur vers Pointeur vers est une fonction qui retourne un pointeur sur le paramtre que vous lui avez pass. Supposons que vous vouliez initialiser un tableau de pointeurs. Chacun des lments de ce tableau pointe vers une variable donne. Ces variables sont au nombre de douze et nous les appelons V1, V2, V12. Vous pourriez crire : TABLEAU POINTEUR(Tab;12) Tab{1}:=->V1 Tab{2}:=->V2 Tab{12}:=->V12

310

4e Dimension - Langage

Vous pouvez aussi crire : TABLEAU POINTEUR(Tab;12) Boucle($i;1;12) Tab{$i}:=Pointeur vers("V"+Chaine($i)) Fin de boucle A la fin de lexcution de cette squence, vous rcuprez un tableau de pointeurs dont chaque lment pointe sur une variable Vi. Ces deux squences sont bien entendu compilables. Toutefois, si les variables V1 V12 ne sont pas utilises explicitement ailleurs dans la base, le compilateur ne pourra pas les typer. Il vous faut donc les nommer ailleurs explicitement. Cette dclaration explicite peut se faire de deux faons : soit en dclarant V1, V2, V12 par une directive de compilation : C_ENTIER LONG(V1;V2;V3;V4;V5;V6;V7;V8;V9;V10;V11;V12) soit en affectant ces variables dans une mthode : V1:=0 V2:=0 V12:=0 Type (Objet) Chaque variable de la base compile nayant quun seul type, la fonction Type peut sembler dun intrt limit. Elle est cependant trs prcieuse lorsquon travaille avec des pointeurs. En effet, il peut tre ncessaire de connatre le type de la variable pointe par un pointeur, la souplesse des pointeurs faisant que lon ne sait pas toujours sur quoi ils pointent. EXECUTER La commande EXECUTER, historique dans 4e Dimension, prsente des avantages en mode interprt qui nont pas grand sens en mode compil. En effet, en mode compil, le nom de la mthode pass en paramtre cette commande sera simplement interprt. Vous ne bnficierez donc pas de tous les avantages apports par le compilateur, sans compter que la syntaxe de votre paramtre ne pourra pas tre vrifie. De surcrot, vous ne pouvez pas lui passer des variables locales comme paramtres. On peut avantageusement remplacer un EXECUTER par une srie dinstructions. Nous vous en donnons ici deux exemples. Soit la squence suivante : i:= FctFormulaire EXECUTER("FORMULAIRE ENTREE (Formulaire"+Chaine(i)+")") Elle peut tre remplace par : i:=FctFormulaire VarFormulaire:="Formulaire"+Chaine(i) FORMULAIRE ENTREE(VarFormulaire)

4e Dimension - Langage

311

Examinons maintenant un deuxime cas : $Num:=ChoixImprimante EXECUTER("Impri"+$Num) Ici, lEXECUTER peut tre facilement remplac par un Au cas ou : Au cas ou : ($Num=1) Impri1 : ($Num=2) Impri2 : ($Num=3) Impri3 Fin de cas La commande EXECUTER peut toujours tre avantageusement remplace. En effet, la mthode excuter est prise dans la liste des mthodes projet de la base ou des commandes 4e Dimension, qui sont en nombre limit. En consquence, il est toujours possible de remplacer la commande EXECUTER soit par un Au cas ou, soit par une autre commande. TRACE, PAS DE TRACE Ces deux commandes, prcieuses en mode interprt, nont pas de fonction en mode compil. Vous pouvez cependant les laisser dans vos mthodes : TRACE et PAS DE TRACE seront simplement ignores par le compilateur. Variables
______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Indefinie(LaVariable) ECRIRE VARIABLES(NomduDoc;Variable1{; Variable2}) LIRE VARIABLES(NomduDoc;Variable1{; Variable2}) Effacer variable(LaVariable) Indefinie Compte tenu du processus de typage par le compilateur, une variable ne peut aucun moment tre indfinie en mode compil. En effet, toutes les variables ont une existence ds la fin de la compilation. La fonction Indefinie retourne donc toujours Faux, quel que soit le paramtre que vous lui passez. Note : Pour savoir si une application tourne en mode compil, utilisez la fonction Application compilee. ECRIRE VARIABLES, LIRE VARIABLES En mode interprt, aprs lexcution dun LIRE VARIABLES, vous pouvez savoir si le document existe en testant si lune des variables, thoriquement lue, est indfinie ou non. Ceci nest bien videmment plus possible avec le compilateur, puisque la fonction Indefinie renvoie toujours Faux.

312

4e Dimension - Langage

La mthode la plus simple pour raliser cette opration en mode interprt comme en mode compil est la suivante : 1. Initialisez les variables que vous allez recevoir une valeur dont vous tes sr quelles ne sont pas initialises. 2. Aprs le LIRE VARIABLES, comparez lune des variables reues la valeur dinitialisation. La mthode scrira alors de la faon suivante : Var1:="xxxxxx" `"xxxxxx" est une valeur qui ne peut pas tre ramene par un LIRE VARIABLES Var2:="xxxxxx" Var3:="xxxxxx" Var4:="xxxxxx" LIRE VARIABLES("LeDocument";Var1;Var2;Var3;Var4) Si(Var1="xxxxxx") `Le document na pas t trouv Sinon `Le document a t trouv Fin de si EFFACER VARIABLE Cette routine admet deux syntaxes diffrentes en mode interprt : EFFACER VARIABLE(LaVariable) EFFACER VARIABLE("a") En mode compil, la premire syntaxe, EFFACER VARIABLE(LaVariable), provoque non la destruction de la variable, mais sa rinitialisation (remise zro pour un numrique, chane vide pour une chane de caractres ou un texte), aucune variable ne pouvant tre indfinie en mode compil. En consquence, EFFACER VARIABLE ne libre pas de mmoire en mode compil sauf dans quatre cas : les variables de type Texte, Image, BLOB et les tableaux. Pour un tableau, EFFACER VARIABLE quivaut une nouvelle dclaration du tableau ou les tailles sont remises zro. Pour un tableau LeTableau dont les lments sont de type Entier, EFFACER VARIABLE(LeTableau) quivaut lune des expressions suivantes : TABLEAU ENTIER(LeTableau;0) `sil sagit dun tableau une dimension TABLEAU ENTIER(LeTableau;0;0) `sil sagit dun tableau deux dimensions La seconde syntaxe, EFFACER VARIABLE("a"), nest pas compatible avec le compilateur puisque celui-ci accde aux variables non par leur nom, mais par leur adresse mmoire.

4e Dimension - Langage

313

Prcisions concernant lutilisation de pointeurs


______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les commandes suivantes ont un point commun : elles admettent toutes un premier paramtre [LaTable] facultatif alors que le second paramtre peut tre un pointeur. ADJOINDRE ELEMENT FORMULAIRE ENTREE ALLER A ENREGISTREMENT FORMULAIRE SORTIE ALLER DANS SELECTION GRAPHE SUR SELECTION APPLIQUER A SELECTION IMPRIMER ETIQUETTES CHARGER ENSEMBLE Imprimer ligne CHERCHER LECTURE ASCII CHERCHER DANS SELECTION LECTURE DIF CHERCHER PAR FORMULE LECTURE SYLK CHERCHER PAR FORMULE DANS SELECTION LIEN RETOUR COPIER SELECTION NOMMER ENSEMBLE DEPLACER SELECTION REDUIRE SELECTION DIALOGUE ENLEVER ELEMENT ECRITURE ASCII TRIER ECRITURE DIF TRIER PAR FORMULE ECRITURE SYLK UTILISER PARAMETRES IMPRESSION ENSEMBLE VIDE VERROUILLE PAR QR ETAT Il est parfaitement possible en mode compil de garder ce caractre optionnel au paramtre [LaTable]. Le compilateur fait toutefois une supposition dans le cas o le premier paramtre pass lune de ces commandes est un pointeur. Ne pouvant pas savoir sur quoi pointe ce pointeur, il suppose quil sagit dun pointeur de Table. Prenons par exemple le cas de la commande CHERCHER dont la syntaxe est la suivante : CHERCHER({LaTable{;LaFormule{;*}}}) Le premier lment du paramtre LaFormule doit tre un champ. Si vous crivez : CHERCHER(LePtrChamp->=Vrai) le compilateur va chercher en deuxime lment de formule un symbole reprsentant un champ. Or, il trouvera le signe "=". Il dlivrera un message derreur, ne pouvant identifier la commande avec une expression quil sait traiter. En revanche, si vous crivez : CHERCHER(LePtrTable->;LePtrChamp->=Vrai) ou CHERCHER([LaTable];LePtrChamp->=Vrai) vous levez toute ambigut.

314

4e Dimension - Langage

Constantes
______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Si vous crez vos propres ressources 4DK# (constantes), assurez-vous que les numriques soient de type Entier long (L) ou Rel (R) et les alphas de type Chane (S). Tout autre type gnrera un Warning. Rfrence Conseils d'optimisation, Guide du typage, Messages d'erreurs, Utilisation des directives de compilation.

4e Dimension - Langage

315

Conseils doptimisation

Compilateur version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Il est difficile, voire impossible, de consigner une fois pour toutes des instructions pour bien programmer. Tout au plus pouvons-nous renouveler les recommandations gnrales vous invitant bien structurer vos programmes, grce notamment aux possibilits de programmation gnrique offertes par 4e Dimension. De fait, il est clair que si vous essayez de compiler une base trs bien structure, vous obtiendrez de bien meilleurs rsultats que si votre base est mal structure. Par exemple, si vous crivez une mthode projet gnrique qui gre n mthodes objet, vous obtiendrez de bien meilleurs rsultats, en interprt comme en compil, que si les n mthodes objet comportent n fois les mmes squences dinstructions. La qualit de votre programmation peut donc avoir des effets sur la qualit du code compil. Si vous dbutez, vous amliorerez progressivement votre code 4e Dimension grce lhabitude. De la mme faon, cest en utilisant frquemment le compilateur que vous acquerrez les rflexes qui permettent inconsciemment daller droit au but. En attendant cependant, voici quelques conseils et astuces qui vous permettront de gagner du temps dans des oprations simples et frquentes. Remarque prliminaire : les commentaires
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Certaines astuces que nous vous conseillons peuvent rendre votre code moins lisible par une personne extrieure ou par vous-mme ultrieurement. En consquence, nhsitez pas assortir vos mthodes de commentaires dtaills. En effet, si les commentaires peuvent parfois ralentir une base interprte, ils nont strictement aucune influence sur les temps dexcution dune base compile. Optimisation par les directives de compilation
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les directives de compilation peuvent vous aider acclrer considrablement votre code. Par dfaut, le compilateur donne le type le plus large possible vos variables afin de ne pas vous pnaliser. Si vous ne typez pas par une directive de compilation une variable dsigne par linstruction Var:= 5, le compilateur lui donnera le type Rel, mme sil sagit de laffectation dune valeur entire. Nous allons maintenant voir comment, dans certains cas, dclarer une variable peut vous faire gagner beaucoup de temps. Numriques Par dfaut, le compilateur donne le type Rel (numrique) aux variables numriques non types par directive de compilation et si les Prfrences nindique pas le contraire. Or, les calculs sur un Rel sont plus lents que sur un Entier. Lorsque vous tes sr quun de vos numriques sexprimera toujours dans votre base sous forme dun Entier, il est avantageux de le dclarer par les directives de compilation C_ENTIER ou C_ENTIER LONG. Une bonne habitude prendre, par exemple, est de systmatiquement dclarer vos compteurs de boucles comme Entier par directive de compilation.

316

4e Dimension - Langage

Par ailleurs, certaines fonctions standard de 4e Dimension renvoient des Entiers (exemple : Code ascii, Ent...). Si vous affectez le rsultat dune de ces fonctions une variable non type de votre base, le compilateur lui donnera le type Numrique et non Entier. Pensez donc dclarer ces variables par des directives de compilation si vous tes certain quelles ne seront utilises que dans ces conditions. Prenons un exemple simple. Une fonction renvoyant une valeur alatoire comprise entre deux bornes peut scrire : $0:=Modulo(Hasard;($2-$1+1))+$1 Elle renvoie toujours une valeur entire. Si cette fonction est crite ainsi, le compilateur donnera $0 le type Numrique et non le type Entier ou Entier long. Il est donc prfrable dcrire cette mthode sous la forme : C_ENTIER LONG($0) $0:=Modulo(Hasard;($2-$1+1))+$1 Le paramtre rendu par la mthode sera plus petit et il sera donc plus rapide de faire appel cette mthode. Prenons un autre exemple simple. Supposons que vous ayez dclar deux variables en Entier long par linstruction suivante : C_ENTIER LONG($var1;$var2) et quune troisime variable non type reoive la somme des deux autres : $var3:=$var1+$var2. Il vous faudra explicitement dclarer $var3 comme Entier long si vous voulez effectivement que $var3 soit de type Entier long, sinon le compilateur la typera par dfaut en Numrique. Note : Attention au mode de calcul dans 4e Dimension. En mode compil, ce nest pas le type de la variable recevant le calcul qui dtermine le mode de calcul, mais le type des oprandes. Dans lexemple ci-dessous, le calcul seffectue sur des Entiers longs : C_REEL($var3) C_ENTIER LONG($var1;$var2) $var1:=2147483647 $var2:=1 $var3:=$var1+$var2 $var3 prendra la valeur 2147483648 en mode compil comme en interprt. Dans lexemple suivant : C_REEL($var3) C_ENTIER LONG($var1) $var1:=2147483647 $var3:=$var1+1 pour des raisons doptimisation, le compilateur considre la valeur 1 comme une valeur entire. $var3 prendra alors la valeur 2147483648 en mode compil (car le calcul seffectue sur des Entiers longs) et 2147483648 en mode interprt (car le calcul seffectue sur des Rels). Les boutons sont un cas particulier de Numrique quil est possible de dclarer en Entier long.

4e Dimension - Langage

317

Chanes de caractres De mme que pour les numriques, le compilateur donne par dfaut le type Texte vos variables alphanumriques, si les Prfrences nindiquent pas le contraire. Si vous crivez : MaChaine:="Bonjour", MaChaine sera pour le compilateur une variable de type Texte. Si vous avez beaucoup de traitements effectuer sur cette variable, il est avantageux de la dclarer explicitement laide de la directive C_ALPHA. Les traitements sont en effet beaucoup plus rapides sur les variables de type Alpha dont la longueur maximale est dfinie, que sur les variables de type Texte. Noubliez pas cependant les rgles de comportement de cette directive. Si vous souhaitez tester la valeur dun caractre, il est plus rapide de faire la comparaison sur son Code ascii que sur le caractre lui-mme. En effet, la routine standard de comparaison de caractres prend en compte toutes les variations du caractre, comme par exemple les accentuations. Remarques diverses
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Tableaux deux dimensions Les traitements sur les tableaux deux dimensions seront mieux grs si la deuxime dimension est plus grande que la premire. Par exemple, un tableau dclar sous la forme : TABLEAU ENTIER(LeTableau;5;1000) sera mieux gr quun tableau dclar sous la forme : TABLEAU ENTIER(LeTableau;1000;5) Champs Vous gagnerez du temps lorsque, si vous devez effectuer plusieurs calculs sur un champ, vous rangez la valeur de ce champ dans une variable et que vous effectuez vos calculs sur cette variable, plutt que de faire directement les calculs sur le champ. Illustrons notre propos par un exemple. Prenons la mthode suivante : Au cas ou : ([Client]Dest="Paris") Transport:="Coursier" : ([Client]Dest="Corse") Transport:="Avion" : ([Client]Dest="Etranger") Transport:="Service express" Sinon Transport:="Poste" Fin de cas La squence ci-dessus sera plus lente excuter que si elle avait t crite ainsi : $Dest:=[Client]Dest Au cas ou : ($Dest="Paris") Transport:="Coursier"

318

4e Dimension - Langage

: ($Dest="Corse") Transport:="Avion" : ($Dest="Etranger") Transport:="Service express" Sinon Transport:="Poste" Fin de cas Pointeurs De mme que pour les champs, il est plus rapide de travailler sur une variable intermdiaire que sur un pointeur dpoint. Vous gagnerez normment de temps si, lorsque vous devez faire plusieurs calculs sur une variable pointe, vous rangez le pointeur dpoint dans une variable. Vous disposez par exemple dun pointeur pointant sur un champ ou sur une variable, MonPtr. Ensuite, vous souhaitez faire une srie de tests sur la valeur pointe par MonPtr. Vous pouvez crire : Au cas ou : (MonPtr-> = 1) Squence 1 : (MonPtr-> = 2) Squence 2 Fin de cas Il est plus rapide dexcuter cette srie de tests si elle est crite ainsi : Temp:=MonPtr-> Au cas ou : (Temp = 1) Squence 1 : (Temp = 2) Squence 2 Fin de cas Variables locales Utiliser des variables locales permet, dans bien des cas, de mieux structurer son code. Ces variables prsentent dautres avantages : Les variables locales prennent moins de place en mmoire lors de lutilisation dune base : en effet, elles sont cres lorsquon entre dans la mthode o elles sont utilises et dtruites ds quon sort de cette mthode. Le code gnr est optimis pour les variables locales, en particulier de type Entier long. Pensez-y pour vos compteurs de boucle. Rfrence Guide du typage, Messages d'erreurs, Prcisions de syntaxe, Utilisation des directives de compilation.

4e Dimension - Langage

319

Messages d'erreurs

Compilateur version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Cette section dtaille les principaux messages dlivrs par le compilateur. Ces messages sont de plusieurs types : les warnings, qui vous aident djouer des piges facilement vitables ; les erreurs, qu'il vous appartient de corriger ; les messages de contrle dexcution, dlivrs dans 4e Dimension. Les warnings
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ces messages sont dlivrs tout au long du processus de compilation. Chaque message est accompagn ici dun exemple de ce qui a pu le provoquer et, ventuellement, dune explication supplmentaire. Utilisation de pointeur(s) comme paramtre(s) de COPIER TABLEAU COPIER TABLEAU(LePointeur->;LeTableau) Utilisation de pointeur(s) comme paramtre(s) de SELECTION VERS TABLEAU SELECTION VERS TABLEAU(LePointeur->;LeTableau) SELECTION VERS TABLEAU([LaTable]LeChamp;LePointeur->) Utilisation de pointeur(s) comme paramtre(s) de TABLEAU VERS SELECTION TABLEAU VERS SELECTION(LePointeur->;[LaTable]LeChamp) Utilisation de pointeur(s) comme paramtre(s) de ENUMERATION VERS TABLEAU ENUMERATION VERS TABLEAU(Enum;LePointeur->) Utilisation de pointeur(s) comme paramtre(s) de TABLEAU VERS ENUMERATION TABLEAU VERS ENUMERATION(LePointeur->;Enum) Utilisation de pointeur(s) dans une dclaration de tableau TABLEAU REEL(LePointeur->;5) Linstruction TABLEAU REEL(LeTableau;LePointeur->) ne provoquera pas cet avertissement. La valeur de la dimension dun tableau na pas dinfluence sur son type. Utilisation de pointeur(s) comme paramtre(s) de VALEURS DISTINCTES VALEURS DISTINCTES(LePointeur->;LeTableau) Utilisation de la fonction Indefinie Si(Indefinie(LaVariable)) Cette mthode est protge par un mot de passe. Le Formulaire LeFormulaire contient un bouton avec action sans nom dans la page 1. Tous vos boutons avec action doivent avoir un nom afin dviter des conflits.

320

4e Dimension - Langage

Le pointeur utilis dans cette commande doit pointer sur un Alphanumrique. LePointeur->2:="a" Le pointeur utilis dans cette commande doit pointer sur un Entier, un Entier long ou un Numrique LaChaineLePointeur->:="a" Un indice de tableau doit tre Entier, Entier long ou Numrique. ALERTE(LeTableau{LePointeur->}) Il manque un paramtre lappel de la commande du plug-in. WR FIXER POLICE(LaZone) Les erreurs
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ces messages vous sont dlivrs tout au long du processus de compilation. Il vous appartient de corriger ces erreurs afin de permettre au compilateur de gnrer une base compile. Chaque message est accompagn ici dun exemple de ce qui a pu le provoquer et ventuellement, dune explication supplmentaire. Les messages sont classs thmatiquement. Les thmes dans lesquels vous pourrez les consulter sont Typage, Syntaxe, Paramtres, Oprateurs, Plug-ins et Erreurs gnrales. Typage Cet oprateur ne peut sappliquer ce type de variable. Cette affectation provoquerait un conflit de type. LeRel:=12,3 LeBoolen:=Vrai LeRel:=LeBoolen Changement de la longueur maximale d'une chane de caractres. C_ALPHA(3;LaChaine) C_ALPHA(5;LaChaine) Changement du nombre de dimensions d'un tableau. TABLEAU TEXTE(LeTableau;5;5) TABLEAU TEXTE(LeTableau;5) Conflit de type sur la variable LeTableau dans le formulaire LeFormulaire. TABLEAU ENTIER(LeTableau) Dclaration d'un tableau sans indice. TABLEAU ENTIER(LeTableau) Il manque une variable. COPIER TABLEAU(LeTableau;"")

4e Dimension - Langage

321

Il manque une constante. C_ALPHA(LaVariable;LaChaine) Impossible de dterminer le type de LaVariable. Cette variable est utilise dans la mthode M1. Le type de LaVariable na pu tre dtermin. Une directive de compilation est ncessaire. Type de constante invalide OK:="Il fait beau" La mthode M1 est inconnue. La ligne contient un appel une mthode qui nexiste pas ou plus. Le champ utilis dans cette expression provoque un conflit de type. MaDate:=Ajouter a date(LeChampBool;1;1;1) La taille d'une chane de caractres ne peut pas dpasser 255. C_ALPHA(325;LaChaine) La variable LaVariable n'est pas une mthode. LaVariable(1) La variable LaVariable n'est pas un tableau. LaVariable{5}:=12 Le rsultat de la fonction est incompatible avec l'expression. LeTexte:="Numro"+Num(i) Les types utiliss dans lexpression sont incompatibles. LEntier:=LaDate*LeTexte Utilisation de la variable $i de type alphanumrique comme variable de type rel. $i:="3" $($i):=5 L'indice du tableau n'est pas numrique. TabEntier{"3"}:=4 Retypage de la variable LaVariable du type Texte en tableau de type Texte. C_TEXTE(LaVariable) COPIER TABLEAU(TabTexte;LaVariable) Retypage de la variable LaVariable du type Texte en type Rel. LaVariable:=Num(LaVariable) Retypage du tableau LeBoolen du type Boolen en variable de type Rel. LaVariable:=LeBoolen

322

4e Dimension - Langage

Retypage du tableau du type Entier en type tableau de type Texte. TABLEAU TEXTE(TabEntier;12) si TabEntier a t dclar ailleurs comme tableau d'Entiers. Seuls les pointeurs peuvent tre suivis du signe -> LaVariable->:=5 si LaVariable nest pas de type Pointeur. Utilisation de la variable LaVar1 de type Texte comme une variable de type Numrique. LaVar1:=3,5 Utilisation d'un champ de type incorrect. [LaTable]LeChamp est un champ de type Date. LaVariable est de type Numrique. LaVariable:=[LaTable]LeChamp Syntaxe Cette fonction ne retourne pas un pointeur. LaVariable:=Num("Il fait beau")-> Il nest pas possible de dpointer cette fonction. Erreur de syntaxe. Si(LeBoolen) Fin de boucle Cette expression contient trop d'accolades ouvrantes ({). La ligne comporte plus d'accolades ouvrantes que daccolades fermantes. Cette expression contient trop d'accolades fermantes (}). La ligne comporte plus d'accolades fermantes que daccolades ouvrantes. Il manque une parenthse fermante. La ligne comporte plus de parenthses ouvrantes que de fermantes. Il manque une parenthse ouvrante. La ligne comporte plus de parenthses fermantes que douvrantes. J'attendais un champ. Si(Modifie(LaVariable)) Il manque une accolade ouvrante. C_ENTIER($ J'attendais une variable. C_ENTIER([LaTable]LeChamp)

4e Dimension - Langage

323

J'attendais un nombre constant. C_ENTIER(${"3"}) J'attendais un point virgule. COPIER TABLEAU(LeTableau1 LeTableau2) MacOS : Cette expression contient trop d'indices de chane ouvrants. LaChaine3:="a" Cette expression contient trop d'indices de chane fermants. LaChaine3:="a" Windows : Cette expression contient trop d'indices de chane ouvrants. LaChaine[[3:="a" Cette expression contient trop d'indices de chane fermants. LaChaine 3]]:="a" Je nattendais pas un champ de type sous-table TABLEAU VERS SELECTION(LeTableau;Soustable) Le type du paramtre de SI doit tre boolen. Si(LePointeur) Lexpression est trop complexe. Divisez votre ligne en plusieurs sous-oprations. Mthode trop complexe. Trop d'imbrications de Au cas ou...Fin de cas et de SiFin de si. Rfrence un champ inconnu. Votre mthode, probablement copie dune autre base, contient ??? la place dun nom de champ. Rfrence une table inconnue. Votre mthode, probablement copie dune autre base, contient ??? la place dun nom de table. Un pointeur ne peut tre dfini sur cette expression. LePointeur:=->LaVariable+3 Utilisation incorrecte des indices de chanes de caractres. LeNumrique3 ou LeNumrique [[3]] ou bien LaChaineLaVariable ou LaChaine[[LaVariable]] o LaVariable nest pas une variable Numrique.

324

4e Dimension - Langage

Paramtres Ce rsultat de fonction ne peut pas tre paramtre de cette mthode. LaMthode(Num(LaChaine)) si LaMthode attend un paramtre de type Boolen. Cette routine reoit trop de paramtres TABLE PAR DEFAUT(LaTable;LeFormulaire) Cette valeur ne peut pas tre paramtre de cette mthode. LaMthode(3+2) si LaMthode attend un paramtre de type Boolen. Conflit de type sur la variable $0. C_ENTIER($0) $0:=Faux Conflit de type sur le paramtre gnrique. C_ENTIER(${3}) Boucle($i;3;5) ${$i}:=Chaine($i) Fin de boucle La routine n'attend pas de paramtre. AFFICHER BARRE OUTILS(MaVar) La routine ncessite au moins un paramtre. TABLE PAR DEFAUT La variable LaChaine ne peut pas tre paramtre de cette mthode. LaMthode(LaChaine) si LaMthode attend un paramtre de type Boolen. Le type du paramtre $1 dans la mthode est diffrent de celui du paramtre l'appel. Calcul("3+2") avec la directive C_ENTIER($1) dans Calcul. Le type du paramtre pass ne correspond pas au type du paramtre attendu. Impri("LaserWriter") si dans la mthode Impri, $1 est de type Numrique. Lun des paramtres de COPIER TABLEAU est une variable. COPIER TABLEAU(LaVariable;LeTableau) Retypage du paramtre $1 du type rel en type Texte. $1:=Chaine($1)

4e Dimension - Langage

325

Un paramtre ne peut tre un tableau. RInit(LeTableau) Pour passer un tableau une mthode, il faut passer un pointeur sur ce tableau. Un paramtre ne peut tre utilis dans l'appel de cette routine. RECEVOIR VARIABLE($1) Utilisation du paramtre $1 de type Boolen comme une variable de type Entier. LIRE PROPRIETES CHAMP(NoDeTable;NoDeChamp;Type;$1) Oprateurs Cet oprateur ne peut s'appliquer ce type de variable. LeBool2:=LeBool1+Vrai Laddition ne peut pas sappliquer des Boolens. Je n'attendais pas l'oprateur > CHERCHER(LaTable;[LaTable]LeChamp=0;>) Les deux oprandes ne sont pas comparables. Si(LeLongE=Image2) Le signe moins ne peut pas tre utilis dans cette expression. LeBool:=-Faux Plug-ins La commande PExt du plug-in est mal dfinie. Il manque des paramtres lappel de la commande du plug-in. Le nombre de paramtres envoys la commande du plug-in est trop grand. La commande LaVariable du plug-in est mal dfinie. Erreurs gnrales Deux mthodes portent le mme nom : LeNom. Pour pouvoir compiler votre base, il faut que toutes les mthodes projets aient des noms diffrents. Erreur interne n xx. Au cas o ce message apparatrait dans lune de vos bases, tlphonez au support technique de 4D et signalez le numro de lerreur.

326

4e Dimension - Langage

Je n'ai pas pu dterminer le type de LaVariable. Cette variable est utilise dans la mthode M1. Le type de LaVariable na pu tre dtermin. Une directive de compilation est ncessaire. La mthode originale est endommage. La mthode est endommage dans la structure originale. Supprimez-la ou remplacez-la. Mthode 4e Dimension inconnue. La mthode est endommage. Retypage de la variable LaVariable dans le Formulaire LeFormulaire. Ce message apparatra si vous donnez, par exemple, le nom OK une variable de type Graphe dans un formulaire. Une fonction et une variable portent le mme nom : LeNom. Renommez soit la fonction, soit la variable. Une variable dessine dans le Formulaire LeFormulaire a le mme nom qu'une fonction : LeNom. Renommez soit la fonction, soit la variable. Une mthode et une variable portent le mme nom : LeNom. Renommez soit la mthode, soit la variable. Une commande du plug-in et une variable portent le mme nom : LeNom. Renommez soit la commande du plug-in, soit la variable. Les messages du contrle dexcution
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ces messages sont dlivrs dans 4e Dimension, lors de lutilisation de la base compile. Ils sont affichs dans 4e Dimension dans une fentre d'erreur spcifique. Dpassement de capacit d'un tableau. Si LeTableau est un tableau 5 lments un instant donn, ce message apparatra si vous essayez daccder llment LeTableau{17} cet instant. Division par zro. Var1:=0 Var2:=2 Var3:=Var2 / Var1 Le paramtre utilis n'a pas t pass. Utilisation de la variable $4 alors que seuls trois paramtres ont t passs lors de lappel courant. Le pointeur n'est pas correctement initialis. LePointeur->:=5 si LePointeur na pas encore t initialis.

4e Dimension - Langage

327

La chane dans laquelle se fait l'affectation est trop courte. C_ALPHA(LaChaine1;5) C_ALPHA(LaChaine2;10) LaChaine2 :="Bonjour" LaChaine1:= LaChaine2 L'indice de chane n'est pas valide (trop grand ou ngatif). i:=-30 LaChainei:= LaChaine2 ou LaChaine[[i]]:=LaChaine2 La chane passe en paramtre est vide ou non initialise. LaChaine1:= "" LaChaine[[1]]:= "" Modulo par zro. Var1:=0 Var2:=2 Var3:=Var2 % Var1 Paramtres incorrects dans une commande EXECUTER. EXECUTER("MaMthode(MonAlpha)") si MaMthode attend un paramtre autre qualphanumrique. Pointeur sur une variable inconnue du compilateur. LePointeur:= Pointeur vers ("LaVariable") LePointeur:= "MaChane" si LaVariable napparat pas explicitement dans la base. Tentative de retypage par lintermdiaire dun pointeur. LeBooleen:=LePointeur-> si LePointeur rfrence un champ de type Entier. Utilisation incorrecte dun pointeur. LeCaractre:=LaChaine LePointeur-> LeCaractre:=LaChaine[[LePointeur]] si LePointeur ne rfrence pas un Numrique. Rfrence Conseils doptimisation, Guide du typage, Prcisions de syntaxe, Utilisation des directives de compilation.

328

4e Dimension - Langage

C_BLOB

Compilateur version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

C_BLOB ({mthode; }variable{; variable2; ...; variableN}) Paramtre mthode variable Type Mthode Variable ou ${...} Description Nom de mthode Nom(s) de(s) variable(s) dclarer

Description C_BLOB assigne le type BLOB toutes les variables spcifies. La premire syntaxe de la commande (si le paramtre mthode n'est pas pass) est utilise pour dclarer et typer une variable process, interprocess ou locale. Note : Cette syntaxe peut tre utilise dans les bases interprtes. La seconde syntaxe de la commande (si le paramtre mthode est pass) est utilise pour dclarer d'avance au compilateur le rsultat et/ou les paramtres ($0, $1, $2, etc.) d'une mthode. Vous devez utiliser cette syntaxe si vous voulez viter la phase de typage de variables lors de la compilation d'une base, afin de rduire le temps de compilation. ATTENTION : La deuxime syntaxe ne peut pas tre excute en mode interprt. Pour cette raison, si vous utilisez cette syntaxe, stockez-la dans une mthode (dont le nom doit dbuter par "COMPILER") qui n'est pas excute en mode interprt. Utilisation avance : La syntaxe C_BLOB(${...}) vous permet de dclarer pour une mthode un nombre variable de paramtres du mme type la condition que ce soient les derniers paramtres de la mthode. Par exemple, la dclaration C_BLOB(${5}) indique 4D et au compilateur qu' partir du cinquime paramtre la mthode peut recevoir un nombre variable de paramtres de ce type. Pour plus d'informations, rfrez-vous la commande Nombre de parametres. Exemples Reportez-vous aux exemples de la section Commandes du thme Compilateur. Rfrence Commandes du thme Compilateur.

4e Dimension - Langage

329

C_BOOLEEN

Compilateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

C_BOOLEEN ({mthode; }variable{; variable2; ...; variableN}) Paramtre mthode variable Type Mthode Variable ou ${...} Description Nom de mthode Nom(s) de(s) variable(s) dclarer

Description C_BOOLEEN affecte le type Boolen chaque variable spcifie. La premire syntaxe de la commande (si le paramtre mthode n'est pas pass) est utilise pour dclarer et typer une variable process, interprocess ou locale. Note : Cette syntaxe peut tre utilise dans les bases interprtes. La seconde syntaxe de la commande (si le paramtre mthode est pass) est utilise pour dclarer d'avance au compilateur le rsultat et/ou les paramtres ($0, $1, $2, etc.) d'une mthode. Vous devez utiliser cette syntaxe si vous voulez viter la phase de typage de variables lors de la compilation d'une base, afin de rduire le temps de compilation. ATTENTION : La deuxime syntaxe ne peut pas tre excute en mode interprt. Pour cette raison, si vous utilisez cette syntaxe, stockez-la dans une mthode (dont le nom doit dbuter par "COMPILER") qui n'est pas excute en mode interprt. Utilisation avance : La syntaxe C_BOOLEEN(${...}) vous permet de dclarer pour une mthode un nombre variable de paramtres du mme type la condition que ce soient les derniers paramtres de la mthode. Par exemple, la dclaration C_BOOLEEN(${5}) indique 4D et au compilateur qu' partir du cinquime paramtre la mthode peut recevoir un nombre variable de paramtres de ce type. Pour plus d'informations, rfrez-vous la commande Nombre de parametres. Exemples Reportez-vous la section Commandes du thme Compilateur. Rfrence Commandes du thme Compilateur, Nombre de parametres.

330

4e Dimension - Langage

C_DATE

Compilateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

C_DATE ({mthode; }variable{; variable2; ...; variableN}) Paramtre mthode variable Type Mthode Variable ou ${...} Description Nom de mthode Nom(s) de(s) variable(s) dclarer

Description C_DATE affecte le type Date chaque variable spcifie. La premire syntaxe de la commande (si le paramtre mthode n'est pas pass) est utilise pour dclarer et typer une variable process, interprocess ou locale. Note : Cette syntaxe peut tre utilise dans les bases interprtes. La seconde syntaxe de la commande (si le paramtre mthode est pass) est utilise pour dclarer d'avance au compilateur le rsultat et/ou les paramtres ($0, $1, $2, etc.) d'une mthode. Vous devez utiliser cette syntaxe si vous voulez viter la phase de typage de variables lors de la compilation d'une base, afin de rduire le temps de compilation. ATTENTION : La deuxime syntaxe ne peut pas tre excute en mode interprt. Pour cette raison, si vous utilisez cette syntaxe, stockez-la dans une mthode (dont le nom doit dbuter par "COMPILER") qui n'est pas excute en mode interprt. Utilisation avance : La syntaxe C_DATE(${...}) vous permet de dclarer pour une mthode un nombre variable de paramtres du mme type la condition que ce soient les derniers paramtres de la mthode. Par exemple, la dclaration C_DATE(${5}) indique 4D et au compilateur qu' partir du cinquime paramtre la mthode peut recevoir un nombre variable de paramtres de ce type. Pour plus d'informations, rfrez-vous la commande Nombre de parametres. Exemples Reportez-vous la section Commandes du thme Compilateur. Rfrence Commandes du thme Compilateur, Nombre de parametres.

4e Dimension - Langage

331

C_GRAPHE

Compilateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

C_GRAPHE ({mthode; }variable{; variable2; ...; variableN}) Paramtre mthode variable Type Alpha Variable ou ${...} Description Nom de mthode Nom(s) de(s) variable(s) dclarer

Description C_GRAPHE affecte le type Graphe chaque variable spcifie. La premire syntaxe de la commande (si le paramtre mthode n'est pas pass) est utilise pour dclarer et typer une variable process, interprocess ou locale. Note : Cette syntaxe peut tre utilise dans les bases interprtes. La seconde syntaxe de la commande (si le paramtre mthode est pass) est utilise pour dclarer d'avance au compilateur le rsultat et/ou les paramtres ($0, $1, $2, etc.) d'une mthode. Vous devez utiliser cette syntaxe si vous voulez viter la phase de typage de variables lors de la compilation d'une base, afin de rduire le temps de compilation. ATTENTION : La deuxime syntaxe ne peut pas tre excute en mode interprt. Pour cette raison, si vous utilisez cette syntaxe, stockez-la dans une mthode (dont le nom doit dbuter par "COMPILER") qui n'est pas excute en mode interprt. Utilisation avance : La syntaxe C_GRAPHE(${...}) vous permet de dclarer pour une mthode un nombre variable de paramtres du mme type la condition que ce soient les derniers paramtres de la mthode. Par exemple, la dclaration C_GRAPHE(${5}) indique 4D et au compilateur qu' partir du cinquime paramtre la mthode peut recevoir un nombre variable de paramtres de ce type. Pour plus d'informations, rfrez-vous la commande Nombre de parametres. Exemples Rfrez-vous la section Commandes du thme Compilateur. Rfrence Commandes du thme Compilateur.

332

4e Dimension - Langage

C_ENTIER

Compilateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

C_ENTIER ({mthode; }variable{; variable2; ...; variableN}) Paramtre mthode variable Type Mthode Variable ou ${...} Description Nom de mthode Nom(s) de(s) variable(s) dclarer

Note prliminaire : La commande C_ENTIER est conserve pour des raisons de compatibilit avec les anciennes bases de donnes. En effet, en interne 4D et le compilateur retypent les Entiers en Entiers longs. Par exemple : C_ENTIER($MaVar) $Letype:=Type($MaVar) `$Letype vaut 9 (Est un entier long) Description C_ENTIER affecte le type Entier chaque variable spcifie. La premire syntaxe de la commande (si le paramtre mthode n'est pas pass) est utilise pour dclarer et typer une variable process, interprocess ou locale. Note : Cette syntaxe peut tre utilise dans les bases interprtes. La seconde syntaxe de la commande (si le paramtre mthode est pass) est utilise pour dclarer d'avance au compilateur le rsultat et/ou les paramtres ($0, $1, $2, etc.) d'une mthode. Vous devez utiliser cette syntaxe si vous voulez viter la phase de typage de variables lors de la compilation d'une base, afin de rduire le temps de compilation. ATTENTION : La deuxime syntaxe ne peut pas tre excute en mode interprt. Pour cette raison, si vous utilisez cette syntaxe, stockez-la dans une mthode (dont le nom doit dbuter par "COMPILER") qui n'est pas excute en mode interprt. Exemple Reportez-vous la section Commandes du thme Compilateur. Rfrence Commandes du thme Compilateur, C_ENTIER LONG, C_REEL, Nombre de parametres.

4e Dimension - Langage

333

C_ENTIER LONG

Compilateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

C_ENTIER LONG ({mthode; }variable{; variable2; ...; variableN}) Paramtre mthode variable Type Mthode Variable ou ${...} Description Nom de mthode Nom(s) de(s) variable(s) dclarer

Description C_ENTIER LONG affecte le type Entier long chaque variable spcifie. La premire syntaxe de la commande (si le paramtre mthode n'est pas pass) est utilise pour dclarer et typer une variable process, interprocess ou locale. Note : Cette syntaxe peut tre utilise dans les bases interprtes. La seconde syntaxe de la commande (si le paramtre mthode est pass) est utilise pour dclarer d'avance au compilateur le rsultat et/ou les paramtres ($0, $1, $2, etc.) d'une mthode. Vous devez utiliser cette syntaxe si vous voulez viter la phase de typage de variables lors de la compilation d'une base, afin de rduire le temps de compilation. ATTENTION : La deuxime syntaxe ne peut pas tre excute en mode interprt. Pour cette raison, si vous utilisez cette syntaxe, stockez-la dans une mthode (dont le nom doit dbuter par "COMPILER") qui n'est pas excute en mode interprt. Utilisation avance : La syntaxe C_ENTIER LONG(${...}) vous permet de dclarer pour une mthode un nombre variable de paramtres du mme type la condition que ce soient les derniers paramtres de la mthode. Par exemple, la dclaration C_ENTIER LONG(${5}) indique 4D et au compilateur qu' partir du cinquime paramtre la mthode peut recevoir un nombre variable de paramtres de ce type. Pour plus d'informations, rfrezvous la commande Nombre de parametres. Exemples Reportez-vous la section Commandes du thme Compilateur. Rfrence Commandes du thme Compilateur, C_ENTIER, C_REEL, Nombre de parametres.

334

4e Dimension - Langage

C_IMAGE

Compilateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

C_IMAGE ({mthode; }variable{; variable2; ...; variableN}) Paramtre mthode variable Type Mthode Variable ou ${...} Description Nom de mthode Nom(s) de(s) variable(s) dclarer

Description C_IMAGE affecte le type Image chaque variable spcifie. La premire syntaxe de la commande (si le paramtre mthode n'est pas pass) est utilise pour dclarer et typer une variable process, interprocess ou locale. Note : Cette syntaxe peut tre utilise dans les bases interprtes. La seconde syntaxe de la commande (si le paramtre mthode est pass) est utilise pour dclarer d'avance au compilateur le rsultat et/ou les paramtres ($0, $1, $2, etc.) d'une mthode. Vous devez utiliser cette syntaxe si vous voulez viter la phase de typage de variables lors de la compilation d'une base, afin de rduire le temps de compilation. ATTENTION : La deuxime syntaxe ne peut pas tre excute en mode interprt. Pour cette raison, si vous utilisez cette syntaxe, stockez-la dans une mthode (dont le nom doit dbuter par "COMPILER") qui n'est pas excute en mode interprt. Utilisation avance : La syntaxe C_IMAGE(${...}) vous permet de dclarer pour une mthode un nombre variable de paramtres du mme type la condition que ce soient les derniers paramtres de la mthode. Par exemple, la dclaration C_IMAGE(${5}) indique 4D et au compilateur qu' partir du cinquime paramtre la mthode peut recevoir un nombre variable de paramtres de ce type. Pour plus d'informations, rfrez-vous la commande Nombre de parametres. Exemples Reportez-vous la section Commandes du thme Compilateur. Rfrence Commandes du thme Compilateur, Nombre de parametres.

4e Dimension - Langage

335

C_POINTEUR

Compilateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

C_POINTEUR ({mthode; }variable{; variable2; ...; variableN}) Paramtre mthode variable Type Mthode Variable ou ${...} Description Nom de mthode Nom(s) de(s) variable(s) dclarer

Description C_POINTEUR affecte le type Pointeur chaque variable spcifie. La premire syntaxe de la commande (si le paramtre mthode n'est pas pass) est utilise pour dclarer et typer une variable process, interprocess ou locale. Note : Cette syntaxe peut tre utilise dans les bases interprtes. La seconde syntaxe de la commande (si le paramtre mthode est pass) est utilise pour dclarer d'avance au compilateur le rsultat et/ou les paramtres ($0, $1, $2, etc.) d'une mthode. Vous devez utiliser cette syntaxe si vous voulez viter la phase de typage de variables lors de la compilation d'une base, afin de rduire le temps de compilation. ATTENTION : La deuxime syntaxe ne peut pas tre excute en mode interprt. Pour cette raison, si vous utilisez cette syntaxe, stockez-la dans une mthode (dont le nom doit dbuter par "COMPILER") qui n'est pas excute en mode interprt. Utilisation avance : La syntaxe C_POINTEUR(${...}) vous permet de dclarer pour une mthode un nombre variable de paramtres du mme type la condition que ce soient les derniers paramtres de la mthode. Par exemple, la dclaration C_POINTEUR(${5}) indique 4D et au compilateur qu' partir du cinquime paramtre la mthode peut recevoir un nombre variable de paramtres de ce type. Pour plus d'informations, rfrez-vous la commande Nombre de parametres. Exemples Reportez-vous la section Commandes du thme Compilateur. Rfrence Commandes du thme Compilateur, Nombre de parametres.

336

4e Dimension - Langage

C_REEL

Compilateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

C_REEL ({mthode; }variable{; variable2; ...; variableN}) Paramtre mthode variable Type Mthode Variable ou ${...} Description Nom de mthode Nom(s) de(s) variable(s) dclarer

Description C_REEL affecte le type Rel (numrique) chaque variable spcifie. La premire syntaxe de la commande (si le paramtre mthode n'est pas pass) est utilise pour dclarer et typer une variable process, interprocess ou locale. Note : Cette syntaxe peut tre utilise dans les bases interprtes. La seconde syntaxe de la commande (si le paramtre mthode est pass) est utilise pour dclarer d'avance au compilateur le rsultat et/ou les paramtres ($0, $1, $2, etc.) d'une mthode. Vous devez utiliser cette syntaxe si vous voulez viter la phase de typage de variables lors de la compilation d'une base, afin de rduire le temps de compilation. ATTENTION : La deuxime syntaxe ne peut pas tre excute en mode interprt. Pour cette raison, si vous utilisez cette syntaxe, stockez-la dans une mthode (dont le nom doit dbuter par "COMPILER") qui n'est pas excute en mode interprt. Utilisation avance : La syntaxe C_REEL(${...}) vous permet de dclarer pour une mthode un nombre variable de paramtres du mme type la condition que ce soient les derniers paramtres de la mthode. Par exemple, la dclaration C_REEL(${5}) indique 4D et au compilateur qu' partir du cinquime paramtre la mthode peut recevoir un nombre variable de paramtres de ce type. Pour plus d'informations, rfrez-vous la commande Nombre de parametres. Exemples Reportez-vous la section Commandes du thme Compilateur. Rfrence Commandes du thme Compilateur, C_ENTIER, C_ENTIER LONG, Nombre de parametres.

4e Dimension - Langage

337

C_ALPHA

Compilateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

C_ALPHA ({mthode; }taille; variable{; variable2; ...; variableN}) Paramtre mthode taille variable Type Mthode Numrique Variable ou ${...} Description Nom de mthode Taille de la chane Nom(s) de(s) variable(s) dclarer

Description C_ALPHA affecte le type Alphanumrique chaque variable spcifie. Le paramtre taille spcifie la longueur maximum des chanes qu'une variable peut contenir. Les chanes sont limites 255 caractres. Si vous souhaitez optimiser la vitesse d'excution de votre base, il est prfrable d'utiliser des variables Alpha au lieu de variables Texte lorsque c'est possible. La premire syntaxe de la commande (lorsque le paramtre mthode n'est pas pass) est utilise pour dclarer et typer une variable process, interprocess ou locale. Note : Cette syntaxe peut tre utilise dans les bases interprtes. La seconde syntaxe de la commande (lorsque le paramtre mthode est pass) est utilise pour dclarer d'avance pour 4D Compiler le rsultat et/ou les paramtres ($0, $1, $2, etc.) d'une mthode. Vous devez utiliser cette syntaxe pour viter la phase de typage de variables lors de la compilation d'une base, afin de rduire le temps de compilation. ATTENTION : La deuxime syntaxe ne peut pas tre excute en mode interprt. Pour cette raison, si vous utilisez cette syntaxe, stockez-la dans une mthode (dont le nom doit dbuter par "COMPILER") qui n'est pas excute en mode interprt. Utilisation avance : La syntaxe C_ALPHA(...;${...}) vous permet de dclarer pour une mthode un nombre variable de paramtres du mme type la condition que ce soient les derniers paramtres de la mthode. Par exemple, la dclaration C_ALPHA(...;${5}) indique 4D et 4D Compiler qu' partir du cinquime paramtre la mthode peut recevoir un nombre variable de paramtres de ce type. Pour plus d'informations, rfrez-vous la commande Nombre de parametres. Exemples Reportez-vous la section Commandes du thme Compilateur.

338

4e Dimension - Langage

C_TEXTE

Compilateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

C_TEXTE ({mthode; }variable{; variable2; ...; variableN}) Paramtre mthode variable Type Mthode Variable ou ${...} Description Nom de mthode Nom(s) de(s) variable(s) dclarer

Description C_TEXTE affecte le type Texte chaque variable spcifie. La premire syntaxe de la commande (si le paramtre mthode n'est pas pass) est utilise pour dclarer et typer une variable process, interprocess ou locale. Note : Cette syntaxe peut tre utilise dans les bases interprtes. La seconde syntaxe de la commande (si le paramtre mthode est pass) est utilise pour dclarer d'avance pour au compilateur le rsultat et/ou les paramtres ($0, $1, $2, etc.) d'une mthode. Vous devez utiliser cette syntaxe si vous voulez viter la phase de typage de variables lors de la compilation d'une base, afin de rduire le temps de compilation. ATTENTION : La deuxime syntaxe ne peut pas tre excute en mode interprt. Pour cette raison, si vous utilisez cette syntaxe, stockez-la dans une mthode (dont le nom doit dbuter par "COMPILER") qui n'est pas excute en mode interprt. Utilisation avance : La syntaxe C_TEXTE(${...}) vous permet de dclarer pour une mthode un nombre variable de paramtres du mme type la condition que ce soient les derniers paramtres de la mthode. Par exemple, la dclaration C_TEXTE(${5}) indique 4D et au compilateur qu' partir du cinquime paramtre la mthode peut recevoir un nombre variable de paramtres de ce type. Pour plus d'informations, rfrez-vous la commande Nombre de parametres. Exemples Reportez-vous la section Commandes du thme Compilateur. Rfrence Commandes du thme Compilateur, C_ALPHA, Nombre de parametres.

4e Dimension - Langage

339

C_HEURE

Compilateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

C_HEURE ({mthode; }variable{; variable2; ...; variableN}) Paramtre mthode variable Type Mthode Variable ou ${...} Description Nom de mthode Nom(s) de(s) variable(s) dclarer

Description C_HEURE affecte le type Heure chaque variable spcifie. La premire syntaxe de la commande (si le paramtre mthode n'est pas pass) est utilise pour dclarer et typer une variable process, interprocess ou locale. Note : Cette syntaxe peut tre utilise dans les bases interprtes. La seconde syntaxe de la commande (si le paramtre mthode est pass) est utilise pour dclarer d'avance au compilateur le rsultat et/ou les paramtres ($0, $1, $2, etc.) d'une mthode. Vous devez utiliser cette syntaxe si vous voulez viter la phase de typage de variables lors de la compilation d'une base, afin de rduire le temps de compilation. ATTENTION : La deuxime syntaxe ne peut pas tre excute en mode interprt. Pour cette raison, si vous utilisez cette syntaxe, stockez-la dans une mthode (dont le nom doit dbuter par "COMPILER") qui n'est pas excute en mode interprt. Utilisation avance : La syntaxe C_HEURE(${...}) vous permet de dclarer pour une mthode un nombre variable de paramtres du mme type la condition que ce soient les derniers paramtres de la mthode. Par exemple, la dclaration C_HEURE(${5}) indique 4D et au compilateur qu' partir du cinquime paramtre la mthode peut recevoir un nombre variable de paramtres de ce type. Pour plus d'informations, rfrez-vous la commande Nombre de parametres. Exemples Reportez-vous la section Commandes du thme Compilateur. Rfrence Commandes du thme Compilateur, Nombre de parametres.

340

4e Dimension - Langage

APPELER 4D

Compilateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

APPELER 4D Paramtre Type Description Cette commande ne requiert pas de paramtre Description APPELER 4D est destine uniquement une utilisation avec le compilateur. En effet, seul le moteur de 4e Dimension peut dtecter un vnement. Il tait donc ncessaire, dans le cadre d'une base compile, qu'une routine puisse interroger le moteur de 4e Dimension afin de savoir si un vnement s'est produit. Cette commande doit donc tre utilise lorsque vous employez la commande APPELER SUR EVENEMENT. Par exemple, si une mthode excute une boucle dans laquelle aucune commande 4e Dimension n'est appele, la boucle ne pourra pas tre interrompue par un process install l'aide d'APPELER SUR EVENEMENT, et l'utilisateur ne pourra pas ouvrir une autre application. Dans ce cas, APPELER 4D doit tre insre pour que 4e Dimension puisse intercepter les vnements. Bien entendu, n'utilisez pas APPELER 4D si vous ne voulez aucune interruption. Exemple Dans l'exemple suivant, la boucle ne se terminerait jamais dans une base compile sans l'aide de APPELER 4D : ` Mthode Traitement quelconque APPELER SUR EVENEMENT ("METHODE EVENEMENT") vbArrt:=Faux MESSAGE ("Traitement..."+Caractere(13)+"Tapez une touche pour interrompre l'excution...") Repeter ` Effectuer un traitement sans appel une commande 4D APPELER 4D Jusque (vbArrt) APPELER SUR EVENEMENT ("")

4e Dimension - Langage

341

La mthode METHODE EVENEMENT : ` Mthode METHODE EVENEMENT Si (Indefinie(CodeTouche)) CodeTouche:=0 Fin de si Si (CodeTouche#0) CONFIRMER ("Voulez-vous vraiment interrompre cette opration ?") Si (OK=1) vbArrt:=Vrai Fin de si Fin de si Rfrence APPELER SUR EVENEMENT, Commandes du thme Compilateur.

342

4e Dimension - Langage

10 ________________________ Dates et heures

4e Dimension - Langage

343

344

4e Dimension - Langage

Date du jour

Dates et heures version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Date du jour {(*)} Date Paramtre * Rsultat Type Date Description Retourne la date du jour du serveur Date du jour

Description Date du jour retourne la date courante telle que dfinie dans l'horloge systme de la machine. 4D Server : Si vous passez le paramtre astrisque (*) lors d'une excution sur un poste 4D Client , la fonction retourne la date du jour telle que dfinie dans l'horloge du poste serveur. Exemples (1) L'exemple suivant fait apparatre une bote de dialogue d'alerte affichant la date du jour :

ALERTE("Nous sommes le " + Chaine(Date du jour) + ".")

(2) Vous dveloppez une application pour le march international. Vous souhaitez savoir si la version de 4D avec laquelle votre application est excute fonctionne avec des dates formates en MM/JJ/AAAA (version US) ou JJ/MM/AAAA (version franaise). Cette information est ncessaire pour vous permettre, par exemple, de personnaliser correctement les zones de saisie. La mthode projet suivante vous permet de traiter cette question : ` Mthode projet (fonction) Format date systme ` Format date systme -> Chaine ` Format date systme -> Format de donnes 4D par dfaut C_ALPHA(31;$0;$vsDate;$vsMJA;$vsMois;$vsJour;$vsAnne) C_ENTIER LONG($1;$vlPos) C_DATE($vdDate)

4e Dimension - Langage

345

` Rcuprer une date dans laquelle les valeurs de mois, de jour et d'anne sont toutes ` diffrentes $vdDate:=Date du jour Repeter $vsMois:=Chaine(Mois de($vdDate)) $vsJour:=Chaine(Jour de($vdDate)) $vsAnne:=Chaine(Annee de($vdDate)%100) Si (($vsMois=$vsJour) | ($vsMois=$vsAnne) | ($vsJour=$vsAnne)) OK:=0 $vdDate:=$vdDate+1 Sinon OK:=1 Fin de si Jusque (OK=1) $0:="" ` Initialisation du rsultat de la fonction $vsDate:=Chaine($vdDate) $vlPos:=Position("/";$vsDate) ` Trouver le premier sparateur / dans la chane ../../.. $vsMJA:=Sous chaine($vsDate;1;$vlPos-1) ` Extraire les premiers chiffres de la date ` Eliminer les premiers chiffres et le premier sparateur / $vsDate:=Sous chaine($vsDate;$vlPos+1) Au cas ou : ($vsMJA=$vsMois) ` Les chiffres expriment le mois $0:="MM" : ($vsMJA=$vsJour) ` Les chiffres expriment le jour $0:="JJ" : ($vsMJA=$vsAnne) ` Les chiffres expriment l'anne $0:="AAAA" Fin de cas $0:=$0+"/" ` Commencer construire le rsultat de la fonction $vlPos:=Position("/";$vsDate) ` Trouver le deuxime sparateur dans la chane ../.. $vsMJA:=Sous chaine($vsDate;1;$vlPos-1) ` Extraire les chiffres suivants de la date ` Rduire la chane aux derniers chiffres de la date $vsDate:=Sous chaine($vsDate;$vlPos+1) Au cas ou : ($vsMJA=$vsMois) ` Les chiffres expriment le mois $0:=$0+"MM" : ($vsMJA=$vsJour) ` Les chiffres expriment le jour $0:=$0+"JJ" : ($vsMJA=$vsAnne) ` Les chiffres expriment l'anne $0:=$0+"AAAA" Fin de cas $0:=$0+"/" ` Poursuivre la construction du rsultat de la fonction

346

4e Dimension - Langage

Au cas ou : ($vsDate=$vsMois) ` Les chiffres expriment le mois $0:=$0+"MM" : ($vsDate=$vsJour) ` Les chiffres expriment le jour $0:=$0+"DD" : ($vsDate=$vsAnne) ` Les chiffres expriment l'anne $0:=$0+"AAAA" Fin de cas ` A ce moment, $0 vaut soit MM/JJ/AAAA soit JJ/MM/AAAA, ou encore... Rfrence Annee de, Jour de, Mois de, Oprateurs sur les dates.

4e Dimension - Langage

347

Jour de

Dates et heures version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Jour de (date) Numrique Paramtre date Rsultat Type Date Numrique Description Date dont vous voulez extraire le jour Jour du mois de date

Description Jour de retourne le jour du mois de date. Exemples (1) L'exemple suivant illustre l'utilisation de Jour de. Les valeurs retournes sont stockes dans la variable Rsultat. Les commentaires dcrivent la valeur de Rsultat :

Rsultat := Jour de (!25/12/96!) ` Rsultat vaut 25 Rsultat := Jour de (Date du jour) ` Rsultat prend la valeur du jour d'aujourd'hui

(2) Reportez-vous l'exemple de la fonction Date du jour. Rfrence Annee de, Mois de, Numero du jour.

348

4e Dimension - Langage

Mois de

Dates et heures version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Mois de (date) Numrique Paramtre date Rsultat Type Date Numrique Description Date dont vous voulez extraire le mois Nombre indiquant le mois de date

Description Mois de retourne un nombre reprsentant le numro du mois de date. Note : C'est le numro du mois est retourn, et non son nom (reportez-vous l'exemple ci-dessous). 4e Dimension fournit les constantes prdfinies suivantes : Constantes Janvier Fvrier Mars Avril Mai Juin Juillet Aot Septembre Octobre Novembre Dcembre Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long Valeur 1 2 3 4 5 6 7 8 9 10 11 12

Exemples (1) L'exemple suivant illustre l'utilisation de Mois de. Les valeurs retournes sont assignes la variable Rsultat. Les commentaires fournissent les valeurs de Rsultat :

Rsultat := Mois de (!25/12/96!) ` Rsultat vaut 12 Rsultat := Mois de (Date du jour) ` Rsultat prend la valeur du mois d'aujourd'hui

(2) Reportez-vous l'exemple de la fonction Date du jour.

4e Dimension - Langage

349

(3) La ressource 'STR#' n11 de 4e Dimension contient les noms des mois dans la langue courante de l'application :

La mthode projet suivante retourne le nom du mois pour une date : ` Mthode projet Nom du mois ` Nom du mois ( Date ) -> Chane ` Nom du mois ( Date ) -> Nom du mois

$0:=Lire chaine dans liste(11;12+Mois de ($1))

La mthode projet suivante retourne le nom du mois sous forme abrge pour une date : ` Mthode projet Mois abrg ` Mois abrg ( Date ) -> Chane ` Mois abrg ( Date ) -> Nom abrg du mois

$0:=Lire chaine dans liste(11;Mois de ($1))

Rfrence Annee de, Jour de.

350

4e Dimension - Langage

Annee de

Dates et heures version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Annee de (date) Numrique Paramtre date Rsultat Type Date Numrique Description Date dont vous voulez extraire l'anne Nombre indiquant l'anne de date

Description Annee de retourne un nombre indiquant l'anne de date. Exemples (1) L'exemple suivant illustre l'utilisation de Annee de. Les rsultats sont assigns la variable Rsultat :

Rsultat := Annee de (!25/12/96!) ` Rsultat prend la valeur 1996 Rsultat := Annee de (!25/12/1996!) ` Rsultat prend la valeur 1996 Rsultat := Annee de (!25/12/1896!) ` Rsultat prend la valeur 1896 Rsultat := Annee de (!25/12/2096!) ` Rsultat prend la valeur 2096 ` Rsultat prend comme valeur l'anne de la date d'aujourd'hui Rsultat := Annee de (Date du jour)

(2) Reportez-vous l'exemple de la fonction Date du jour. Rfrence Jour de, Mois de.

4e Dimension - Langage

351

Numero du jour

Dates et heures version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Numero du jour (date) Numrique Paramtre date Rsultat Type Date Numrique Description Date dont vous souhaitez connatre le numro du jour Numro reprsentant le jour de la semaine auquel date correspond

Description La fonction Numero du jour retourne un numro reprsentant le jour de la semaine auquel date correspond. Note : Si une date nulle est passe Numero du jour, la fonction retourne 2. 4e Dimension fournit les constantes prdfines suivantes : Constantes Lundi Mardi Mercredi Jeudi Vendredi Samedi Dimanche Type Entier Entier Entier Entier Entier Entier Entier long long long long long long long Valeur 2 3 4 5 6 7 1

Note : Numero du jour retourne une valeur comprise entre 1 et 7. Pour obtenir le numro du jour dans le sens "date du mois", utilisez la fonction Jour de.

352

4e Dimension - Langage

Exemple L'exemple suivant est une fonction qui retourne le jour d'aujourd'hui sous forme de chane :

` $Jour prend comme valeur le numro du jour courant $Jour := Numero du jour (Date du jour) Au cas ou : ($Jour = 1) $0 := "Dimanche" : ($Jour = 2) $0 := "Lundi" : ($Jour = 3) $0 := "Mardi" : ($Jour = 4) $0 := "Mercredi" : ($Jour = 5) $0 := "Jeudi" : ($Jour = 6) $0 := "Vendredi" : ($Jour = 7) $0 := "Samedi" Fin de cas

Rfrence Jour de.

4e Dimension - Langage

353

Ajouter a date

Dates et heures version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ajouter a date (date; annes; mois; jours) Date Paramtre date annes mois jours Rsultat Type Date Numrique Numrique Numrique Date Description Date laquelle ajouter jours, mois et annes Nombre d'annes ajouter la date Nombre de mois ajouter la date Nombre de jours ajouter la date Date rsultante

Description Ajouter a date ajoute annes, mois et jours la date que vous avez passe dans date, et retourne la date rsultante. Alors que les Oprateurs sur les dates vous permettent d'ajouter des jours une date, Ajouter a date vous permet d'ajouter rapidement des mois et des annes sans vous soucier du nombre de jours par mois ou des annes bissextiles (comme vous devriez le faire avec l'oprateur "+" sur les dates). Exemples

` Cette ligne calcule la date dans un an, le mme jour $vdDansUnAn:=Ajouter a date(Date du jour;1;0;0) ` Cette ligne calcule la date le mois prochain, le mme jour $vdMoisProchain:=Ajouter a date(Date du jour;0;1;0) ` Cette ligne fait la mme chose que $vdDemain:=Date du jour+1 $vdDemain:=Ajouter a date(Date du jour;0;0;1)

Rfrence Oprateurs sur les dates.

354

4e Dimension - Langage

Date

Dates et heures version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Date (chaneDate) Date Paramtre chaneDate Rsultat Type Alpha Date Description Chane contenant la date retourner chaneDate sous forme de Date

Description La fonction Date extrait et retourne la date de la chane chaneDate. Le paramtre chaneDate doit respecter les conventions d'criture standard pour les formats de date. Dans une version franaise de 4D, la date doit tre de la forme JJ/MM/AA (jour, mois, anne). Le jour et le mois peuvent tre composs d'un ou deux chiffres. L'anne peut tre compose de deux ou quatre chiffres. Si l'anne comporte deux chiffres, Date considre que la date appartient au XXe sicle et ajoute 19 devant la valeur. Les caractres de sparation de date autoriss sont les suivants : barre oblique (/), espace, point (.), virgule (,) et tiret (-). Date ne vrifie pas la validit de la date passe dans chaneDate. Si une date errone (telle que "13/35/94") est passe, Date retourne une date invalide. Si chaneDate ne peut tre interprte comme une date (par exemple, "aa/12/94"), une date nulle (!00/00/00!) est retourne. Il est de votre ressort de tester la validit de chaneDate. Exemples (1) L'exemple suivant demande l'utilisateur de saisir une date. La chane saisie est convertie en date et stocke dans la variable DemDate :

DemDate := Date (Demander ("Saisissez une date :"; Chaine (Date du jour))) Si (OK=1) ` Faire quelque chose avec la date Fin de si

(2) L'exemple suivant retourne la chane "12/12/97" sous forme de date :

vDate:=Date("12/12/97")

4e Dimension - Langage

355

Heure courante

Dates et heures version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Heure courante {(*)} Heure Paramtre * Rsultat Type Heure Description Retourne l'heure courante sur le poste serveur Heure courante

Description La fonction Heure courante retourne l'heure courante dfinie dans l'horloge de votre systme. L'heure courante est toujours comprise entre 00:00:00 et 23:59:59. Vous pouvez utiliser les fonctions Chaine ou Chaine heure pour convertir en chane alphanumrique l'expression de type heure retourne par Heure courante. 4D Server : Si vous passez le paramtre astrisque (*) lors d'une excution sur un poste 4D Client , la fonction retourne l'heure courante telle que dfinie dans l'horloge du poste serveur. Exemples (1) L'exemple suivant vous permet de mesurer la dure d'une opration. Dans cet exemple, vous voulez chronomtrer la mthode longueOpration :

CelaPrend := Heure courante ` Stocker l'heure de dpart longueOpration ` Effectuer l'opration ` Afficher la dure ALERTE ("L'opration a pris " + Chaine (Heure courante CelaPrend))

(2) L'exemple suivant extrait les heures, minutes et secondes de l'heure courante :

$vhMaintenant:= Heure courante ALERTE("L'heure courante est : "+Chaine($vhMaintenant\3600)) ALERTE("La minute courante est : "+Chaine(($vhMaintenant\60)%60)) ALERTE("La seconde courante est : "+Chaine($vhMaintenant%60))

Rfrence Chaine, Nombre de millisecondes, Nombre de ticks, Oprateurs sur les heures.

356

4e Dimension - Langage

Chaine heure

Dates et heures version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Chaine heure (secondes) Alpha Paramtre secondes Rsultat Type Numrique Alpha Description Secondes coules depuis minuit Heure sous forme de chane au format 24 heures

Description La fonction Chaine heure retourne sous forme de chane alphanumrique sur 24 heures l'expression de type Heure passe dans secondes. Le format appliqu la chane est HH:MM:SS. Si vous passez un nombre de secondes suprieur celui qu'il y a dans un jour (86 400), Chaine heure continue d'ajouter les heures, les minutes et les secondes. Par exemple, Chaine heure (86401) retourne 24:00:01. Note : Si vous voulez obtenir sous forme de chane une expression de type Heure dans des formats plus varis, utilisez la fonction Chaine. Exemple L'exemple suivant affiche une bote de dialogue d'alerte avec le message 46800 secondes reprsentent 13:00:00 :

ALERTE ("46800 secondes reprsentent " + Chaine heure (46800))

Rfrence Chaine, Heure.

4e Dimension - Langage

357

Heure

Dates et heures version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Heure (chaineHeure) Heure Paramtre chaineHeure Rsultat Type Alpha Heure Description Chane retourner sous forme d'heure Heure dfinie par chaineHeure

Description La fonction Heure retourne, sous la forme d'une expression de type Heure, l'heure dfinie dans la chane chaineHeure. Le paramtre chaineHeure doit tre de la forme HH:MM:SS et dans un format de 24 heures. Exemple L'exemple suivant affiche une bote de dialogue d'alerte avec le message 1:00 P.M. = 13 heures 0 minute. :

ALERTE ("1:00 P.M. = " + Chaine (Heure ("13:00:00"); Heure Minute))

Rfrence Chaine, Chaine heure.

358

4e Dimension - Langage

Nombre de ticks

Dates et heures version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nombre de ticks Numrique Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Numrique Nombre de ticks (60me de seconde) couls depuis le dmarrage de la machine

Description Nombre de ticks retourne le nombre de ticks (1 tick = 1/60me de seconde) couls depuis le dmarrage de la machine. Note : Nombre de ticks retourne une valeur de type Entier long. Exemple Rfrez-vous l'exemple de la fonction Nombre de millisecondes. Rfrence Heure courante, Nombre de millisecondes.

4e Dimension - Langage

359

Nombre de millisecondes

Dates et heures version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nombre de millisecondes Entier long Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Entier long Nombre de millisecondes (1000me de seconde) coules depuis le dmarrage de la machine

Description Nombre de millisecondes retourne le nombre de millisecondes (1 milliseconde = 1/1000me de seconde) coules depuis le dmarrage de la machine. Exemple Le code suivant : Creer fenetre (100;100;350;230;0;"Chronomtre") $vhDbutHeure:=Heure courante $vlDbutTicks:=Nombre de ticks $vrDbutMillisecondes:=Nombre de millisecondes Repeter POSITION MESSAGE (2;1) MESSAGE ("Heure...........:"+Chaine (Heure courante -$vhDbutHeure)) POSITION MESSAGE (2;3) MESSAGE ("Ticks..........:"+Chaine (Nombre de ticks -$vlDbutTicks)) POSITION MESSAGE (2;5) MESSAGE ("Nombre de millisecondes...:"+Chaine (Nombre de millisecondes -$vrDbutMillisecondes)) Jusque ((Heure courante -$vhDbutHeure)>=00:01:00) FERMER FENETRE ... affiche la fentre suivante pendant une minute :

Rfrence Heure courante, Nombre de ticks.

360

4e Dimension - Langage

SIECLE PAR DEFAUT

Dates et heures version 6.7 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SIECLE PAR DEFAUT (sicle{; anPivot}) Paramtre sicle anPivot Type Numrique Numrique Description Sicle par dfaut (moins un) lors de la saisie d'annes sur 2 chiffres Anne pivot lors de la saisie d'annes sur 2 chiffres

Description La commande SIECLE PAR DEFAUT vous permet de dfinir le sicle courant par dfaut et l'anne pivot adopts par 4D lorsque des dates sont saisies avec seulement deux chiffres pour l'anne. L'anne pivot indique la valeur au-dessous de laquelle une anne saisie sur deux chiffres sera interprte comme appartenant au sicle suivant : si l'anne saisie est suprieure ou gale l'anne pivot, elle appartient au sicle courant, si l'anne saisie est infrieure l'anne pivot, elle appartient au sicle suivant (relativement au sicle courant par dfaut). Par dfaut, 4D prsume que les dates appartiennent au 20e sicle et utilise la valeur 30 comme anne pivot : Si vous saisissez la date 25/01/97, 4D considre que vous indiquez le 25 janvier 1997 Si vous saisissez la date 25/01/30, 4D considre que vous indiquez le 25 janvier 1930 Si vous saisissez la date 25/01/29, 4D considre que vous indiquez le 25 janvier 2029 Si vous saisissez la date 25/01/07, 4D considre que vous indiquez le 25 janvier 2007 La commande SIECLE PAR DEFAUT permet de modifier ce comportement par dfaut. Une fois excute, elle prend effet immdiatement. Vous pouvez passer uniquement un sicle par dfaut, ou un sicle par dfaut et une anne pivot. Si vous passez uniquement un nouveau sicle par dfaut (moins un) dans sicle, 4D interprtera toutes les annes saisies sur deux chiffres comme appartenant ce sicle. Par exemple, aprs l'appel : SIECLE PAR DEFAUT(20) ` Fixer le 21e sicle comme sicle par dfaut Si vous saisissez la date 25/01/97, 4D considre que vous indiquez le 25 janvier 2097 Si vous saisissez la date 25/01/07, 4D considre que vous indiquez le 25 janvier 2007

4e Dimension - Langage

361

En outre, vous pouvez spcifier le paramtre anPivot. Par exemple, aprs l'appel : ` Fixer le 21e sicle comme sicle par dfaut si l'anne est infrieure 95 SIECLE PAR DEFAUT(19;95) Si vous saisissez la date 25/01/97, 4D considre que vous indiquez le 25 janvier 1997 Si vous saisissez la date 25/01/07, 4D considre que vous indiquez le 25 janvier 2007 Notez que cette commande n'affecte que l'interprtation des dates lorsque les annes sont saisies sur 2 chiffres. Quels que soient les paramtres passs SIECLE PAR DEFAUT : Si vous saisissez la date 25/01/1997, 4D considre que vous indiquez le 25 janvier 1997 Si vous saisissez la date 25/01/2097, 4D considre que vous indiquez le 25 janvier 2097 Si vous saisissez la date 25/01/1907, 4D considre que vous indiquez le 25 janvier 1907 Si vous saisissez la date 25/01/2007, 4D considre que vous indiquez le 25 janvier 2007 Cette commande affecte uniquement la saisie des donnes. Elle n'influe pas sur le stockage des donnes, les calculs, etc.

362

4e Dimension - Langage

11 ________________________ Dbogueur

4e Dimension - Langage

363

364

4e Dimension - Langage

Un dbogueur, pour quoi faire ?

Dbogueur version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lorsque vous dveloppez et testez vos mthodes, il est important que vous puissiez reprer et corriger les erreurs qui peuvent s'y tre glisses. Vous pouvez commettre plusieurs types d'erreurs en utilisant le langage : des fautes de frappe, des erreurs de syntaxe, des erreurs lies l'environnement, des erreurs logiques ou de conception, ou encore des erreurs d'excution (Runtime). Fautes de frappe
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les fautes de frappe sont dtectes directement dans l'diteur de mthodes et sont indiques par une puce () ainsi qu'un message dans la zone d'information situe en haut de la fentre. Cette fentre signale une faute de frappe :

Note : Les commentaires ont t manuellement ajouts pour cet exemple. Seules les puces () sont insres par 4D l'endroit de l'erreur. De telles fautes de frappe provoquent gnralement des erreurs de syntaxe (dans ce cas, le nom de la table est inconnu). La zone d'informations de la fentre affiche la cause de l'erreur au moment de la validation de la ligne d'instructions. Vous pouvez alors corriger l'erreur de frappe et appuyer sur la touche Entre (du clavier numrique) pour valider la correction. Pour plus d'informations sur l'diteur de mthodes, reportez-vous au manuel Mode Structure de 4e Dimension.

4e Dimension - Langage

365

Erreurs de syntaxe
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Certaines erreurs de syntaxe ne peuvent tre dtectes que lorsque vous excutez la mthode. La fentre Erreur de syntaxe est affiche lorsqu'une telle erreur de syntaxe est dtecte. Par exemple :

Ici, l'erreur provient du fait que le nom d'une table est pass la commande Majusc, qui attend une expression de type Texte. Pour plus d'informations sur cette fentre, reportezvous la section Fentre d'erreur de syntaxe. Erreurs lies l'environnement
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Parfois, il peut arriver que vous n'ayez pas assez de mmoire pour crer un tableau ou un BLOB. Ou bien, lorsque vous cherchez accder un document sur votre disque, ce document peut ne pas exister ou tre dj ouvert par une autre application. Dans ce cas, une fentre d'erreur apparat, vous dcrivant l'erreur et l'action qui n'a pas pu tre effectue. Par exemple :

366

4e Dimension - Langage

Ces erreurs ne se produisent pas cause de votre code. Simplement, ce sont des choses qui arrivent ! La plupart d'entre elles sont faciles identifier l'aide d'une mthode d'interception d'erreurs. Pour plus d'informations, reportez-vous la description de la commande APPELER SUR ERREUR. Erreurs logiques ou de conception
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ce sont gnralement les erreurs qui sont les plus difficiles reprer. Vous devez utiliser le dbogueur pour les dtecter. Notez qu' l'exception des fautes de frappe, tous les types d'erreurs indiqus prcdemment sont aussi, parfois, des erreurs de logique ou de conception. Voici des exemples : Une erreur de syntaxe peut tre retourne si vous essayez d'utiliser une variable qui n'est pas encore initialise. Une erreur lie l'environnement peut se produire si vous essayez d'ouvrir un document dont le nom est reu par une sous-routine qui ne reoit pas la bonne valeur dans le paramtre. Notez que dans cet exemple, le morceau de code qui ne fonctionne pas n'est pas celui qui est l'origine du problme. Les erreurs logiques ou de conception se produisent galement dans les situations suivantes : Un enregistrement n'est pas correctement mis jour parce qu'en appelant STOCKER ENREGISTREMENT, vous avez oubli de tester d'abord si cet enregistrement tait ou non verrouill. Une mthode ne fait pas exactement ce que vous attendiez parce que vous ne testez pas la prsence ventuelle d'un paramtre optionnel.

4e Dimension - Langage

367

Erreurs d'excution
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

En mode compil, vous pouvez obtenir des erreurs que vous n'avez jamais vues en mode interprt. Voici un exemple :

Ce message vous indique que vous essayez d'accder un caractre dont la position se trouve au-del de la longueur de la chane. Pour trouver rapidement l'origine du problme, notez le nom de la mthode et le numro de la ligne, ouvrez votre base en mode interprt puis allez la mthode et la ligne indiques. Que faire lorsque vous rencontrez une erreur ?
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les erreurs sont chose commune. Il est rare d'crire une grande quantit de lignes de code sans gnrer d'erreur. Traiter et corriger les erreurs est tout aussi naturel. Grce son environnement multitche, 4D vous permet de modifier et d'excuter rapidement vos mthodes : vous n'avez qu' passer d'une fentre une autre. De plus, vous dcouvrirez combien il est simple et rapide de reprer vos erreurs en utilisant le Dbogueur. Un rflexe courant chez les dbutants lorsqu'une erreur est dtecte est de cliquer sur le bouton Arrter dans la fentre d'erreur de syntaxe, de retourner l'diteur de mthodes, et d'essayer de deviner ce qui se passe en regardant le code. Ne faites pas cela ! Vous gagnerez un temps considrable en utilisant toujours le Dbogueur. S'il se produit une erreur de syntaxe inattendue, utilisez le Dbogueur. S'il se produit une erreur d'environnement, utilisez le Dbogueur. S'il se produit tout autre type d'erreur, utilisez le Dbogueur.

368

4e Dimension - Langage

Dans 99 % des cas, le Dbogueur affiche l'information dont vous avez besoin pour comprendre la cause de l'erreur. Vous pouvez alors la corriger. Astuce : Passez quelques heures apprendre et exprimenter le Dbogueur. Vous gagnerez des journes et des mois dans l'avenir. La phase de dveloppement reprsente une autre occasion d'utiliser le Dbogueur. Imaginons que vous deviez crire un algorithme plus complexe que d'habitude. Une fois le code crit, vous ne pouvez tre certain qu'il fonctionne tant que vous ne l'aurez pas test. Au lieu de passer directement en excution, vous pouvez d'abord le vrifier en insrant la commmande TRACE au dbut de votre code. Ensuite, excutez le code au pas pas pour contrler ce qui se passe. Conclusion gnrale Utilisez le Dbogueur. Rfrence APPELER SUR ERREUR, Dbogueur, Fentre d'erreur de syntaxe, Liste des points darrt, Points d'arrt sur commandes, Raccourcis du dbogueur.

4e Dimension - Langage

369

Fentre d'erreur de syntaxe

Dbogueur version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La Fentre d'erreur de syntaxe s'affiche lorsque l'excution d'une mthode est interrompue. L'excution de la mthode peut tre interrompue pour l'une des deux raisons suivantes : 4D interrompt la mthode car une erreur de syntaxe l'empche de poursuivre son excution. Vous provoquez une interruption utilisateur en appuyant sur Alt+Clic (sous Windows) ou Option+Clic (sous MacOS) pendant l'excution de la mthode. Voici une Fentre d'erreur de syntaxe :

Le texte situ dans la zone suprieure de la fentre affiche un message dcrivant l'erreur. La partie infrieure fait apparatre la ligne excute au moment o l'erreur est survenue ; l'emplacement prcis o est survenue l'erreur est slectionn. La fentre comporte quatre boutons : Arrter, Tracer, Continuer et Modifier. Arrter : La mthode est interrompue et vous retournez l'endroit o vous vous trouviez avant de commencer l'excution de la mthode. Si une mthode formulaire ou une mthode objet s'excutent en rponse un vnement, elles sont stoppes et vous retournez au formulaire. Si la mthode s'excute partir du mode Menus crs, vous retournez dans ce mode.

370

4e Dimension - Langage

Tracer : Vous entrez dans le mode Trace et la fentre du Dbogueur est affiche. Si la ligne courante a t partiellement excute, il se peut que vous soyez oblig de cliquer plusieurs fois sur le bouton Tracer. Lorsque la ligne est termine, la fentre du Dbogueur s'affiche. Continuer : L'excution continue. La ligne contenant l'erreur peut avoir t partiellement excute tout dpend de l'endroit o se trouvait l'erreur. Continuez avec prudence l'erreur peut empcher que le reste de la mthode s'excute correctement. Gnralement, il vaut mieux ne pas continuer. Vous pouvez cliquer sur Continuer si l'erreur se trouve dans un appel mineur, comme par exemple CHANGER TITRE FENETRE, qui n'empche pas de continuer l'excution et le test du code. Vous pouvez vous concentrer sur le code le plus important, et corriger les erreurs mineures ultrieurement. Modifier : L'excution de la mthode est totalement interrompue. 4D passe en mode Structure. La mthode dans laquelle l'erreur est survenue est ouverte dans l'diteur de mthodes, ce qui vous permet de la corriger. Utilisez cette option lorsque vous avez identifi immdiatement l'erreur et que vous pouvez la corriger sans qu'il soit ncessaire d'effectuer d'autres investigations. Rfrence APPELER SUR ERREUR, Dbogueur, Un dbogueur, pour quoi faire ?.

4e Dimension - Langage

371

Dbogueur

Dbogueur version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le mot Dbogueur provient du terme anglais bug (insecte ou punaise) qui se "traduit" en franais par bogue . Une bogue dans une mthode est une erreur que vous dsirez liminer. Lorsquune erreur se produit dans votre code, ou lorsque vous dsirez contrler lexcution de vos mthodes, vous utilisez le dbogueur. Un dbogueur vous permet de trouver les bogues en excutant pas pas vos mthodes et en fournissant toutes les informations ncessaires. Ce procd sappelle le mode Trace. Pour appeler la fentre du dbogueur et afficher puis tracer les mthodes, vous pouvez : Cliquer sur le bouton Tracer dans la fentre derreur de syntaxe, Utiliser la commande TRACE, Cliquer sur le bouton Dboguer, en mode Utilisation, dans la fentre d'excution de mthode. Utiliser la combinaison Alt+Maj+clic droit (sous Windows) ou Control+Option+Commande+clic (sous MacOS) pendant lexcution d'une mthode, puis choisir le process tracer dans le pop up menu qui apparat :

Cliquer sur le bouton Tracer en mode Structure, lorsqu'un process est slectionn dans la page Process de l'Explorateur d'excution. Crer ou modifier un point darrt dans la fentre d'dition d'une mthode, ou dans les pages Point d'arrt et Arrt sur commande de l'Explorateur d'excution. Note : Lorsque vous tracez un process en cours dexcution, la fentre du dbogueur saffiche instantanment. Si vous tracez un process qui nest pas en cours d'excution (process endormi, en attente dvnement, etc...), le dbogueur enregistre la requte et napparatra quau moment o le process aura repris lexcution du code. Note : Si votre base de donnes est dote dun systme de mots de passe, seuls le Super_Utilisateur et les utilisateurs possdant les privilges daccs la structure peuvent tracer des mthodes.

372

4e Dimension - Langage

Voici la fentre du dbogueur :

Vous pouvez dplacer la fentre du dbogueur et/ou redimensionner toutes les zones internes de la fentre comme vous le souhaitez. Laffichage ultrieur dune nouvelle fentre du dbogueur reprend la configuration (taille et position de la fentre, emplacement des lignes de division et contenu de la zone dvaluation des expressions) de la dernire fentre affiche dans la mme session. 4D est un environnement multitche. Dans le cas de plusieurs process sexcutant simultanment, vous pouvez tracer chacun dentre eux de manire indpendante. Chaque process peut avoir sa propre fentre de dbogueur. Barre doutils de contrle dexcution
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La barre doutils de contrle dexcution, situe en haut de la fentre du dbogueur, comporte neuf boutons. Voici leur description ainsi que leurs raccourcis clavier associs :

4e Dimension - Langage

373

Bouton 'Reprendre excution' Arrt du mode Trace et reprise du cours normal de lexcution de la mthode. Note : La combinaison Maj+F5 ou Maj+clic sur le bouton Reprendre excution provoque la reprise de lexcution avec dsactivation de tous les appels TRACE suivants dans le process courant. Bouton 'Stopper excution' La mthode sarrte et vous retournez l o vous tiez avant son excution. Si vous tiez en train de tracer une mthode formulaire ou une mthode objet sexcutant en rponse un vnement, elle sarrte et vous retournez au formulaire. Si vous traciez une mthode sexcutant partir du mode Menus crs, vous retournez ce mode. Bouton 'Stopper et diter' La mthode sarrte comme lorsque vous cliquez sur Stopper excution. De plus, 4e Dimension ouvre (si ncessaire) le process de Structure, le passe au premier plan et affiche dans la fentre de lditeur de mthodes la mthode qui sexcutait au moment o vous avez cliqu sur le bouton. Conseil : Utilisez ce bouton lorsque vous connaissez les modifications apporter votre code, et le moment o elles doivent tre effectues pour pouvoir poursuivre le test de vos mthodes. Une fois vos modifications effectues, r-excutez la mthode. Bouton 'Editer mthode' Ce bouton se comporte comme le bouton Stopper et diter, la diffrence prs qu'il nannule pas lexcution en cours. Lexcution de la mthode est simplement suspendue l'instant du clic sur le bouton. 4e Dimension ouvre (si ncessaire) le process de Structure et le passe au premier plan, puis affiche dans la fentre de lditeur de mthodes la mthode qui sexcutait au moment o vous avez cliqu sur le bouton Editer mthode. Important : Vous pouvez modifier cette mthode, mais ces modifications napparatront pas, ou ne sexcuteront pas dans linstance de la mthode trace dans la fentre du dbogueur. Ce n'est qu'une fois que la mthode aura t stoppe ou entirement excute, que les modifications pourront apparatre. En dautres termes, il faut recharger la mthode pour que les modifications soient prises en compte. Conseil : Utilisez ce bouton lorsque vous connaissez les modifications apporter votre code et lorsquelles ninterfrent pas avec le reste du code qui doit tre excut ou trac.

374

4e Dimension - Langage

Astuce : Les mthodes objet sont recharges pour chaque vnement. Si vous tracez une mthode objet (par exemple en rponse un clic sur un bouton) vous navez pas besoin de quitter le formulaire. Vous pouvez modifier la mthode objet, sauvegarder les modifications, puis retourner au formulaire et tester nouveau. Pour tracer/modifier les mthodes formulaire, il faut sortir du formulaire puis le rouvrir pour recharger la mthode correspondante. L'astuce est donc la suivante : lorsque vous effectuez le dbogage complet dun formulaire, placez le code que vous dboguez dans une mthode projet que vous utiliserez comme sous-routine lintrieur de la mthode formulaire. De cette manire, vous pouvez rester dans le formulaire, tracer, modifier et tester nouveau votre formulaire car la sous-routine sera recharge chaque fois quelle sera appele par la mthode formulaire. Bouton 'Enregistrer paramtres' Ce bouton permet de sauvegarder la configuration courante de la fentre du dbogueur (taille et position de la fentre, emplacement des lignes de division et contenu de la zone dvaluation des expressions). Elle sera alors utilise par dfaut chaque ouverture de la base. Ces paramtrages sont stocks dans le fichier de structure de la base. Bouton 'Excuter pas pas' La ligne courante de la mthode (indique par la flche jaune cette flche sappelle le compteur de programme) est excute et le dbogueur passe la ligne suivante. Le bouton Excuter pas pas ne passe pas dans les sous-routines et les fonctions. Il reste au niveau de la mthode que vous tes en train de tracer. Si vous voulez galement tracer les appels aux sous-routines et aux fonctions, utilisez le bouton Pas pas dtaill. Bouton 'Pas pas dtaill' Lors de lexcution dune ligne qui appelle une autre mthode (sous-routine ou fonction), ce bouton provoque laffichage de la mthode appele dans la fentre du dbogueur, et permet au dveloppeur de passer pas pas dans cette mthode. La nouvelle mthode devient la mthode courante (en haut) dans la sous-fentre Chane dappel de la fentre du dbogueur. Lors de lexcution dune ligne qui nappelle pas une autre mthode, ce bouton se comporte comme le bouton Excuter pas pas.

4e Dimension - Langage

375

Bouton 'Pas pas nouveau process' Lors de lexcution dune ligne qui cre un nouveau process (par exemple qui appelle la commande Nouveau process) ce bouton ouvre une nouvelle fentre du dbogueur qui vous permet de tracer la mthode de gestion du process que vous venez de crer. Lors de lexcution dune ligne qui ne cre pas de nouveau process, ce bouton se comporte comme le bouton Excuter pas pas. Bouton 'Excuter et sortir' Si vous tracez des sous-routines et des fonctions, cliquer sur ce bouton vous permet d'excuter lintgralit de la mthode qui est en train d'tre trace, et de revenir la mthode appelante. La fentre du dbogueur retourne la mthode prcdente dans la chane dappel. Si la mthode courante est la dernire mthode de la chane dappel, la fentre du dbogueur se referme. Informations dans la barre doutils de contrle dexcution
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

A la droite de la barre doutils de contrle dexcution, le dbogueur affiche les informations suivantes : Le nom de la mthode que vous tes en train de tracer (en noir). La cause de louverture du dbogueur (en rouge). Par exemple, dans la fentre affiche en tte de ce chapitre, vous pouvez voir les informations suivantes : La mthode Trace dmo est la mthode qui est trace. La fentre du dbogueur saffiche car il a rencontr un point darrt. Voici les causes qui provoquent l'apparition du dbogueur et d'un message (en rouge) : Commande TRACE : un appel TRACE a t mis. Point darrt atteint : vous avez rencontr un point darrt temporaire ou persistant. Interruption demande par lutilisateur : vous avez activ Alt+Maj+clic droit (sous Windows) ou Control+Option+Commande+clic (sous MacOS) ou encore cliqu sur le bouton Trace dans la page Process de l'Explorateur d'excution. Dtection dun appel : Nom de la commande : Un appel une commande 4D qui doit tre intercepte est sur le point dtre excut. Pas pas nouveau process : Vous avez cliqu sur le bouton Pas pas nouveau process et ce message est affich par la fentre du dbogueur ouverte pour le process qui vient d'tre cr.

376

4e Dimension - Langage

Les sous-fentres du dbogueur


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La fentre du dbogueur contient la barre de contrle dexcution dcrite prcdemment, ainsi que quatre sous-fentres redimensionnables : La Fentre dexpression La Fentre de chane dappel La Fentre dvaluation La Fentre dvaluation des mthodes

Les trois premires fentres affichent des listes hirarchiques montrant linformation pertinente au dbogage. La quatrime, la Fentre dvaluation des mthodes, affiche le code source de la mthode trace. Chaque fentre a un rle prcis pour vous assister dans le processus de dbogage. Avec la souris, vous pouvez redimensionner la fentre du dbogueur, ainsi que chaque sous-fentre. En outre, les trois premires sous-fentres sont spares par une ligne pointille dans le sens de la hauteur : vous pouvez redimensionner votre convenance les colonnes lintrieur de chaque sous-fentre. Rfrence APPELER SUR ERREUR, Fentre d'erreur de syntaxe, Fentre d'valuation, Fentre d'valuation des mthodes, Fentre d'expression, Fentre de chane d'appel, Liste des points darrt, Points d'arrt sur commandes, Raccourcis du dbogueur, TRACE, Un dbogueur, pour quoi faire ?.

4e Dimension - Langage

377

Fentre d'expression

Dbogueur version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La Fentre dexpression est situe en haut gauche de la fentre du dbogueur, sous la barre doutils de contrle dexcution :

La Fentre d'expression affiche toutes les informations gnrales utiles sur l'environnement systme, 4D et lexcution du code. La colonne Expression affiche le nom des objets et des expressions. La colonne Valeur affiche la valeur courante correspondant aux objets et expressions. En cliquant sur une valeur dans la colonne de droite, vous pouvez modifier la valeur de lobjet, si cela est possible pour cet objet. La liste hirarchique multi-niveaux est organise par thmes au niveau suprieur. Les thmes sont les suivants : Objets courants Variables Constantes Tables & champs Smaphores Ensembles Process Slections temporaires Informations Statistiques du cache

378

4e Dimension - Langage

En fonction du thme, chaque article peut disposer d'un ou de plusieurs sous-niveaux. Pour dployer ou fermer chaque thme, il suffit de cliquer sur licne de dploiement situe en face de son libell. Si le thme comprend plusieurs niveaux dinformation, il suffit de cliquer sur chaque icne pour explorer toutes les informations qu'il contient. A tout moment, vous pouvez faire glisser un thme, un sous-thme ou un article, et le dposer dans la Fentre dvaluation. Objets courants Ce thme affiche les valeurs des objets ou des expressions valuables : utilis(e)s dans la ligne de code excuter (celle qui est indique par le compteur de programme la flche jaune dans la fentre dvaluation des mthodes), utilis(e)s dans la ligne de code prcdente. Comme la ligne de code prcdente est celle qui vient dtre excute, le thme Objets courants affiche donc de manire permanente les objets ou expressions de la ligne courante avant et aprs lexcution de la ligne. Prenons lexcution de la mthode suivante : TRACE a:=1 b:=a+1 c:=a+b ` ... 1. Vous entrez dans la fentre du dbogueur avec le compteur de programme de la Fentre dvaluation des mthodes plac la ligne a:=1. A ce point prcis, le thme Objets courants affiche : a: Indfini

La variable a est affiche car elle est utilise dans la ligne qui est sur le point d'tre excute (mais elle na pas encore t initialise). 2. Vous progressez dune ligne. Le compteur de programme est maintenant positionn sur la ligne b:=a+1. A ce point, le thme Objets courants affiche : a: b: 1 Indfini

4e Dimension - Langage

379

La variable a saffiche car elle est utilise dans la ligne qui vient de sexcuter, et quon lui avait assign la valeur numrique 1. Elle saffiche aussi parce quelle est utilise dans la ligne qui sera excute, en tant qu'expression qui sera assigne la variable b. La variable b saffiche car elle est utilise dans la ligne qui doit tre excute (mais elle na pas encore t initialise). 3. Vous progressez encore dune ligne. Le compteur de programme est maintenant positionn sur la ligne c:=a+b. A ce point, le thme Objets courants affiche : c: a: b: Indfini 1 2

La variable c saffiche car elle est utilise dans la ligne excuter (mais elle na pas encore t initialise). Les variables a et b sont affiches car elles taient utilises dans la ligne prcdente et quelles le sont dans la ligne qui sera excute, etc. Ce thme est extrment pratique : chaque fois que vous excutez une ligne, vous navez pas besoin de saisir une expression dans la fentre dvaluation. Il vous suffit de surveiller les valeurs affiches par le thme Objets courants. Variables Ce thme se dcompose en sous-thmes : Interprocess : affiche la liste des variables interprocess en cours d'utilisation. Si vous nutilisez pas de variable interprocess, la liste est vide. La valeur des variables interprocess peut tre modifie. Process : affiche la liste des variables process utilises par le process courant. Cette liste est rarement vide. La valeur des variables process peut tre modifie. Locales : affiche la liste des variables locales utilises par la mthode indique dans la sous-fentre dvaluation de mthode. Cette liste peut tre vide si aucune variable locale nest utilise ou si elles nont pas encore t cres. La valeur des variables locales peut tre modifie. Paramtres : affiche la liste des paramtres reus par la mthode. Cette liste peut tre vide si aucun paramtre na t pass la mthode trace. La valeur des paramtres peut tre modifie. Self Pointeur : affiche un pointeur vers lobjet courant si vous tracez une mthode objet. Cette valeur nest pas modifiable. Note : Vous pouvez modifier les variables et les champs de type Chane, Texte, numrique (Entier, Entier long, Rel), Date et Heure, c'est--dire les variables et les champs dont la valeur peut tre saisie au clavier. Pour le type Entier vous pouvez utiliser indiffremment la notation dcimale ou hexadcimale (par exemple, pour 256, vous pouvez taper 256 ou 0x100).

380

4e Dimension - Langage

Les tableaux, comme les autres variables, apparaissent dans les sous-thmes Interprocess, Process et Locales, en fonction de leur porte. Le dbogueur affiche chaque tableau avec un niveau hirarchique supplmentaire, ce qui vous permet dobtenir ou de modifier les valeurs des lments du tableau, sil y en a. Le dbogueur affiche les 100 premiers lments (y compris llment zro). La colonne Valeur affiche la taille du tableau en face de son nom. Une fois que vous avez dploy le tableau, le premier sous-article affiche le numro de llment slectionn courant, ensuite llment zro, ensuite les autres lments (jusqu 100) sil y en a. Vous pouvez modifier les tableaux Alpha, Texte, Numrique et Date. Vous pouvez modifier le numro de llment slectionn, llment zro et les autres lments (jusqu 100) sil y en a. Vous ne pouvez pas modifier la taille du tableau. Note : A tout moment, vous pouvez glisser un article partir de la Fentre dexpression vers la Fentre dvaluation, y compris un lment de tableau. Constantes : Ce thme affiche les constantes prdfinies dans 4D, comme dans la page Constantes de la fentre de lExplorateur. Les expressions de ce thme ne peuvent pas tre modifies. Tables & champs : Ce thme affiche la liste des tables et des champs dans la base de donnes ( lexception des sous-champs). Pour chaque table, la colonne Valeur affiche la taille de la slection courante pour le process courant ainsi que (lorsque la ligne de la table est dploye) le nombre d'enregistrements verrouills. Pour chaque champ, la colonne Valeur affiche la valeur du champ ( lexception des images, sous-tables et BLOBs) pour lenregistrement courant, s'il existe. Dans ce thme, les valeurs des champs peuvent tre modifies (notez qu'il ny a alors pas dannulation possible) mais pas celles de la table. Smaphores : Ce thme affiche la liste des smaphores locaux dans les ensembles courants. Pour chaque smaphore, la colonne Valeurs affiche le nom du process ayant pos le smaphore. Si vous nutilisez pas de smaphore, la liste peut tre vide. Les expressions de ce thme ne peuvent pas tre modifies. Les smaphores globaux ne peuvent pas tre visualiss. Ensembles : Ce thme affiche la liste des ensembles dfinis dans le process courant (celui que vous tes en train de tracer) ainsi que la liste des ensembles interprocess. La colonne Valeur affiche, pour chaque ensemble, le nombre denregistrements et le nom de la table. Si vous nutilisez pas les ensembles, cette liste sera vide. Les expressions de ce thme ne peuvent pas tre modifies. Process : Ce thme affiche la liste des process lancs depuis le dbut de la session de travail. La colonne Valeur affiche le temps dj allou chaque process ainsi que son tat (par exemple "En cours dexcution", "Endormi", etc). Les expressions de ce thme ne peuvent pas tre modifies.

4e Dimension - Langage

381

Slections temporaires : Ce thme affiche la liste des slections temporaires process dfinies dans le process courant (celui que vous tes en train de tracer) ainsi que la liste des slections temporaires interprocess. Pour chaque slection temporaire, la colonne Valeur affiche le nombre denregistrements et le nom de la table. Si vous nutilisez pas les slections temporaires, cette liste sera vide. Les expressions de ce thme ne peuvent pas tre modifies. Informations : Ce thme affiche les informations gnrales, comme la table par dfaut courante (sil y en a une). Les expressions contenues dans ce thme ne peuvent pas tre modifies. Statistiques du cache : Ce thme affiche diverses statistiques concernant lutilisation des tables d'adresses et d'index, des pages dindex et des slections temporaires charges dans le cache de 4D. Les expressions contenues dans ce thme ne peuvent pas tre modifies. Menu contextuel de la fentre dexpression
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le menu contextuel de la fentre dexpression vous propose des options supplmentaires. Pour afficher ce menu il vous suffit de : Sous Windows, cliquer nimporte o dans la fentre dexpression avec le bouton droit de la souris Sous MacOS, utiliser la combinaison Control+clic nimporte o dans la fentre dexpression. Voici le menu contextuel de la fentre dexpression :

Contracter : Contracte tous les niveaux de la liste hirarchique des expressions. Dployer : Dploie tous les niveaux de la liste hirarchique des expressions. Montrer les types : Lorsque vous slectionnez cette option, le type de lobjet saffiche en face de lobjet (lorsque cela est pertinent).

382

4e Dimension - Langage

Montrer le numro de champ et de table : Si vous travaillez avec le numro des tables ou de champs, ou avec des pointeurs utilisant les commandes Table ou Champ, cette option est trs pratique : en face de chaque table et champ, elle affiche le numro de la table ou du champ. Montrer les icnes : Chaque objet est prcd d'une icne qui indique son type. Vous pouvez dsactiver cette option pour acclrer laffichage, ou tout simplement parce que loption Montrer les types vous convient. Tables et champs tris : Cette option force les tables et les champs safficher par ordre alphabtique (dans leurs listes respectives). Afficher les entiers en hexadcimal : Les nombres saffichent en notation dcimale. Slectionnez cette option pour les afficher en hexadcimal. Ci-dessous, la fentre dexpression telle quelle se prsente lorsque vous slectionnez toutes les options :

Rfrence Dbogueur, Fentre d'valuation, Fentre d'valuation des mthodes, Fentre de chane d'appel, Raccourcis du dbogueur.

4e Dimension - Langage

383

Fentre de chane d'appel

Dbogueur version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Une mthode peut appeler dautres mthodes, qui leur tour peuvent appeler dautres mthodes. Pour cette raison, il est trs utile davoir sous les yeux, pendant le dbogage, la chane des mthodes, ou chane dappel. Cette chane peut tre visualise dans la fentre situe en haut et droite du dbogueur. Les mthodes y sont affiches de manire hirarchique :

Chaque niveau principal est le nom dune mthode. Llment plac en tte de la liste est la mthode que vous tes en train de tracer, le niveau suivant est le nom de la mthode appelante (la mthode qui a appel celle que vous tes en train de tracer), le niveau suivant est lappelant de la mthode appelante, etc. Dans lexemple ci-dessus, la mthode DE_Init est trace. Elle a t appele par la mthode TraceDemo. Lorsque vous double-cliquez sur le nom dune mthode dans la fentre de chane dappel, vous basculez sur la mthode appelante dont le code source est affich dans la fentre dvaluation de mthodes. Vous pouvez ainsi voir rapidement comment la mthode appelante a effectu son appel la mthode appele. Vous pouvez aussi examiner toutes les tapes de la chane dappel. Lorsque vous cliquez sur licne de dploiement jouxtant le nom dune mthode, vous dployez ou vous contractez la liste des paramtres ($1, $2...) ainsi que le rsultat ($0) optionnel d'une fonction. La valeur saffiche droite de la fentre. En cliquant sur une valeur quelconque droite, vous pouvez changer la valeur du rsultat ou de tout paramtre.

384

4e Dimension - Langage

Dans lillustration ci-dessus : 1. DE_Init $0 est actuellement indfinie car la mthode na assign aucune valeur $0 (parce qu'elle na pas encore excut cette affectation, ou parce que la mthode est une sous-routine et non une fonction). 2. DE_Init a reu trois paramtres de TraceDemo. $1 est un pointeur vers la table [Employs], $2 est un pointeur vers le champ [Employs]Nom et $3 est un paramtre alphanumrique de valeur R. Lorsque vous avez dploy la liste des paramtres/rsultats dune mthode, vous pouvez galement les faire glisser vers la Fentre dvaluation. Rfrence Dbogueur, Fentre d'valuation, Fentre d'valuation des mthodes, Fentre d'expression, Raccourcis du dbogueur.

4e Dimension - Langage

385

Fentre d'valuation

Dbogueur version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Juste au-dessous de la Fentre de chane dappel se trouve la Fentre d'valuation. Cette fentre sert valuer les expressions. Vous pouvez valuer tout type dexpression, y compris les champs, les variables, les pointeurs, les calculs, les fonctions intgres, vos propres fonctions, et tout ce qui retourne une valeur. Vous pouvez valuer toute expression qui peut tre affiche sous forme de texte. Cela ne s'applique donc pas aux champs ni aux variables image ou BLOB. En revanche, lorsque vous dployez les listes hirarchiques, le dbogueur vous permet dafficher les tableaux et les pointeurs. Pour afficher le contenu des BLOBs, vous pouvez utiliser les commandes sur les BLOBs, comme par exemple BLOB vers texte. Dans lexemple ci-dessous, vous pouvez voir plusieurs expressions : deux variables, un pointeur vers un champ, le rsultat dune fonction intgre et un calcul.

Insrer une nouvelle expression


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez ajouter une expression valuer dans la fentre dexpression de l'une des manires suivantes : Glissez-dposez un objet ou une expression partir de la Fentre dexpression ; Glissez-dposez un objet ou une expression partir de la Fentre de chane dappel ; Cliquez sur une expression valuable dans la Fentre dvaluation des mthodes. En outre, pour crer une expression vide, double-cliquez nimporte o dans lespace vide de la fentre dvaluation. Cela cre une expression vide ` Nouvelle expression prte ldition. Vous pouvez saisir toute formule 4D qui retourne un rsultat.

386

4e Dimension - Langage

Ds que vous avez saisi la formule, appuyez sur la touche Entre ou Retour chariot (ou cliquez nimporte o dans la fentre) pour obtenir lvaluation de lexpression. Si vous voulez changer dexpression, cliquez dessus pour la slectionner, et cliquez de nouveau pour entrer en mode dition. Si vous navez plus besoin dune expression, cliquez dessus pour la slectionner, puis appuyez sur la touche Retour Arrire ou Suppr. Attention : Soyez prudent lorsque vous valuez une expression 4D modifiant la valeur dune des Variables systme (par exemple la variable OK). En effet, dans ce cas l'excution du reste de la mthode peut tre fausse. Menu contextuel de la fentre dvaluation
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le menu contextuel de la Fentre dvaluation vous permet daccder lditeur de formules de 4D, pour vous aider saisir et diter une expression. Le menu contextuel vous propose galement des options supplmentaires. Pour obtenir ce menu : Sous Windows, cliquez nimporte o dans la fentre dvaluation avec le bouton droit de la souris. Sous MacOS, utilisez la combinaison Control+clic nimporte o dans la fentre dvaluation.

4e Dimension - Langage

387

Nouvelle expression : Cette commande insre une nouvelle expression et affiche lditeur de formules de 4D (voir ci-dessous) dans lequel vous pouvez saisir la nouvelle expression.

Pour plus d'informations sur lditeur de formules, reportez-vous au manuel Mode Utilisation de 4D. Insrer commande : Cette commande est un raccourci pour placer une commande (sans utiliser lditeur de formules) en tant que nouvelle expression. Supprimer tout : Efface toutes les expressions prsentes. Contracter/Dployer : Contracte ou dploie toutes les expressions dont lvaluation se fait en utilisant les listes hirarchiques (pointeurs, tableaux, etc.). Montrer les types : Si cette option est slectionne, le type de lobjet saffiche en face de chaque objet (lorsque c'est pertinent). Montrer le numro de champ et de table : Cette commande est extrmement pratique si vous travaillez avec des numros de table ou de champs, ou avec des pointeurs utilisant des commandes comme Table ou Champ. En face de chaque table et champ, elle affiche le numro de la table ou du champ.

388

4e Dimension - Langage

Montrer les icnes : Chaque objet est prcd par une icne qui symbolise son type. Vous pouvez dsactiver cette option pour acclrer laffichage, ou simplement parce que loption Montrer les types vous convient. Tables et champs tris : Cette option force laffichage des tables et des champs par ordre alphabtique (dans leurs listes respectives). Afficher les entiers en hexadcimal : Par dfaut, les nombres entiers sont affichs en notation dcimale. Slectionnez cette option si vous souhaitez un affichage hexadcimal. Rfrence Dbogueur, Fentre d'valuation des mthodes, Fentre d'expression, Fentre de chane d'appel, Raccourcis du dbogueur.

4e Dimension - Langage

389

Fentre d'valuation des mthodes

Dbogueur version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La Fentre d'valuation des mthodes affiche le code source de la mthode en train d'tre trace. Si la mthode est trop longue pour tenir dans la zone de texte, vous pouvez la faire dfiler. Lorsque vous positionnez le pointeur de la souris au-dessus d'une expression qui peut tre value (champ, variable, pointeur, tableau,...) le dbogueur affiche une Info-bulle qui indique la valeur courante de lobjet ou de lexpression, et son type dclar. Par exemple :

Une info-bulle apparat lorsque le pointeur de la souris est positionn sur la variable <>vDate. Dans cet exemple, c'est une variable de type date contenant la valeur suivante : 10/03/97. Vous pouvez galement slectionner une portion de texte dans la zone affichant le code en cours dexcution. Dans ce cas, lorsque le curseur de la souris est plac au-dessus du texte slectionn, l'info-bulle fournit la valeur de la slection :

390

4e Dimension - Langage

Lorsque vous cliquez sur un nom de variable ou de champ, il est automatiquement slectionn. Astuce : Vous pouvez copier instantanment dans la Fentre dvaluation lexpression ou lobjet slectionn. Vous disposez de trois solutions : par simple glisser-dposer : cliquez sur le texte slectionn, faites-le glisser et relchez-le dans la zone dvaluation. cliquer sur le texte slectionn tout en maintenant enfonce la touche Ctrl (Windows) ou Commande (MacOS). utiliser la combinaison de touches Ctrl+D (Windows) ou Commande+D (MacOS). Compteur de programme
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Une flche jaune, dans la marge gauche de la fentre dvaluation des mthodes (voir illustration ci-dessus) indique la prochaine ligne tre excute. Cette flche sappelle le compteur de programme. Elle indique toujours la ligne sur le point dtre excute. Pendant le dbogage, vous pouvez dplacer le compteur de programme. Il vous suffit de cliquer sur la flche jaune et de la faire glisser devant la ligne que vous dsirez. ATTENTION : Utilisez cette fonction avec prcaution ! Dplacer vers lavant le compteur de programme ne signifie pas que le dbogueur excute en mme temps les lignes sur lesquelles vous passez. De la mme manire, le faire remonter ne signifie pas que le dbogueur inverse leffet des lignes qui ont dj t excutes. Lorsque vous dplacez le compteur de programme, vous indiquez simplement au dbogueur de continuer tracer et excuter partir de cet endroit . Tous les paramtres, champs, variables, etc. courants, ne sont pas affects par le dplacement. Voici un exemple de dplacement du compteur de programme. Imaginons que vous tes en train de dboguer le code suivant : ` ... Si (Cette condition) FAIRE QUELQUE CHOSE Sinon FAIRE AUTRE CHOSE Fin de si Le compteur de programme est plac la ligne Si(Cette condition). Vous avancez dun pas, et voyez que le compteur se place la ligne FAIRE AUTRE CHOSE. Pas de chance, car vous vouliez en fait excuter la premire partie de lalternative. Dans ce cas, dans la mesure o lexpression Cette condition neffectue pas d'oprations affectant les tapes suivantes de votre test, remontez le compteur la ligne FAIRE QUELQUE CHOSE, et vous tes prt continuer tracer la portion de code qui vous intresse.

4e Dimension - Langage

391

Dfinir des points darrt dans le dbogueur


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Pendant le dbogage, vous pouvez avoir besoin de sauter certaines portions de votre code. Le dbogueur vous permet dutiliser plusieurs mthodes pour excuter votre code jusqu un certain point : Pendant que vous excutez au pas pas, vous pouvez cliquer sur le bouton Excuter pas pas au lieu de Pas pas dtaill, lorsque vous ne voulez pas entrer dans les ventuelles sous-routines ou fonctions appeles dans la ligne du compteur de programme. Si vous entrez par erreur dans une sous-routine, vous pouvez lexcuter et revenir directement la mthode appelante en cliquant sur le bouton Excuter et sortir. Si vous appelez la commande TRACE quelque part, vous pouvez cliquer sur le bouton Pas de Trace pour reprendre lexcution jusqu cet appel TRACE. Par exemple, imaginons que vous soyez en train dexcuter le code suivant. Le compteur de programme est plac devant la ligne TOUT SELECTIONNER ([CetteTable]) : ` ... TOUT SELECTIONNER([CetteTable]) $vrResult:=0 Boucle($vlEnregist;1;Enregistrements trouves([CetteTable])) $vrResult:=CetteaFonction([CetteTable]) ENREGISTREMENT SUIVANT([CetteTable]) Fin de boucle Si ($vrResult>=$vrLimiteVal) ` ... Vous voulez valuer la valeur de $vrResult la fin de la boucle Boucle. Comme cela peut prendre un certain temps dexcution pour atteindre cette portion de votre code, vous voulez abandonner lexcution courante puis diter la mthode pour insrer un appel TRACE avant la ligne Si ($vrResult... Vous pourriez aussi excuter la boucle, mais si la table [CetteTable] contient plusieurs centaines denregistrements, cette opration vous prendra la journe. Pour viter des situations de ce type, le dbogueur met votre disposition des points darrt. Vous insrez des points d'arrt en cliquant dans la marge gauche de la fentre d'valuation des mthodes. Par exemple, vous cliquez dans la marge gauche de la fentre, au niveau de la ligne Si ($vrResult... :

392

4e Dimension - Langage

Vous insrez un point darrt la ligne marque par un point rouge. Ensuite, vous cliquez sur le bouton Pas de Trace. Vous reprenez lexcution normale jusqu la ligne marque par le point darrt. Cette ligne nest pas excute : vous tes revenu au mode Trace. Dans cet exemple, toute la boucle a t excute normalement, et, une fois arriv au point darrt, il vous suffit de placer le curseur de la souris au-dessus de vrResult pour valuer sa valeur la sortie de la boucle. Si vous placez un point darrt au-del du compteur de programme et que vous cliquez sur le bouton Pas de Trace, vous viterez de tracer des parties de la mthode. Note : Vous pouvez galement dfinir des points d'arrt directement dans l'diteur de mthodes de 4D. Reportez-vous la section Points d'arrt. Un point darrt rouge est un point darrt persistant. Une fois que vous lavez cr, il reste, mme lorsque vous quittez la base et la rouvrez par la suite. Pour le supprimer, vous pouvez procder d'une des manires suivantes : Si vous avez fini de lutiliser, cliquez dessus, et le point darrt disparat. Si vous navez pas fini de lutiliser, mais que vous voulez le dsactiver provisoirement, il vous faut lditer. Reportez-vous pour ceci la section Points darrt. Rfrence Dbogueur, Fentre d'valuation, Fentre d'expression, Fentre de chane d'appel, Points d'arrt.

4e Dimension - Langage

393

Points d'arrt

Dbogueur version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Comme dcrit dans la section Fentre dvaluation des mthodes, vous dfinissez un point darrt en cliquant dans la marge gauche de la fentre dvaluation des mthodes ou de la fentre d'dition des mthodes, au niveau de la ligne de code sur laquelle vous voulez vous arrter. Note : L'insertion et l'dition de points d'arrt peuvent tre effectues indiffremment dans lditeur de mthodes ou le dbogueur. Il y a une interaction dynamique entre les deux diteurs : un point d'arrt insr ou modifi dans un diteur est immdiatement report dans l'autre (ainsi que dans la Liste des points d'arrt de l'explorateur d'excution). A noter toutefois que les points d'arrt provisoires ne peuvent tre crs que dans le dbogueur (cf. ci-dessous). Dans lexemple suivant, un point darrt a t plac, dans le dbogueur, en regard de la ligne Si ($vrResult>=$vrLimitVal) :

Si vous cliquez de nouveau sur la puce rouge, vous supprimez le point darrt. Editer un point darrt
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La combinaison Alt+clic (sous Windows) ou Option+clic (sous MacOS) dans la marge gauche de la fentre dvaluation des mthodes (ou de l'diteur de mthodes) ouvre la fentre des proprits du point darrt. Si vous avez cliqu sur un point darrt existant, la fentre souvre pour ce point darrt. Si vous cliquez sur une ligne o aucun point darrt na t plac, un point d'arrt est cr et sa fentre de proprits s'affiche.

394

4e Dimension - Langage

Voici la fentre des proprits du point darrt :

Emplacement : Vous indique le nom de la mthode et le numro de la ligne o le point darrt a t plac. Vous ne pouvez pas modifier cette information. Type : Par dfaut, vous crez des points darrt persistants, symboliss par une puce rouge. Toutefois, le dbogueur vous permet de dfinir des points darrt provisoires. Il est utile de pouvoir disposer de points darrt provisoires lorsque vous voulez vous arrter une seule fois dans une mthode. Un point darrt provisoire est identifi dans la fentre dvaluation des mthodes du dbogueur par une puce verte. Vous pouvez poser un point darrt provisoire directement dans la fentre dvaluation des mthodes en cliquant dans la marge gauche tout en maintenant les touches Alt + Majuscule (Windows) ou Option + Majuscule (Macintosh) enfonces. Note : Les points d'arrt provisoires peuvent tre dfinis dans le dbogueur uniquement. Arrt lorsque lexpression suivante est vraie : Saisissez une formule 4D qui retourne Vrai ou Faux. Si, par exemple, vous voulez ne vous arrter une ligne que lorsque, par exemple, Enregistrements dans selection([aTable])=0, saisissez cette formule et larrt se produira uniquement si vous navez aucun enregistrement slectionn pour la table [aTable] lorsque le dbogueur rencontrera la ligne o le point darrt est plac. Si vous ntes pas sr de la syntaxe de votre formule, cliquez sur le bouton Vrif. Syntaxe. Nombre doccurrences excutes avant arrt : Vous pouvez insrer un point darrt sur une ligne de code place dans une structure en boucle (Tant que, Repeter, Boucle) ou place dans une sous-routine ou fonction appele partir dune boucle. Si vous savez que le problme que vous cherchez narrivera pas avant au moins la 200e itration de la boucle, saisissez 200 et le point darrt sactivera la 201e itration.

4e Dimension - Langage

395

Point darrt dsactiv : Vous avez cr un point darrt persistant dont vous navez plus besoin pour le moment mais qui pourrait vous servir plus tard. Il vous suffit dans ce cas de le dsactiver. Un point darrt dsactiv saffiche sous forme de tiret (-) et non plus de puce () la fois dans le dbogueur, dans l'diteur de mthodes et dans la Liste des points darrt. Les points darrt peuvent tre crs et dits dans la fentre du dbogueur et l'diteur de mthodes. Mais vous pouvez galement diter des points darrt existants en affichant la liste des points darrt, dans la page "Point d'arrt" de l'Explorateur d'excution. Pour plus dinformations, reportez-vous la section Liste des points darrt. Rfrence Dbogueur, Fentre d'valuation des mthodes, Liste des points darrt, Points d'arrt sur commandes.

396

4e Dimension - Langage

Liste des points darrt

Dbogueur version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La liste des points darrt est une page de l'Explorateur d'excution qui vous permet de grer les points darrt que vous avez crs dans la fentre du dbogueur ou dans l'diteur de mthodes. Pour afficher la Liste des points darrt, procdez de la manire suivante : 1. Passez en mode Structure si vous ny tes pas dj. 2. Choisissez Explorateur d'excution dans le menu Outils. La fentre de l'Explorateur d'excution peut tre affiche sous forme de palette flottante (pour cela, maintenez la touche Maj enfonce au moment de slectionner la commande de menu). L'Explorateur d'excution est alors disponible dans tous les environnements de 4D. Pour plus d'informations, reportez-vous au manuel Mode Structure.

La fentre de l'Explorateur d'excution apparat. 3. Cliquez sur l'onglet Points d'arrt pour afficher la liste des points d'arrt :

4e Dimension - Langage

397

La liste des points d'arrts est divise en deux colonnes : La colonne de gauche indique le statut actif/inactif du point d'arrt, suivi du nom de la mthode et du numro de la ligne laquelle le point d'arrt a t plac dans la fentre du dbogueur ou de l'diteur de mthodes. La colonne de droite affiche la condition optionnellement associe au point d'arrt. Vous pouvez dfinir dans cette fentre une condition pour un point d'arrt. Vous pouvez activer, dsactiver ou supprimer chaque point d'arrt. En revanche, vous ne pouvez pas ajouter de point d'arrt dans l'Explorateur. Les points d'arrt persistants ne peuvent tre crs qu' partir de la fentre du dbogueur ou de l'diteur de mthodes. Vous pouvez galement ouvrir une fentre de l'diteur de mthodes affichant la mthode laquelle est associ le point d'arrt en double-cliquant sur le libell du point d'arrt. Dfinir une condition pour un point d'arrt Pour dfinir une condition pour un point d'arrt, procdez de la manire suivante : 1. Cliquez dans la colonne de droite en regard du point d'arrt. 2. Saisissez une formule 4D (expression ou appel de commande ou mthode projet) retournant une valeur boolenne (Vrai ou Faux). Note : Pour supprimer une condition, effacez la formule correspondante. Activer/Dsactiver un point d'arrt Pour activer ou dsactiver un point d'arrt, procdez de la manire suivante : 1. Slectionnez le point d'arrt en cliquant dessus ou en utilisant les touches flches pour naviguer dans la liste. 2. Cliquez sur le bouton Activer/Dsactiver (premier bouton situ au-dessus de la liste) ou slectionnez la commande correspondante dans le menu contextuel. Raccourci : Chaque point d'arrt dans la liste peut tre activ/dsactiv par un simple clic sur la puce () place devant son libell. La puce se transforme en tiret (-) lorsque le point d'arrt est dsactiv. Supprimer un point d'arrt Pour supprimer un point d'arrt, procdez de la manire suivante : 1. Slectionnez le libell du point d'arrt en cliquant dessus ou en utilisant les touches flches pour naviguer dans la liste. 2. Appuyez sur la touche Retour arrire, ou cliquez sur le bouton Supprimer (deuxime bouton situ au-dessus de la liste), ou encore slectionnez la commande Supprimer dans le menu contextuel. Note : Pour supprimer tous les points d'arrt, cliquez sur le bouton Supprimer tout (troisime bouton situ au-dessus de la liste), ou encore slectionnez la commande Supprimer tout dans le menu contextuel.

398

4e Dimension - Langage

Astuces L'ajout de conditions aux points d'arrt persistants ralentit l'excution du code car la condition est value chaque fois que le point d'arrt est rencontr. D'un autre ct, le dbogage est plus rapide car 4D ignore automatiquement les occurrences qui ne satisfont pas aux conditions. La dsactivation d'un point d'arrt persistant produit quasiment le mme effet que sa suppression. Lors de l'excution du code, le dbogueur ne passe presque pas de temps sur le point d'arrt. L'avantage de la dsactivation est que vous n'avez pas redfinir le point d'arrt en cas de besoin. Rfrence Dbogueur, Fentre d'valuation des mthodes, Points d'arrt, Points d'arrt sur commandes, Un dbogueur, pour quoi faire ?.

4e Dimension - Langage

399

Points d'arrt sur commandes

Dbogueur version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La liste des Points d'arrt sur commandes est une page de l'Explorateur d'excution qui vous permet d'ajouter des points darrt supplmentaires dans votre code en interceptant des appels aux commandes 4D. Placer un point d'arrt sur une commande vous permet de commencer tracer l'excution de n'importe quel process ds qu'une commande particulire est appele par le process. A la diffrence d'un point d'arrt plac dans une mthode projet (qui, par consquent, dclenche le mode trace uniquement lorsqu'il est atteint), l'aire d'action d'un point d'arrt sur commande comprend tous les process qui excutent du code 4D et qui appellent cette commande. Placer un point d'arrt sur une commande est un moyen pratique de tracer des grandes parties du code sans devoir insrer des points d'arrt des emplacements arbitraires. Si, par exemple, l'excution dans votre code de plusieurs process durant un certain laps de temps provoque l'effacement d'un enregistrement qui ne devrait thoriquement pas tre supprim, vous pouvez limiter le champ d'investigation en plaant un point d'arrt sur les commandes telles que SUPPRIMER ENREGISTREMENT et SUPPRIMER SELECTION. A chaque fois que ces commandes sont appeles, vous pouvez vrifier si l'enregistrement en question a t supprim ou non, et donc isoler la partie fautive du code. Bien entendu, l'exprience aidant, vous pourrez combiner l'utilisation de points d'arrt dans les mthodes et sur des commandes. Pour afficher la liste des Points d'arrt sur commandes, procdez de la manire suivante : 1. Passez en mode Structure si vous ny tes pas dj. 2. Choisissez Explorateur d'excution dans le menu Outils. La fentre de l'Explorateur d'excution peut tre affiche sous forme de palette flottante (pour cela, maintenez la touche Maj enfonce au moment de slectionner la commande de menu). L'Explorateur d'excution est alors disponible dans tous les environnements de 4D. Pour plus d'informations, reportez-vous au manuel Mode Structure.

La fentre de l'Explorateur d'excution apparat.

400

4e Dimension - Langage

3. Cliquez sur l'onglet Arrt sur commande pour afficher la liste des points d'arrt sur commande :

Cette page liste les commandes intercepter au moment de leur excution. Elle est divise en deux colonnes : La colonne de gauche indique le statut actif/inactif du point d'arrt, suivi du nom de la commande. La colonne de droite affiche la condition optionnellement associe au point d'arrt. Ajouter un nouveau point d'arrt sur commande Pour ajouter un nouveau point d'arrt sur une commande, vous disposez de plusieurs possibilits : cliquer sur le bouton Arrt sur commande (premier bouton plac au-dessus de la liste). double-cliquer directement dans la liste. Dans ces deux cas, une nouvelle entre est ajoute dans la liste, avec la commande ALERTE par dfaut.

4e Dimension - Langage

401

Le libell ALERTE est automatiquement plac en mode dition, vous pouvez alors saisir le nom de la commande laquelle vous souhaitez associer un point d'arrt. Une fois que vous avez termin, appuyez sur la touche Entre ou Retour chariot pour valider votre choix. cliquer dans la liste avec le bouton droit de la souris (sous Windows) ou effectuer Control+clic (sous MacOS) pour afficher un menu contextuel. Slectionnez Arrt sur commande, le menu liste alors toutes les commandes 4D :

Choisissez votre commande parmi les sous-menus des thmes puis des noms de commandes. Une nouvelle entre est ajoute, affichant le nom de la commande slectionne. Modifier un point d'arrt sur commande Pour modifier un point d'arrt sur une commande, procdez de la manire suivante : 1. Slectionnez le point d'arrt en cliquant dessus ou en utilisant les touches flches pour naviguer dans la liste (s'il n'y a pas dj un point d'arrt slectionn et en mode dition). 2. Pour passer un point d'arrt du mode slection au mode dition et inversement, appuyez sur la touche Entre ou Retour chariot. 3. Saisissez ou modifiez le nom de la commande. 4. Pour valider vos modifications, appuyez sur la touche Entre ou Retour chariot. Si le nom que vous avez saisi ne correspond pas une commande 4D existante, le point d'arrt affiche la valeur prcdente. Dans le cas d'une nouvelle entre, le libell ALERTE est raffich. 402 4e Dimension - Langage

Activer/Dsactiver un point d'arrt sur commande Pour activer ou dsactiver un point d'arrt sur commande, procdez de la manire suivante : 1. Slectionnez le point d'arrt en cliquant dessus ou en utilisant les touches flches pour naviguer dans la liste (s'il n'y pas dj un point d'arrt slectionn et en mode dition). 2. Cliquez sur le bouton Activer/Dsactiver (deuxime bouton plac au-dessus de la liste), ou choisissez la commande correspondante dans le menu contextuel. Raccourci : Chaque point d'arrt dans la liste peut tre activ/dsactiv par un simple clic sur la puce () place devant son libell. La puce se transforme en tiret () lorsque le point d'arrt est dsactiv. Supprimer un point d'arrt sur commande Pour supprimer un point d'arrt sur commande, procdez de la manire suivante : 1. Slectionnez le point d'arrt en cliquant dessus ou en utilisant les touches flches pour naviguer dans la liste (s'il n'y pas dj un point d'arrt slectionn et en mode dition). 2. Assurez-vous que le point d'arrt se trouve en mode slection (appuyez sur la Entre ou Retour chariot pour passer alternativement du mode dition au mode slection) 3. Appuyez sur la touche Retour arrire ou cliquez sur le bouton Supprimer (troisime bouton plac au-dessus de la liste). Note : Pour supprimer tous les points d'arrt, cliquez sur le bouton Supprimer tout (quatrime bouton plac au-dessus de la liste) ou choisissez la commande Supprimer tout dans le menu contextuel. Dfinir une condition pour un point d'arrt sur commande Pour dfinir une condition pour un point d'arrt sur commande, procdez de la manire suivante : 1. Cliquez dans la colonne de droite en regard du point d'arrt. 2. Saisissez une formule 4D (expression ou appel de commande ou mthode projet) retournant une valeur boolenne (Vrai ou Faux). Note : Pour supprimer une condition, effacez la formule correspondante. Astuces L'ajout de conditions aux points d'arrt sur commande ralentit l'excution du code car la condition est value chaque fois que le point d'arrt est rencontr. D'un autre ct, le dbogage est plus rapide car 4D ignore automatiquement les occurences qui ne satisfont pas aux conditions. La dsactivation d'un point d'arrt sur commande produit quasiment le mme effet que sa suppression. Lors de l'excution du code, le dbogueur ne passe presque pas de temps sur le point d'arrt. L'avantage de la dsactivation est que vous n'avez pas redfinir le point d'arrt en cas de besoin.

4e Dimension - Langage

403

Raccourcis du dbogueur

Dbogueur version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ce chapitre dtaille les raccourcis disponibles dans la fentre du dbogueur. Barre doutils de contrle dexcution

Lillustration ci-dessous prsente les raccourcis des boutons situs dans la partie suprieure gauche de la fentre du dbogueur :

La combinaison Maj+F5 ou Maj+clic sur le bouton Reprendre excution reprend lexcution et en plus dsactive tous les appels TRACE ultrieurs dans le process courant.
Sous-fentre zone dexpression

un clic avec le bouton droit de la souris (Windows) ou Control+clic (Macintosh) dans la sous-fentre dexpression droule le menu contextuel. un double-clic sur un article de la fentre dexpression copie cet article dans la fentre dvaluation.
Sous-fentre de chane dappel

Un double-clic sur le nom dune mthode dans la Fentre de chane dappel affiche la
mthode dans la sous-fentre dvaluation des mthodes, la ligne correspondant la chane dappel.

404

4e Dimension - Langage

Sous-fentre dvaluation

Un clic avec le bouton droit de la souris (Windows) ou Control+Clic (Macintosh) dans la fentre dvaluation droule le menu contextuel de la fentre. Un double-clic dans la sous-fentre dvaluation cre une nouvelle expression.
Fentre dvaluation des mthodes

Un clic dans la marge gauche place ou supprime un point darrt. Alt+Majuscule+clic (Windows) ou Option+Majuscule+clic (Macintosh) pose un point
darrt provisoire

Alt+clic (Windows) ou Option+clic (Macintosh) affiche la fentre des proprits du point darrt pour un point darrt nouveau ou existant. Une expression ou un objet slectionn(e) peut tre copi dans la zone dvaluation par glisser-dposer. Un clic sur du texte slectionn tout en maintenant enfonce la touche Ctrl (Windows) ou Commande (MacOS) le copie dans la zone dvaluation. Ctrl+D (Windows) ou Commande+D (MacOS) sur un texte slectionn le copie dans la zone dvaluation.
Toutes les sous-fentres

Ctrl+* (Windows) ou Commande+* (MacOS) force la ractualisation des listes d'expressions. Lorsqu'aucun objet nest slectionn dans les fentres, en appuyant sur Entre vous
avancez dune ligne.

Lorsque la valeur dun lment est slectionne, utilisez les touches directionnelles pour naviguer dans la liste. Lorsque vous tes en train dditer un lment, utilisez les touches directionnelles pour dplacer le curseur, utilisez Ctrl+A/X/C/V (Windows) ou Commande+A/X/C/V (Macintosh) en raccourci des commandes du menu Edition : Tout Slectionner/Couper/Copier/Coller.
Rfrence Dbogueur, Fentre d'valuation, Fentre d'valuation des mthodes, Fentre d'expression, Fentre de chane d'appel.

4e Dimension - Langage

405

406

4e Dimension - Langage

12 ________________________ Dfinition structure

4e Dimension - Langage

407

408

4e Dimension - Langage

Commandes du thme Dfinition structure

Dfinition structure version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les commandes de ce thme retournent la description de la structure de la base. Elles retournent le nombre de tables, le nombre de champs dans chaque table, les noms des tables et des champs, ainsi que le type et les proprits de chaque champ. L'identification prcise de la structure de la base est trs utile quand vous dveloppez et utilisez des groupes de mthodes projets et formulaires qui peuvent tre copies dans diffrentes bases. La possibilit de lire la structure de la base vous permet de dvelopper et d'utiliser du code portable. Rfrence Champ, FIXER INDEX, LIRE PROPRIETES CHAMP, Nom de la table, Nombre de champs, Nombre de tables, Pointeurs, Table.

4e Dimension - Langage

409

Nombre de tables

Dfinition structure version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nombre de tables Numrique Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Numrique Nombre de tables dans la base

Description Nombre de tables retourne le nombre de tables prsentes dans la base. Les tables sont numrotes dans l'ordre dans lequel elles sont cres. Exemples L'exemple suivant initialise les lments du tableau tabTables. Ce tableau peut tre utilis comme une liste droulante (ou des onglets, un zone de dfilement, etc.) pour afficher dans un formulaire la liste des tables dans la base :

TABLEAU ALPHA (31; tabTables; Nombre de tables) Boucle ($vlTables; 1; Taille tableau(tabTables)) tabTables {$vlTables} := Nom de la table ($vlTables) Fin de boucle

Rfrence Nom de la table, Nombre de champs, Prsentation des tableaux.

410

4e Dimension - Langage

Nombre de champs

Dfinition structure version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nombre de champs (tableNum | tablePtr) Numrique Paramtre tableNum | tablePtr Rsultat Type Num | Pointeur Numrique Description Numro de table ou Pointeur vers une table Nombre de champs dans la table

Description La commande Nombre de champs retourne le nombre de champs que contient la table dont le numro ou le pointeur est pass dans le paramtre tableNum ou tablePtr. Les champs sont numrots dans l'ordre o ils ont t crs. Exemple La mthode projet suivante cre le tableau asChamps avec les noms des champs de la table dont le pointeur est reu comme premier paramtre :

$vlTable:=Table($1) TABLEAU ALPHA(31;asChamps;Nombre de champs($vlTable)) Boucle ($vlChamp;1;Taille tableau(asChamps)) asChamps{$vlTable}:=Nom du champ($vlTable;$vlChamp) Fin de boucle

Rfrence LIRE PROPRIETES CHAMP, Nom du champ, Nombre de tables, Prsentation des tableaux.

4e Dimension - Langage

411

Nom de la table

Dfinition structure version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nom de la table (numTable | ptrTable) Alpha Paramtre numTable | ptrTable Rsultat Type Num | Pointeur Alpha Description Numro de table ou pointeur de table Nom de la table

Description Nom de la table retourne le nom de la table dont le numro ou le pointeur a t pass dans numTable ou ptrTable. Exemple La mthode suivante est un exemple de mthode gnrique qui affiche les enregistrements d'une table. La rfrence la table est passe en tant que pointeur vers la table. La commande Nom de la table est utilise pour inclure le nom de la table dans la barre de titre de la fentre : ` METHODE PROJET AFFICHER SELECTION COURANTE ` AFFICHER SELECTION COURANTE (Pointeur) ` AFFICHER SELECTION COURANTE (->[Table] )

` Dfinir le titre de la fentre CHANGER TITRE FENETRE(" Enregistrements pour "+Nom de la table($1)) VISUALISER SELECTION($1>>) ` Afficher la slection

Rfrence Nom du champ, Nombre de tables, Table.

412

4e Dimension - Langage

Nom du champ

Dfinition structure version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nom du champ (champPtr | tableNum {; champNum}) Alpha Paramtre Type champPtr | tableNum Numrique champNum Numrique Rsultat Alpha Description Pointeur vers un champ ou Numro de table Numro de champ si un numro de table est pass en premier paramtre Nom du champ

Description La commande Nom du champ retourne le nom du champ dont vous avez pass le pointeur dans champPtr, ou dont vous avez pass les numros de table et de champ dans tableNum et champNum. Exemples (1) L'exemple suivant assigne au second lment du tableau ChampTableau{1} (ChampTableau tant un tableau deux dimensions) le nom du second champ de la premire table :

ChampTableau{1}{2}:=Nom du champ(1;2)

(2) L'exemple suivant assigne au second lment du tableau ChampTableau{1} (ChampTableau tant un tableau deux dimensions) le nom du champ [MaTable]MonChamp :

ChampTableau{1}{2}:=Nom du champ(->[MaTable]MonChamp)

(3) L'exemple suivant affiche une bote de dialogue d'alerte. Nous passons cette mthode un pointeur vers un champ :

ALERTE("Le numro du champ "+Nom du champ($1)+" de la table " +Nom de la table(Table($1))+" doit faire plus de cinq caractres.")

Rfrence Champ, Nom de la table, Nombre de champs.

4e Dimension - Langage

413

Table

Dfinition structure version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Table (numTable | unPtr) Num | Pointeur Paramtre numTable | unPtr Type Num | Pointeur Description Numro de table ou Pointeur de table ou Pointeur de champ Pointeur de table si un N de table est pass, N de table si un Pointeur de table est pass, N de table si un Pointeur de champ est pass

Rsultat

Num | Pointeur

Description Table a trois syntaxes diffrentes. Si vous passez un n de table dans numTable, Table retourne un pointeur sur la table. Si vous passez un pointeur de table dans unPtr, Table retourne le n de la table. Si vous passez un pointeur de champ dans unPtr, Table retourne le n de table du champ. Exemples (1) Dans cet exemple, la variable ptrTable reoit un pointeur sur la table n3 :

ptrTable := Table (3)

(2) Si vous passez ptrTable la fonction Table, elle retourne 3. Par exemple, dans la ligne suivante, la variable numTable prend la valeur 3 :

numTable := Table (ptrTable)

(3) Dans l'exemple suivant, la variable numTable est gale au n de la table [Table3] :

numTable := Table (->[Table3])

(4) Dans l'exemple suivant, la variable numTable est gale au numro de la table laquelle appartient le champ [Table3]Champ1 :

numTable := Table (->[Table3]Champ1)

Rfrence Champ, Nom de la table, Nombre de tables, Pointeurs.

414

4e Dimension - Langage

LIRE PROPRIETES TABLE

Dfinition structure version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE PROPRIETES TABLE (ptrTable|numTable; invisible{; trigSvgdeNouv{; trigSvgdeEnr{; trigSupprEnr{; trigChargEnr}}}}) Paramtre ptrTable | numTable invisible trigSvgdeNouv trigSvgdeEnr trigSupprEnr trigChargEnr Type Pointeur | Entier long Boolen Boolen Boolen Boolen Boolen Description Pointeur de table ou Numro de table Vrai = Invisible, Faux = Visible Vrai = Trigger Sur sauvegarde nouvel enreg activ, sinon Faux Vrai = Trigger Sur sauvegarde enregistrement activ, sinon Faux Vrai = Trigger Sur suppression enreg activ, sinon Faux Vrai = Trigger Sur chargement enregistrement activ, sinon Faux

Description La commande LIRE PROPRIETES TABLE retourne les proprits de la table dsigne par ptrTable ou numTable. Vous pouvez passer dans le premier paramtre soit un pointeur vers la table, soit le numro de la table. Aprs lexcution de la commande : Le paramtre invisible retourne Vrai si la table dispose de lattribut Invisible, Faux sinon. Lattribut Invisible permet de masquer la table dans les diteurs standard de 4D (tiquettes, graphes...). Le paramtre trigSvgdeNouv retourne Vrai si le trigger Sur sauvegarde nouvel enreg a t activ pour la table, Faux sinon. Le paramtre trigSvgdeEnr retourne Vrai si le trigger Sur sauvegarde enregistrement a t activ pour la table, Faux sinon. Le paramtre trigSupprEnr retourne Vrai si le trigger Sur suppression enreg a t activ pour la table, Faux sinon. Le paramtre trigChargEnr retourne Vrai si le trigger Sur chargement enregistrement a t activ pour la table, Faux sinon. Rfrence LIRE PROPRIETES CHAMP, LIRE PROPRIETES LIEN, LIRE PROPRIETES SAISIE CHAMP.

4e Dimension - Langage

415

Champ

Dfinition structure version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Champ (tableNum | champPtr{; champNum}) Num | Pointeur Paramtre Type tableNum | champPtr Num | Pointeur champNum Numrique Rsultat Num | Pointeur Description Numro de table ou Pointeur de champ Numro de champ si un numro de table est pass Numro de champ si un pointeur de champ est pass, Pointeur de champ si des numros de table et de champ sont passs

Description La commande Champ a deux syntaxes : Si vous passez un numro de table dans tableNum et un numro de champ dans champNum, Champ retourne un pointeur vers le champ. Si vous passez un pointeur vers un champ dans champPtr, Champ retourne le numro du champ. Exemples (1) L'exemple suivant assigne la variable champPtr un pointeur vers le deuxime champ de la troisime table :

champPtr:=Champ(3; 2)

(2) Si vous passez champPtr (un pointeur vers le 2e champ de la table) Champ, la valeur 2 est retourne. La ligne suivante assigne la valeur 2 champNum :

champNum:=Champ(champPtr)

(3) Dans cet exemple, la variable champNum est gale au numro de champ de [Table3]Champ2 :

champNum:=Champ(->[Table3]Champ2)

Rfrence LIRE PROPRIETES CHAMP, Nom du champ, Nombre de champs, Table.

416

4e Dimension - Langage

LIRE PROPRIETES CHAMP

Dfinition structure version 6.7 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE PROPRIETES CHAMP (chpPtr | tableNum{; champNum}; champType{; champLong{; index{; unique{; invisible}}}}) Paramtre Type chpPtr | tableNum Pointeur | Num champNum Numrique champType champLong index unique invisible Numrique Numrique Boolen Boolen Boolen Description Pointeur de champ ou Numro de table Numro de champ si un numro de table est pass en premier paramtre Type de champ Longueur du champ (si alphanumrique) Vrai = Index, Faux = Non index Vrai = Unique, Faux = Non unique Vrai = Invisible, Faux = Visible

Description La commande LIRE PROPRIETES CHAMP retourne des informations sur le champ dsign par tableNum et champNum ou par chpPtr. Vous pouvez soit passer : les numros de table et de champ dans tableNum et champNum ou un pointeur vers le champ dans chpPtr. Aprs l'appel : Le paramtre champType retourne le type du champ. Le paramtre variable champType reoit l'une des valeurs prdfinies par les constantes de 4e Dimension : Constante Est un champ alpha Est un texte Est un numrique Est un entier Est un entier long Est une date Est une heure Est un boolen Est une image Est une sous table Est un BLOB Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long Valeur 0 2 1 8 9 4 11 6 3 7 30

4e Dimension - Langage

417

Le paramtre champLong retourne la longueur du champ si celui-ci est de type Alpha (ce qui signifie que vous obtenez champType=Est un champ alpha). La valeur de champLong n'est pas significative pour les autres types de champ. Le paramtre index retourne Vrai si le champ est index, Faux sinon. La valeur de index est significative pour les champs de type Alphanumrique, Entier, Entier long, Rel, Date, Heure et Boolen. Le paramtre unique retourne Vrai si le champ dispose de lattribut Unique, Faux sinon. Lattribut Unique ne peut tre appliqu quaux champs indexs. Le paramtre invisible retourne Vrai si le champ dispose de lattribut Invisible, Faux sinon. Lattribut Invisible permet de masquer le champ dans les diteurs standard de 4D (tiquettes, graphes...). Exemples (1) Dans l'exemple suivant, les variables vType, vLong, vIndex, vUnique et vInvisible prennent pour valeur les proprits du troisime champ de la premire table :

LIRE PROPRIETES CHAMP(1; 3;vType;vLong;vIndex;vUnique;vInvisible)

(2) L'exemple suivant rcupre dans les variables vType, vLong, vIndex, vUnique et vInvisible les proprits du champ [Table3]Champ2 :

LIRE PROPRIETES CHAMP(->[Table3]Champ2;vType;vLong;vIndex;vUnique;vInvisible)

Rfrence Champ, FIXER INDEX, Nom du champ.

418

4e Dimension - Langage

LIRE PROPRIETES SAISIE CHAMP

Dfinition structure version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE PROPRIETES SAISIE CHAMP (ptrChp | numTable{; numChamp}; nomEnum{; obligatoire{; nonSaisissable{; nonModifiable}}}) Paramtre ptrChp | numTable numChamp nomEnum obligatoire nonSaisissable nonModifiable Type Pointeur | Entier long Entier long Alpha Boolen Boolen Boolen Description Pointeur de champ ou Numro de table Numro de champ si un numro de table est pass en premier paramtre Nom de lnumration associe ou Chane vide Vrai = Obligatoire, Faux = Facultatif Vrai = Non saisissable, Faux = Saisissable Vrai = Non modifiable, Faux = Modifiable

Description La commande LIRE PROPRIETES SAISIE CHAMP retourne les proprits relatives la saisie de donnes du champ dsign par numTable et numChamp ou par ptrChp. Vous pouvez passer : soit des numros de table et de champ dans numTable et numChamp, soit un pointeur vers le champ dans ptrChp. Les proprits retournes par cette commande sont celles qui ont t dfinies au niveau de la fentre de structure de la base. Des proprits similaires peuvent galement tre dfinies au niveau des formulaires. Aprs lexcution de la commande : Le paramtre nomEnum contient le nom de lnumration associe au champ, sil y en a une. Il est possible dassocier un numration aux champs de type Alpha, Texte, Numrique, Entier, Entier long, Date, Heure et Boolen. Si aucune numration nest associe au champ, ou si son type nadmet pas lassociation dnumration, une chane vide ("") est retourne. Le paramtre obligatoire retourne Vrai si le champ dispose de lattribut Obligatoire, Faux sinon. Le paramtre nonSaisissable retourne Vrai si le champ dispose de lattribut Non saisissable, Faux sinon. Un champ non saisissable ne peut qutre lu, il naccepte aucune saisie de donnes. Le paramtre nonModifiable retourne Vrai si le champ dispose de lattribut Non modifiable, Faux sinon. Un champ non modifiable naccepte quune seule saisie, et ne peut plus tre modifi par la suite. Les attributs Obligatoire, Non saisissable et Non modifiable peuvent tre associs aux champs de tous types, hormis Sous-table et BLOB. Rfrence LIRE PROPRIETES CHAMP, LIRE PROPRIETES LIEN, LIRE PROPRIETES TABLE. 4e Dimension - Langage 419

LIRE PROPRIETES LIEN

Dfinition structure version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE PROPRIETES LIEN (ptrChp | numTable{; numChamp}; tableDest; champDest{; discriminant{; allerAuto{; retourAuto}}}) Paramtre ptrChp | numTable numChamp tableDest champDest discriminant allerAuto retourAuto Type Pointeur | Entier long Entier long Entier long Entier long Entier long Boolen Boolen Description Pointeur de champ ou Numro de table Numro de champ si un numro de table est pass en premier paramtre Numro de la table cible ou 0 si aucun lien ne part du champ Numro du champ cible ou 0 si aucun lien ne part du champ Numro du champ discriminant ou 0 si aucun champ discriminant Vrai = Lien aller automatique, Faux = Lien aller manuel Vrai = Lien retour automatique, Faux = Lien retour manuel

Description La commande LIRE PROPRIETES LIEN retourne les proprits du lien, sil y en a un, qui part du champ source, dsign par numTable et numChamp ou par ptrChp. Vous pouvez passer : soit des numros de table et de champ dans numTable et numChamp, soit un pointeur vers le champ dans ptrChp. Aprs lexcution de la commande : Les paramtres tableDest et champDest contiennent respectivement le numro de la table et du champ vers lesquels pointe le lien partant du champ source. Si aucun lien ne part du champ, ces paramtres contiennent 0. Le paramtre discriminant contient le numro du champ discriminant (appartenant la table cible) dfini pour le lien. Si aucun champ discriminant na t dfini pour le lien ou si aucun lien ne part du champ source, ce paramtre contient 0. Les paramtres allerAuto et retourAuto retournent Vrai si respectivement les options Lien aller auto et Lien retour auto ont t coches pour le lien, Faux sinon. Note : Les deux derniers paramtres retournent galement Vrai si aucun lien ne part du champ source (dans ce cas, leur valeur est non significative). La valeur des paramtres tableDest et champDest vous permet de vous assurer de lexistence dun lien. Rfrence LIRE PROPRIETES CHAMP, LIRE PROPRIETES SAISIE CHAMP, LIRE PROPRIETES TABLE.

420

4e Dimension - Langage

FIXER INDEX

Dfinition structure version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER INDEX (champ; index{; mode}{; *}) Paramtre champ index mode * Type Description Champ | sous-chp Champ duquel crer ou supprimer lindex Boolen Crer lindex (Vrai) ou supprimer lindex (Faux) Entier long Utiliser mode dindexation rapide (pourcentage) Indexation asynchrone si * est pass

Description La commande FIXER INDEX cre ou supprime l'index du champ ou sous-champ que vous avez pass dans champ. Pour indexer le champ ou le sous-champ, passez Vrai dans index. Si l'index existe dj, la commande ne fait rien. Pour supprimer l'index, passez Faux dans index. S'il n'existe pas d'index, la commande ne fait rien. FIXER INDEX n'indexera pas les enregistrements verrouills ; la commande attendra que les enregistrements soient librs. A compter de la version 6.5 de 4D, deux modes d'indexation sont utilisables : le mode rapide et le mode classique (pour plus d'informations sur les modes d'indexation proposs par 4D, reportez-vous au manuel Mode Structure). Vous pouvez choisir le mode d'indexation utiliser en passant ou non le paramtre mode. Ce paramtre nest appel que si la commande entrane effectivement la cration de lindex (cest--dire si le paramtre index est Vrai). Si vous ne passez pas le paramtre mode, l'indexation sera effectue en mode classique. Dans ce cas, comme l'indexation est effectue dans un process spar, la base de donnes reste utilisable pendant l'opration. Si une action utilisant l'index est excute alors que l'index est en train d'tre construit, il ne sera pas utilis. Pour savoir si un champ est index, utilisez la commande LIRE PROPRIETES CHAMP.

4e Dimension - Langage

421

Si vous passez le paramtre mode, la commande utilisera le mode rapide. Dans ce cas, il n'est pas possible de modifier les donnes de la table pendant la dure de l'indexation. Vous devez passer dans mode une valeur entire reprsentant un pourcentage. Cette valeur vous permet dindiquer le type dusage pour lequel vous souhaitez que lindex soit le plus performant. Elle doit tre comprise dans l'intervalle 0 < mode < 100. - Plus mode est proche de 0, plus lindex sera performant lors des ajouts ou des insertions denregistrements. - Plus mode est proche de 100, plus lindex sera performant lors des recherches. Le paramtre optionnel * indique une indexation asynchrone (simultane). Une indexation asynchrone permet la mthode appelante de poursuivre son excution immdiatement aprs l'appel, que l'indexation soit termine ou non. Cependant, l'excution sera stoppe si une commande requiert l'index. Exemples (1) L'exemple suivant indexe le champ [Clients]Num avec le mode classique :

LIBERER ENREGISTREMENT([Clients]) FIXER INDEX ([Clients]Num; Vrai)

(2) Vous souhaitez indexer le champ [Clients]Nom, en mode rapide. Ce champ est principalement utilis pour effectuer des recherches :

FIXER INDEX([Clients]Nom;Vrai;100)

(3) Vous souhaitez indexer le champ [Prospects]Nom, en mode rapide. Le champ sera utilis en ajout et en insertion, mais galement pour des recherches. Toutefois, le premier type dutilisation restera le plus frquent :

FIXER INDEX([Prospects]Nom;Vrai;30)

Rfrence CHERCHER, LIRE PROPRIETES CHAMP, TRIER.

422

4e Dimension - Langage

Lire parametre base

Dfinition structure version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire parametre base ({table; }slecteur) Entier long Paramtre table slecteur Rsultat Type Table Entier long Entier long Description Table du paramtre ou Table par dfaut si ce paramtre est omis Code du paramtre de la base Valeur du paramtre

Description La commande Lire parametre base permet de lire la valeur courante d'un paramtre de la base 4D. slecteur dsigne le paramtre de la base lire. 4e Dimension vous propose les constantes prdfinies suivantes, places dans le thme Paramtres de la base : Constante Type Valeur Ratio de tri sq Entier long 1 Optimisation accs sq Entier long 2 Ratio valeurs distinctes sq Entier long 3 Compression index Entier long 4 Ratio chercher dans slec sq Entier long 5 Minimum process Web Entier long 6 Maximum process Web Entier long 7 Mode conversion Web Entier long 8 Taille cache donnes Entier long 9 Appels systme 4e Dimension Entier long 10 Appels systme 4D Server Entier long 11 Appels systme 4D Client Entier long 12 Timeout 4D Server Entier long 13 Timeout 4D Client Entier long 14 Numro du port Entier long 15 Adresse IP dcoute Entier long 16 Jeu de caractres Entier long 17 Process Web simultans maxi Entier long 18 Client Minimum process Web Entier long 19 Client Maximum process Web Entier long 20 Client Mode conversion Web Entier long 21 Client Numro de port Entier long 22 Client Adresse IP dcoute Entier long 23 Client Jeu de caractres Entier long 24 Client Process Web simultans maxi Entier long 25 Mode criture cache Entier long 26 Taille maximum requtes Entier long 27 4e Dimension - Langage 423

Les valeurs pouvant tre retournes par cette fonction pour les slecteurs 1 8 et 10 27 ainsi que la prote des slecteurs sont dtailles dans la description de la commande FIXER PARAMETRE BASE. Le slecteur Taille cache donnes (9) vous permet dobtenir la taille courante du cache mmoire utilis par 4D pour les donnes. Cette valeur est exprime en octets. La taille du cache est issue des paramtrages dfinis dans la page Rglages systme des Proprits de la base (paramtres Cache maximum ainsi que, sous MacOS uniquement, Cache minimum). La taille relle alloue au cache dpend de ces paramtres mais galement de ltat des ressources mmoire de la machine. Ce slecteur vous permet donc de connatre prcisment la taille courante de la mmoire alloue au cache par 4D. Note : La taille du cache de donnes ne peut pas tre fixe par programmation. Autrement dit, il nest pas possible dutiliser le slecteur Taille cache donnes avec la commande FIXER PARAMETRE BASE. Exemples (1) Cette mthode permet de rcuprer les valeurs courantes du minuteur interne de 4D : C_ENTIER LONG($ticksbtwcalls;$maxticks;$minticks;$lparams) Si (Type application=4e Dimension) ` Si nous sommes en 4D monoposte $lparams:=Lire parametre base(Appels systme 4e Dimension) $ticksbtwcalls:=$lparams & 0x00ff $maxticks:=($lparams>>8) & 0x00ff $minticks:=($lparams>>16) & 0x00ff Fin de si

(2) Le slecteur 16 (Adresse IP dcoute) permet dobtenir ladresse IP sur laquelle le serveur Web 4D reoit les requtes HTTP. Ladresse obtenue est de forme hexadcimale. Lexemple suivant permet de dcomposer ladresse IP reue : C_ENTIER LONG($a;$b;$c;$d) C_ENTIER LONG($addr) $addr:=Lire parametre base(Adresse IP dcoute) $a:=($addr>>24)&0x000000ff $b:=($addr>>16)&0x000000ff $c:=($addr>>8)&0x000000ff $d:=$addr&0x000000ff

Rfrence CHERCHER DANS SELECTION, FIXER PARAMETRE BASE, VALEURS DISTINCTES.

424

4e Dimension - Langage

FIXER PARAMETRE BASE

Dfinition structure version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER PARAMETRE BASE ({table; }slecteur; valeur) Paramtre table slecteur valeur Type Table Entier long Entier long Description Table paramtrer ou Table par dfaut si ce paramtre est omis Code du paramtre de la base modifier Valeur du paramtre

Description La commande FIXER PARAMETRE BASE permet de modifier divers paramtres internes de la base de donnes 4D. slecteur dsigne le paramtre modifier. 4e Dimension vous propose des constantes prdfinies, places dans le thme Paramtres de la base. Le tableau suivant liste chaque constante et dcrit sa porte (son aire d'action) : Constante slecteur Valeur Porte Ratio de tri sq 1 Table et process courants Optimisation accs sq 2 Table et process courants Ratio valeurs distinctes sq 3 Table et process courants Compression index 4 Application 4D (*) Ratio chercher dans slec sq 5 Table et process courants Minimum process Web 6 4e Dimension, 4D Server (*) Maximum process Web 7 4e Dimension, 4D Server (*) Mode conversion Web 8 Process courant Taille cache donnes 9 Application 4D (*) (**) Appels systme 4e Dimension 10 Application 4D (*) Appels systme 4D Server 11 Application 4D (*) Appels systme 4D Client 12 Application 4D (*) Timeout 4D Server 13 Application 4D sauf si valeur ngative (***) Timeout 4D Client 14 Application 4D sauf si valeur ngative (***) Numro du port 15 4e Dimension, 4D Server (*) Adresse IP dcoute 16 4e Dimension, 4D Server (*) Jeu de caractres 17 4e Dimension, 4D Server (*) Process Web simultans maxi 18 4e Dimension, 4D Server (*) Client Minimum process Web 19 Tous postes 4D Client (*) Client Maximum process Web 20 Tous postes 4D Client (*) Client Taille max requtes Web 21 Tous postes 4D Client (*) Client Numro de port 22 Tous postes 4D Client (*) Client Adresse IP dcoute 23 Tous postes 4D Client (*) Client Jeu de caractres 24 Tous postes 4D Client (*) Client Proc Web simultans maxi 25 Tous postes 4D Client (*) Mode criture cache 26 Application 4D (*) Taille maximum requtes Web 27 4e Dimension, 4D Server (*) 4e Dimension - Langage 425

(*) Dans ce cas, le paramtre table est ignor s'il est pass. (**) Ce slecteur ne peut tre utilis qu'en lecture (voir commande Lire parametre base). (***) Si le paramtre valeur est ngatif, le paramtrage est local au process courant et rinitialis la requte suivante. valeur dsigne la valeur du paramtre. La valeur passer dpend du paramtre que lon souhaite modifier. Voici les valeurs possibles pour chaque slecteur : Slecteur = 1 (Ratio de tri sq) Valeurs possibles : 0 -> 100 000 Description : Ratio denregistrements slectionns (par rapport au nombre total denregistrements) au-dessous duquel les tris sont effectus en mode squentiel. Ce ratio doit tre exprim sur 100 000. La valeur par dfaut est 9 000 (soit 9 %). Slecteur = 2 (Optimisation accs sq) Valeurs possibles : 0 ou 1 (0 = non optimis, 1 = optimis) Description : Mode doptimisation pour les accs squentiels (tris, recherches, SELECTION VERS TABLEAU). Par dfaut, la valeur est 1 (mode optimis). En mode optimis, 4D tente de lire depuis le disque plusieurs enregistrements en une fois. Ce mode est particulirement intressant lorsque la taille du cache est faible. Slecteur = 3 (Ratio valeurs distinctes sq) Valeurs possibles : 0 -> 100 000 Description : Ratio denregistrements slectionns (par rapport au nombre total denregistrements) au-dessous duquel la commande VALEURS DISTINCTES sera excute en mode squentiel. Ce ratio doit tre exprim sur 100 000. Slecteur = 4 (Compression index) Valeurs possibles : 0 ou 1 (0 = non, 1 = oui) Description : Activation ou non de la compression des pages dindex. Par dfaut, la valeur est 1 (les index sont compresss si ncessaire). Les pages dindex peuvent, dans des bases contenant beaucoup dindex et denregistrements, consommer beaucoup de place dans la mmoire cache de 4D. Lorsque le cache est plein et que 4D a besoin de place supplmentaire, les donnes se trouvant dans le cache ne sont plus directement dcharges : avant deffectuer cette opration, le programme va contrler sil peut gagner de la place en compactant des pages dindex. Cette alternative permet dviter le rechargement ultrieur des donnes. Slecteur = 5 (Ratio chercher dans slec sq) Valeurs possibles : 0 -> 100 000 Description : Ratio denregistrements slectionns (par rapport au nombre total denregistrements) au-dessous duquel la commande CHERCHER DANS SELECTION sera excute en mode squentiel. Ce ratio doit tre exprim sur 100 000. Slecteur = 6 (Minimum process Web) Valeurs possibles : 0 -> 32 767 Description : Nombre minimum de process Web maintenir en mode sans contexte avec 4e Dimension et 4D Server. Par dfaut, la valeur est 0 (cf. ci-dessous).

426

4e Dimension - Langage

Slecteur = 7 (Maximum process Web) Valeurs possibles : 0 -> 32 767 Description : Nombre maximum de process Web maintenir en mode sans contexte avec 4e Dimension et 4D Server. Par dfaut, la valeur est 10. Afin que le serveur Web soit ractif, en mode sans contexte, 4D maintient endormis les process Web pendant 5 secondes, et les rutilise pour traiter les ventuelles requtes HTTP suivantes. En termes de performances, ce principe est en effet plus avantageux que la cration dun nouveau process chaque requte. Une fois un process Web rutilis, il est nouveau endormi pour 5 secondes, sauf si le nombre maximum de process Web est dpass (auquel cas il est tu). Si aucune requte na t attribue un process Web durant les 5 secondes, il est tu, sauf si un nombre minimum de process Web a t fix et est atteint (auquel cas il est nouveau endormi). Ces paramtres vous permettent dajuster le fonctionnement de votre serveur Web en fonction du nombre de requtes, de la mmoire disponible, etc. Slecteur = 8 (Mode conversion Web) Valeurs possibles : 0, 1, 2 ou 3 0 (mode par dfaut) = Conversion au format HTML 4.0 si le browser le permet. Sinon, format HTML 3.2 + usage de tableaux. 1 = Conversion au format HTML 2.0 (mode 6.0.x), 2 = Conversion au format HTML 3.2 (mode 6.5), 3 = Conversion au format HTML 4.0 + CSS-P (depuis version 6.5.2). Description : Mode de conversion des formulaires 4D pour le Web avec 4e Dimension et 4D Server. Par dfaut, le serveur Web 4D utilise les feuilles de style en cascade (CSS1) pour gnrer des pages HTML dont lapparence est trs proche de celle des formulaires obtenus dans 4e Dimension. Dans le cas des bases cres avec des versions de 4D antrieures la 6.7, ce fonctionnement peut perturber la conversion correcte des formulaires. Vous pouvez donc modifier le mode de conversion des formulaires. Ce mode nest utilis que pour le process (contexte Web) dans lequel la commande FIXER PARAMETRE BASE est appele. Elle peut tre place dans la Mthode base Sur connexion Web pour assurer la conversion des formulaires de la base, ou juste avant lappel dun formulaire particulier. Hors du mode contextuel ou dun process Web, la commande est sans effet. Note : La fonction Lire parametre base admet un slecteur supplmentaire, Taille cache donnes (9). Ce paramtre ne peut pas tre utilis avec la commande FIXER PARAMETRE BASE. Pour plus dinformations, reportez-vous la description de la fonction Lire parametre base. Slecteur = 10 (Appels systme 4e Dimension) Slecteur = 11 (Appels systme 4D Server) Slecteur = 12 (Appels systme 4D Client) Valeurs possibles : pour ces trois slecteurs, le paramtre valeur est de la forme hexadcimale 0x00aabbcc dans laquelle : aa = nombre minimum de ticks par appel au systme (de 0 100 inclus) bb = nombre maximum de ticks par appel au systme (de 0 100 inclus) cc = nombre de ticks entre deux appels au systme (de 0 20 inclus).

4e Dimension - Langage

427

Si une des valeurs est hors de son intervalle, 4D la fixe son maximum. Vous pouvez galement passer dans valeur une des trois valeurs suivantes, correspondant un ensemble de rglages standard : valeur = -1 : priorit maximum alloue 4D, valeur = -2 : priorit moyenne alloue 4D, valeur = -3 : priorit minimum alloue 4D. Description : Ce slecteur vous permet de fixer dynamiquement les rglages des appels systme de 4D. En fonction du Slecteur, le gestionnaire d'appels systme sera dfini pour : - 4e Dimension (monoposte) lorsque la commande est appele depuis 4e Dimension, ainsi qu 4D Tools (slecteur=10). - 4D Server lorsque la commande est appele depuis 4D Server (slecteur=11). - 4D Client lorsque la commande est appele depuis 4D Client (slecteur=12). Reportez-vous lexemple (1). Slecteur = 13 (Timeout 4D Server) Description : Ce paramtre permet de modifier la valeur du dlai avant dconnexion (timeout) accord par 4D Server aux postes clients. Par dfaut, la valeur du dlai avant dconnexion utilise par 4D Server est dfinie dans la page Connexions de la bote de dialogue des Proprits de la base, sur le poste serveur. Le slecteur Timeout 4D Server vous permet de fixer, laide du paramtre valeur, un nouveau timeout, exprim en minutes. Cette possibilit permet en particulier daugmenter la valeur du timeout avant lexcution sur le poste client dune opration bloquante et de longue dure, risquant dentraner une dconnexion ; par exemple, limpression dun grand nombre de pages. Vous disposez en outre de deux possibilits : - effectuer une modification globale et permanente : la nouvelle valeur sapplique tous les process et est stocke dans les prfrences de lapplication (quivaut une modification de la valeur dans la bote de dialogue des Proprits de la base). Pour cela, passez une valeur positive dans le paramtre valeur. - effectuer une modification restreinte et temporaire : la nouvelle valeur ne sapplique quau process appelant (les autres process conservant la valeur dorigine), et est abandonne ds que le serveur reoit un signe dactivit du poste client par exemple, ds que lopration est termine. Cette possibilit est utile pour grer les oprations longues inities par des plug-ins. Pour cela, passez une valeur ngative dans le paramtre valeur. Pour dfinir une connexion Ouverte en permanence, passez 0 dans valeur. Reportez-vous lexemple (2). Slecteur = 14 (Timeout 4D Client) Description : Ce paramtre permet de modifier la valeur du dlai avant dconnexion (timeout) accord par le poste 4D Client au poste 4D Server. Par dfaut, la valeur du dlai avant dconnexion utilise par 4D Client est dfinie dans la page Connexions de la bote de dialogue des Proprits de la base, sur le poste client. Pour plus dinformations sur le fonctionnement de ce slecteur, reportez-vous ci-dessus la description du slecteur Timeout 4D Server (13). Le slecteur Timeout 4D Client est utiliser dans des cas trs spcifiques.

428

4e Dimension - Langage

Slecteur = 15 (Numro du port) Description : Ce paramtre permet de modifier par programmation le numro du port TCP utilis par le serveur Web 4D avec 4e Dimension et 4D Server. Par dfaut, la valeur est 80. Le numro de port TCP est dfini dans la page Serveur Web I de la bote de dialogue des Proprits de la base. Le slecteur Numro du port est utile dans le cadre de serveurs Web 4D compils et fusionns avec 4D Runtime (pas daccs au mode Structure). Pour plus dinformations sur le numro de port TCP, reportez-vous la section Paramtrages du serveur Web. Slecteur = 16 (Adresse IP dcoute) Description : Ce paramtre permet dindiquer par programmation ladresse IP sur laquelle le serveur Web doit recevoir les requtes HTTP avec 4e Dimension et 4D Server. Par dfaut, aucune adresse particulire nest spcifie (valeur = 0). Ce paramtre est dfini dans les Prfrences de la base. Le slecteur Adresse IP dcoute est utile dans le cadre de serveurs Web 4D compils et fusionns avec 4D Runtime (pas daccs au mode Structure). Passez dans le paramtre valeur ladresse IP sous forme hexadcimale. Ainsi, pour dsigner une adresse du type a.b.c.d, le code sera de la forme : C_ENTIER LONG($addr) $addr:=($a<<24)|($b<<16)|($c<<8)|$d FIXER PARAMETRE BASE(Adresse IP dcoute;$addr) Reportez-vous galement lexemple (3). Pour plus dinformations sur la dsignation de ladresse IP, reportez-vous la section Paramtrages du Serveur Web. Slecteur = 17 (Jeu de caractres) Valeurs : 0 : Occidental 1 : Japonais 2 : Chinois 3 : Coren 4 : Dfini par lutilisateur 5 : Rserv 6 : Europe Centrale 7 : Cyrillique 8 : Arabe 9 : Grec 10 : Hbreu 11 : Turc 12 : Nordique Description : Ce paramtre permet dindiquer par programmation le jeu de caractres que le serveur Web 4D (avec 4e Dimension et 4D Server) doit utiliser pour communiquer avec les navigateurs Web qui se connectent la base. La valeur par dfaut dpend de la langue du systme dexploitation. Ce paramtre est dfini dans les Prfrences de la base. Le slecteur Jeu de caractres est utile dans le cadre de serveurs Web 4D compils et fusionns avec 4D Runtime (pas daccs au mode Structure).

4e Dimension - Langage

429

Slecteur = 18 (Process Web simultans maxi) Valeurs : Vous pouvez passer toute valeur incluse entre 10 et 32 000. La valeur par dfaut est 32 000. Description : Ce paramtre permet de dfinir la limite strictement suprieure du nombre de process Web de tout type (contextuels, non contextuels ou appartenant la rserve de process cf. ce sujet le slecteur 7, Maximum process Web) accepts par le serveur Web avec 4e Dimension et 4D Server. Lorsque ce nombre limite (moins un) est atteint, 4D ne cre plus de nouveau process et retourne le message Serveur non disponible (statut HTTP 503 - Service Unavailable) toute nouvelle requte. Ce paramtre permet de prvenir la saturation du serveur Web 4D pouvant se produire lors dun envoi massif de requtes ou dune demande excessive de cration de contextes. Il peut galement tre dfini dans la bote de dialogue des Prfrences (cf. section Paramtrages du serveur Web). En thorie, le nombre maximum de process Web est le rsultat de la division Mmoire disponible / Taille de la pile dun process Web. Une autre solution consiste visualiser les informations sur les process Web affiches dans lExporateur dexcution : le nombre courant de process Web et le nombre maximum atteint depuis le dmarrage du serveur Web sont indiqus. Note : Si vous passez une valeur infrieure la limite suprieure de la rserve de process (slecteur 7), cette limite est rduite la valeur du slecteur 18. Si ncessaire, la limite infrieure de la rserve (slecteur 6) est galement ajuste. Slecteur = 19 (Client Minimum process Web) Slecteur = 20 (Client Maximum process Web) Slecteur = 21 (Client Taille max requtes Web) Slecteur = 22 (Client Numro de port) Slecteur = 23 (Client Adresse IP dcoute) Slecteur = 24 (Client Jeu de caractres) Slecteur = 25 (Client Process Web simultans maxi) Valeurs possibles : Identiques celles des slecteurs 4e Dimension ou 4D Server correspondants (cf. slecteurs 6 8, 15 18 et 27). Description : Ces slecteurs permettent de spcifier les paramtres de fonctionnement des postes 4D Client utiliss en tant que serveurs Web. Les valeurs dfinies via ces slecteurs sont appliques tous les postes 4D Client utiliss comme serveurs Web. Si vous souhaitez dfinir des valeurs pour certains postes 4D Client uniquement, utilisez la bote de dialogue des Prfrences de 4D Client. Slecteur = 26 (Mode criture cache) Valeurs possibles : 0 ou 1 (0 = dsactivation, 1 = activation). Description : Activation ou non du mode optimis dcriture du cache. Par dfaut, la valeur est 1 (mode activ). Le mode optimis dcriture du cache, actif par dfaut dans 4e Dimension compter de la version 2003, acclre sensiblement les applications 4D, notamment sous MacOS.

430

4e Dimension - Langage

Slecteur = 27 (Taille maximum requtes Web) Valeurs possibles : 500 000 2 147 483 648. Description : Taille maximale (en octets) des requtes HTTP entrantes (POST) que le serveur Web est autoris traiter. Par dfaut, la valeur est 2 000 000, cest--dire un peu moins de 2 Mo. La valeur maximale (2 147 483 648) signifie en pratique quaucune limite nest fixe. Ce paramtrage permet dempcher la saturation du serveur Web cause de requtes entrantes de trop grande taille. Lorsquune requte atteint la limite, le serveur Web de 4D la refuse. Exemples (1) Cette mthode permet de dfinir les valeurs du minuteur des appels systme si lapplication courante est 4e Dimension monoposte : C_ENTIER LONG($ticksbtwcalls;$maxticks;$minticks;$lparams) Si (Type application=4e Dimension) ` Si nous sommes en 4D monoposte $ticksbtwcalls:=12 $maxticks:=20 $minticks:=7 $lparams:=($minticks<<16)|($maxticks<<8)|$ticksbtwcalls FIXER PARAMETRE BASE(Appels systme 4e Dimension;$lparams) Fin de si

(2) Linstruction suivante permet d'anticiper un ventuel problme de timeout :

`Augmentation du timeout 3 heures pour le process courant FIXER PARAMETRE BASE(Timeout 4D Server;-60*3) `Excution dune opration longue hors du contrle de 4D ... WR MAILING (LaZone;3;0) ...

(3) Ladresse IP 192.193.194.195 sera fixe avec linstruction suivante :

FIXER PARAMETRE BASE(Adresse IP dcoute;0xC0C1C2C3)

Rfrence CHERCHER DANS SELECTION, Lire parametre base, VALEURS DISTINCTES.

4e Dimension - Langage

431

432

4e Dimension - Langage

13 ________________________ Documents systme

4e Dimension - Langage

433

434

4e Dimension - Langage

Prsentation des documents systme

Documents systme version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Introduction Tous les documents et applications que vous utilisez sur votre ordinateur sont stocks en tant que fichiers sur le ou les disques durs connects ou monts sur votre ordinateur, ou encore sur des disquettes et autres supports de stockage permanent. Dans cette documentation ainsi que dans 4D, les termes fichier ou document sont indiffremment employs pour dsigner ces documents et applications. Cependant, la plupart des commandes de ce thme utilisent le mot document car, gnralement, vous les utiliserez pour accder des documents (par opposition des fichiers d'application ou des fichiers systme) sur disque. Un disque dur peut tre format de manire comporter une ou plusieurs partitions. Chaque partition s'appelle un volume. Peu importe que ces volumes soient des partitions physiquement prsentes sur le mme disque dur ou non, au niveau de 4D, ces volumes sont considrs comme des entits spares et quivalentes. Un volume peut tre situ sur un disque dur physiquement connect votre machine ou mont par le rseau par l'intermdiaire d'un protocole de partage de fichiers tel que NetBEUI (Windows) ou AFP (Macintosh). Quel que soit le cas, au niveau de 4D, ces volumes sont considrs de la mme faon lorsque vous utilisez les commandes du thme Documents Systme ( moins que vous n'en dcidiez autrement et utilisiez des plug-ins 4D pour tendre les capacits de votre application dans ce domaine). Chaque volume a un nom de volume. Sous Windows, les volumes sont dsigns par une lettre suivie de deux points. Gnralement, A: et B: sont utiliss pour dsigner les lecteurs de disquettes et C: dsigne le volume que vous utilisez pour lancer votre systme ( moins que vous n'ayez configur votre PC diffremment). Ensuite, les lettres D: Z: sont utilises pour les volumes supplmentaires connects votre PC (lecteurs CD-ROM, autres lecteurs, lecteurs rseau, etc.). Sous MacOS, les volumes ont des noms communs dont la longueur maximale est de 31 caractres (ces noms sont ceux que vous visualisez sur le bureau au niveau du Finder). Normalement, vous classez vos documents dans des dossiers qui peuvent eux-mmes contenir d'autres dossiers. Il n'est pas conseill d'accumuler des centaines ou des milliers de fichiers au mme niveau d'un volume. C'est un fouillis, qui de plus qui ralentit votre systme. Sous Windows, un dossier est parfois encore appel un rpertoire.

4e Dimension - Langage

435

Pour identifier un document de manire certaine, vous avez besoin de connatre le nom du volume, le nom du ou des dossiers(s) dans le(s)quel(s) se trouve le document, ainsi que le nom du document lui-mme. Si vous concatnez tous ces noms, vous obtenez le chemin d'accs ce document. Dans le nom de ce chemin, les noms de dossiers sont spars par un caractre spcial appel symbole sparateur (de rpertoire). Sous Windows, ce caractre est la barre oblique inverse \, sous MacOS ce sont les deux-points : Examinons un exemple. Vous disposez d'un document Important situ dans le dossier Mmos, lui-mme situ dans le dossier Documents, lui-mme situ dans le dossier EnCours. Si, sous Windows, l'ensemble est situ sur le volume C: , le chemin d'accs au document est donc : C:\EnCours\Documents\Mmos\Important.TXT Note : Le caractre \ est galement utilis par l'diteur de mthodes de 4e Dimension pour dsigner des squences d'chappement. Pour viter tout problme d'interprtation, l'diteur transforme automatiquement les chemins d'accs du type C:\Disque en C:\\Disque. Pour plus d'informations, reportez-vous ci-dessous au paragraphe Spcification des noms et chemins d'accs des documents. Si, sous MacOS, l'ensemble est situ sur le volume Interne, le chemin d'accs au document est donc : Interne:EnCours:Documents:Mmos:Important Notez que, sous Windows, avec cet exemple, le nom du document contient le suffixe .TXT. Nous verrons pourquoi plus loin dans cette section. Quelle que soit la plate-forme, le chemin d'accs un document peut tre exprim sous la forme suivante : VolNom DosSep { DosNom DosSep { DosNom DosSep { ... } } } DocNom. Tous les documents (fichiers) situs sur des volumes ont plusieurs caractristiques gnralement appeles attributs ou proprits : par exemple le nom du document luimme. Type de document et Crateur
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Sous Windows, un document a un type. Sous MacOS, un document a un type et un crateur (ou "creator"). Le type d'un document indique gnralement ce qu'est le document ou ce qu'il contient. Par exemple, un document de type texte contient du texte (sans style). Sous Windows, le type d'un document est dtermin par son suffixe, appel extension de fichier, rattach au nom du document. Par exemple .TXT est l'extension de fichier Windows pour des documents texte.

436

4e Dimension - Langage

Sous MacOS, le type d'un document est dtermin par la proprit type de fichier du document qui est une signature sur 4 caractres (non affiche au niveau du Finder). Par exemple, le type de fichier d'un document texte est "TEXT". De plus, sous MacOS, un document est identifi par un crateur, dsignant l'application qui a cr le document. Cette notion n'existe pas sous Windows. Le crateur d'un document est dtermin par la proprit de type de fichier du document. Par exemple, le crateur de ce document cr avec 4D version 6 est "4D06". DocRef : numro de rfrence de document
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Un document est ouvert ou ferm. Avec les commandes 4D, un document ne peut tre ouvert que par un process la fois. Un process peut ouvrir plusieurs documents, plusieurs process peuvent ouvrir de multiples documents, mais vous ne pouvez pas ouvrir le mme document deux fois en mme temps. Vous ouvrez un document l'aide des fonctions Ouvrir document, Creer document et Ajouter a document. Une fois que le document est ouvert, vous pouvez lire et crire des caractres dans ce document (cf. les commandes RECEVOIR PAQUET et ENVOYER PAQUET). Lorsque vous en avez termin avec un document, il est prfrable de le fermer avec la commande FERMER DOCUMENT. Tous les documents ouverts sont dsigns au moyen de l'expression DocRef, retourne par les commandes Ouvrir document, Creer document et Ajouter a document. Une DocRef identifie de faon unique un document ouvert. C'est une expression de type Heure. Toutes les commandes fonctionnant avec des documents ouverts attendent une DocRef comme paramtre. Si vous passez une DocRef incorrecte l'une de ces commandes, une erreur du gestionnaire de fichiers est gnre. Gestion des erreurs E/S
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Quand vous accdez des documents (ouverture, fermeture, suppression, changement de nom, copie), quand vous modifiez les proprits d'un document ou quand vous lisez et crivez des caractres dans un document, des erreurs d'entre/sortie (E/S) peuvent se produire. Un document peut ne pas avoir t trouv ; il peut tre verrouill ; il peut tre dj ouvert. Vous pouvez reprer ces erreurs grce une mthode de gestion des erreurs installe par la commande APPELER SUR ERREUR. La plupart des erreurs qui peuvent se produire lors de l'utilisation des commandes du thme documents systme est dcrite dans la section Erreurs du gestionnaire de fichiers du systme.

4e Dimension - Langage

437

La variable systme Document


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les commandes Ouvrir document, Creer document, Ajouter a document et Selectionner document vous permettent d'accder un document par les botes de dialogue standard d'ouverture ou d'enregistrement de fichiers. Quand vous accdez un document par ces botes de dialogue standard, 4D retourne le chemin d'accs complet du document dans la variable systme Document. Ne confondez pas cette variable systme avec le paramtre document qui apparat dans la liste des paramtres des commandes. Spcification des noms et chemins d'accs des documents
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La plupart des routines de cette section attendant un nom de document acceptent la fois un nom et un chemin d'accs au document (*). Si vous passez un nom, la commande cherche le document dans le dossier de la base. Si vous passez un chemin d'accs, il doit tre valide. Si vous passez un nom ou un chemin d'accs incorrect, la commande gnre une erreur du gestionnaire de fichiers que vous pouvez intercepter avec une mthode d'APPELER SUR ERREUR. (*) sauf cas contraire spcifi explicitement. Attention : La longueur maximale du paramtre document est de 255 caractres. Si vous passez un nom plus long, il sera tronqu et une erreur du gestionnaire de fichiers sera gnre. Saisie de chemins d'accs Windows et squences d'chappement Lditeur de mthodes de 4e Dimension permet dutiliser des squences dchappement. Une squence dchappement est une suite de caractres permettant de remplacer un caractre spcial. La squence dbute par le caractre barre oblique inverse (antislash) \, suivi dun caractre. Par exemple, \t est une squence dchappement pour le caractre Tabulation. Le caractre \ est aussi utilis comme sparateur dans les chemins daccs sous Windows. En gnral, 4e Dimension interprtera correctement les chemins daccs Windows saisis dans lditeur de mthodes en remplaant automatiquement les barres simples \ par des doubles barres \\. Par exemple, C:\Dossier deviendra C:\\Dossier. Toutefois, si vous crivez C:\MesDocuments\Nouveaux, 4e Dimension affichera C:\\MesDocuments\Nouveaux. Dans ce cas, le second \ est incorrectement interprt \N (squence dchappement existante). Vous devez donc saisir un double \\ lorsque vous souhaitez insrer une barre oblique inverse devant un caractre utilis dans une des squences dchappement reconnues par 4e Dimension.

438

4e Dimension - Langage

Les squences dchappement reconnues par 4e Dimension sont les suivantes : Squence dchappement Caractre remplac \n LF (Retour ligne) \t HT (Tabulation) \r CR (Retour chariot) \\ \ (Barre oblique inverse) \" " (Guillemets) Mthodes projet utiles pour la gestion des documents sur disque
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Dtecter sur quelle plate-forme vous oprez Bien que 4e Dimension fournisse des commandes telles que ASSOCIER TYPES FICHIER destines liminer les modifications de code lies aux particularits des plates-formes, lorsque vous commencez travailler un plus bas niveau en manipulant des documents sur disque, par exemple lorsque vous obtenez les chemins d'accs par programmation, vous avez besoin de savoir si vous fonctionnez sous Windows ou MacOS. La mthode projet Sous Windows liste ci-dessous vous permet de savoir si votre base tourne sous Windows : ` Mthode projet Sous Windows ` Sous Windows -> Boolen ` Sous Windows -> Vrai si la base est sous Windows C_BOOLEEN($0) C_ENTIER LONG($vlPlatform;$vlSystem;$vlMachine) PROPRIETES PLATE FORME($vlPlatform;$vlSystem;$vlMachine) $0:=($vlPlatform=Windows) Utiliser le bon symbole sparateur de dossiers Sous Windows, un niveau de dossier est symbolis par une barre oblique inverse \. Sous MacOS, un niveau de dossier est symbolis par deux-points : En fonction de la plate-forme sur laquelle tourne la base, la mthode projet Symbole sparateur suivante vous retourne le code ASCII du caractre sparateur de dossiers. ` Mthode projet Symbole sparateur ` Symbole sparateur -> Entier ` Symbole sparateur -> code ASCII de "\\" (Windows) ou ":" (MacOS)

4e Dimension - Langage

439

C_ENTIER($0) Si (Sous Windows ) $0:=Code ascii("\\") Sinon $0:=Code ascii(":") Fin de si Extraire le nom de fichier d'un chemin d'accs complet (ou "nom long") Une fois que vous avez rcupr le "nom long" d'un fichier (c'est--dire le chemin d'accs+le nom du fichier), vous pouvez avoir besoin d'en extraire le nom du fichier seul, par exemple pour l'afficher comme titre d'une fentre. La mthode projet Nom long vers nom de fichier vous le permet, sous Windows et MacOS. ` Mthode projet Nom long vers nom de fichier ` Nom long vers nom de fichier ( Chane ) -> Chane ` Nom long vers nom de fichier ( nom long ) -> nom de fichier C_ALPHA(255;$1;$0) C_ENTIER($viLen;$viPos;$viChar;$viDirSymbol) $viDirSymbol:=Symbole sparateur $viLen:=Longueur($1) $viPos:=0 Boucle ($viChar;$viLen;1;-1) Si (Code ascii($1$viChar)=$viDirSymbol) $viPos:=$viChar $viChar:=0 Fin de si Fin de boucle Si ($viPos>0) $0:=Sous chaine($1;$viPos+1) Sinon $0:=$1 Fin de si Si (vbDebugOn) `Mettre la variable Vrai ou Faux dans la mthode base Sur ouverture Si ($0="") TRACE Fin de si Fin de si

440

4e Dimension - Langage

Extraire le chemin d'accs seul du chemin d'accs complet (ou "nom long") Une fois que vous avez rcupr le "nom long" d'un fichier (c'est--dire le chemin d'accs+le nom du fichier), vous pouvez avoir besoin d'en extraire uniquement le chemin d'accs au fichier, par exemple pour sauvegarder d'autres documents au mme endroit. La mthode projet Nom long vers chemin accs vous le permet, sous Windows et MacOS. ` Mthode projet Nom long vers chemin accs ` Nom long vers chemin accs ( Chane ) -> Chane ` Nom long vers chemin accs ( nom long ) -> chemin d'accs C_ALPHA(255;$1;$0) C_ALPHA(1;$vsDirSymbol) C_ENTIER($viLen;$viPos;$viChar;$viDirSymbol) $viDirSymbol:=Symbole sparateur $viLen:=Longueur($1) $viPos:=0 Boucle ($viChar;$viLen;1;-1) Si (Code ascii($1$viChar)=$viDirSymbol) $viPos:=$viChar $viChar:=0 Fin de si Fin de boucle Si ($viPos>0) $0:=Sous chaine($1;1;$viPos) Sinon $0:=$1 Fin de si Si (vbDebugOn) `Mettre la variable Vrai ou Faux dans la mthode base Sur ouverture Si ($0="") TRACE Fin de si Fin de si Rfrence Ajouter a document, ASSOCIER TYPES FICHIER, CHANGER CREATEUR DOCUMENT, CHANGER POSITION DANS DOCUMENT, CHANGER PROPRIETES DOCUMENT, CHANGER TAILLE DOCUMENT, CHANGER TYPE DOCUMENT, COPIER DOCUMENT, Createur document, Creer document, CREER DOSSIER, DEPLACER DOCUMENT, FERMER DOCUMENT, LISTE DES DOCUMENTS, LISTE DES DOSSIERS, LISTE DES VOLUMES, Ouvrir document, Position dans document, PROPRIETES DOCUMENT, PROPRIETES DU VOLUME, Selectionner document, SUPPRIMER DOCUMENT, Taille document, Tester chemin acces, Type document.

4e Dimension - Langage

441

Type document

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Type document (document) Alpha Paramtre document Rsultat Type Alpha Alpha Description Nom de document ou Chemin d'accs complet un document Extension de fichier Windows (chane de 1 3 caractres) ou type de fichier MacOS (chane de 4 caractres)

Description La commande Type document retourne le type du document dont vous avez pass le nom ou le chemin d'accs dans document. Sous Windows, Type document retourne l'extension de fichier du document (par exemple 'DOC' pour un document Microsoft Word, 'EXE' pour un fichier excutable, etc.) ou le type de document MacOS (4 caractres) correspondant si ce dernier a t associ une extension Windows quivalente par 4e Dimension (par exemple 'TEXT' pour l'extension 'TXT') ou par un appel antrieur la commande ASSOCIER TYPES FICHIER. Sous MacOS, Type document retourne le type de fichier MacOS (4 caractres) du document (par exemple 'TEXT' pour un document de type Texte, 'APPL' pour une application doublecliquable, etc.). Rfrence ASSOCIER TYPES FICHIER, CHANGER TYPE DOCUMENT, Createur document, PROPRIETES DOCUMENT.

442

4e Dimension - Langage

CHANGER TYPE DOCUMENT

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER TYPE DOCUMENT (document; type) Paramtre document type Type Alpha Alpha Description Nom de document ou Chemin d'accs complet un document Extension de fichier Windows (chane de 1 3 caractres) ou Type de fichier MacOS (chane de 4 caractres)

Description La commande CHANGER TYPE DOCUMENT dfinit le type du document dont vous avez pass le nom ou le chemin d'accs complet dans document. Vous passez le nouveau type du document dans type. Reportez-vous la description des types de documents dans les sections Prsentation des documents systme et Type document. Sous Windows, la commande modifie l'extension et donc le nom du fichier dcrit par document. Par exemple, l'instruction CHANGER TYPE DOCUMENT("C:\\Docs\\Facture.asc";"TEXT") renomme le fichier "Facture.asc" en "Facture.txt" (dans 4D, le type Mac "TEXT" est associ au type Windows "txt"). Si le type n'est pas associ dans 4D, il suffit de passer directement les trois lettres de l'extension. Par exemple, l'instruction CHANGER TYPE DOCUMENT("C:\\Docs\\Facture.asc"; "zip") renomme le fichier "Facture.asc" en "Facture.zip". Rfrence ASSOCIER TYPES FICHIER, CHANGER CREATEUR DOCUMENT, CHANGER PROPRIETES DOCUMENT, Type document.

4e Dimension - Langage

443

Createur document

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Createur document (document) Alpha Paramtre document Rsultat Type Alpha Alpha Description Nom de document ou Chemin d'accs complet un document Chane vide (Windows) ou Crateur de fichier (MacOS)

Description La commande Createur document retourne le "crateur" du document dont vous avez pass le nom ou le chemin d'accs complet dans document. Sous Windows, Createur document retourne une chane vide. Rfrence CHANGER CREATEUR DOCUMENT, Type document.

444

4e Dimension - Langage

CHANGER CREATEUR DOCUMENT

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER CREATEUR DOCUMENT (document; crateur) Paramtre document crateur Type Alpha Alpha Description Nom de document ou Chemin d'accs complet un document Crateur de fichier (MacOS) ou Chane vide (Windows)

Description La commande CHANGER CREATEUR DOCUMENT dfinit le crateur du document dont vous avez pass le nom ou le chemin d'accs complet dans document. Vous passez le nouveau crateur du document dans crateur. Sous Windows, cette commande ne fait rien. Reportez-vous la description du crateur de document dans la section Prsentation des documents systme. Rfrence CHANGER PROPRIETES DOCUMENT, CHANGER TYPE DOCUMENT, Createur document.

4e Dimension - Langage

445

Ouvrir document

Documents systme version 6.8 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ouvrir document (document{; type{; mode}}) DocRef Paramtre document type mode Rsultat Type Alpha Alpha Entier DocRef Description Nom du document ou Chemin d'accs complet au document ou Chane vide pour afficher la bote de dialogue Type de fichier MacOS (chane de 4 caractres) ou Extension de fichier Windows (chane de 1 3 caractres) ou fichier texte (.TXT) si omis Mode douverture du document Numro de rfrence du document

Description La commande Ouvrir document ouvre le document dont vous avez pass le nom dans document. Si vous passez une chane vide ("") dans document, une bote de dialogue standard d'ouverture de fichiers apparat et l'utilisateur peut dsigner le document. Si dans ce cas l'utilisateur clique sur le bouton Annuler, aucun document n'est ouvert, Ouvrir document retourne une rfrence de document nulle, et la variable OK prend la valeur 0. Si le document est correctement ouvert, Ouvrir document retourne sa rfrence de document et la variable OK prend la valeur 1. Si le document tait dj ouvert et que le paramtre mode n'est pas prcis, Ouvrir document l'ouvre en mode lecture et la variable OK prend la valeur 1. Si le document tait dj ouvert et que vous tentez de l'ouvrir en mode criture, une erreur est gnre. Si le document n'existe pas, une erreur est gnre. Sous MacOS, si vous appelez la bote de dialogue standard d'ouverture de fichiers, tous les types de documents sont affichs par dfaut. Pour afficher un type spcifique de document, passez un type dans le paramtre optionnel type. Sous Windows, si vous appelez la bote de dialogue standard d'ouverture de fichiers, tous les documents *.* sont affichs par dfaut. Pour afficher d'autres types de documents, passez une extension de fichier Windows (de 1 3 caractres) ou un type de fichier MacOS associ l'aide de la commande ASSOCIER TYPES FICHIER dans le paramtre optionnel type.

446

4e Dimension - Langage

Sous Windows, mme si vous n'appelez pas la bote de dialogue standard d'ouverture de fichiers, vous pouvez passer une valeur dans type pour spcifier le type de document ouvrir. Par dfaut, Ouvrir document tente d'ouvrir un fichier .TXT. Si vous passez le paramtre type, Ouvrir document tentera d'ouvrir le document dont le nom est document.type. Exemple :

vhRefDoc:=Ouvrir document("C:\\Lettre";"WRI")

Dans ce cas, 4e Dimension recherche le document C:\\Lettre.WRI sur le disque dur. Si vous passez plus de trois caractres dans type, Ouvrir document prend en compte seulement les trois premiers caractres. Si aucun type de document n'est spcifi, 4e Dimension essaie d'ouvrir le document sans extension de fichier. S'il ne le trouve pas, il essaie d'ouvrir le document avec l'extension .TXT. S'il ne le trouve pas, l'erreur Fichier non trouv est affiche. Le paramtre optionnel mode permet de dfinir le mode douverture du fichier document. Quatre modes douverture sont disponibles. 4e Dimension vous propose les constantes prdfinies suivantes, places dans le thme Documents systme : Constante Lecture et criture (valeur par dfaut) Mode criture Mode lecture Lire chemin accs Type Entier Entier Entier Entier Valeur 0 1 2 3

Lorsqu'un document est ouvert, Ouvrir document se place initialement au dbut du document, alors que Ajouter a document se place la fin. Une fois que vous avez ouvert un document, vous pouvez crire ou lire des valeurs dans ce document l'aide des commandes RECEVOIR PAQUET et ENVOYER PAQUET, que vous pouvez combiner avec les commandes Position dans document et CHANGER POSITION DANS DOCUMENT pour accder directement certains endroits du document. N'oubliez pas d'appeler finalement FERMER DOCUMENT pour le document.

4e Dimension - Langage

447

Exemples (1) L'exemple suivant ouvre un document existant qui s'appelle Note, crit la chane Au revoir dans le document et le referme. Si le document contient dj la chane Bonjour, elle est remplace :

C_HEURE(vDoc) vDoc := Ouvrir document ("Note") ` Ouvrir le document Note Si (OK=1) ENVOYER PAQUET (vDoc; "Au revoir") ` Ecrire un mot dans le document FERMER DOCUMENT (vDoc) ` Fermer le document Fin de si

(2) Vous pouvez lire un document dj ouvert en criture :


vDoc:=Ouvrir document ("PassFile";"TEXT") ` Le fichier est ouvert vRef:=Ouvrir document ("PassFile";"TEXT";Mode lecture) ` Le fichier est lu

Variables et ensembles systme Si le document est correctement ouvert, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0. Aprs l'appel, la variable systme Document contient le nom complet du document. Si vous passez la valeur 3 dans mode, la fonction retourne ?00:00:00? (pas de rfrence de document). Le document nest pas ouvert mais les variables systme Document et OK sont mises jour : OK prend la valeur 1, Document contient soit le nom, soit le chemin daccs et le nom du fichier document, suivant la valeur passe dans document (si vous avez pass un nom de fichier, Document contiendra ce nom, si vous avez pass un chemin daccs complet, Document contiendra ce chemin daccs complet). Note : Si le fichier dsign par document nest pas trouv ou si vous passez une chane vide dans document, une bote de dialogue douverture de fichiers apparat. Si elle est valide, Document et OK sont mises jour comme dcrit ci-dessus. Si elle est annule, OK prend la valeur 0. Rfrence Ajouter a document, Creer document.

448

4e Dimension - Langage

Creer document

Documents systme version 6.7.1 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Creer document (document{; type}) DocRef Paramtre document Type Alpha Description Nom de document ou Chemin d'accs complet de document ou Chane vide pour afficher la bote de dialogue standard d'ouverture de fichiers Type de fichier MacOS (chane de 4 caractres) ou Extension de fichier Windows (chane de 1 3 caractres) ou document TEXTE (.TXT) si omis Numro de rfrence du document

type

Alpha

Rsultat

DocRef

Description La commande Creer document cre un document et retourne son numro de rfrence de document. Vous passez le nom ou le chemin d'accs complet du nouveau document dans document. Si document existe dj, il est remplac. Cependant, si le document est verrouill ou est dj ouvert, une erreur est gnre. Si vous passez une chane vide dans document, une bote de dialogue standard d'enregistrement de fichiers apparat et l'utilisateur peut spcifier le nom du document. Si dans ce cas l'utilisateur clique sur le bouton Annuler, Creer document retourne une rfrence de document nulle, et la variable OK prend la valeur 0. Si le document est correctement cr et ouvert, Creer document retourne sa rfrence de document et la variable systme OK prend la valeur 1. La variable systme Document est mise jour et retourne le chemin daccs du document cr. Que vous utilisiez ou non la bote de dialogue standard d'enregistrement de fichiers, Creer document cre par dfaut un document de type TEXT (MacOS) ou .TXT (Windows). Pour crer un autre type de document, passez un type dans le paramtre optionnel type. Sous MacOS, vous passez un type de fichier.

4e Dimension - Langage

449

Sous Windows, vous pouvez passer une extension de fichier Windows (de 1 3 caractres) ou un type de fichier MacOS associ l'aide de la commande ASSOCIER TYPES FICHIER. Si vous souhaitez crer un document sans extension, un document comportant plusieurs extensions, ou un document comportant une extension de plus de trois caractres, n'utilisez pas le paramtre type et passez le nom complet dans document (cf. exemple 2). Une fois que vous avez cr et ouvert un document, vous pouvez crire ou lire des valeurs dans ce document l'aide des commandes RECEVOIR PAQUET et ENVOYER PAQUET, que vous pouvez combiner avec les commandes Position dans document et CHANGER POSITION DANS DOCUMENT pour accder directement certains endroits du document. N'oubliez pas d'appeler finalement FERMER DOCUMENT pour le document. Exemples (1) L'exemple suivant cre et ouvre un nouveau document qui s'appelle Note, crit la chane Bonjour et le referme :

C_HEURE(vDoc) vDoc := Creer document ("Note") ` Crer un nouveau document qui s'appelle Note Si (OK=1) ENVOYER PAQUET (vDoc; "Bonjour") ` Ecrire un mot dans le document FERMER DOCUMENT (vDoc) ` Fermer le document Fin de si

(2) L'exemple suivant cre sous Windows des documents avec des extensions non standard :

$vhMonDoc:=Creer document("LeDoc.ext1.ext2") `Plusieurs extensions $vhMonDoc:=Creer document("LeDoc.shtml") `Extension longue $vhMonDoc:=Creer document("LeDoc.") `Pas dextension (le point "." est obligatoire)

Variables et ensembles systme Si le document est correctement cr, la variable systme OK prend la valeur 1 et la variable systme Document contient soit le nom, soit le chemin daccs et le nom du fichier document, suivant la valeur passe dans document (si vous avez pass un nom de fichier, Document contiendra ce nom, si vous avez pass un chemin daccs complet, Document contiendra ce chemin daccs complet). Rfrence Ajouter a document, Ouvrir document.

450

4e Dimension - Langage

Ajouter a document

Documents systme version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ajouter a document (document{; type}) DocRef Paramtre document type Type Alpha Alpha Description Nom du document ou Chemin d'accs complet au document ou Chane vide pour afficher le dialogue standard d'ouverture de fichiers Type de fichier MacOS (chane de 4 caractres) ou Extension de fichier Windows (chane de 1 3 caractres) ou Fichier texte (.TXT) si omis Numro de rfrence du document

Rsultat

DocRef

Description La commande Ajouter a document "fait la mme chose" que la commande Ouvrir document : elle vous permet d'ouvrir un document sur disque. La seule diffrence est que Ajouter a document se place initialement la fin du document, alors que Ouvrir document se place au dbut. Pour plus d'informations, reportez-vous la description de la commande Ouvrir document. Exemple L'exemple suivant ouvre un document existant qui s'appelle Note, ajoute la fin du document la chane et bientt suivie d'un retour chariot puis le referme. Si le document contenait dj la chane Au revoir, il contiendra la chane Au revoir et bientt suivie d'un retour chariot :

C_HEURE(vDoc) vDoc := Ajouter a document ("Note") ` Ouvrir le document Note ENVOYER PAQUET (vDoc; " et bientt" + Caractere (13)) ` Ajouter la chane FERMER DOCUMENT (vDoc) ` Fermer le document

Variables et ensembles systme Si le document est correctement ouvert, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0. La variable systme Document contient le nom du document. Rfrence Creer document, Ouvrir document.

4e Dimension - Langage

451

FERMER DOCUMENT

Documents systme version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FERMER DOCUMENT (rfDocument) Paramtre rfDocument Type DocRef Description Numro de rfrence du document

Description FERMER DOCUMENT ferme le document spcifi par rfDocument. Fermer un document est le seul moyen de s'assurer que les donnes crites dans le fichier sont sauvegardes. Vous devez fermer tous les documents ouverts par les commandes Ouvrir document, Creer document et Ajouter a document. Exemple L'exemple suivant permet l'utilisateur de crer un nouveau document, crit la chane Bonjour, puis le referme : C_HEURE(vDoc) vDoc := Creer document ("") Si (OK=1) ENVOYER PAQUET (vDoc; "Bonjour") ` Ecrire un mot dans le document FERMER DOCUMENT (vDoc) ` Fermer le document Fin de si

Rfrence Ajouter a document, Creer document, Ouvrir document.

452

4e Dimension - Langage

COPIER DOCUMENT

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

COPIER DOCUMENT (nomSource; nomDest{; *}) Paramtre nomSource nomDest * Type Alpha Alpha Description Nom du document copier Nom du document copi Remplacer document existant le cas chant

Description La commande COPIER DOCUMENT copie le document dsign par nomSource l'emplacement dsign par nomDest. Les deux paramtres nomSource et nomDest peuvent dsigner un document situ dans le dossier de la base, ou un chemin d'accs complet exprim par rapport la racine du volume. Une erreur est gnre si un document nomm nomDest existe dj, moins que vous n'ayez spcifi le paramtre optionnel *, qui indique COPIER DOCUMENT de supprimer et de remplacer le document existant par le document de destination dans ce cas. Exemples (1) L'exemple suivant duplique un document dans son propre dossier :

COPIER DOCUMENT("C:\\DOSSIER\\LeDoc";"C:\\DOSSIER\\LeDoc2")

(2) L'exemple suivant copie un document dans le dossier de la base (dans la mesure o C:\\DOSSIER n'est pas le dossier de la base) :

COPIER DOCUMENT("C:\\DOSSIER\\LeDoc";"LeDoc")

(3) L'exemple suivant copie un document d'un volume vers un autre :

COPIER DOCUMENT("C:\\DOSSIER\\LeDoc";"F:\\Archives\\LeDoc.OLD")

(4) L'exemple suivant duplique un document dans son propre dossier, crasant la prcdente copie si elle existe :

COPIER DOCUMENT("C:\\DOSSIER\\LeDoc";"C:\\DOSSIER\\LeDoc2";*)

Rfrence DEPLACER DOCUMENT.

4e Dimension - Langage

453

DEPLACER DOCUMENT

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DEPLACER DOCUMENT (cheminSource; cheminDest) Paramtre cheminSource cheminDest Type Alpha Alpha Description Chemin d'accs complet au document existant Chemin d'accs de destination

Description La commande DEPLACER DOCUMENT dplace ou renomme un document. Vous passez le chemin d'accs complet au document existant dans le paramtre cheminSource et le nouveau nom et/ou emplacement du document dans cheminDest. Attention : Avec DEPLACER DOCUMENT, vous pouvez dplacer un document depuis et vers tous les dossiers du mme volume. Si vous souhaitez dplacer un document entre deux volumes diffrents, utilisez la commande COPIER DOCUMENT pour dplacer le document puis effacez le document original avec la commande SUPPRIMER DOCUMENT. Exemples (1) L'exemple suivant renomme le document DocNom :

DEPLACER DOCUMENT("C:\\DOSSIER\\DocNom";"C:\\DOSSIER \\NouveauDocNom")

(2) L'exemple suivant dplace et renomme le document DocNom :

DEPLACER DOCUMENT("C:\\DOSSIER1\\DocNom";"C:\\DOSSIER2 \\NouveauDocNom")

(3) L'exemple suivant dplace le document DocNom :

DEPLACER DOCUMENT("C:\\DOSSIER1\\DocNom";"C:\\DOSSIER2\\DocNom")

Note : Dans les deux derniers exemples, le dossier de destination "C:\\DOSSIER2" doit dj exister. En effet, la commande DEPLACER DOCUMENT dplace uniquement un document, elle ne peut crer de dossiers. Rfrence COPIER DOCUMENT.

454

4e Dimension - Langage

SUPPRIMER DOCUMENT

Documents systme version 6.7.1 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER DOCUMENT (document) Paramtre document Type Alpha Description Nom de document ou Chemin d'accs complet au document

Description SUPPRIMER DOCUMENT supprime le document dont vous avez pass le nom dans document. Si le nom du document ou le chemin d'accs saisi est incorrect, une erreur est gnre. Il en va de mme si vous tentez de supprimer un document ouvert. SUPPRIMER DOCUMENT n'accepte pas de chane vide dans le paramtre document. Si vous passez une chane vide, la bote de dialogue standard d'ouverture de fichiers ne s'affiche pas et une erreur est gnre. ATTENTION : SUPPRIMER DOCUMENT peut supprimer tout fichier disque, y compris des fichiers crs par d'autres applications ou les applications elles-mmes. La commande SUPPRIMER DOCUMENT doit donc tre utilise avec prcaution. La suppression d'un document est une opration dfinitive et irrversible. Exemples (1) L'exemple suivant supprime le document appel Note :

SUPPRIMER DOCUMENT ("Note") ` Suppression du document

(2) Reportez-vous l'exemple de la commande AJOUTER A PRESSE PAPIERS. Variables et ensembles systme La suppression d'un document met la variable systme OK 1. Si SUPPRIMER DOCUMENT ne peut pas supprimer le document, la variable systme OK prend la valeur 0.

4e Dimension - Langage

455

Selectionner document

Documents systme version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Selectionner document (rpertoire; typesFichiers; titre; options{; slectionns}) Chane Paramtre rpertoire Type Texte | Entier long Description Chemin daccs du rpertoire afficher par dfaut dans la bote de dialogue de slection, ou Chane vide pour afficher le dossier dutilisateur par dfaut (Mes documents sous Windows, Documents sous MacOS), ou Numro de chemin daccs mmoris Liste des types de documents filtrer, ou * pour ne pas filtrer les documents Titre de la bote de dialogue de slection Option(s) de slection Tableau contenant la liste des chemins daccs + les noms des fichiers slectionns Nom du fichier slectionn (premier fichier de la liste en cas de slection multiple)

typesFichiers titre options slectionns Rsultat

Texte Texte Entier long Tableau Texte Chane

Description La commande Selectionner document affiche une bote de dialogue standard douverture de documents, permettant lutilisateur de dsigner un ou plusieurs fichier(s), et retourne le nom et/ou le chemin daccs complet du ou des fichier(s) slectionn(s). Le paramtre rpertoire indique le dossier dont le contenu doit tre affich initialement dans la bote de dialogue douverture de documents. Vous pouvez passer trois types de valeurs : un texte contenant le chemin daccs complet du rpertoire afficher. une chane vide ("") pour afficher le dossier dutilisateur par dfaut du systme (Mes documents sous Windows, Documents sous MacOS). un numro de chemin daccs mmoris (de 1 32000) pour afficher le dossier associ. Avec ce principe, vous pouvez conserver en mmoire le chemin daccs du dossier ouvert au moment o lutilisateur a cliqu sur le bouton de slection, cest--dire le dossier choisi par lutilisateur. Lors du premier appel dun numro arbitraire (par exemple 5), la commande affiche le dossier dutilisateur par dfaut du systme (quivaut passer une chane vide). Lutilisateur pourra alors ventuellement naviguer parmi les dossiers de son disque dur. Au moment o il cliquera sur le bouton de slection, le chemin daccs sera mmoris et associ au numro 5. Lors des appels suivants du numro 5, le chemin daccs mmoris sera utilis par dfaut. En cas de slection dun nouvel emplacement, le chemin numro 5 sera mis jour, et ainsi de suite.

456

4e Dimension - Langage

Ce mcanisme vous permet de mmoriser jusqu 32000 chemins daccs. Sous Windows, chaque chemin est conserv durant la session uniquement. Sous MacOS, les chemins sont conservs par le systme, ils restent mmoriss dune session lautre. Passez dans le paramtre typeFichiers le ou les type(s) de fichier(s) pouvant tre slectionns dans la bote de dialogue douverture. Vous pouvez passer une liste de plusieurs types spars par un ; (point virgule). Pour chaque type dfini, une ligne sera ajoute dans le menu de choix de type de la bote de dialogue. Sous MacOS, vous devez passer le type des fichiers pouvant tre filtrs (TEXT, APPL, etc.). Sous Windows, vous pouvez galement passer un type de fichier MacOS 4e Dimension effectue la correspondance en interne ou lextension des fichiers (.txt, .exe, etc.). A noter que sous Windows, lutilisateur aura la possibilit de forcer laffichage de tous les types de fichiers en saisissant *.* dans la bote de dialogue. Toutefois dans ce cas, 4e Dimension effectuera une vrification supplmentaire des types des fichiers slectionns : si lutilisateur slectionne un type de fichier non autoris, la commande retourne une erreur. Si vous ne souhaitez pas restreindre les fichiers affichs un ou plusieurs types, passez la valeur * (toile) ou .* dans typeFichiers. Passez dans le paramtre titre le libell devant apparatre dans la bote de dialogue. Par dfaut, si vous passez une chane vide, le libell Ouvrir est affich. Le paramtre options permet de spcifier les fonctions avances autorises dans la bote de dialogue douverture. 4e Dimension vous propose les constantes prdfinies suivantes, places dans le thme Documents systme : Constante Type Valeur Fichiers multiples Entier long 1 Ouverture progiciel Entier long 2 Slection progiciel Entier long 4 Slection alias Entier long 8 Utiliser fentre feuille Entier long 16 Vous pouvez passer une constante ou une combinaison de constantes. Fichiers multiples : autoriser la slection simultane de plusieurs fichiers laide des combinaisons Maj+clic (slection contigu) et Ctrl+clic (Windows) ou Commande+clic (MacOS). Dans ce cas, le paramtre slectionns, sil est pass, contient la liste de tous les fichiers slectionns. Par dfaut, si cette constante nest pas utilise, la commande nautorise pas la slection de plusieurs fichiers. Ouverture progiciel (MacOS uniquement) : autoriser louverture des progiciels (packages) et la visualisation de leur contenu. Par dfaut, si cette constante nest pas utilise, la commande nautorise pas louverture des progiciels. Slection progiciel (MacOS uniquement) : autoriser la slection de progiciels (packages) en tant quentits. Par dfaut, si cette constante nest pas utilise, la commande ne permet pas de slectionner les progiciels en tant que tels. Dans ce cas, mme si la constante Ouverture progiciel est utilise, il est impossible douvrir ou de slectionner un progiciel.

4e Dimension - Langage

457

Slection alias : autoriser la slection de raccourcis (Windows) ou dalias (MacOS) en tant que documents. Par dfaut, si cette constante nest pas utilise, la commande nautorise pas la slection de raccourcis ou dalias en tant que tels. Si lutilisateur slectionne ce type de document, la commande retourne le chemin de llment cible. Lorsque vous passez la constante, la commande retourne le chemin de lalias ou du raccourci lui-mme. Utiliser fentre feuille (MacOS uniquement) : afficher la bote de dialogue de slection sous forme de fentre feuille (cette option est ignore sous Windows). Les fentres feuilles sont des fentres spcifiques de linterface MacOS X, bnficiant notamment dune animation graphique (pour plus dinformations, reportez-vous la section Types de fentres). Par dfaut, si cette constante nest pas utilise, la commande affiche une bote de dialogue standard. Si vous ne souhaitez pas utiliser doption, passez 0 dans le paramtre options. Le paramtre facultatif slectionns permet de rcuprer le chemin daccs complet (chemin daccs + nom) de chaque fichier slectionn par lutilisateur. La commande cre, dimensionne et remplit le tableau en fonction de la slection de lutilisateur. Ce paramtre est utile lorsque loption Fichiers multiples est utilise, ou lorsque vous souhaitez connatre le chemin daccs du fichier slectionn (il suffit dans ce cas de soustraire de la valeur du tableau le nom du fichier retourn par la commande). Si aucun fichier na t slectionn, le tableau est retourn vide. La commande retourne le nom (nom+extension sous Windows) du fichier slectionn. Si plusieurs fichiers ont t slectionns, la commande retourne le nom du premier fichier de la liste des fichiers slectionns. La liste des fichiers peut tre rcupre dans le paramtre slectionns. Si aucun fichier na t slectionn, la commande retourne une chane vide. Rfrence Ouvrir document, Selectionner dossier. Variables et ensembles systme Si la commande a t correctement excute et quun document valide a t slectionn, la variable systme OK prend la valeur 1 et la variable systme Document contient le chemin daccs complet du fichier slectionn. Si aucun fichier na t slectionn (par exemple si lutilisateur a cliqu sur le bouton Annuler dans la bote de dialogue douverture), la variable systme OK prend la valeur 0 et la variable systme Document est vide.

458

4e Dimension - Langage

Tester chemin acces

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Tester chemin acces (cheminAccs) Numrique Paramtre cheminAccs Rsultat Type Alpha Numrique Description Chemin d'accs un dossier ou un document 1= cheminAccs est un document existant 0 = cheminAccs est un dossier existant <0 = chemin d'accs invalide, code d'erreur du gestionnaire de fichiers du systme

Description La fonction Tester chemin acces vrifie si le document ou le dossier dont vous avez pass le chemin d'accs et le nom dans cheminAccs est prsent sur le disque. Si un document est trouv, Tester chemin acces retourne 1. Si un dossier est trouv, Tester chemin acces retourne 0. 4D propose les constantes prdfinies suivantes : Constante Est un document Est un rpertoire Type Entier long Entier long Valeur 1 0

Si aucun document ou dossier n'est trouv, Tester chemin acces retourne une valeur ngative (par exemple -43 pour "Fichier non trouv"). Exemple L'exemple suivant teste la prsence du document Journal dans le dossier de la base et le cre s'il n'existe pas:

Si (Tester chemin acces("Journal") # Est un document) $vhDocRef:=Creer document("Journal") Si (OK=1) FERMER DOCUMENT($vhDocRef) Fin de si Fin de si

Rfrence Creer document, CREER DOSSIER.

4e Dimension - Langage

459

CREER DOSSIER

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CREER DOSSIER (cheminAccs) Paramtre cheminAccs Type Alpha Description Chemin d'accs au nouveau dossier crer

Description La commande CREER DOSSIER cre un dossier en fonction du chemin d'accs que vous passez dans le paramtre cheminAccs. Si vous passez un nom, le dossier est cr dans le dossier de la base. Si vous passez un chemin d'accs complet, cela doit tre un chemin d'accs valide au nom du dossier crer, partir de la racine du volume ou du dossier de la base. Exemples (1) L'exemple suivant cre le dossier Archives dans le dossier de la base :

CREER DOSSIER("Archives")

(2) L'exemple suivant cre le dossier Archives dans le dossier de la base, puis cre les sousdossiers Janvier et Fvrier:

CREER DOSSIER("Archives") CREER DOSSIER("Archives\\Janvier") CREER DOSSIER("Archives\\Fvrier")

(3) L'exemple suivant cre le dossier Archives la racine du volume C :

CREER DOSSIER("C:\\Archives")

(4) L'exemple suivant chouera s'il n'existe pas dj de dossier Nouveauts la racine du volume C :

CREER DOSSIER("C:\\Nouveauts\\Images") ` INCORRECT, on ne peut pas crer deux niveaux de dossier en un seul appel

Rfrence LISTE DES DOSSIERS, Tester chemin acces.

460

4e Dimension - Langage

Selectionner dossier

Documents systme version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Selectionner dossier {(message)} Alpha Paramtre message Rsultat Type Alpha Alpha Description Titre de la fentre de slection Chemin daccs au dossier slectionn

Description La commande Selectionner dossier affiche une bote de dialogue permettant de dsigner manuellement un dossier, et de rcuprer en retour de fonction le chemin daccs complet au dossier slectionn. Note : Cette commande ne modifie pas le dossier courant de lapplication 4D. La commande Selectionner dossier affiche une bote de dialogue standard de navigation travers les volumes et les dossiers du poste. Le paramtre optionnel message permet dafficher une ligne dinformation dans la bote de dialogue (dans notre exemple, message a pour valeur "Dossier de destination ?"). Windows :

4e Dimension - Langage

461

MacOS :

L'utilisateur slectionne un dossier en cliquant sur le bouton OK (Windows) ou Slectionner (MacOS). Le chemin daccs au dossier choisi est alors retourn par la fonction. Sous Windows, la chane retourne est du type : C:\Dossier1\Dossier2\DossierSlectionn\ Sous MacOS, la chane retourne est du type : Disque:Dossier1:Dossier2:DossierSlectionn: Note MacOS : Sous MacOS, selon que le nom du dossier est slectionn ou non dans la bote de dialogue, le chemin retourn est diffrent.

4D Server : Cette fonction permet de visualiser les volumes connects aux postes clients. Il nest pas possible de lappeler depuis une procdure stocke. Si lutilisateur clique sur le bouton de slection, la variable systme OK prend la valeur 1. Si lutilisateur clique sur le bouton dannulation, OK prend la valeur 0 et la fonction retourne une chane vide. Note : Sous Windows, si lutilisateur a slectionn certains lments incorrects tels que Poste de travail, Corbeille, etc., la variable systme OK prend la valeur 0, mme si la bote de dialogue est valide.

462

4e Dimension - Langage

Exemple Lexemple suivant permet de slectionner le dossier dans lequel toutes les images de la bibliothque dimages seront enregistres :

$DossierImages:=Selectionner dossier("Slectionnez un dossier pour vos images.") LISTE IMAGES DANS BIBLIOTHEQUE (pictRefs;pictNoms) Boucle ($n;1;Taille tableau(pictNames)) $vRef:=Creer document($DossierImages+pictNoms{$n};"PICT") Si (OK=1) LIRE IMAGE DANS BIBLIOTHEQUE(pictRefs{$n};$vPictSauvegarde) ENREGISTRER IMAGE($vRef;$vPictSauvegarde) FERMER DOCUMENT($vRef) Fin de si Fin de boucle

Rfrence CREER DOSSIER, LISTE DES DOSSIERS. Variables et ensembles systme Si lutilisateur clique sur le bouton de slection, la variable systme OK prend la valeur 1. Si lutilisateur clique sur le bouton dannulation, OK prend la valeur 0.

4e Dimension - Langage

463

SUPPRIMER DOSSIER

Documents systme version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER DOSSIER (dossier) Paramtre dossier Type Alpha Description Nom ou chemin daccs complet du dossier supprimer

Description La commande SUPPRIMER DOSSIER supprime le dossier dont vous avez pass le nom ou le chemin daccs complet dans dossier. Seuls les dossiers vides peuvent tre supprims par cette commande. Si vous tentez de supprimer un dossier contenant des lments, lerreur -47 (Tentative de suppression dun dossier non vide) est gnre. Si vous passez dans dossier le chemin daccs dun fichier, ou une chane vide, ou encore le chemin daccs dun dossier inexistant, la commande ne fait rien et gnre lerreur -43 (Fichier non trouv). Vous pouvez intercepter ces erreurs laide dune mthode installe par la commande APPELER SUR ERREUR. Rfrence SUPPRIMER DOCUMENT.

464

4e Dimension - Langage

CREER ALIAS

Documents systme version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CREER ALIAS (cheminCible; cheminAlias) Paramtre cheminCible cheminAlias Type Alpha Alpha Description Nom ou chemin daccs de la cible de lalias/du raccourci Nom ou chemin daccs complet de lalias/du raccourci crer

Description La commande CREER ALIAS cre un alias (appel raccourci sous Windows) du fichier ou dossier cible dsign par le paramtre cheminCible, avec le nom et lemplacement dfinis dans le paramtre cheminAlias. Vous pouvez crer un alias de tout type de document ou de dossier. Licne de lalias sera identique celle de llment cible. Elle comportera en outre une petite flche et, sous MacOS, le libell de lalias apparatra en caractres italiques. La commande naffecte pas de libell par dfaut lalias, vous devez passer un nom dans le paramtre cheminAlias. Si vous passez uniquement un nom dans ce paramtre, lalias est cr dans le dossier actif courant (gnralement, le dossier contenant le fichier de structure de la base). Note : Sous Windows, les raccourcis sont des fichiers dont lextension est .LNK. Si vous ne passez pas cette extension, la commande lajoute automatiquement. Si vous passez une chane vide dans cheminCible, la commande ne fait rien. Exemple Votre base gnre des fichiers texte intituls RapportNumro, stocks dans le dossier de la base. Vous souhaitez permettre lutilisateur de crer des raccourcis vers ces rapports et de les stocker o il le souhaite : `Mthode CREER_RAPPORT C_TEXTE($vtRapport) C_ALPHA(250;$vtChemin) C_ALPHA(80;$vaNom) C_HEURE(vDoc) C_ENTIER($NumRapport) $vTRapport:=... `Edition du rapport $NumRapport:=... `Calcul du numro du rapport $vaNom:="Rapport"+Chaine($NumRapport)+".txt" vDoc:=Creer document($vaNom)

`Nom du fichier

4e Dimension - Langage

465

Si (OK=1) ENVOYER PAQUET(vDoc;$vTRapport) FERMER DOCUMENT(vDoc) `Ajout de lalias CONFIRMER("Crer un alias pour ce rapport ?) Si (OK=1) $vtChemin:=Selectionner dossier ("O souhaitez-vous crer lalias ?") Si (OK=1) CREER ALIAS ($vaNom;$vtChemin+$vaNom) Fin de si Fin de si Fin de si

Rfrence RESOUDRE ALIAS.

466

4e Dimension - Langage

RESOUDRE ALIAS

Documents systme version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

RESOUDRE ALIAS (cheminAlias; cheminCible) Paramtre cheminAlias cheminCible Type Alpha Alpha Description Nom ou chemin daccs complet de lalias/ du raccourci Nom ou chemin daccs complet de la cible de lalias/du raccourci

Description La commande RESOUDRE ALIAS retourne le chemin daccs complet du fichier ou dossier cible dun alias (appel raccourci sous Windows). Vous passez dans cheminAlias le nom ou le chemin daccs complet de lalias. Aprs lexcution de la commande, la variable cheminCible contient le chemin daccs complet du fichier ou dossier cible de lalias. Note : Sous Windows, les raccourcis sont des fichiers dont lextension est .LNK. Si vous ne passez pas cette extension, la commande lajoute automatiquement. Rfrence CREER ALIAS.

4e Dimension - Langage

467

LISTE DES VOLUMES

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LISTE DES VOLUMES (volumes) Paramtre volumes Type Tableau Description Noms des volumes actuellement monts

Description LISTE DES VOLUMES remplit le tableau volumes, de type Texte ou Alpha, avec les noms des volumes dfinis (Windows) ou monts (MacOS) sur votre machine. Sous MacOS, elle retourne la liste des volumes visibles au niveau du Finder. En revanche, sous Windows, elle retourne la liste des volumes couramment dfinis, mme si le volume n'est pas physiquement prsent (par exemple le volume "A:\" sera retourn mme s'il n'y a pas de disquette dans le lecteur). Exemple A l'aide de la zone de dfilement taVolumes, vous voulez afficher la liste des volumes dfinis ou monts sur votre machine : Au cas ou : (Evenement formulaire=Sur chargement) TABLEAU ALPHA(31;taVolumes;0) LISTE DES VOLUMES(taVolumes) ` ... Fin de cas Rfrence LISTE DES DOCUMENTS, LISTE DES DOSSIERS, PROPRIETES DU VOLUME.

468

4e Dimension - Langage

PROPRIETES DU VOLUME

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

PROPRIETES DU VOLUME (volume; taille; utilis; libre) Paramtre volume taille utilis libre Type Alpha Numrique Numrique Numrique Description Nom du volume Taille du volume exprime en octets Place utilise sur le volume exprime en octets Place libre sur le volume exprime en octets

Description La commande PROPRIETES DU VOLUME retourne la taille, la place utilise et la place libre sur le volume dont le nom est pass dans volume. Ces valeurs sont exprimes en octets. Note : Si volume indique un volume distant non mont, la variable OK prend la valeur 0 et les trois paramtres retournent -1. Exemple Votre application comprend des oprations par lots qui sont excutes la nuit ou pendant le week-end. Ces oprations stockent des fichiers temporaires sur disque. Pour que cette mthode soit aussi autonome et souple que possible, vous crivez une routine qui va automatiquement chercher et utiliser le premier volume ayant de la place disponible pour les fichiers temporaires. Voici la mthode : ` Mthode projet Chercher volume pour place ` Chercher volume pour place ( Reel ) -> Alpha ` Chercher volume pour place ( Place ncessaire en octets ) -> Nom du volume ou chane vide C_ALPHA(31;$0) C_ALPHA(255;$vaNomDoc) C_ENTIER LONG($vlNbVolumes;$vlVolume) C_REEL($1;$vlTaille;$vlUtilis;$vlLibre) C_HEURE($vhDocRef) ` Initialiser le rsultat de la fonction $0:="" ` Protger les oprations d'entre/sortie par une mthode d'interception d'erreur APPELER SUR ERREUR("METHODE ERREUR")

4e Dimension - Langage

469

` Obtenir la liste des volumes TABLEAU ALPHA(31;$taVolumes;0) gErreur:=0 LISTE DES VOLUMES($taVolumes) Si (gErreur=0) ` Si nous sommes sous Windows, ignorer les deux lecteurs de disquettes Si (Sous Windows ) $vlVolume:=Chercher dans tableau($taVolumes;"A:\") Si ($vlVolume>0) SUPPRIMER LIGNES($taVolumes;$vlVolume) Fin de si $vlVolume:=Chercher dans tableau($taVolumes;"B:\") Si ($vlVolume>0) SUPPRIMER LIGNES($taVolumes;$vlVolume) Fin de si Fin de si $vlNbVolumes:=Taille tableau($taVolumes) ` Pour chaque volume Boucle ($vlVolume;1;$vlNbVolumes) ` Obtenir la taille, la place utilise et la place libre gErreur:=0 PROPRIETES DU VOLUME($taVolumes{$vlVolume};$vlTaille;$vlUtilis;$vlLibre) Si (gErreur=0) ` Est-ce que la place libre est suffisante (plus 32K) ? Si ($vlLibre>=($1+32768)) ` Si oui, vrifier que le volume n'est pas verrouill... $vaNomDoc:=$taVolumes{$vlVolume}+Caractere(Symbole sparateur ) +"XYZ"+Chaine(Hasard)+".TXT" $vhDocRef:=Creer document($vaNomDoc) Si (OK=1) FERMER DOCUMENT($vhDocRef) SUPPRIMER DOCUMENT($vaNomDoc) ` Si tout est ok, retourner le nom du volume $0:=$taVolumes{$vlVolume} $vlVolume:=$vlNbVolumes+1 Fin de si Fin de si Fin de si Fin de boucle Fin de si APPELER SUR ERREUR("")

470

4e Dimension - Langage

Lorsque cette mthode projet est ajoute votre application, vous pouvez crire : $vaVolume:=Chercher volume pour place (100*1024*1024) Si ($vaVolume#"") ` Continuer Sinon ALERTE("Un volume avec au moins 100 Mo d'espace libre est ncessaire !") Fin de si Rfrence LISTE DES VOLUMES.

4e Dimension - Langage

471

LISTE DES DOSSIERS

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LISTE DES DOSSIERS (cheminAccs; dossiers) Paramtre cheminAccs dossiers Type Alpha Tableau Description Chemin d'accs de volume, rpertoire ou dossier Noms des dossiers situs cet endroit

Description La commande LISTE DES DOSSIERS remplit le tableau de type Texte ou Alpha dossiers avec les noms des dossiers (rpertoires sous Windows) situs l'endroit que vous avez indiqu avec le paramtre cheminAccs. Note : Vous devez passer un chemin d'accs absolu dans le paramtre cheminAccs. S'il n'y pas de dossier cet endroit, la commande retourne un tableau vide. Si le chemin d'accs que vous avez pass dans cheminAccs est invalide, LISTE DES DOSSIERS gnre une erreur de gestionnaire de fichiers que vous pouvez intercepter l'aide d'une mthode installe par APPELER SUR ERREUR. ATTENTION : La longueur maximum du paramtre cheminAccs est de 255 caractres. Si vous passez un chemin d'accs avec un nombre de caractres suprieur 255, il sera tronqu et une erreur de gestionnaire de fichier sera gnre. Rfrence LISTE DES DOCUMENTS, LISTE DES VOLUMES.

472

4e Dimension - Langage

LISTE DES DOCUMENTS

Documents systme version 6.0

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LISTE DES DOCUMENTS (cheminAccs; documents) Paramtre cheminAccs documents Type Alpha Tableau Description Chemin d'accs de volume ou de dossier Nom des documents situs cet endroit

Description La commande LISTE DES DOCUMENTS remplit le tableau de type Texte ou Alpha documents avec les noms des documents situs l'endroit que vous avez indiqu avec le paramtre cheminAccs. Note : Vous devez passer un chemin d'accs absolu dans le paramtre cheminAccs. S'il n'y pas de document cet endroit, la commande retourne un tableau vide. Si le chemin d'accs que vous avez pass dans cheminAccs est invalide, LISTE DES DOCUMENTS gnre une erreur de gestionnaire de fichier que vous pouvez intercepter l'aide d'une mthode installe par APPELER SUR ERREUR. Attention : La longueur maximum du paramtre cheminAccs est 255 caractres. Si vous passez un chemin d'accs avec un nombre de caractres suprieur 255, il sera tronqu et une erreur de gestionnaire de fichiers du systme est gnre. Rfrence LISTE DES DOSSIERS, LISTE DES VOLUMES.

4e Dimension - Langage

473

ASSOCIER TYPES FICHIER

Documents systme version 5.5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ASSOCIER TYPES FICHIER (macOS; windows; contexte) Paramtre macOS windows contexte Type Alpha Alpha Alpha Description Type de fichier MacOS (4 caractres) Extension de fichier Windows (1 3 caractres) Chane affiche dans la liste droulante des types de fichiers dans la bote de dialogue d'ouverture de fichiers sous Windows

Description ASSOCIER TYPES FICHIER vous permet d'associer une extension de fichier Windows un type de fichier MacOS. Il suffit d'appeler cette routine une fois seulement pour associer des types de fichier dans une session de travail entire avec une base. Une fois que vous l'avez appele, les commandes Ajouter a document, Creer document, Creer fichier ressources et Ouvrir fichier ressources, lorsqu'elle sont excutes sous Windows, vont automatiquement substituer l'extension de fichier Windows au type de fichier MacOS que vous avez pass en paramtre cette routine. Dans le paramtre macOS, passez un type de fichier Macintosh de 4 caractres. Si vous ne passez pas une chane valide reprsentant un type de fichier, la commande ne fait rien et gnre une erreur. Dans le paramtre windows, passez une extension de fichier Windows de 1 3 caractres. Si vous ne passez pas une chane valide reprsentant une extension de fichier, la commande ne fait rien et gnre une erreur. Dans le paramtre contexte, passez la chane qui sera affiche dans le menu droulant des types de fichiers dans la bote de dialogue d'ouverture de fichiers sous Windows. La chane contexte est limite 32 caractres ; tout caractre supplmentaire est ignor. IMPORTANT: Une fois que vous avez associ une extension de fichier Windows un type de fichier MacOS, vous ne pouvez pas modifier ou supprimer cette association dans la mme session de travail. Si vous avez besoin de modifier l'association pendant le dveloppement d'une application 4D, il faut rouvrir la base et excuter de nouveau la commande.

474

4e Dimension - Langage

Exemple La ligne de code suivante (elle peut faire partie de la mthode base Sur ouverture) associe les fichiers de type MS-Word (sous MacOS WDBN) l'extension de fichier Windows .DOC :

ASSOCIER TYPES FICHIER ("WDBN";"DOC";"Documents Word")

Une fois cette ligne excute, le code suivant n'affiche que des documents Word dans la bote de dialogue d'ouverture de fichiers sous Windows et MacOS : $DocRf:=Ouvrir document("";"WDBN") Si (OK=1) ` ... Fin de si Rfrence Ajouter a document, Creer document, Creer fichier ressources, Ouvrir fichier ressources, Ouvrir fichier ressources.

4e Dimension - Langage

475

PROPRIETES DOCUMENT

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

PROPRIETES DOCUMENT (document; verrouill; invisible; cr le; cr ; modifi le; modifi ) Paramtre document verrouill invisible cr le cr modifi le modifi Type Alpha Boolen Boolen Date Heure Date Heure Description Nom du document Verrouill (Vrai) ou non verrouill (Faux) Invisible (Vrai) ou visible (Faux) Date de cration Heure de cration Date de la dernire modification Heure de la dernire modification

Description La commande PROPRIETES DOCUMENT retourne des informations sur le document dont le nom ou le chemin d'accs est pass dans le paramtre document. Aprs l'appel : verrouill retourne Vrai si le document est verrouill. Un document verrouill ne peut pas tre modifi. invisible retourne Vrai si le document est cach. cr le et cr retournent la date et l'heure de cration du document. modifi le et modifi retournent la date et l'heure de la dernire modification du document. Exemple Vous avez cr une base de documentation et vous voulez exporter tous les enregistrements crs dans le base vers un document sur disque. Comme la base est rgulirement mise jour, vous voulez crire un algorithme d'export qui cre ou recre chaque document sur disque si le document n'existe pas ou si l'enregistrement correspondant a t modifi depuis la dernire sauvegarde du document. Par consquent, vous devez comparer la date et l'heure de modification du document (s'il existe) avec celles de l'enregistrement correspondant.

476

4e Dimension - Langage

Pour illustrer cet exemple, nous allons utiliser la table suivante :

Plutt que de sauvegarder une date et une heure dans chaque enregistrement, vous pouvez stocker un "marqueur" dont la valeur exprime le nombre de secondes coules depuis une date antrieure arbitraire (dans cet exemple, le 1er janvier 1995 00:00:00) ainsi que la date et l'heure de la sauvegarde de l'enregistrement. Dans notre exemple, le champ [Documents]Marqueur cration contient le marqueur de cration de l'enregistrement et le champ [Documents]Marqueur modification contient le marqueur de la dernire modification de l'enregistrement. La mthode projet marqueurTemps suivante calcule le marqueur de temps par rapport une date et une heure spcifiques ou par rapport la date et l'heure courantes si aucun paramtre n'est pass : ` Mthode projet marqueurTemps ` marqueurTemps { ( Date ; Heure ) } -> Entier long ` marqueurTemps { ( Date ; Heure ) } -> Nombre de secondes depuis le 01/01/1995 C_DATE($1;$vdDate) C_HEURE($2;$vhTime) C_ENTIER LONG($0) Si (Nombre de parametres=0) $vdDate:=Date du jour $vhTime:=Heure courante Sinon $vdDate:=$1 $vhTime:=$2 Fin de si $0:=(($vdDate-!01/01/95!)*86400)+$vhTime Note : Avec cette mthode, vous pouvez encoder toutes les dates et les heures situes entre le 01/01/95 00:00:00 et le 19/01/2063 03:14:07, ce qui reprsente l'intervalle de donnes exploitables par un entier long (de 0 2^31 moins 1).

4e Dimension - Langage

477

A l'inverse, les mthodes projet Marqueur vers date et Marqueur vers heure vous permettent d'extraire la date et l'heure stockes dans un marqueur : ` Mthode projet Marqueur vers date ` Marqueur vers date ( Entier long ) -> Date ` Marqueur vers date ( Marqueur ) -> Date extraite C_DATE($0) C_ENTIER LONG($1) $0:=!01/01/95!+($1\86400) ` Mthode projet Marqueur vers heure ` Marqueur vers heure ( Entier long ) -> Heure ` Marqueur vers heure ( Marqueur ) -> Heure extraite C_HEURE($0) C_ENTIER LONG($1) $0:=Heure(Chaine heure(00:00:00+($1%86400))) Pour vous assurer que les marqueurs des enregistrements sont correctement mis jour, quelle que soit la manire dont ils sont crs ou modifis, il suffit de faire appliquer cette rgle par le trigger de la table [Documents]: ` Trigger de la table [Documents] Au cas ou : (Evenement moteur=Sauvegarde nouvel enreg) [Documents]Marqueur cration:=marqueurTemps [Documents]Marqueur modification:=marqueurTemps : (Evenement moteur=Sauvegarde enregistrement) [Documents]Marqueur modification:=marqueurTemps Fin de cas

478

4e Dimension - Langage

Une fois que cela est implment dans votre base, il suffit d'crire la mthode projet CREER DOCUMENTATION liste ci-dessous. Nous utilisons PROPRIETES DOCUMENT et CHANGER PROPRIETES DOCUMENT pour grer la date et l'heure de cration et de modification des documents. ` Mthode projet CREER DOCUMENTATION C_ALPHA(255;$vsPath;$vsDocPathName;$vsDocName) C_ENTIER LONG($vlDoc) C_BOOLEEN($vbOnWindows;$vbDoIt;$vbLocked;$vbInvisible) C_HEURE($vhDocRef;$vhCreatedAt;$vhModifiedAt) C_DATE($vdCreatedOn;$vdModifiedOn) Si (Type application=4D Client) ` Si 4D Client est utilis, sauvegarder les documents localement ` c'est--dire sur le poste client o se trouve 4D Client $vsPath:=Nom long vers chemin d'accs (Type application) Sinon ` Sinon, sauvegarder les documents l o se trouve le fichier de donnes $vsPath:=Nom long vers chemin d'accs (Fichier donnees) Fin de si ` Stocker les documents dans un rpertoire nomm arbitrairement "Documentation" $vsPath:=$vsPath+"Documentation"+Caractere(Symbole sparateur) ` Si ce rpertoire n'existe pas, le crer Si (Tester chemin acces ($vsPath) # Est un rpertoire) CREER DOSSIER($vsPath) Fin de si ` Etablir la liste des documents existants ` car nous allons devoir supprimer ceux qui sont obsoltes, autrement dit ` ceux dont les enregistrements correspondants ont t supprims. TABLEAU ALPHA(255;$asDocument;0) LISTE DES DOCUMENTS($vsPath;$asDocument) ` Slection de tous les enregistrements de la table [Documents] TOUT SELECTIONNER([Documents]) ` Pour chaque enregistremnt $vlNbRecords:=Enregistrements trouves([Documents]) $vlNbDocs:=0 $vbOnWindows:=Sous Windows Boucle ($vlDoc;1;$vlNbRecords) ` Supposons que nous aurons (re)crer le document sur disque $vbDoIt:=Vrai ` Calcul du nom et du chemin d'accs au document $vsDocName:="DOC"+Chaine([Documents]Numro;"00000") $vsDocPathName:=$vsPath+$vsDocName

4e Dimension - Langage

479

` Est-ce que ce document existe dj ? Si (Tester chemin acces($vsDocPathName+".HTM")=Est un document) ` Si oui, retirer le document de la liste des documents ` qui peuvent tre supprims $vlElem:=Chercher dans tableau($asDocument;$vsDocName+".HTM") Si ($vlElem>0) SUPPRIMER LIGNES($asDocument;$vlElem) Fin de si ` Est-ce que le document a t stock aprs la dernire modification de ` l'enregistrement? PROPRIETES DOCUMENT($vsDocPathName+".HTM";$vbLocked;$vbInvisible; $vdCreatedOn;$vhCreatedAt;$vdModifiedOn;$vhModifiedAt) Si (marqueurTemps ($vdModifiedOn;$vhModifiedAt)>=[Documents]Marqueur modification) ` Si oui, nous n'avons pas besoin de recrer le document $vbDoIt:=Faux Fin de si Sinon ` Le document n'existe pas, mettre ces deux variables zro, pour que ` nous sachions que nous devrons les traiter avant de fixer les proprits ` finales du document $vdModifiedOn:=!00/00/00! $vhModifiedAt:=00:00:00 Fin de si ` Avons-nous besoin de (re)crer le document? Si ($vbDoIt) ` Si oui, incrmenter le nombre de documents mis jour $vlNbDocs:=$vlNbDocs+1 ` Supprimer le document s'il existe dj SUPPRIMER DOCUMENT($vsDocPathName+".HTM") ` Et le recrer Si ($vbOnWindows) $vhDocRef:=Creer document($vsDocPathName;"HTM") Sinon $vhDocRef:=Creer document($vsDocPathName+".HTM") Fin de si Si (OK=1) ` ... ` Ecrivons ici le contenu du document ` ... FERMER DOCUMENT($vhDocRef)

480

4e Dimension - Langage

Si ($vdModifiedOn=!00/00/00!) ` Le document n'existait pas, fixer les valeurs correctes pour ` la date et l'heure de modification $vdModifiedOn:=Date du jour $vhModifiedAt:=Heure courante Fin de si ` Changer les proprits du document de telle manire que sa date et son ` heure de cration soit gales celles de l'enregistrement correspondant CHANGER PROPRIETES DOCUMENT($vsDocPathName+".HTM";$vbLocked; $vbInvisible;Marqueur vers date ([Documents]Marqueur cration); Marqueur vers heure([Documents]Marqueur cration);$vdModifiedOn;$vhModifiedAt) Fin de si Fin de si ` Juste pour savoir ce qui se passe CHANGER TITRE FENETRE("Traitement du document "+Chaine($vlDoc)+" sur " +Chaine($vlNbRecords)) ENREGISTREMENT SUIVANT([Documents]) Fin de boucle ` Suppression des documents obsoltes, c'est--dire ceux ` qui sont toujours dans le tableau $asDocument Boucle ($vlDoc;1;Taille tableau($asDocument)) SUPPRIMER DOCUMENT($vsPath+$asDocument{$vlDoc}) CHANGER TITRE FENETRE("Suppression du document obsolte: "+Caractere(34)+ $asDocument{$vlDoc}+Caractere(34)) Fin de boucle ` C'est la fin ALERTE("Nombre de documents traits : "+Chaine($vlNbRecords)+Caractere(13)+ "Nombre de documents mis jour : "+Chaine($vlNbDocs)+Caractere(13)+ "Nombre de documents supprims : "+Chaine(Taille tableau($asDocument))) Rfrence CHANGER PROPRIETES DOCUMENT, Createur document, Type document.

4e Dimension - Langage

481

CHANGER PROPRIETES DOCUMENT

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER PROPRIETES DOCUMENT (document; verrouill; invisible; cr le; cr ; modifi le; modifi ) Paramtre document verrouill invisible cr le cr modifi le modifi Type Alpha Boolen Boolen Date Heure Date Heure Description Nom du document ou Chemin d'accs complet au document Verrouill (Vrai) ou non verrouill (Faux) Invisible (Vrai) ou visible (Faux) Date de cration Heure de cration Date de dernire modification Heure de dernire modification

Description La commande CHANGER PROPRIETES DOCUMENT modifie certaines informations du document dont vous avez pass le nom ou le chemin d'accs dans document. Avant l'appel : Passez Vrai dans verrouill pour verrouiller le document. Un document verrouill ne peut tre modifi. Passez Faux dans verrouill pour dverrouiller un document. Passez Vrai dans invisible pour cacher le document. Passez Faux dans invisible pour rendre le document visible dans les fentres du bureau. Passez la date et l'heure de cration du document dans cr le et cr . Passez la date et l'heure de la dernire modification du document dans modifi le et modifi . L'heure et la date de cration et de dernire modification sont gres par le gestionnaire de fichiers de votre systme, chaque fois que vous crez ou modifiez un document. Cette commande vous permet de modifier ces proprits, dans des buts particuliers. Reportezvous l'exemple de la commande PROPRIETES DOCUMENT. Rfrence CHANGER CREATEUR DOCUMENT, CHANGER TYPE DOCUMENT, PROPRIETES DOCUMENT.

482

4e Dimension - Langage

LIRE ICONE DOCUMENT

Documents systme version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE ICONE DOCUMENT (cheminDoc; icne{; taille}) Paramtre cheminDoc icne taille Type Alpha Image Entier long Description Nom ou chemin daccs du fichier duquel obtenir licne ou chane vide pour afficher la bote de dialogue douverture de fichier Champ ou variable image Icne du document Taille de licne (en pixels)

Description La commande LIRE ICONE DOCUMENT retourne dans le champ ou la variable image 4D icne, licne du fichier dont vous avez pass le nom ou le chemin daccs complet dans cheminDoc. Le fichier peut tre de tout type (document, excutable, raccourci ou alias...). Cependant, la commande ne retourne pas les icnes de dossiers. Passez dans cheminDoc le chemin daccs absolu du fichier dont vous souhaitez rcuprer licne. Vous pouvez passer uniquement le nom du fichier ou un chemin daccs relatif, dans ce cas le fichier doit se trouver dans le dossier courant de la base (gnralement, le dossier contenant le fichier de structure de la base). Si vous passez une chane vide dans cheminDoc, la bote de dialogue standard douverture de fichiers apparat, permettant lutilisateur de dsigner un fichier. Une fois la bote de dialogue valide, la variable systme Document contient le chemin daccs complet du document slectionn. Passez dans le paramtre icne un champ ou une variable image 4D. Aprs lexcution de la commande, ce paramtre contient licne du fichier (au format PICT). Le paramtre optionnel taille vous permet dindiquer les dimensions de limage que vous souhaitez obtenir. La valeur du paramtre correspond la longueur dun ct du carr dans lequel limage sera incluse. Gnralement, les icnes sont dfinies en 32x32 pixels (grande icne) ou 16x16 pixels (petite icne). Si vous passez 0 ou omettez le paramtre, la commande retourne licne dans sa plus grande taille disponible.

4e Dimension - Langage

483

Taille document

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Taille document (document{; *}) Numrique Paramtre document * Type DocRef | Alpha Description Numro de rfrence de document ou Nom de document MacOS uniquement : - si omis, taille de la data fork - si pass, taille de la resource fork Taille (en octets) de document

Rsultat

Numrique

Description La commande Taille document retourne la taille, exprime en octets, d'un document. Si le document est ouvert, passez son numro de rfrence dans document. Si le document n'est pas ouvert, passez son nom ou son chemin d'accs dans document. Sous MacOS, si vous ne passez pas le paramtre optionnel *, la taille de la data fork est retourne. Si vous passez le paramtre optionnel *, la taille de la resource fork est retourne. Rfrence CHANGER POSITION DANS DOCUMENT, CHANGER TAILLE DOCUMENT, Position dans document.

484

4e Dimension - Langage

CHANGER TAILLE DOCUMENT

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER TAILLE DOCUMENT (document; taille) Paramtre document taille Type DocRef Numrique Description Numro de rfrence de document Nouvelle taille (en octets) de document

Description La commande CHANGER TAILLE DOCUMENT fixe la taille d'un document au nombre d'octets que vous avez pass dans taille. Le document doit avoir t ouvert au pralable. Vous passez son numro de rfrence dans document. Sous MacOS, c'est la taille de la data fork du document qui est modifie. Rfrence CHANGER POSITION DANS DOCUMENT, Position dans document, Taille document.

4e Dimension - Langage

485

Position dans document

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Position dans document (docRef) Numrique Paramtre docRef Rsultat Type DocRef Numrique Description Numro de rfrence de document Position dans le fichier (exprime en octets) partir du dbut du fichier

Description Cette commande ne fonctionne qu'avec un document dj ouvert, dont vous avez pass le numro de rfrence dans le paramtre document. Position dans document retourne la position, partir du dbut du document, laquelle la prochaine lecture (RECEVOIR PAQUET) ou criture (ENVOYER PAQUET) aura lieu. Rfrence CHANGER POSITION DANS DOCUMENT, ENVOYER PAQUET, RECEVOIR PAQUET.

486

4e Dimension - Langage

CHANGER POSITION DANS DOCUMENT

Documents systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER POSITION DANS DOCUMENT (docRef; offset{; ancre}) Paramtre docRef offset ancre Type RefDoc Numrique Entier Description Numro de rfrence de document Position dans fichier (exprime en octets) 1 = Par rapport au dbut du fichier 2 = Par rapport la fin du fichier 3 = Par rapport la position courante

Description Cette commande ne fonctionne qu'avec un document dj ouvert, dont vous avez pass le numro de rfrence dans le paramtre docRef. CHANGER POSITION DANS DOCUMENT dfinit la position que vous passez dans offset comme tant celle laquelle la prochaine lecture (RECEVOIR PAQUET) ou criture (ENVOYER PAQUET) aura lieu. Si vous omettez le paramtre optionnel ancre, la position est dfinie par rapport au dbut du document. Sinon, vous pouvez passer dans le paramtre ancre une des valeurs listes cidessus. En fonction de l'ancre dfinie, vous pouvez passer des valeurs positives ou ngatives dans le paramtre offset. Rfrence ENVOYER PAQUET, Position dans document, RECEVOIR PAQUET.

4e Dimension - Langage

487

488

4e Dimension - Langage

14 ________________________ Enregistrements

4e Dimension - Langage

489

490

4e Dimension - Langage

AFFICHER ENREGISTREMENT

Enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

AFFICHER ENREGISTREMENT {(table)} Paramtre table Type Table Description Table de laquelle afficher l'enregistrement courant ou Table par dfaut si ce paramtre est omis

Description AFFICHER ENREGISTREMENT affiche l'enregistrement courant de table dans le formulaire entre courant. L'enregistrement reste affich jusqu' ce qu'un vnement provoque un redessinement de la fentre. Cet vnement peut tre l'excution d'un AJOUTER ENREGISTREMENT, le retour au formulaire entre ou la barre de menus. AFFICHER ENREGISTREMENT ne fait rien s'il n'y a pas d'enregistrement courant. AFFICHER ENREGISTREMENT est souvent utilis pour afficher des messages de progression personnaliss. Cette commande peut galement servir gnrer un "slide show" automatique. Si une mthode formulaire existe, un vnement Sur chargement est gnr. Exemple L'exemple suivant affiche une srie d'enregistrements sous forme de slide show : TOUT SELECTIONNER([Dmo]) ` Slection de tous les enregistrements FORMULAIRE ENTREE ([Dmo]; "Affichage") ` Dsignation du formulaire utiliser Boucle ($i; 1; Enregistrements trouves([Dmo])) ` Boucle sur tous les enregistrements AFFICHER ENREGISTREMENT([Dmo]) ` Afficher un enregistrement ENDORMIR PROCESS (Numero du process courant; 180) ` 3 secondes de pause ENREGISTREMENT SUIVANT([Dmo]) ` Passage l'enregistrement suivant Fin de boucle

Rfrence MESSAGE.

4e Dimension - Langage

491

CREER ENREGISTREMENT

Enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CREER ENREGISTREMENT {(table)} Paramtre table Type Table Description Table dans laquelle crer un enregistrement ou Table par dfaut si ce paramtre est omis

Description CREER ENREGISTREMENT cre un nouvel enregistrement vide pour la table table, mais ne l'affiche pas l'cran. Vous devez utiliser la commande AJOUTER ENREGISTREMENT pour crer un nouvel enregistrement et l'afficher dans un formulaire entre. Utilisez CREER ENREGISTREMENT plutt que AJOUTER ENREGISTREMENT lorsque les valeurs de l'enregistrement sont entres par programmation. Le nouvel enregistrement devient la fois l'enregistrement courant et la slection courante (la slection courante ne contient qu'un enregistrement). L'enregistrement est cr uniquement en mmoire et doit tre sauvegard l'aide de STOCKER ENREGISTREMENT. Si vous changez d'enregistrement courant (par exemple la suite d'une recherche) avant la sauvegarde, l'enregistrement cr est perdu. Exemple Cet exemple archive les enregistrements datant de plus de 30 jours. L'opration est ralise par la cration d'enregistrements dans une table d'archive. Une fois l'opration termine, les enregistrements archivs sont supprims de la table [Comptes] : ` Recherche des enregistrements datant de plus de 30 jours CHERCHER ([Comptes]; [Comptes]Saisie < (Date du jour 30)) Boucle ($vlRecord; 1; Enregistrements trouves([Comptes])) CREER ENREGISTREMENT ([Archives]) ` Cration d'un nouvel enregistrement [Archive]Numro := [Comptes]Number ` Copie des champs dans l'archive [Archive]Saisie := [Comptes]Saisie [Archive]Montant := [Comptes]Montant STOCKER ENREGISTREMENT ([Archive]) ` Sauvegarde de l'enregistrement d'archive ENREGISTREMENT SUIVANT ([Comptes]) ` Passage l'enregistrement suivant Fin de boucle SUPPRIMER SELECTION([Comptes]) ` Suppression des enregistrements

Rfrence STOCKER ENREGISTREMENT.

492

4e Dimension - Langage

DUPLIQUER ENREGISTREMENT

Enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DUPLIQUER ENREGISTREMENT {(table)} Paramtre table Type Table Description Table de l'enregistrement dupliquer ou Table par dfaut si ce paramtre est omis

Description DUPLIQUER ENREGISTREMENT duplique l'enregistrement courant de table. Ce nouvel enregistrement devient l'enregistrement courant. S'il n'y a pas d'enregistrement courant, DUPLIQUER ENREGISTREMENT ne fait rien. Appelez la commande STOCKER ENREGISTREMENT pour sauvegarder le nouvel enregistrement. DUPLIQUER ENREGISTREMENT peut tre excut pendant la saisie des donnes. Vous pouvez donc dupliquer l'enregistrement qui est affich l'cran. N'oubliez pas que vous devez d'abord appeler STOCKER ENREGISTREMENT si vous voulez sauvegarder les modifications apportes l'enregistrement original. Rfrence STOCKER ENREGISTREMENT.

4e Dimension - Langage

493

Nouvel enregistrement

Enregistrements version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nouvel enregistrement {(table)} Boolen Paramtre table Rsultat Type Table Boolen Description Table de lenregistrement examiner ou Table par dfaut si ce paramtre est omis Vrai si lenregistrement est en cours de cration, Faux sinon

Description La commande Nouvel enregistrement retourne Vrai lorsque lenregistrement courant de table est en cours de cration et na pas encore t sauvegard dans le process courant. Note de compatibilit : Il est possible dobtenir la mme information avec la commande existante Numero enregistrement, en testant si elle retourne -3. Toutefois, il est vivement conseill dutiliser dans ce cas Nouvel enregistrement plutt que Numero enregistrement. En effet, la commande Nouvel enregistrement assure une meilleure compatibilit avec les futures versions de 4e Dimension. Exemple Les deux instructions suivantes sont identiques, la seconde est conseille pour que le code reste compatible avec les prochaines versions de 4D : Si (Numero enregistrement([Table])=-3) `Dconseill ` ... Fin de si

Si (Nouvel enregistrement([Table])) `Conseill ` ... Fin de si

Rfrence Enregistrement modifie, Numero enregistrement.

494

4e Dimension - Langage

Enregistrement modifie

Enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Enregistrement modifie {(table)} Boolen Paramtre table Type Table Description Table de laquelle tester si l'enregistrement courant a t modifi ou Table par dfaut si ce paramtre est omis L'enregistrement a t modifi (Vrai) ou L'enregistrement n'a pas t modifi (Faux)

Rsultat

Boolen

Description Enregistrement modifie retourne Vrai si l'enregistrement courant de table a t modifi et non encore stock. Sinon, elle retourne Faux. Cette fonction vous permet de dterminer rapidement s'il faut stocker l'enregistrement. Dans les formulaires entre, vous pouvez effectuer le test avant d'aller l'enregistrement suivant. Cette fonction retourne toujours Vrai pour un nouvel enregistrement. Exemples L'exemple suivant montre une utilisation typique de Enregistrement modifie :

Si (Enregistrement modifie ([Clients])) STOCKER ENREGISTREMENT ([Clients]) Fin de si

Rfrence Ancien, Modifie, STOCKER ENREGISTREMENT.

4e Dimension - Langage

495

Enregistrement charge

Enregistrements version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Enregistrement charge {(table)} Boolen Paramtre table Rsultat Type Table Boolen Description Table de lenregistrement examiner ou Table par dfaut si ce paramtre est omis Vrai si lenregistrement est charg, Faux sinon

Description La commande Enregistrement charge retourne Vrai si lenregistrement courant de table est charg dans le process en cours. Exemple Au lieu dutiliser les actions automatiques Enregistrement suivant ou Enregistrement prcdent, vous voulez crire dans les mthodes de boutons sans action des instructions spcifiant que le bouton Suivant affiche le dbut de la slection si la fin de la slection est atteinte et que le bouton Prcdent affiche la fin de la slection si le dbut est atteint. ` Mthode objet du bouton sans action "PRCDENT" Si (Evenement formulaire=Sur clic) ENREGISTREMENT PRECEDENT([Groupe]) Si (Non(Enregistrement charge([Groupe]))) ALLER DANS SELECTION([Groupe];Enregistrements trouves([Groupe])) `Aller au dernier enregistrement de la slection Fin de si Fin de si ` Mthode objet du bouton sans action "SUIVANT" Si (Evenement formulaire=Sur clic) ENREGISTREMENT SUIVANT([Groupe]) Si (Non(Enregistrement charge([Groupe]))) ALLER DANS SELECTION([Groupe];1) `Aller au premier enregistrement de la slection Fin de si Fin de si

496

4e Dimension - Langage

STOCKER ENREGISTREMENT

Enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

STOCKER ENREGISTREMENT {(table)} Paramtre table Type Table Description Table de l'enregistrement stocker ou Table par dfaut si ce paramtre est omis

Description STOCKER ENREGISTREMENT sauvegarde l'enregistrement courant de table pour le process courant. S'il n'y a pas d'enregistrement courant, la commande est ignore. Vous pouvez utiliser STOCKER ENREGISTREMENT pour sauvegarder un enregistrement cr ou modifi par programmation. Lorsqu'un enregistrement a t modifi puis valid par un utilisateur dans un formulaire, il n'est pas ncessaire de le sauvegarder l'aide de STOCKER ENREGISTREMENT. En revanche, un enregistrement modifi puis annul par l'utilisateur peut malgr tout tre sauvegard avec STOCKER ENREGISTREMENT. L'utilisation de STOCKER ENREGISTREMENT est ncessaire dans les cas suivants : Pour sauvegarder un enregistrement cr par les commandes CREER ENREGISTREMENT ou DUPLIQUER ENREGISTREMENT, Pour sauvegarder des donnes issues de la commande RECEVOIR ENREGISTREMENT, Pour sauvegarder un enregistrement modifi par une mthode, Pour sauvegarder un enregistrement contenant un sous-enregistrement ayant t cr ou modifi par la commande AJOUTER SOUS ENREGISTREMENT, CREER SOUS ENREGISTREMENT ou MODIFIER SOUS ENREGISTREMENT, Pendant la saisie de donnes, pour sauvegarder l'enregistrement affich avant d'appeler une commande qui change l'enregistrement courant, Pendant la saisie de donnes, pour sauvegarder l'enregistrement courant. Vous ne devez pas appeler STOCKER ENREGISTREMENT dans l'vnement formulaire Sur validation d'un enregistrement qui a t valid, sinon l'enregistrement est sauvegard deux fois.

4e Dimension - Langage

497

Exemple L'exemple suivant est une partie d'une mthode rcuprant des enregistrements d'un fichier. Dans cette partie, les enregistrements sont reus puis, si l'opration s'est correctement droule, sauvegards : ` Rception de l'enregistrement partir du disque RECEVOIR ENREGISTREMENT ([Clients]) Si (OK = 1) ` Si l'enregistrement a t correctement reu STOCKER ENREGISTREMENT ([Clients]) ` Le sauvegarder Fin de si

Rfrence CREER ENREGISTREMENT, Enregistrement verrouille, Prsentation des triggers.

498

4e Dimension - Langage

SUPPRIMER ENREGISTREMENT

Enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER ENREGISTREMENT {(table)} Paramtre table Type Table Description Table de laquelle supprimer l'enregistrement courant ou Table par dfaut si ce paramtre est omis

Description SUPPRIMER ENREGISTREMENT supprime de table l'enregistrement courant du process en cours. S'il n'y a pas d'enregistrement courant pour table dans le process, SUPPRIMER ENREGISTREMENT ne fait rien. Dans un formulaire, vous pouvez crer un bouton 'Supprimer enregistrement' et lui assigner l'action automatique correspondante, plutt que d'utiliser cette commande. Une fois que l'enregistrement est supprim, la slection courante de table est vide. La suppression d'enregistrements est une opration dfinitive et ne peut tre annule. Lorsqu'un enregistrement est supprim, son numro interne est rutilis lors de la cration de nouveaux enregistrements. Par consquent, n'utilisez pas ces numros comme identifiants de vos enregistrements si votre base permet la suppression d'enregistrements. Exemple L'exemple suivant permet de supprimer l'enregistrement d'un employ. La mthode demande l'utilisateur le numro de l'employ supprimer, recherche l'enregistrement correspondant puis le supprime : ` On rcupre un numro d'identification vCherch := Demander ("Numro de l'employ supprimer :") Si (OK = 1) CHERCHER ([Employs]; [Employs]Numro = vCherch) ` Trouver l'employ SUPPRIMER ENREGISTREMENT ([Employs]) ` Suppression de l'enregistrement Fin de si

Rfrence Enregistrement verrouille, Prsentation des triggers.

4e Dimension - Langage

499

Enregistrements dans table

Enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Enregistrements dans table {(table)} Numrique Paramtre table Type Table Description Table de laquelle retourner le nombre total d'enregistrements ou Table par dfaut si ce paramtre est omis Nombre total d'enregistrements dans table

Rsultat

Numrique

Description Enregistrements dans table retourne le nombre total d'enregistrements que contient table. Par opposition, Enregistrements trouves retourne le nombre d'enregistrements de la slection courante uniquement. Lorsque cette commande est utilise dans une transaction, les enregistrements ventuellement crs pendant la transaction sont comptabiliss. Exemple L'exemple suivant affiche une alerte indiquant le nombre d'enregistrements de la table :

ALERTE ("Il y a " + Chaine (Enregistrements dans table ([Personnes])) + " enregistrements dans la table.")

Rfrence Enregistrements trouves.

500

4e Dimension - Langage

Numero enregistrement

Enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Numero enregistrement {(table)} Numrique Paramtre table Type Table Description Table de laquelle vous souhaitez obtenir le numro de l'enregistrement courant ou Table par dfaut si ce paramtre est omis Numro d'enregistrement courant

Rsultat

Numrique

Description Numero enregistrement retourne le numro de l'enregistrement courant de table. S'il n'y a pas d'enregistrement courant, par exemple si le pointeur d'enregistrement se trouve avant ou aprs la slection courante, Numero enregistrement retourne 1. S'il s'agit d'un nouvel enregistrement qui n'a pas encore t sauvegard, Numero enregistrement retourne 3. Les numros d'enregistrements peuvent varier. Par exemple, les numros des enregistrements supprims sont rutiliss. Les numros d'enregistrements changent aussi si vous compactez votre base ou si vous faites une rparation par analyse des marqueurs d'enregistrements l'aide de 4D Util. Pendant une transaction, un enregistrement nouvellement cr a un numro d'enregistrement temporaire. Aprs la validation de la transaction, l'enregistrement recevra un numro d'enregistrement standard. Exemple L'exemple suivant sauvegarde le numro d'enregistrement courant puis cherche dans la table si un autre enregistrement a la mme valeur :

$NumEnreg := Numero enregistrement ([Personnes]) ` Obtenir le n d'enregistrement ` Est-ce que quelqu'un d'autre a le mme nom ? CHERCHER ([Personnes]; [Personnes]Nom = [Personnes]Nom) ` Afficher une alerte avec le nombre de personnes qui ont le mme nom ALERTE ("Il existe " + Chaine (Enregistrements trouves ([Personnes]) + " personnes du mme nom.") ALLER A ENREGISTREMENT ([Personnes]; $NumEnreg) ` Retour l'enregistrement original

Rfrence A propos des numros d'enregistrements, ALLER A ENREGISTREMENT, Nouvel enregistrement, Numero dans selection, Numerotation automatique.

4e Dimension - Langage

501

ALLER A ENREGISTREMENT

Enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ALLER A ENREGISTREMENT ({table; }enregistrement) Paramtre table enregistrement Type Table Numrique Description Table de l'enregistrement de destination ou Table par dfaut si ce paramtre est omis Numro renvoy par Numero enregistrement

Description ALLER A ENREGISTREMENT slectionne l'enregistrement courant de table. Le paramtre enregistrement est le numro renvoy par la fonction Numero enregistrement. Aprs l'excution de cette commande, l'enregistrement est le seul de la slection courante. Si enregistrement est infrieur au plus petit numro d'enregistrement ou suprieur au plus grand numro d'enregistrement de la base, 4e Dimension gnre un message d'erreur indiquant que le numro est hors intervalle. Si enregistrement est gal au numro d'un enregistrement supprim, la slection courante devient vide. Note : Vous ne devez pas utiliser avec cette commande les numros d'enregistrements temporaires renvoys pendant une transaction. Exemple Rfrez-vous l'exemple de Numero enregistrement. Rfrence A propos des numros d'enregistrements, Numero enregistrement.

502

4e Dimension - Langage

Numerotation automatique

Enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Numerotation automatique {(table)} Numrique Paramtre table Rsultat Type Table Numrique Description Table numroter automatiquement ou Table par dfaut si ce paramtre est omis Numro automatique

Description Numerotation automatique retourne le prochain numro automatique de table. Ce numro est unique pour chaque table. C'est une valeur qui ne se rpte pas et qui est incrmente chaque enregistrement nouvellement cr dans la table. La numrotation commence 1. Le numro retourn par cette fonction est identique celui retourn lorsque vous fixez #N comme valeur par dfaut pour un champ dans un formulaire (rfrez-vous au manuel Mode Structure de 4e Dimension pour plus d'informations sur l'affectation des valeurs par dfaut). Dans les cas suivants, il est indispensable d'utiliser la fonction Numerotation automatique plutt que #N : Si vous crez des enregistrements par l'intermdiaire d'une mthode Si la numrotation ne doit pas commencer 1 Si la numrotation doit s'incrmenter d'un nombre suprieur 1 Si le numro doit reprendre une partie d'un code Pour stocker ce numro l'aide d'une mthode, il faut crer un champ de type Entier long dans la table et y affecter la numrotation automatique. Si la numrotation doit dbuter une valeur diffrente de 1, ajoutez simplement la diffrence la fonction Numerotation automatique. Par exemple, si le numro doit commencer 1000, vous pouvez utiliser la ligne de code suivante pour affecter le numro :

[Table1]NumAuto := Numerotation automatique ([Table1]) + 999

4e Dimension - Langage

503

Exemple L'exemple suivant fait partie d'une mthode formulaire. Ces lignes de code testent s'il s'agit d'un nouvel enregistrement (si le numro de facture est gal une chane vide). Si l'enregistrement est nouveau, un numro est affect la facture. Ce numro de facture est construit avec deux informations : le numro unique et le numro de rfrence de l'utilisateur, qui tait saisi l'ouverture de la base. Le numro unique est format en tant que chane avec une longueur de cinq caractres : ` S'il s'agit d'une nouvelle facture, crer un numro de facture Si ([Factures]NumFacture = "") ` Le numro de facture est une chane qui se termine par le numro de rfrence ` de l'utilisateur [Factures]NumFacture := Chaine (Numerotation automatique; "00000") + [Factures]Utilisateur Fin de si

Rfrence A propos des numros d'enregistrements, Numero dans selection, Numero enregistrement.

504

4e Dimension - Langage

A propos des numros d'enregistrements

Enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Dans 4e Dimension, trois numros sont associs un enregistrement : Numro d'enregistrement, Numro dans la slection, Numro automatique. Numro d'enregistrement Le numro d'enregistrement est le numro physique/absolu de l'enregistrement. Ce numro est automatiquement assign chaque nouvel enregistrement et reste le mme jusqu' ce que cet enregistrement soit dtruit ou que la table soit retrie de faon permanente avec 4D Util. Les enregistrements commencent au numro zro (0). Les numros d'enregistrements ne sont pas uniques car les numros des enregistrements dtruits sont rutiliss pour de nouveaux enregistrements. Ces numros sont galement modifis lors du tri permanent de la table (avec 4D Util) et lorsque la base est rpare ou compacte. Les nouveaux enregistrements ajouts dans une transaction reoivent des numros temporaires (incrments partir du numro 18 000 000) ; ils ne reoivent des numros dfinitifs que lorsque la transaction est valide. Numro dans la slection Le numro dans la slection est la position de l'enregistrement dans la slection courante. Ce numro dpend de la slection courante. Si la slection est modifie ou trie, ce numro change aussi probablement. La numrotation dans une slection courante commence un (1). Numro automatique Le numro automatique est un numro unique, non rptable, qui peut tre assign un champ dans un enregistrement. Il n'est pas automatiquement stock chaque enregistrement. Il dmarre 1 et est incrment chaque cration d'un nouvel enregistrement. A la diffrence des numros d'enregistrements, un numro automatique n'est pas rutilis lorsque l'enregistrement est dtruit, ou lorsque la base est compacte, rpare, ou retrie de faon permanente par 4D Util. Ces numros fournissent un moyen d'attribuer un numro d'identification unique chaque enregistrement. Si un numro automatique est incrment pendant une transaction, ce numro n'est pas dcrment si la transaction est annule

4e Dimension - Langage

505

Exemples de numros d'enregistrements


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les tableaux suivants comparent le fonctionnement des diffrents numros d'enregistrements. Chaque ligne de tableau reprsente les informations d'un enregistrement. L'ordre des lignes est celui dans lequel les enregistrements seraient affichs dans un formulaire sortie. Colonne des Donnes : Les valeurs d'un champ dans chaque enregistrement. Elle contient le nom d'une personne. Colonne de Numro d'enregistrement (N Enrg) : C'est le numro absolu de l'enregistrement et qui est retourn par la fonction Numero enregistrement. Colonne de Numro dans la slection (N Slection) : C'est le numro de position dans la slection courante, qui est retourn par la fonction Numero dans selection. Colonne de Numro automatique (N Auto): C'est le numro unique de l'enregistrement, qui est retourn par la fonction Numerotation automatique. Ce numro est stock dans un champ. Aprs saisie des enregistrements : Le premier tableau prsente des enregistrements qui viennent d'tre saisis. l'ordre des enregistrements par dfaut est le numro d'enregistrement. Le numro d'enregistrement commence 0. Le numro dans la slection et le numro automatique commencent 1. Donnes Tess Terri Sabra Sam Lisa N Enrg 0 1 2 3 4 N Slection 1 2 3 4 5 N Auto 1 2 3 4 5

Note: Les enregistrements restent dans l'ordre par dfaut aprs l'appel de toute commande qui modifie la slection sans la rordonner, comme par exemple la commande de menu Tout montrer en mode Utilisation ou aprs l'excution de la commande TOUT SELECTIONNER. Aprs un tri des enregistrements : La premire partie du tableau prsente les enregistrements tris par noms. Le numro d'enregistrement reste associ l'enregistrement. Le numro dans la slection reflte la nouvelle position de l'enregistrement dans la slection trie. Le numro automatique ne change jamais puisqu'il est assign la cration de chaque enregistrement et stock avec lui.

506

4e Dimension - Langage

Donnes Lisa Sabra Sam Terri Tess

N Enrg 4 2 3 1 0

N Slection 1 2 3 4 5

N Auto 5 3 4 2 1

Aprs la suppression d'un enregistrement : Voici le tableau aprs la destruction de l'enregistrement de Sam. Seuls les numros dans la slection ont chang (les numros dans la slection refltent l'ordre d'affichage des enregistrements). Donnes Lisa Sabra Terri Tess N Enrg 4 2 1 0 N Slection 1 2 3 4 N Auto 5 3 2 1

Aprs l'ajout d'un enregistrement : Voici le tableau aprs l'ajout de l'enregistrement Liz. Un nouvel enregistrement est ajout la fin de la slection courante. Le numro d'enregistrement de Sam est rutilis pour le nouvel enregistrement. Le numro automatique a t incrment de 1. Donnes Tess Terri Sabra Lisa Liz N Enrg 0 1 2 4 3 N Slection 1 2 3 4 5 N Auto 1 2 3 5 6

Aprs un changement de slection et un tri : Le tableau qui suit montre les enregistrements aprs rduction de la slection trois enregistrements qui sont ensuite tris. Seuls le numro dans la slection change. Donnes Sabra Liz Terri N Enrg 2 3 1 N Slection 1 2 3 N Auto 3 6 2

Rfrence Numero dans selection, Numero enregistrement, Numerotation automatique.

4e Dimension - Langage

507

EMPILER ENREGISTREMENT

Enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

EMPILER ENREGISTREMENT {(table)} Paramtre table Type Table Description Table de laquelle empiler l'enregistrement courant ou Table par dfaut si ce paramtre est omis

Description EMPILER ENREGISTREMENT "empile" une copie de l'enregistrement courant de table (ainsi que ses sous-enregistrements, le cas chant) dans la pile d'enregistrements de la table. EMPILER ENREGISTREMENT peut tre excut avant qu'un enregistrement soit sauvegard. Si vous empilez un enregistrement non verrouill, il sera verrouill pour tous les autres process et utilisateurs jusqu' ce que vous le "dpiliez" (c'est--dire que vous le dchargiez de la pile). Exemple L'exemple suivant empile l'enregistrement d'un client :

EMPILER ENREGISTREMENT ([Client]) ` Placer l'enregistrement du client dans la pile

Rfrence DEPILER ENREGISTREMENT, Utiliser la pile d'enregistrements.

508

4e Dimension - Langage

DEPILER ENREGISTREMENT

Enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DEPILER ENREGISTREMENT {(table)} Paramtre table Type Table Description Table de laquelle dpiler l'enregistrement courant ou Table par dfaut si ce paramtre est omis

Description DEPILER ENREGISTREMENT charge le premier enregistrement de la pile d'enregistrements de table, et en fait l'enregistrement courant. Si vous empilez un enregistrement puis crez une nouvelle slection courante ne contenant plus l'enregistrement empil, et enfin dpilez l'enregistrement, vous obtenez la situation dans laquelle l'enregistrement courant ne se trouve pas dans la slection courante. Si vous souhaitez faire de l'enregistrement empil la slection courante, utilisez la commande ENREGISTREMENT SELECTION. Si vous utilisez une routine qui dplace le pointeur d'enregistrement courant avant de sauvegarder l'enregistrement, vous perdrez la copie empile en mmoire. Exemples L'exemple suivant rcupre l'enregistrement d'un client dans la pile :

DEPILER ENREGISTREMENT ([Clients]) ` Dpiler l'enregistrement

Rfrence EMPILER ENREGISTREMENT, Utiliser la pile d'enregistrements.

4e Dimension - Langage

509

Utiliser la pile d'enregistrements

Enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les commandes EMPILER ENREGISTREMENT et DEPILER ENREGISTREMENT vous permettent de poser (empiler) des enregistrements sur le dessus de la pile des enregistrements, et de les enlever (dpiler) de la pile. Chaque process dispose de sa propre pile d'enregistrements pour chaque table. 4D gre pour vous les piles d'enregistrements. Chaque pile d'enregistrements est du type LIFO ("Last-In-First-Out", ce qui peut se traduire par "dernier-entr-premier-sorti"). La capacit de la pile dpend de la mmoire. Les commandes EMPILER ENREGISTREMENT et DEPILER ENREGISTREMENT doivent tre utilises avec prudence. Chaque enregistrement empil utilise une partie de la mmoire disponible. Empiler trop d'enregistrements peut causer l'apparition d'un message du type "mmoire insuffisante" ou une pile pleine. 4D efface de la pile les enregistrements "dpils" quand vous retournez au menu la fin de l'excution de la mthode. EMPILER ENREGISTREMENT et DEPILER ENREGISTREMENT sont utiles lorsque par exemple, en cours de saisie, vous voulez examiner des enregistrements se trouvant dans la mme table que celle que vous tes en train d'utiliser. Pour cela, vous empilez votre enregistrement, cherchez et examinez les enregistrements dans la table (vous copiez des champs dans des variables, par exemple), et finalement vous dpilez l'enregistrement pour le restaurer. Note pour les utilisateurs de la version 5 de 4D : Quand vous saisissez un enregistrement, si vous devez vrifier l'unicit d'une valeur sur plusieurs champs, utilisez la nouvelle commande FIXER DESTINATION RECHERCHE. Cela vous vitera les appels EMPILER ENREGISTREMENT et DEPILER ENREGISTREMENT que vous deviez effectuer avant d'utiliser CHERCHER, afin de prserver les donnes saisies dans l'enregistrement courant. FIXER DESTINATION RECHERCHE permet d'excuter une recherche qui ne change pas la slection ni l'enregistrement courants. Rfrence DEPILER ENREGISTREMENT, EMPILER ENREGISTREMENT, FIXER DESTINATION RECHERCHE.

510

4e Dimension - Langage

15 ________________________ Enregistrements (verrouillage)

4e Dimension - Langage

511

512

4e Dimension - Langage

Verrouillage d'enregistrements

Enregistrements (verrouillage) version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension et 4D Server/4D Client grent automatiquement les bases en empchant les conflits entre les process ou entre les utilisateurs. Deux utilisateurs ou deux process ne peuvent modifier en mme temps le mme enregistrement ou le mme objet. Le second utilisateur ou process peut toutefois accder simultanment en "lecture seulement" l'enregistrement ou l'objet. Vous devez utiliser les commandes multi-utilisateurs de cette section dans plusieurs cas : Modification d'enregistrements par programmation, Utilisation d'une interface utilisateur personnalise pour les oprations multi-utilisateurs, Sauvegarde de modifications relies entre elles dans une transaction. Il y a trois concepts importants matriser lorsqu'on utilise des commandes dans une base multi-process : 1. Chaque table est soit en mode "lecture seulement" soit en mode "lecture/criture". 2. Les enregistrements sont verrouills quand ils sont chargs et dverrouills quand ils sont librs. 3. Un enregistrement verrouill ne peut tre modifi. Dans les paragraphes suivants, la personne effectuant une opration dans la base multiutilisateurs est l'utilisateur local. Les autres personnes utilisant la base sont appeles les autres utilisateurs. La discussion est mene du point de vue de l'utilisateur local. De mme, du point de vue du multi-process, le process excutant une opration dans la base est le process courant. Tout autre process en cours d'excution est dsign comme un autre process. La discussion est mene du point de vue du process courant. Enregistrements verrouills
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Un enregistrement verrouill ne peut pas tre modifi par l'utilisateur local ou le process courant. Un enregistrement verrouill peut tre charg, mais pas modifi. Un enregistrement est verrouill quand l'un des autres utilisateurs ou process a charg l'enregistrement pour effectuer une modification. Seul l'utilisateur qui modifie l'enregistrement peroit l'enregistrement comme tant non verrouill. Tous les autres utilisateurs et process peroivent l'enregistrement comme tant verrouill, et donc indisponible pour modification. Une table doit tre en mode lecture/criture pour qu'un enregistrement puisse tre charg dverouill (modifiable).

4e Dimension - Langage

513

Etats Lecture seulement et Lecture/criture


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Chaque table d'une base est soit en mode lecture/criture, soit en mode lecture seulement pour chaque utilisateur et process de la base. Lecture seulement signifie que les enregistrements de la table peuvent tre chargs mais non modifis. Lecture/criture signifie que les enregistrements de la table peuvent tre chargs et modifis par un utilisateur/process, si aucun autre utilisateur/process n'a prlablement verrouill l'enregistrement. Notez que si vous changez l'tat d'une table, celui-ci prend effet pour le prochain enregistrement charg. Si un enregistrement est dj charg, la modification de l'tat de la table ne l'affecte pas. Etat lecture seulement Lorsqu'une table est en lecture seulement et qu'un enregistrement est charg, l'enregistrement est toujours verrouill. En d'autres termes, l'enregistrement peut tre affich, imprim et utilis de diverses faons, mais ne peut tre modifi. Notez que le mode lecture seulement ne s'applique qu' la modification d'enregistrements existants. Le mode lecture seulement n'affecte pas la cration de nouveaux enregistrements : vous pouvez toujours ajouter des enregistrements une table en lecture seulement en utilisant les commandes CREER ENREGISTREMENT et AJOUTER ENREGISTREMENT ou les commandes de menu du mode Utilisation. 4D place automatiquement une table en mode lecture seulement pour les commandes qui ne requirent pas d'accs en criture aux enregistrements. Ces commandes sont VISUALISER SELECTION, VALEURS DISTINCTES, ECRITURE DIF, ECRITURE SYLK, ECRITURE ASCII, GRAPHE SUR SELECTION, IMPRIMER SELECTION, IMPRIMER ETIQUETTES, QR ETAT, SELECTION VERS TABLEAU, SELECTION LIMITEE VERS TABLEAU. Vous pouvez connatre tout moment l'tat d'une table l'aide de la fonction Etat lecture seulement. Avant d'excuter ces commandes, 4D sauvegarde l'tat courant de la table (lecture seulement ou lecture/criture) dans le process courant. Une fois la commande excute, l'tat est restaur. Etat lecture/criture Lorsqu'une table est en lecture/criture et qu'un enregistrement est charg, l'enregistrement sera non verrouill si aucun autre utilisateur ne l'a pralablement charg. Si l'enregistrement est verrouill par un autre utilisateur, l'enregistrement est charg verrouill et ne peut tre modifi par l'utilisateur local. Une table doit tre en mode lecture/criture et l'enregistrement doit tre charg pour qu'il soit dverrouill et donc modifiable.

514

4e Dimension - Langage

Si un utilisateur charge un enregistrement d'une table en mode lecture/criture, aucun autre utilisateur ne peut charger cet enregistrement pour modification. Les autres utilisateurs peuvent toujours, cependant, ajouter des enregistrements dans la table, soit manuellement en mode Utilisation, soit par les commandes CREER ENREGISTREMENT ou AJOUTER ENREGISTREMENT. Le mode lecture/criture est le mode par dfaut pour toutes les tables quand une base est ouverte et un nouveau process dmarr. Changer l'tat d'une table Vous pouvez utiliser les commandes LECTURE SEULEMENT et LECTURE ECRITURE pour changer l'tat d'une table. Si vous voulez changer l'tat d'une table pour mettre un enregistrement en lecture seulement ou lecture/criture, vous devez excuter la commande avant le chargement de l'enregistrement. Un enregistrement dj charg n'est pas affect par les commandes LECTURE SEULEMENT et LECTURE ECRITURE. Chaque process dispose de son propre tat (lecture seulement ou lecture/criture) pour chaque table dans la base. Charger, modifier et librer des enregistrements
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Pour que l'utilisateur local puisse modifier un enregistrement, la table doit tre en mode lecture/criture et l'enregistrement doit tre charg et non verrouill. Chacune des commandes chargeant un enregistrement courant (s'il y en a un) telles que ENREGISTREMENT SUIVANT, CHERCHER, TRIER, CHARGER SUR LIEN, etc influe sur l'tat de l'enregistrement. L'enregistrement est charg en fonction de l'tat courant de sa table (lecture seulement ou lecture/criture) et sa propre disponibilit. Un enregistrement peut aussi tre charg d'une table lie par une commande activant le lien automatique. Lorsqu'une table est en mode lecture seulement, tout enregistrement charg de cette table est verrouill. Un enregistrement verrouill ne peut tre sauvegard ou supprim. Le mode lecture seulement est le mode recommand puisqu'il autorise les autres utilisateurs charger, modifier, et ensuite sauvegarder l'enregistrement. Lorsqu'une table est en mode lecture/criture, tout enregistrement charg de cette table est dverrouill seulement si aucun autre utilisateur ne l'a pralablement verrouill. Un enregistrement dverrouill peut tre modifi et sauvegard. Une table doit tre place en mode lecture/criture avant qu'on ait besoin de charger, modifier et sauvegarder l'enregistrement.

4e Dimension - Langage

515

Si un enregistrement doit tre modifi, utilisez la fonction Enregistrement verrouille pour tester s'il est ou non verrouill par un autre utilisateur. Si l'enregistrement est verrouill (Enregistrement verrouille retourne Vrai), chargez l'enregistrement avec la commande CHARGER ENREGISTREMENT et testez de nouveau le verrouillage. Rptez l'opration jusqu' ce que l'enregistrement soit libr (Enregistrement verrouille retourne Faux). Lorsque vous en avez termin avec les modifications apporter un enregistrement, il doit tre libr pour les autres utilisateurs (et donc dverrouill) avec la commande LIBERER ENREGISTREMENT. Si un enregistrement n'est pas libr, il reste verrouill pour tous les autres utilisateurs jusqu' ce qu'un nouvel enregistrement courant soit slectionn. Changer l'enregistrement courant d'une table libre automatiquement l'enregistrement courant prcdent. Vous devez explicitement appeler LIBERER ENREGISTREMENT si vous ne changez pas l'enregistrement courant. Ce principe ne s'applique qu'aux enregistrements existants : quand un enregistrement est cr, il peut tre sauvegard quel que soit l'tat de la table auquel il appartient. Note : Lorsqu'elle est utilise dans une transaction, la commande LIBERER ENREGISTREMENT libre l'enregistrement courant pour le process qui gre la transaction uniquement. Pour les autres process, l'enregistrement reste verrouill tant que la transaction n'est pas valide (ou annule). Utilisez la commande VERROUILLE PAR pour savoir quel utilisateur ou process a verrouill un enregistrement. Boucles pour charger des enregistrements non verrouills
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Cet exemple prsente la boucle la plus simple pour charger un enregistrement non verrouill : LECTURE ECRITURE ([Clients]) ` Placer la table en lecture/criture Repeter ` Boucler jusqu' ce que l'enregistrement soit dverrouill CHARGER ENREGISTREMENT ([Clients]) ` Charger et verrouiller l'enregistrement Jusque (Non (Enregistrement verrouille([Clients]))) La boucle s'excute jusqu' ce que l'enregistrement soit libr. Une boucle de ce type ne s'emploie que lorsqu'il est peu probable que l'enregistrement soit verrouill par quelqu'un d'autre, puisque l'utilisateur aurait attendre la fin de la boucle. Aussi, une telle boucle est rarement utilise, sauf si l'enregistrement n'est modifiable que par mthode.

516

4e Dimension - Langage

Cet exemple utilise la boucle prcdente pour charger un enregistrement non verrouill et modifier l'enregistrement : LECTURE ECRITURE([Stocks]) Repeter ` Boucle jusqu' ce que l'enregistrement soit dverrouill CHARGER ENREGISTREMENT([Stocks]) ` Charger l'enregistrement et le verrouiller Jusque (Non (Enregistrement verrouille([Stocks]))) [Stocks]Part Qt := [Stocks]Part Qt 1 ` Modifier l'enregistrement STOCKER ENREGISTREMENT ([Stocks]) ` Sauvegarder l'enregistrement LIBERER ENREGISTREMENT ([Stocks]) ` Laisser d'autres utilisateurs le modifier LECTURE SEULEMENT([Stocks]) La commande MODIFIER ENREGISTREMENT prvient automatiquement l'utilisateur si un enregistrement est verrouill, et interdit sa modification. L'exemple suivant vite la notification automatique par un test pralable de l'enregistrement avec la fonction Enregistrement verrouille. Si l'enregistrement est verrouill, l'utilisateur peut annuler. Cet exemple teste si l'enregistrement courant est verrouill pour la table [Commandes]. Si c'est le cas, le process est endormi par la mthode pendant quelques instants. Cette technique peut tre utlise la fois dans un dveloppement multi-utilisateurs et multiprocess : Repeter ` Vous n'avez pas besoin de lecture/criture pour le moment LECTURE SEULEMENT([Commandes]) CHERCHER([Commandes]) ` Si la recherche est termine et que des enregistrements sont retourns Si ((OK=1) & (Enregistrements trouves([Commandes])>0)) LECTURE ECRITURE([Commandes]) ` Mettre la table en mode lecture/criture CHARGER ENREGISTREMENT([Commandes]) Tant que (Enregistrement verrouille([Commandes]) & (OK=1)) ` Si l'enregistrement est verrouill, ` boucler jusqu' ce que l'enregistrement soit libr ` Par qui l'enregistrement est-il verrouill ? VERROUILLE PAR([Commandes];$Process;$Utilisateur;$Machine;$Nom) Si ($Process=-1) ` L'enregistrement a-t-il t dtruit? ALERTE("L'enregistrement a t dtruit dans l'intervalle.") OK:=0 Sinon Si ($Utilisateur="") ` Etes en mode simple utilisateur ? $Utilisateur:="vous-mme" Fin de si CONFIRMER("L'enregistrement est utilis par "+$Utilisateur+" dans le "+$Nom+" Process.")

4e Dimension - Langage

517

Si (OK=1) ` Si vous voulez attendre quelques seconde ENDORMIR PROCESS(Numero du process courant;120) `Attente ` Essayez de charger l'enregistrement CHARGER ENREGISTREMENT([Commandes]) Fin de si Fin de si Fin tant que Si (OK=1) ` L'enregistrement est libr ` Vous pouvez modifier l'enregistrement MODIFIER ENREGISTREMENT([Commandes]) LIBERER ENREGISTREMENT([Commandes]) Fin de si LECTURE SEULEMENT([Commandes]) ` Retour lecture seulement OK:=1 Fin de si Jusque (OK=0) Comportement des commandes en cas d'enregistrement verrouill
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Certaines commandes du langage effectuent des actions particulires lorsqu'elles rencontrent un enregistrement verrouill. Voici la liste de ces commandes : MODIFIER ENREGISTREMENT : Cette commande affiche une bote de dialogue indiquant que l'enregistrement est utilis. L'enregistrement n'est pas affich et donc l'utilisateur ne peut le modifier. En mode Utilisation, l'enregistrement est visible en lecture seulement. MODIFIER SELECTION : Cette commande se comporte normalement ceci prs que lorsque l'utilisateur double-clique sur un enregistrement pour le modifier, MODIFIER SELECTION affiche une bote de dialogue indiquant que l'enregistrement est utilis et n'autorise que sa lecture. APPLIQUER A SELECTION : Cette commande charge un enregistrement verrouill, mais ne le modifie pas. APPLIQUER A SELECTION peut tre utilise pour lire les informations de la table sans problme. Si la commande rencontre un enregistrement verrouill, celui-ci est plac dans l'ensemble systme LockedSet. SUPPRIMER SELECTION : Cette commande ne supprime pas l'enregistrement verrouill, elle l'ignore simplement. L'enregistrement verrouill est plac dans l'ensemble LockedSet. SUPPRIMER ENREGISTREMENT : Cette commande est ignore si l'enregistrement est verrouill. Aucune erreur n'est retourne. Vous devez vous assurer que l'enregistrement est non verrouill avant d'excuter cette commande. STOCKER ENREGISTREMENT : Cette commande est ignore si l'enregistrement est verrouill. Aucune erreur n'est retourne. Vous devez vous assurer que l'enregistrement est non verrouill avant d'excuter cette commande.

518

4e Dimension - Langage

TABLEAU VERS SELECTION : Cette commande ne sauvegarde pas les enregistrements verrouills. Si elle rencontre un enregistrement verrouill, celui-ci est plac dans l'ensemble LockedSet. ALLER A ENREGISTREMENT : Dans une base multi-utilisateurs/multi-process, des enregistrements peuvent tre ajouts ou supprims par d'autres utilisateurs/process. Les numros d'enregistrement peuvent donc varier. Soyez prudent lorsque vous rfrencez un enregistrement par son numro dans une base multi-utilisateurs. Ensembles : Soyez prudent lors de la manipulation d'ensembles puisque les informations sur lesquelles tait base la construction de l'ensemble peuvent avoir t modifies par un autre utilisateur ou process. Pour plus d'informations sur les ensembles, reportez-vous la section Prsentation des ensembles. Rfrence CHARGER ENREGISTREMENT, Enregistrement verrouille, Etat lecture seulement, LECTURE ECRITURE, LECTURE SEULEMENT, LIBERER ENREGISTREMENT, Mthodes, Variables, VERROUILLE PAR.

4e Dimension - Langage

519

LECTURE ECRITURE

Enregistrements (verrouillage) version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LECTURE ECRITURE {(table | *)} Paramtre table | * Type Table Description Table dfinir en mode lecture/criture ou * pour toutes les tables ou Table par dfaut si ce paramtre est omis

Description LECTURE ECRITURE place table en mode lecture/criture pour le process dans lequel la commande a t appele. Si vous passez le paramtre optionnel *, toutes les tables sont places en mode lecture/criture. Aprs un appel LECTURE ECRITURE, lorsqu'un enregistrement est charg, il n'est pas verrouill sauf si un autre utilisateur l'a dj charg. Cette commande ne modifie pas le statut des enregistrements dj chargs, seuls les enregistrements chargs par la suite sont affects. Par dfaut, toutes les tables sont en mode lecture/criture. Utilisez LECTURE ECRITURE lorsque vous devez modifier un enregistrement et sauvegarder les modifications. Vous pouvez galement appeler cette commande lorsque vous voulez qu'un enregistrement soit verrouill pour les autres utilisateurs, mme si vous ne souhaitez pas effectuer de modifications. Placer une table en mode lecture/criture vous permet d'empcher les autres utilisateurs d'effectuer des modifications sur cette table. Cependant, ils peuvent continuer crer des nouveaux enregistrements. Note : Cette commande n'est pas rtroactive. Les privilges de lecture/criture pour un enregistrement sont dfinis par ceux de la table au moment o l'enregistrement est charg. Pour qu'un enregistrement soit charg en mode lecture/criture alors que la table est en mode lecture seulement, vous devez placer la table en mode lecture/criture avant que l'enregistrement soit charg. Rfrence Etat lecture seulement, LECTURE SEULEMENT, Verrouillage d'enregistrements.

520

4e Dimension - Langage

LECTURE SEULEMENT

Enregistrements (verrouillage) version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LECTURE SEULEMENT {(table | *)} Paramtre table | * Type Table Description Table dfinir en mode lecture seulement ou * pour toutes les tables ou Table par dfaut si ce paramtre est omis

Description LECTURE SEULEMENT place table en mode lecture seulement pour le process dans lequel la commande a t appele. Tous les enregistrements chargs par la suite sont verrouills, aucune modification ne peut leur tre apporte. Si vous passez le paramtre optionnel *, toutes les tables sont places en mode lecture seulement. Vous pouvez utiliser LECTURE SEULEMENT lorsqu'il n'est pas utile de modifier les enregistrements. Note : Cette commande n'est pas rtroactive. Les privilges de lecture/criture pour un enregistrement sont dfinis par ceux de la table au moment o l'enregistrement est charg. Pour qu'un enregistrement soit charg en mode lecture seulement alors que la table est en mode lecture/criture, vous devez placer la table en mode lecture seulement avant que l'enregistrement soit charg. Rfrence Etat lecture seulement, LECTURE ECRITURE, Verrouillage d'enregistrements.

4e Dimension - Langage

521

Etat lecture seulement

Enregistrements (verrouillage) version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Etat lecture seulement {(table)} Boolen Paramtre table Rsultat Type Table Boolen Description Table pour laquelle il faut tester l'tat ou Table par dfaut si ce paramtre est omis Accs la table est lecture seulement (Vrai) ou Accs la table est lecture-criture (Faux)

Description La fonction Etat lecture seulement est utilise pour tester si table est en mode lecture seulement dans le process o la fonction est appele. Etat lecture seulement retourne Vrai si table est en lecture seulement, et Faux si table est en lecture-criture. Exemple L'exemple suivant teste le statut de la table [Factures]. Si elle est en lecture seulement, le mode lecture-criture lui est appliqu et l'enregistrement courant est recharg.

Si (Etat lecture seulement([Factures])) LECTURE ECRITURE([Factures]) CHARGER ENREGISTREMENT([Factures]) Fin de si

Note : L'enregistrement courant est recharg pour permettre l'utilisateur de le modifier. En effet, un enregistrement prcdemment charg en mode lecture seulement reste verrouill jusqu' ce qu'il soit recharg en mode lecture-criture. Rfrence LECTURE ECRITURE, LECTURE SEULEMENT, Verrouillage d'enregistrements.

522

4e Dimension - Langage

CHARGER ENREGISTREMENT

Enregistrements (verrouillage) version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHARGER ENREGISTREMENT {(table)} Paramtre table Type Table Description Table de laquelle charger l'enregistrement courant ou Table par dfaut si ce paramtre est omis

Description CHARGER ENREGISTREMENT charge l'enregistrement courant de table. S'il n'y a pas d'enregistrement courant, CHARGER ENREGISTREMENT ne fait rien. Il est alors utile d'appeler la fonction Enregistrement verrouille pour dterminer si l'enregistrement peut tre modifi : Si la table est en mode Lecture seulement, la fonction retourne Vrai et vous ne pouvez pas modifier l'enregistrement. Si la table est en mode Lecture/criture mais si l'enregistrement est dj verrouill, il sera en mode Lecture seulement et vous ne pouvez pas le modifier. Si la table est en mode Lecture/criture et si l'enregistrement n'est pas verrouill, vous pouvez le modifier dans le process courant. La fonction Enregistrement verrouille retournera Vrai pour tous les autres utilisateurs et process. Note : Si la commande CHARGER ENREGISTREMENT est excute aprs un LECTURE SEULEMENT, l'enregistrement est automatiquement libr et charg, sans qu'il soit ncessaire d'appeler la commande LIBERER ENREGISTREMENT. Vous n'aurez normalement pas besoin d'appeler la commande CHARGER ENREGISTREMENT, car toutes les commandes telles que CHERCHER, ENREGISTREMENT SUIVANT, ENREGISTREMENT PRECEDENT, etc., chargent automatiquement l'enregistrement courant. En environnements multi-utilisateurs et multi-process, lorsque vous devez modifier un enregistrement existant, il vous faut accder en Lecture/criture la table laquelle appartient l'enregistrement. Lorsqu'un enregistrement verrouill ne peut tre charg, CHARGER ENREGISTREMENT vous permet de tenter nouveau plus tard de charger l'enregistrement. En utilisant CHARGER ENREGISTREMENT dans une boucle, vous pouvez attendre que l'enregistrement devienne accessible en Lecture/criture.

4e Dimension - Langage

523

Astuce : La commande CHARGER ENREGISTREMENT peut tre utilise pour recharger l'enregistrement courant dans le contexte d'un formulaire entre. Toutes les donnes modifies sont alors remplaces par leurs valeurs prcdentes. Dans ce cas, la commande CHARGER ENREGISTREMENT effectue en quelque sorte une annulation globale de la saisie. Rfrence Enregistrement verrouille, LIBERER ENREGISTREMENT, Verrouillage d'enregistrements.

524

4e Dimension - Langage

LIBERER ENREGISTREMENT

Enregistrements (verrouillage) version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIBERER ENREGISTREMENT {(table)} Paramtre table Type Table Description Table pour laquelle l'enregistrement est librer ou Table par dfaut si ce paramtre est omis

Description LIBERER ENREGISTREMENT place l'enregistrement courant de table dans l'tat non verrouill. Si l'enregistrement n'est pas verrouill par un utilisateur (mais est verrouill pour les utilisateurs), LIBERER ENREGISTREMENT libre l'enregistrement pour tous les utilisateurs. Mme si LIBERER ENREGISTREMENT libre l'enregistrement de la mmoire, celui-ci reste l'enregistrement courant. Lorsqu'un enregistrement devient l'enregistrement courant, le prcdent est automatiquement libr et n'est donc plus verrouill pour les autres utilisateurs. Vous devez appeler cette commande lorsque vous avez fini de modifier un enregistrement, que vous voulez qu'il reste l'enregistrement courant et qu'il soit accessible aux autres utilisateurs. Si les enregistrements contiennent une quantit importante de donnes, de champs Image ou de documents externes (tels que des documents 4D Write ou 4D Draw), il est prfrable de ne pas stocker l'enregistrement courant en mmoire sauf si vous avez besoin de le modifier. Dans ce cas, il faut utiliser la commande LIBERER ENREGISTREMENT. De cette manire, vous pouvez conserver l'enregistrement courant sans qu'il soit en mmoire. Vous librez ainsi la mmoire occupe par l'enregistrement, mais vous n'avez pas accs aux valeurs stockes dans les champs. Si vous avez besoin d'exploiter ces valeurs, il faut utiliser la commande CHARGER ENREGISTREMENT. Note : Lorsqu'elle est utilise dans une transaction, la commande LIBERER ENREGISTREMENT libre l'enregistrement courant pour le process qui gre la transaction uniquement. Pour les autres process, l'enregistrement reste verrouill tant que la transaction n'est pas valide (ou annule). Rfrence CHARGER ENREGISTREMENT, Verrouillage d'enregistrements.

4e Dimension - Langage

525

Enregistrement verrouille

Enregistrements (verrouillage) version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Enregistrement verrouille {(table)} Boolen Paramtre table Type Table Description Table de l'enregistrement dont vous voulez tester le verrouillage ou Table par dfaut si ce paramtre est omis L'enregistrement est verrouill (Vrai) ou L'enregistrement n'est pas verrouill (Faux)

Rsultat

Boolen

Description Enregistrement verrouille teste si l'enregistrement courant de table est verrouill. Cette fonction vous permet de savoir si un enregistrement est verrouill ou non, et donc de ragir de manire approprie, par exemple en laissant l'utilisateur le choix d'attendre que l'enregistrement soit libr ou d'annuler l'opration. Si Enregistrement verrouille retourne Vrai, l'enregistrement est verrouill par un autre utilisateur ou un autre process et ne peut tre sauvegard. Dans ce cas, vous devez appeler la commande CHARGER ENREGISTREMENT pour tenter nouveau de charger l'enregistrement, jusqu' ce que Enregistrement verrouille retourne Faux. Si Enregistrement verrouille retourne Faux, l'enregistrement n'est pas verrouill, ce qui signifie qu'il est verrouill pour tous les autres utilisateurs. Seul l'utilisateur ayant charg l'enregistrement ou le process courant peut modifier et sauvegarder l'enregistrement. Une table doit tre en mode lecture/criture si vous voulez modifier les enregistrements qu'elle contient. Lorsque vous tentez de charger un enregistrement qui a t supprim, Enregistrement verrouille continue de retourner Vrai. Pour viter d'attendre un enregistrement qui n'existe plus, appelez la commande VERROUILLE PAR. Cette commande retourne -1 dans le paramtre Process si l'enregistrement a t supprim. Au cours d'une transaction, CHARGER ENREGISTREMENT et Enregistrement verrouille sont souvent appeles pour tester la disponibilit des enregistrements. Si un enregistrement est verrouill, il suffit d'annuler la transaction. Rfrence CHARGER ENREGISTREMENT, Verrouillage d'enregistrements, VERROUILLE PAR.

526

4e Dimension - Langage

VERROUILLE PAR

Enregistrements (verrouillage) version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

VERROUILLE PAR ({table; }process; utilisateur; machine; nomProcess) Paramtre table process utilisateur machine nomProcess Type Table Numrique Alpha Alpha Alpha Description Table de l'enregistrement verrouill ou Table par dfaut si ce paramtre est omis Numro du process sur le serveur Nom de l'utilisateur Nom de la machine Nom du process

Description VERROUILLE PAR retourne des informations sur l'utilisateur et le process qui ont verrouill l'enregistrement. Le numro du process (sur le poste serveur), le nom de l'utilisateur, le possesseur et le nom du process sont retourns dans les variables process, utilisateur, machine et nomProcess. Vous pouvez utiliser ces informations dans une bote de dialogue pour avertir l'utilisateur lorsqu'un enregistrement est verrouill. Si l'enregistrement n'est pas verrouill, process prend la valeur 0 et utilisateur, machine et nomProcess retournent des chanes vides. Si vous essayez de charger en lecture/criture un enregistrement qui a t supprim, process retourne -1 et utilisateur, machine et nomProcess retournent des chanes vides. En mode mono-utilisateur, cette commande retourne des valeurs dans process et nomProcess seulement si un enregistrement est verrouill. Les valeurs retournes dans utilisateur et machine sont, dans ce cas, des chanes vides. Le paramtre utilisateur est le nom de l'utilisateur dfini dans l'diteur de mots de passe de 4e Dimension. Si aucun mot de passe n'a t dfini, "Super_Utilisateur" est retourn. Le paramtre machine retourn correspond au nom du possesseur de la machine tel qu'il est dfini dans la page Identification du panneau de configuration Rseau (Windows) ou dans le tableau de bord Rglages partage de fichiers (MacOS). Toute modification du nom n'est prise en compte qu'aprs le redmarrage de la machine. Rfrence Enregistrement verrouille, Verrouillage d'enregistrements.

4e Dimension - Langage

527

528

4e Dimension - Langage

16 ________________________ Ensembles

4e Dimension - Langage

529

530

4e Dimension - Langage

Prsentation des ensembles

Ensembles version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les ensembles sont un moyen puissant et rapide de manipuler des slections d'enregistrements. En plus de la possibilit de crer des ensembles, de les relier la slection courante, de les stocker, de les charger et de les effacer, 4D permet d'effectuer trois oprations standard sur les ensembles : Intersection, Union, Diffrence. Ensembles et slection courante
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Un ensemble est une reprsentation d'une slection d'enregistrements. L'ide d'ensemble est intimement lie celle de slection courante. Les ensembles sont gnralement utiliss pour les raisons suivantes : Sauvegarder et ensuite restaurer une slection lorsque l'ordre n'a pas d'importance, Accder la slection que l'utilisateur a faite l'cran (l'ensemble UserSet), Raliser une opration logique entre des slections. La slection courante est une liste de rfrences qui pointent vers chaque enregistrement actuellement slectionn. La liste existe en mmoire. Seuls les enregistrements slectionns sont dans la liste. Une slection ne contient pas en ralit les enregistrements, mais seulement une liste de rfrences ces enregistrements. Chaque rfrence un enregistrement utilise 4 octets en mmoire. Lorsque vous travaillez sur une table, vous travaillez toujours avec les enregistrements de la slection courante. Lorsqu'une slection est trie, seule la liste des rfrences est rorganise. Il n'y a qu'une slection courante pour chaque table dans un process. Comme une slection courante, un ensemble reprsente une slection d'enregistrements. Un ensemble le fait en utilisant une reprsentation trs compacte pour chaque enregistrement. En effet, chacun est reprsent par un bit (un huitime d'octet). Les oprations utilisant les ensembles sont trs rapides parce les ordinateurs accomplissent trs rapidement les oprations sur les bits. Un ensemble contient un bit pour chaque enregistrement de la table, que l'enregistrement soit inclus dans l'ensemble ou non. En fait, chaque bit est gal 1 ou 0 tout dpend si l'enregistrement est dans l'ensemble ou non. Les ensembles sont trs conomiques en termes de mmoire RAM. La taille d'un ensemble, en octets, est toujours gale au nombre total des enregistrements dans la table divis par huit. Ainsi, pour une table contenant 10 000 enregistrements, l'ensemble prend 1250 octets, ce qui fait environ 1,2 Ko de RAM.

4e Dimension - Langage

531

Il peut exister plusieurs ensembles pour chaque table. En fait, les ensembles peuvent tre sauvegards sur disque indpendamment de la base. Pour modifier un enregistrement appartenant un ensemble, vous devez d'abord utiliser l'ensemble comme slection courante, puis modifier l'enregistrement. Le nom d'un ensemble interprocess doit tre unique dans la base. Un ensemble n'est jamais tri les enregistrements sont simplement marqus comme appartenant ou non l'ensemble. En revanche, une slection temporaire est trie, mais requiert davantage de mmoire dans la plupart des cas. Pour plus d'information sur les slections temporaires, reportez-vous la section Slections temporaires. Au moment de sa cration, un ensemble mmorise l'enregistrement courant de la slection. Comparaison Nombre par table Tri Sauvegarde sur disque RAM par enreg. (en octets) Oprations Contient enreg. courant Slection courante 1 Oui Non Nb enreg. slec*4 Non Oui Ensembles illimit Non Oui Nb total enreg./8 Oui Oui, celui du moment de cration

L'ensemble que vous crez appartient la table dans laquelle il a t cr. Les oprations sur les ensembles ne peuvent tre effectues qu'entre ensembles appartenant la mme table. Les ensembles sont indpendants des donnes, ce qui signifie qu'aprs des modifications dans une table, un ensemble peut n'tre plus exact. Bien des oprations peuvent rendre un ensemble inexact. Si vous crez un ensemble de tous les habitants de New York et changez ensuite les donnes de l'un des enregistrements par New Jersey, l'ensemble ne change pas puisqu'il est simplement la reprsentation d'une slection d'enregistrements. L'ajout ou la suppression d'enregistrements peut galement rendre un ensemble obsolte. Les ensembles ne sont exacts que tant que la slection d'origine n'est pas modifie. Ensembles process et interprocess
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez utiliser trois types d'ensembles : Ensembles process : Un ensemble process n'est accessible que par le process dans lequel il a t cr. L'ensemble systme LockedSet est un ensemble process. Les ensembles process sont effacs ds que la mthode du process est acheve. Les ensembles process ne requirent pas de prfixe pour leur nom.

532

4e Dimension - Langage

Ensembles interprocess : Un ensemble est interprocess lorsque son nom est prcd des symboles (<>) le signe infrieur suivi du signe suprieur . Cette syntaxe est utilisable la fois sous Windows et MacOS. Sous MacOS, vous pouvez aussi utiliser le symbole diamant (Option+v sur un clavier franais). Ensembles locaux/Ensembles client : La version 6 de 4D introduit la notion d'ensembles locaux/client. Leur nom est toujours prcd du symbole dollar ($) l'exception de l'ensemble systme UserSet. Ensembles et transactions
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Un ensemble peut tre cr l'intrieur d'une transaction. Il est donc possible de dfinir un "ensemble des enregistrements crs pendant la transaction" et un "ensemble des enregistrements crs ou modifis en-dehors de la transaction". Une fois la transaction termine, l'ensemble cr pendant la transaction doit tre effac car il pourrait ne plus tre une reprsentation exacte des enregistrements, surtout si la transaction a t annule. Exemple d'ensemble
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Cet exemple dtruit des enregistrements doublons dans une table. La table contient des informations sur des personnes. Une structure rptitive Boucle...Fin de boucle parcourt tous les enregistrements, comparant l'enregistrement courant l'enregistrement prcdent. Si le nom, l'adresse et le code postal sont identiques, l'enregistrement est ajout un ensemble. A la fin de la boucle, l'ensemble devient la slection courante et l'ancienne slection courante est dtruite : ENSEMBLE VIDE([Personnes];"Doublons") ` Crer un ensemble vide pour les doublons TOUT SELECTIONNER([Personnes]) ` Tous les enregistrements ` Trier les enregistrements par code postal, adresse et nom pour ` que les doublons soient les uns ct des autres TRIER ([Personnes];[Personnes]CODEPOSTAL;>;[Personnes]Adresse;>;[Personnes]Nom;>) ` Initialiser les variables conservant les champs des enregistrements prcdents $Nom:=[Personnes]Nom $Adresse:=[Personnes]Adresse $CODEPOSTAL:=[Personnes]CODEPOSTAL ` Aller au second enregistrement pour le comparer au premier ENREGISTREMENT SUIVANT ([Personnes]) Boucle ($i; 2; Enregistrements dans table ([Personnes])) ` Parcourir les enregistrements en partant 2 ` Si nom, adresse et CODEPOSTAL sont identiques au ` prcdent enregistrement, alors c'est un doublon.

4e Dimension - Langage

533

Si (([Personnes]Nom=$Nom) & ([Personnes]Adresse=$Adresse) & ([Personnes]CODEPOSTAL=$CODEPOSTAL)) ` Ajouter enregistrement (le doublon) l'ensemble ADJOINDRE ELEMENT ([Personnes]; "Doublon") Sinon ` Garder les nom, adresse et CODEPOSTAL de cet enregistrement pour ` comparer avec le prochain $Nom:=[Personnes]Nom $Adresse:=[Personnes]Adresse $CODEPOSTAL:=[Personnes]CODEPOSTAL Fin de si ` Passer l'enregistrement suivant ENREGISTREMENT SUIVANT([Personnes]) Fin de boucle ` Utiliser doublons trouvs (en tant que slection courante) UTILISER ENSEMBLE ("Doublons") ` Dtruire doublons SUPPRIMER SELECTION ([Personnes]) ` Supprimer l'ensemble de la mmoire EFFACER ENSEMBLE ("Doublons") Au lieu de supprimer immdiatement les enregistrements la fin de la mthode, vous pouvez les afficher l'cran ou les imprimer si des comparaisons plus fines doivent tre menes. Ensemble systme UserSet
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4D gre un ensemble systme local/client nomm UserSet. UserSet stocke automatiquement la slection d'enregistrements la plus rcemment effectue l'cran par l'utilisateur. Ainsi, vous pouvez afficher un groupe d'enregistrements avec MODIFIER SELECTION ou VISUALISER SELECTION, demander l'utilisateur d'en slectionner certains et retourner le rsultat de cette slection manuelle dans un ensemble que vous nommez ou dans une slection. 4D Server : Bien que son nom ne dbute pas par le caractre "$", l'ensemble systme UserSet est un ensemble client. Par consquent, lors de l'utilisation des commandes INTERSECTION, REUNION et DIFFERENCE, veillez ne comparer UserSet qu' d'autres ensembles clients. Pour plus d'informations, reportez-vous aux descriptions de ces commandes ainsi qu' la section 4D Server et les ensembles dans le Guide de rfrence de 4D Server. Les tables ne disposent pas de leurs propres UserSet. Un UserSet n'"appartient" une table que lorsqu'une slection d'enregistrements est affiche pour cette table.

534

4e Dimension - Langage

La mthode ci-dessous illustre comment afficher des enregistrements pour permettre l'utilisateur d'en slectionner quelques-uns, et ensuite utiliser le UserSet pour afficher les enregistrements slectionns : ` Afficher tous les enregistrements et permettre l'utilisateur d'en slectionner un ` certain nombre. ` Puis afficher cette slection en utilisant UserSet pour modifier la slection courante. FORMULAIRE SORTIE([Personnes]; "Display") ` Choisir le formulaire sortie TOUT SELECTIONNER ([Personnes]) ` Slection de toutes les personnes ALERTE ("Appuyer Ctrl ou Commande + Clic pour slectionner des enregistrements.") VISUALISER SELECTION ([Personnes]) ` Afficher les personnes UTILISER ENSEMBLE ("UserSet") ` Utiliser les personnes slectionnes ALERTE ("Vous avez choisi les personnes suivantes.") VISUALISER SELECTION ([Personnes]) ` Afficher les personnes slectionnes Note : Vous devez excuter MODIFIER SELECTION ou VISUALISER SELECTION pour rcuprer le UserSet. Ensemble systme LockedSet
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les commandes APPLIQUER A SELECTION, TABLEAU VERS SELECTION et SUPPRIMER SELECTION crent un ensemble systme nomm LockedSet lorsqu'elles sont utilises en environnement multiprocess. LockedSet indique quels enregistrements taient verrouills lors de l'excution d'une commande. Rfrence ADJOINDRE ELEMENT, Appartient a ensemble, CHARGER ENSEMBLE, COPIER ENSEMBLE, DIFFERENCE, EFFACER ENSEMBLE, ENLEVER ELEMENT, Enregistrements dans ensemble, ENSEMBLE VIDE, INTERSECTION, NOMMER ENSEMBLE, REUNION, STOCKER ENSEMBLE, UTILISER ENSEMBLE.

4e Dimension - Langage

535

ENSEMBLE VIDE

Ensembles version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENSEMBLE VIDE ({table; }ensemble) Paramtre table ensemble Type Table Alpha Description Table pour laquelle crer un ensemble vide ou Table par dfaut si ce paramtre est omis Nom du nouvel ensemble vide

Description ENSEMBLE VIDE cre un ensemble vide, ensemble, pour table. Vous pouvez ajouter des enregistrements dans cet ensemble l'aide de la commande ADJOINDRE ELEMENT. Si un ensemble du mme nom existe dj, il est effac et remplac par le nouvel ensemble. Note : Il n'est pas indispensable d'appeler la commande ENSEMBLE VIDE avant d'utiliser la commande NOMMER ENSEMBLE. Exemple Reportez-vous l'exemple prsent dans la section Prsentation des ensembles. Rfrence EFFACER ENSEMBLE, NOMMER ENSEMBLE.

536

4e Dimension - Langage

NOMMER ENSEMBLE

Ensembles version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

NOMMER ENSEMBLE ({table; }ensemble) Paramtre table ensemble Type Table Alpha Description Table pour laquelle vous voulez crer un ensemble partir de la slection courante ou Table par dfaut si ce paramtre est omis Nom du nouvel ensemble

Description NOMMER ENSEMBLE cre un nouvel ensemble, ensemble, pour table, et y place la slection courante. Le pointeur d'enregistrement courant de la table est sauvegard avec ensemble. Si ensemble est pass la commande UTILISER ENSEMBLE, la slection courante et l'enregistrement courant sont restitus. Comme pour tout ensemble, il ne peut y avoir de tri, et lorsque ensemble est appel, l'ordre par dfaut est utilis. Si un ensemble du mme nom existe dj, il est effac et remplac par le nouvel ensemble. Exemple L'exemple suivant cre un ensemble aprs qu'une recherche ait t effectue, de manire ce que l'ensemble puisse tre stock sur disque : CHERCHER ([Personnes]) ` L'utilisateur effectue une recherche ` Cration d'un nouvel ensemble NOMMER ENSEMBLE ([Personnes]; "EnsembleRecherche") ` L'ensemble est stock sur disque STOCKER ENSEMBLE ("EnsembleRecherche"; "MaRecherche")

Rfrence EFFACER ENSEMBLE, ENSEMBLE VIDE.

4e Dimension - Langage

537

CREER ENSEMBLE SUR TABLEAU

Ensembles version 6.7 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CREER ENSEMBLE SUR TABLEAU (table; tabEnrg{; nomEns}) Paramtre table tabEnrg Type Table Tab Entier long | Tab Boolen Alpha Description Table de lensemble Tableau de n denregistrements, ou Tableau de boolens (Vrai = lenregistrement est dans lensemble, Faux = il nest pas dans lensemble) Nom de lensemble crer, ou Appliquer la commande lensemble Userset si ce paramtre est omis ou vide

nomEns

Description La commande CREER ENSEMBLE SUR TABLEAU cre lensemble nomEns partir : soit du tableau de numros denregistrements absolus tabEnrg de la table table, soit du tableau de boolens tabEnrg ; dans ce cas, les valeurs du tableau indiquent lappartenance (VRAI) ou non (FAUX) de chaque enregistrement de table lensemble nomEns. Lorsque vous utilisez la commande avec un tableau dentiers longs, tous les numros du tableau reprsentent la liste des numros denregistrements qui feront partie de lensemble nomEns. Si un numro est invalide (enregistrement non cr), lerreur -10503 est gnre. Lorsque vous utilisez la commande avec un tableau de boolens, le Nime lment du tableau reprsente lintgration (VRAI) ou non (FAUX) de lenregistrement numro N lensemble nomEns. En principe, le nombre dlments du tableau doit tre gal au nombre denregistrements de table. Si le tableau est plus petit que le nombre denregistrements, seuls les enregistrements dfinis par le tableau pourront faire partie de lensemble. Note : Avec un tableau de boolens, la commande utilise les lments partir du numro 0 jusqu'au numro N-1. Si vous ne passez pas le paramtre nomEns ou si vous passez une chane vide, la commande sapplique lensemble systme Userset. Rfrence CREER SELECTION SUR TABLEAU, TABLEAU BOOLEEN SUR ENSEMBLE. Gestion des erreurs Dans un tableau d'entier longs, si un numro d'enregistrement est invalide (enregistrement non cr), lerreur -10503 est gnre.

538

4e Dimension - Langage

UTILISER ENSEMBLE

Ensembles version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

UTILISER ENSEMBLE (ensemble) Paramtre ensemble Type Alpha Description Nom de l'ensemble utiliser

Description UTILISER ENSEMBLE cre, avec les enregistrements de ensemble, une nouvelle slection courante pour la table laquelle ensemble appartient. Au moment o vous crez un ensemble, la position de l'enregistrement courant est sauvegarde. UTILISER ENSEMBLE rcupre cette information et fait de l'enregistrement le nouvel enregistrement courant. Si vous supprimez cet enregistrement avant d'excuter UTILISER ENSEMBLE, 4e Dimension slectionne comme enregistrement courant le premier enregistrement de l'ensemble. Les commandes du thme "Ensembles", INTERSECTION, REUNION, DIFFERENCE, et ADJOINDRE ELEMENT rinitialisent l'enregistrement courant. Si vous avez cr un ensemble ne contenant pas de position d'enregistrement courant, UTILISER ENSEMBLE dsigne le premier enregistrement de l'ensemble comme enregistrement courant. ATTENTION : Rappelez-vous qu'un ensemble est la reprsentation d'une slection d'enregistrements un instant donn (au moment de sa cration). Si les enregistrements que l'ensemble reprsente sont modifis, il se peut que celui-ci ne soit plus valide. En consquence, un ensemble sauvegard sur disque doit gnralement reprsenter un groupe d'enregistrements qui ne change pas souvent. De multiples vnements peuvent rendre un ensemble invalide, par exemple la suppression ou la modification d'un enregistrement, ou encore la modification des critres de cration de l'ensemble. Exemples L'exemple suivant utilise CHARGER ENSEMBLE pour charger un ensemble des sites de la socit Dubois Paris. UTILISER ENSEMBLE est ensuite appele pour faire de l'ensemble la slection courante : ` Charger l'ensemble en mmoire CHARGER ENSEMBLE ([Entreprises]; "DuboisParis"; "ENSDuboisParis") UTILISER ENSEMBLE ("DuboisParis") ` Modification de la slection courante EFFACER ENSEMBLE ("DuboisParis") ` Effacement de l'ensemble de la mmoire

Rfrence CHARGER ENSEMBLE, EFFACER ENSEMBLE.

4e Dimension - Langage

539

ADJOINDRE ELEMENT

Ensembles version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ADJOINDRE ELEMENT ({table; }ensemble) Paramtre table ensemble Type Table Alpha Description Table de l'enregistrement courant ou Table par dfaut si ce paramtre est omis Nom de l'ensemble auquel ajouter l'enregistrement courant

Description ADJOINDRE ELEMENT ajoute l'enregistrement courant de table ensemble. L'ensemble doit avoir dj t cr ; si ensemble n'existe pas, une erreur est retourne. S'il n'y a pas d'enregistrement courant pour table, ADJOINDRE ELEMENT ne fait rien. Rfrence ENLEVER ELEMENT.

540

4e Dimension - Langage

ENLEVER ELEMENT

Ensembles version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENLEVER ELEMENT ({table; }ensemble) Paramtre table ensemble Type Table Alpha Description Table de l'enregistrement courant ou Table par dfaut si ce paramtre est omis Nom de l'ensemble duquel supprimer l'enregistrement courant

Description ENLEVER ELEMENT supprime l'enregistrement courant de table de l'ensemble ensemble. L'ensemble doit dj exister ; s'il n'existe pas, une erreur est gnre. S'il n'y a pas d'enregistrement courant dans table, ENLEVER ELEMENT ne fait rien. Rfrence ADJOINDRE ELEMENT.

4e Dimension - Langage

541

EFFACER ENSEMBLE

Ensembles version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

EFFACER ENSEMBLE (ensemble) Paramtre ensemble Type Alpha Description Nom de l'ensemble effacer de la mmoire

Description EFFACER ENSEMBLE efface ensemble de la mmoire et la libre ainsi pour d'autres utilisations. EFFACER ENSEMBLE n'a aucune consquence sur les tables, slections ou enregistrements. Pour sauvegarder un ensemble avant de l'effacer, utiliser la commande STOCKER ENSEMBLE. Comme les ensembles consomment de la mmoire, pensez les effacer ds qu'ils ne sont plus ncessaires. Exemples Reportez-vous l'exemple de la commande UTILISER ENSEMBLE. Rfrence CHARGER ENSEMBLE, ENSEMBLE VIDE, NOMMER ENSEMBLE.

542

4e Dimension - Langage

Appartient a ensemble

Ensembles version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Appartient a ensemble (ensemble) Boolen Paramtre ensemble Rsultat Type Alpha Boolen Description Nom de l'ensemble tester L'enregistrement courant est dans l'ensemble (Vrai) ou l'enregistrement courant n'est pas dans l'ensemble (Faux)

Description Appartient a ensemble teste si l'enregistrement courant de la table est inclus dans ensemble. La fonction Appartient a ensemble retourne Vrai si l'enregistrement courant de la table est dans ensemble, et retourne Faux si l'enregistrement courant de la table n'est pas dans ensemble. Exemples L'exemple suivant est la mthode objet d'un bouton testant si l'enregistrement courant est inclus dans l'ensemble des meilleurs clients :

Si (Appartient a ensemble ("Meilleurs")) ALERTE ("C'est un de nos meilleurs clients.") Sinon ALERTE ("Ce n'est pas un de nos meilleurs clients.") Fin de si

Rfrence ADJOINDRE ELEMENT, ENLEVER ELEMENT.

4e Dimension - Langage

543

Enregistrements dans ensemble

Ensembles version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Enregistrements dans ensemble (ensemble) Numrique Paramtre ensemble Rsultat Type Alpha Numrique Description Nom de l'ensemble tester Nombre d'enregistrements dans l'ensemble

Description Enregistrements dans ensemble retourne le nombre d'enregistrements prsents dans ensemble. Si ensemble n'existe pas ou s'il n'y a pas d'enregistrements dans ensemble, Enregistrements dans ensemble retourne 0. Exemple L'exemple suivant affiche une bote de dialogue d'alerte qui indique le pourcentage des clients qui sont considrs comme les meillleurs :

` Calculer d'abord le pourcentage $Pourcent := (Enregistrements dans ensemble ("Meilleurs") / Enregistrements dans table([Clients])) * 100 ` Afficher une alerte avec le pourcentage ALERTE (Chaine ($Pourcent; "##0%") + " de nos clients sont les meilleurs.")

Rfrence Enregistrements dans table, Enregistrements trouves.

544

4e Dimension - Langage

STOCKER ENSEMBLE

Ensembles version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

STOCKER ENSEMBLE (ensemble; document) Paramtre ensemble document Type Alpha Alpha Description Nom de l'ensemble stocker Nom du fichier dans lequel stocker l'ensemble

Description STOCKER ENSEMBLE sauvegarde ensemble dans le fichier disque document. Il n'est pas ncessaire que document ait le mme nom que l'ensemble. Si vous passez une chane vide dans document, une bote de dialogue standard de sauvegarde de fichiers apparat, permettant l'utilisateur de saisir un nom de fichier. Vous pourrez utiliser la commande CHARGER ENSEMBLE pour charger un ensemble stock sur disque. Si l'utilisateur clique sur le bouton Annuler dans la bote de dialogue de sauvegarde de fichiers, ou si une erreur se produit lors de la sauvegarde, la variable systme OK prend la valeur 0. Sinon, elle prend la valeur 1. La commande STOCKER ENSEMBLE est souvent utilise pour stocker sur disque les rsultats d'une recherche particulirement longue. ATTENTION : Rappelez-vous qu'un ensemble est l'image d'une slection d'enregistrements au moment prcis o l'ensemble est cr. Si les enregistrements reprsents par l'ensemble sont modifis, celui-ci devient obsolte. En consquence, vous devez crer et sauvegarder des ensembles reprsentant des enregistrements dont le contenu varie peu. De multiples vnements peuvent rendre un ensemble obsolte : modification ou suppression d'un enregistrement de l'ensemble, ou encore modification des critres ayant dtermin la cration de l'ensemble. Rappelez-vous galement que les ensembles ne stockent pas les valeurs des champs. Exemple L'exemple suivant affiche la bote de dialogue standard d'enregistrement de fichiers de manire permettre l'utilisateur de saisir le nom du fichier contenant l'ensemble :

STOCKER ENSEMBLE ("UnEnsemble"; "")

Rfrence CHARGER ENSEMBLE.

4e Dimension - Langage

545

Variables et ensembles systme Si l'utilisateur clique sur le bouton Annuler dans la bote de dialogue standard de sauvegarde de documents, ou si une erreur se produit pendant la sauvegarde, la variable systme OK prend la valeur 0. Sinon, elle prend la valeur 1.

546

4e Dimension - Langage

CHARGER ENSEMBLE

Ensembles version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHARGER ENSEMBLE ({table; }ensemble; document) Paramtre table ensemble document Type Table Alpha Alpha Description Table laquelle appartient l'ensemble ou Table par dfaut si ce paramtre est omis Nom de l'ensemble crer en mmoire Document disque contenant l'ensemble

Description CHARGER ENSEMBLE charge un ensemble depuis le fichier document, cr l'aide de la commande STOCKER ENSEMBLE. L'ensemble stock dans document doit s'appliquer table. Si ensemble existait dj en mmoire, il est rcrit. Le paramtre document est le nom du fichier disque contenant l'ensemble. Il n'est pas ncessaire que ce fichier ait le mme nom que l'ensemble. Si vous passez une chane vide dans document, une bote de dialogue standard d'ouverture de fichiers s'affiche, permettant l'utilisateur de choisir l'ensemble charger. ATTENTION : Rappelez-vous qu'un ensemble est l'image d'une slection d'enregistrements au moment prcis o l'ensemble est cr. Si les enregistrements reprsents par l'ensemble sont modifis, celui-ci devient obsolte. En consquence, vous devez stocker et charger des ensembles avec des enregistrements dont le contenu varie peu. De multiples vnements peuvent rendre un ensemble obsolte : modification ou suppression d'un enregistrement de l'ensemble, ou encore modification des critres ayant dtermin la cration de l'ensemble. Exemple L'exemple suivant utilise CHARGER ENSEMBLE pour charger l'ensemble des locaux de l'entreprise Dupont SARL Paris :

` Charger l'ensemble en mmoire CHARGER ENSEMBLE ([Entreprises]; "Paris Dupont SARL"; "PaDupontEns") ` Modifier la slection courante avec l'ensemble UTILISER ENSEMBLE ("Paris Dupont SARL") EFFACER ENSEMBLE ("Paris Dupont SARL") ` Effacer l'ensemble de la mmoire

4e Dimension - Langage

547

Rfrence STOCKER ENSEMBLE. Variables et ensembles systme Si l'utilisateur clique sur Annuler dans la bote de dialogue d'ouverture de fichiers, ou si une erreur se produit pendant le chargement, la variable systme OK prend la valeur 0. Sinon, elle prend la valeur 1.

548

4e Dimension - Langage

DIFFERENCE

Ensembles version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DIFFERENCE (ensemble1; ensemble2; rsultat) Paramtre ensemble1 ensemble2 rsultat Type Alpha Alpha Alpha Description Ensemble initial Ensemble exclure Ensemble rsultant

Description DIFFERENCE fusionne ensemble1 et ensemble2 et exclut de l'ensemble rsultat tous les enregistrements se trouvant dans ensemble2. Autrement dit, un enregistrement est inclus dans l'ensemble rsultat s'il appartient ensemble1 mais n'appartient pas ensemble2. Le tableau suivant liste les rsultats possibles d'une opration de diffrence d'ensembles. Ensemble1 Oui Oui Non Non Ensemble2 Non Oui Oui Non Ensemble rsultant Oui Non Non Non

Le schma ci-dessous est la reprsentation graphique d'une opration de diffrence entre deux ensembles. La zone colore est l'ensemble rsultant.

L'ensemble rsultat est cr par DIFFERENCE. Il remplace tout ensemble du mme nom existant dj, y compris ensemble1 et ensemble2. Les ensembles ensemble1 et ensemble2 doivent appartenir la mme table. L'ensemble rsultat appartient la mme table que ensemble1 et ensemble2.

4e Dimension - Langage

549

4D Server : En mode client/serveur, les ensembles interprocess et process sont conservs sur le poste serveur, alors que les ensembles locaux sont conservs sur les postes clients. DIFFERENCE requiert que les trois ensembles soient situs sur la mme machine. Par consquent, ils doivent tous tre des ensembles locaux, ou bien aucun d'eux ne doit tre local. Pour plus d'informations sur ce point, reportez-vous au paragraphe 4D Server et les ensembles dans le manuel de rfrence de 4D Server. Exemples L'exemple suivant exclut les enregistrements slectionns par l'utilisateur. Les enregistrements sont affichs l'cran par l'instruction suivante : VISUALISER SELECTION ([Clients]) ` Affichage des clients sous forme de liste Un bouton associ une mthode objet est plac en bas de la liste. La mthode objet exclut les enregistrements slectionns par l'utilisateur (l'ensemble systme nomm UserSet) et affiche une slection rduite : ` Cration d'un ensemble partir de la slection courante NOMMER ENSEMBLE ([Clients]; "$Courant") ` Exclusion des enregistrements slectionns DIFFERENCE ("$Courant";"UserSet";"$Courant") UTILISER ENSEMBLE ("$Courant") ` Utilisation du nouvel ensemble EFFACER ENSEMBLE ("$Courant") ` Effacement de l'ensemble

Rfrence INTERSECTION, REUNION.

550

4e Dimension - Langage

INTERSECTION

Ensembles version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

INTERSECTION (ensemble1; ensemble2; rsultat) Paramtre ensemble1 ensemble2 rsultat Type Alpha Alpha Alpha Description Premier ensemble Second ensemble Ensemble rsultant

Description INTERSECTION compare ensemble1 et ensemble2 et slectionne uniquement les enregistrements se trouvant la fois dans ensemble1 et dans ensemble2. Le tableau suivant liste les rsultats possibles d'une opration d'intersection d'ensembles. Ensemble1 Oui Oui Non Non Ensemble2 Non Oui Oui Non Ensemble rsultant Non Oui Non Non

Le schma ci-dessous est la reprsentation graphique de l'intersection de deux ensembles. La zone colore est l'ensemble rsultant.

L'ensemble rsultat est cr par INTERSECTION. Il remplace tout ensemble du mme nom existant dj, y compris ensemble1 et ensemble2. Les ensembles de dpart ensemble1 et ensemble2 doivent appartenir la mme table. L'ensemble rsultat appartient la mme table que ensemble1 et ensemble2.

4e Dimension - Langage

551

4D Server : En mode client/serveur, les ensembles interprocess et process sont conservs sur le poste serveur, alors que les ensembles locaux sont conservs sur les postes clients. INTERSECTION requiert que les trois ensembles soient situs sur la mme machine. Par consquent, ils doivent tous tre des ensembles locaux, ou bien aucun d'eux ne doit tre local. Pour plus d'informations sur ce point, reportez-vous au paragraphe 4D Server et les ensembles dans le manuel de rfrence de 4D Server. Exemple L'exemple suivant recherche les clients en contact avec deux reprsentants, Jean et Grgoire. Chaque reprsentant dispose d'un ensemble regroupant ses clients. Les clients se trouvant dans les deux ensembles sont en contact avec Jean et Grgoire :

` Doublon reoit les clients appartenant aux 2 ensembles INTERSECTION ("Jean"; "Grgoire"; "Doublon") UTILISER ENSEMBLE ("Doublon") ` Modification de la slection courante ` Effacement de cet ensemble mais sauvegarde des autres EFFACER ENSEMBLE ("Doublon") ` Affichage des clients en contact avec les deux commerciaux VISUALISER SELECTION ([Clients])

Rfrence DIFFERENCE, REUNION.

552

4e Dimension - Langage

REUNION

Ensembles version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

REUNION (ensemble1; ensemble2; rsultat) Paramtre ensemble1 ensemble2 rsultat Type Alpha Alpha Alpha Description Premier ensemble Second ensemble Ensemble rsultant

Description REUNION cre un nouvel ensemble contenant tous les enregistrements de ensemble1 et ensemble2. Le tableau suivant liste les rsultats possibles d'une opration de runion d'ensembles. Ensemble1 Oui Oui Non Non Ensemble2 Non Oui Oui Non Ensemble rsultant Oui Oui Oui Non

Le schma ci-dessous est la reprsentation graphique de la runion de deux ensembles. La zone colore est l'ensemble rsultant.

L'ensemble rsultat est cr par REUNION. Il remplace tout ensemble du mme nom existant dj, y compris ensemble1 et ensemble2. Les ensembles de dpart ensemble1 et ensemble2 doivent appartenir la mme table. L'ensemble rsultat appartient la mme table que ensemble1 et ensemble2. L'enregistrement courant de rsultat est celui de ensemble1.

4e Dimension - Langage

553

4D Server : En mode client/serveur, les ensembles interprocess et process sont conservs sur le poste serveur, alors que les ensembles locaux sont conservs sur les postes clients. REUNION requiert que les trois ensembles soient situs sur la mme machine. Par consquent, ils doivent tous tre des ensembles locaux, ou bien aucun d'eux ne doit tre local. Pour plus d'informations sur ce point, reportez-vous au paragraphe 4D Server et les ensembles dans le manuel de rfrence de 4D Server. Exemple L'exemple suivant ajoute des enregistrements l'ensemble des meilleurs clients. Les enregistrements sont affichs l'cran. Ensuite, l'ensemble des meilleurs clients est charg du disque, et tous les enregistrements slectionns par l'utilisateur (l'ensemble systme UserSet) sont ajouts. Enfin, le nouvel ensemble est sauvegard sur le disque : TOUT SELECTIONNER ([Clients]) ` Slection de tous les enregistrements VISUALISER SELECTION ([Clients]) ` Afficher tous les clients en mode liste ` Chargement de l'ensemble des meilleurs clients CHARGER ENSEMBLE ("$Meilleurs"; "$Meilleurs.sav") REUNION ("$Meilleurs"; "UserSet"; "$Meilleurs") ` Ajout de toute slection l'ensemble ` Sauvegarde de l'ensemble des meilleurs clients STOCKER ENSEMBLE ("$Meilleurs"; "$Meilleurs.sav")

Rfrence DIFFERENCE, INTERSECTION.

554

4e Dimension - Langage

COPIER ENSEMBLE

Ensembles version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

COPIER ENSEMBLE (srcEns; dstEns) Paramtre srcEns dstEns Type Alpha Alpha Description Nom de l'ensemble source Nom de l'ensemble de destination

Description La commande COPIER ENSEMBLE copie le contenu de l'ensemble srcEns dans l'ensemble dstEns. Les deux ensembles peuvent tre process, interprocess ou locaux. 4D Server : En mode client/serveur, les ensembles interprocess et process sont conservs sur le poste serveur, alors que les ensembles locaux sont conservs sur les postes clients. COPIER ENSEMBLE vous permet de copier des ensembles d'un poste l'autre. Pour plus d'informations sur ce point, reportez-vous au paragraphe 4D Server et les ensembles dans le manuel de rfrence de 4D Server. Exemples (1) L'exemple suivant, en client/serveur, copie l'ensemble local "$SetA", conserv sur le poste client, vers l'ensemble process "SetB", conserv sur le poste serveur :

COPIER ENSEMBLE("$SetA";"SetB")

(2) L'exemple suivant, en client/serveur, copie l'ensemble process "SetA", conserv sur le poste serveur, vers l'ensemble local "$SetB", conserv sur le poste client :

COPIER ENSEMBLE("SetA";"$SetB")

Rfrence Prsentation des ensembles.

4e Dimension - Langage

555

556

4e Dimension - Langage

17 ________________________ Environnement 4D

4e Dimension - Langage

557

558

4e Dimension - Langage

Type application

Environnement 4D version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Type application Entier long Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Entier long Valeur numrique reprsentant le type de l'application

Description La fonction Type application renvoie une valeur numrique qui reprsente le type de l'environnement 4D que vous utilisez. 4D vous fournit les constantes prdfinies suivantes, places dans le thme Environnement 4D : Constante 4e Dimension 4D Runtime Volume License 4D Runtime Interpreted 4D Runtime Single User 4D Client 4D Server 4D First Type Entier Entier Entier Entier Entier Entier Entier long long long long long long long Valeur 0 1 2 3 4 5 6

Exemple Quelque part dans votre code, ailleurs que dans la Mthode base Sur dmarrage serveur, vous voulez vrifier si l'utilisateur a ouvert la base avec 4D Server. Pour cela, vous pouvez crire les lignes de code suivantes :

Si (Type application=4D Server) ` Excuter des actions ncessaires Fin de si

Rfrence Type version, Version application.

4e Dimension - Langage

559

Type version

Environnement 4D version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Type version Entier long Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Entier long 0 = Version standard 1 = Version de dmonstration

Description La commande Type version retourne une valeur numrique qui reprsente le type de version de 4D que vous utilisez. 4D vous fournit les constantes prdfinies suivantes : Constante Version standard Version de dmonstration Type Entier long Entier long Valeur 0 1

Exemple Votre application 4D inclut des fonctionnalits qui ne sont pas disponibles lorsque vous tes en version dmo. Vous pouvez tester l'environnement en crivant le code suivant :

Si (Type version=Version standard) ` Excuter les actions ncessaires Sinon ALERTE("Cette fonctionnalit n'est pas disponible dans la version dmo de" +"Super Gestion.") Fin de si

Rfrence Type application, Version application.

560

4e Dimension - Langage

Version application

Environnement 4D version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Version application {(*)} Alpha Paramtre * Rsultat Type * Alpha Description Si pass = numro de version long Si omis = numro de version court Numro de version dans une chane encode

Description Version application retourne une chane encode qui exprime le numro de version de l'environnement 4D que vous utilisez. Si vous ne passez pas le paramtre optionnel *, une chane de 4 caractres est retourne, formate de la manire suivante : Caractres 1-2 3 4 Description Numro de version Numro de mise jour Numro de rvision

Exemple : la chane "0600" reprsente la version 6.0.0. Si vous passez le paramtre optionnel *, une chane de 8 caractres est retourne, formate de la manire suivante : Caractres 1 2-3-4 5-6 7 8 Description "F" reprsente une version finale "B" reprsente une version beta Les autres caractres reprsentent une version interne 4D Numro de compilation interne 4D Numro de version Numro de mise jour Numro de rvision

Exemple : la chane "B0120602" reprsente une version beta 12 de la version 6.0.2.

4e Dimension - Langage

561

Exemples (1) Cet exemple affiche le numro de version de l'environnement 4D :

$vs4Dversion:=Version application ALERTE("Vous utilisez la version "+Chaine(Num(Sous chaine($vs4Dversion;1;2)))+"."+

$vs4Dversion3+"."+$vs4Dversion4) (2) Cet exemple teste si vous utilisez une version finale :

Si(Sous chaine(Version application(*);1;1)#"F") ALERTE("Veuillez vous assurer que vous utilisez une version finale de 4D avec cette base !") QUITTER 4D Fin de si

Rfrence Type application, Type version.

562

4e Dimension - Langage

Application compilee

Environnement 4D version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Application compilee Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Mode compil (Vrai), mode interprt (Faux)

Description La fonction Application compilee teste si la base tourne en mode compil (Vrai) ou en mode interprt (Faux). Exemple Dans une de vos mthodes, vous avez plac du code pour dboguer la base lorsque vous tes en mode interprt. Vous pouvez prcder ce code d'un test qui appelle la fonction Application compilee :

` ... Si (Non(Application compilee)) ` Mettre du code pour dboguer votre base ici Fin de si ` ...

Rfrence APPELER 4D, Indefinie.

4e Dimension - Langage

563

Fichier application

Environnement 4D version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Fichier application Alpha Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Alpha Nom long du fichier 4D excutable ou de l'application 4D

Description La fonction Fichier application retourne le nom long (c'est--dire le chemin d'accs complet, y compris son nom) du fichier excutable ou de l'application 4D que vous utilisez. Sous Windows Si, par exemple, vous utilisez 4e Dimension qui se trouve dans le rpertoire \4DWIN600\PROGRAMME sur le volume E, Fichier application renvoie E:\4DWIN600\PROGRAMME\4D.EXE. Sous MacOS Si, par exemple, vous utilisez 4e Dimension qui se trouve dans le dossier 4e Dimension 6.0 sur le disque Disque Dur, Fichier application renvoie Disque Dur:4e Dimension 6.0:4e Dimension 6.0. Exemple Lorsque vous dmarrez votre base sous Windows, vous souhaitez vrifier qu'une librairie DLL se trouve au mme niveau que le fichier excutable de 4D. Dans la Mthode base Sur ouverture, vous pouvez crire les instructions suivantes :

Si (Sous Windows & (Type application#4D Server)) Si (Tester chemin acces (Nom long vers chemin d'accs (Fichier application)+ "XRAYCAPT.DLL")#Est un document) ` Afficher une bote de dialogue expliquant que la librairie XRAYCAPT.DLL ` n'est pas prsente. Donc, la saisie de radios n'est pas disponible Fin de si Fin de si

Note : Les mthodes projet Sous Windows et Nom long vers chemin d'accs sont dtailles dans la section Prsentation des documents systme.

564

4e Dimension - Langage

Fichier structure

Environnement 4D version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Fichier structure

Alpha

Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Alpha Nom long du fichier de structure de la base

Description La fonction Fichier structure retourne le nom long (c'est--dire le chemin d'accs complet au fichier, y compris son nom) du fichier de structure de la base sur laquelle vous travaillez. Sous Windows Si, par exemple, vous travaillez sur la base MesCDs qui se trouve \DOCS\MesCDs sur le volume G, Fichier structure renvoie G:\DOCS\MyCDs\MesCDs.4DB. Sous Macintosh Si, par exemple, vous travaillez sur la base MesCDs qui se trouve dans le dossier Documents:MesCDs: sur le disque qui s'appelle Macintosh HD, Fichier structure renvoie Macintosh HD:Documents:MesCDs:MesCDs. Note : Si vous appelez cette commande sous MacOS depuis une application fusionne 4D Runtime, elle retourne le nom long du fichier de structure situ lintrieur du progiciel. Si vous souhaitez obtenir le nom long du progiciel lui-mme, il est prfrable dutiliser la commande Fichier application. Lastuce consiste tester lapplication laide de la commande Type application puis excuter Fichier structure ou Fichier application en fonction du contexte. ATTENTION : Si vous appelez cette commande lorsque vous utilisez 4D Client, seul le nom du fichier de structure est renvoy, pas le nom long.

4e Dimension - Langage

565

Exemple Cet exemple affiche le nom et l'emplacement du fichier de structure que vous utilisez :

Si(Type application#4D Client) $vsStructNomFichier:=Nom long vers fichier(Fichier structure) $vsStructNomChemin:=Nom long vers chemin d'accs (Fichier structure) ALERTE("Vous tes en train d'utiliser la base "+Caractere(34)+$vsStructNomFichier+ Caractere(34)+" qui se trouve au "+Caractere(34)+ $vsStructNomChemin+Caractere(34)+".") Sinon ALERTE("Vous tes connect la base "+Caractere(34)+Fichier structure+ Caractere(34)) Fin de si

Note : Les mthodes projet Nom long vers fichier et Nom long vers chemin d'accs sont dtailles dans la section Prsentation des documents systme. Rfrence Fichier application, Fichier donnees, LISTE SEGMENTS DE DONNEES.

566

4e Dimension - Langage

Fichier donnees

Environnement 4D version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Fichier donnees {(segment)} Alpha Paramtre segment Rsultat Type Entier long Alpha Description Numro de segment Nom long du fichier de donnes de la base

Description La fonction Fichier donnees retourne le nom long (c'est--dire le chemin d'accs complet au fichier, y compris son nom) du fichier de donnes ou d'un segment de donnes de la base avec laquelle vous tes en train de travailler. Si vous ne passez pas le paramtre segment, Fichier donnees retourne le nom long du fichier de donnes ou du premier segment (si la base est segmente). Si vous passez le paramtre segment, Fichier donnees retourne le nom long du segment de donnes qui correspond au numro de segment pass. Si vous passez un numro de segment suprieur au nombre de segments de donnes, Fichier donnees retourne une chane vide. Sous Windows Si, par exemple, vous travaillez avec la base MesCDs qui se trouve l'emplacement \DOCS\MesCDs sur le volume G, Fichier donnees retournera G:\DOCS\MesCDs\MesCDs.4DD (si vous avez choisi l'emplacement propos par dfaut par 4D lorsque vous avez cr la base). Sous MacOS Si, par exemple, vous travaillez avec la base MesCDs qui se trouve dans le dossier Documents:MesCDs: sur le disque Macintosh HD, Fichier donnees retournera Macintosh HD:Documents:MesCDs:MesCDs.data (si vous avez choisi l'emplacement propos par dfaut par 4D lorsque vous avez cr la base). ATTENTION : Si vous appelez cette fonction depuis 4D Client, seul le nom du fichier de donnes ou du premier segment de donnes est retourn, pas le nom long. De plus, mme lorsque la base est segmente, la commande retourne une chane vide pour les autres segments de donnes. Si vous voulez, pour des raisons d'administration, afficher la liste des segments de donnes sur un poste client, vous pouvez construire la liste et la stocker dans une variable sur le serveur l'aide d'une procdure stocke. Ensuite, vous pouvez rcuprer le contenu de cette variable en utilisant la commande LIRE VARIABLE PROCESS.

4e Dimension - Langage

567

Exemple Le code ci-dessous analyse les segments de donnes de la base : Si(Type application#4D Client) $vlNumSegment:=0 Repeter $vlNumSegment:=$vlNumSegment+1 $vsNomSegment:=Fichier donnees($vlNumSegment) Si ($vsNomSegment#"") ALERTE("Segment de donnes "+Chaine($vlNumSegment)+":" +Caractere(34)+$vsNomSegment+Caractere(34)+".") Fin de si Jusque ($vsNomSegment="") ALERTE("Il y a "+Chaine($vlNumSegment-1)+" segment(s) de donnes.") Fin de si

Rfrence Fichier application, Fichier structure, LISTE SEGMENTS DE DONNEES.

568

4e Dimension - Langage

Fichier donnees verrouille

Environnement 4D version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Fichier donnees verrouille Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Vrai = fichier/segment verrouill Faux = fichier/segment non verrouill

Description La commande Fichier donnees verrouille retourne Vrai si le fichier de donnes de la base ouverte ou lun de ses segments au moins est verrouill cest--dire, protg en criture. Place par exemple dans la Mthode base Sur ouverture, cette commande permet de prvenir tout risque douverture fortuite dun fichier de donnes verrouill. Exemple Cette mthode empchera louverture de la base si le fichier de donnes est verrouill :

Si(Fichier donnees verrouille) ALERTE("Le fichier de donnes est verrouill. Impossible douvrir la base.") QUITTER 4D Fin de si

4e Dimension - Langage

569

Dossier 4D

Environnement 4D version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Dossier 4D Alpha Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Alpha Chemin d'accs au dossier 4D

Description La commande Dossier 4D renvoie le chemin d'accs au dossier 4D actif de l'application courante. Les applications de l'environnement 4D utilisent le dossier 4D pour stocker les informations suivantes : Fichiers d'identification utilisateur Fichiers de prfrences utiliss par les applications, outils et programmes utilitaires 4D Fichier d'options du protocole rseau TCP/IP Fichiers .rex et .res crs par 4D Client pour stocker les ressources tlcharges depuis 4D Server Dossiers locaux des bases, crs par 4D Client pour stocker les extensions 4D tlcharges depuis 4D Server Vous pouvez galement sauvegarder vos propres fichiers d'aide en ligne, d'initialisation, etc., dans le dossier 4D. La commande Dossier 4D vous permet donc d'obtenir avec certitude son chemin d'accs rel. Vous tes certain que votre code fonctionnera correctement sur toute plate-forme, et quelle que soit la langue du systme. ATTENTION : Vous pouvez stocker ce que vous voulez comme fichier ou document dans ce dossier, mais il est dconseill de modifier les fichiers de l'environnement 4D. Le dossier 4D se trouve l'emplacement suivant : Sous Windows NT 4 : {Disque}:\{Dossier Systme}\Profiles\All Users\Application Data\4D Sous Windows 98 et Windows Millenium : {Disque}:\{Dossier Systme}\All users\Application Data\4D Sous Windows 2000 et Windows XP : {Disque}:\Documents and Settings\All Users\Application Data\4D Note 4D Client : Avec 4D Client sous Windows 2000 et Windows XP, le dossier 4D actif est cr l'emplacement suivant : {Disque}:\Documents and Settings\Utilisateur courant\Application Data\4D ... o Utilisateur courant est le nom de l'utilisateur ayant ouvert la session Windows.

570

4e Dimension - Langage

Sous MacOS 9 : {Disque}:Dossier systme:Support aux applications:4D Sous MacOS X : {Disque}:Library:Support aux applications:4D Note de compatibilit : L'emplacement du dossier 4D a t modifi depuis la version 6.8 de 4e Dimension il tait auparavant situ, sous Windows, dans le dossier des fichiers systme Windows et sous MacOS, dans le dossier Systme:Prfrences. Si une version prcdente du programme a t auparavant excute sur la machine, lapplication 4D 6.8 recherchera la prsence du dossier 4D aux emplacements suivants : 1. Nouvel emplacement (cf. ci-dessus) ; si le dossier existe, il est utilis. Sinon, 4D passe ltape 2. 2. Emplacement prcdent (Systme) ; si le dossier existe, il est utilis. Sinon, 4D passe ltape 3. 3. Cration du dossier 4D au nouvel emplacement. Exemple Pendant le dmarrage d'une base mono-utilisateur, vous voulez charger (ou crer) vos propres paramtres et les stocker dans un fichier situ dans le dossier 4D. Pour cela, dans la Mthode base Sur ouverture, vous pouvez crire les lignes suivantes : ` Associer le type de fichier PREF sur MacOS l'extension de fichier .PRF sur Windows ASSOCIER TYPES FICHIER("PREF";"PRF";"Prfrences") ` Construire le chemin d'accs au fichier Prfrences $vsNomDocPref:=Dossier 4D+"MesPrefs" Si(Tester chemin acces($vsNomDocPref+("PRF"#Num(Sous Windows))) #Est un document) ` Vrifier si le fichier existe $vtRefDocPref:=Creer document($vsNomDocPref;"PREF") ` Si non, il faut le crer Sinon $vtRefDocPref:=Ouvrir document($vsNomDocPref;"PREF") ` Si oui, il faut l'ouvrir Fin de si Si (OK=1) ` Traiter le contenu du document FERMER DOCUMENT($vtRefDocPref) Sinon ` Grer l'erreur Fin de si

Rfrence Dossier systeme, Dossier temporaire, Tester chemin acces.

4e Dimension - Langage

571

LISTE SEGMENTS DE DONNEES

Environnement 4D version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LISTE SEGMENTS DE DONNEES (segments) Paramtre segments Type Tableau alpha Description Noms longs des segments de donnes de la base

Description LISTE SEGMENTS DE DONNEES remplit le tableau segments avec les noms complets (chemin d'accs + nom de fichier) des segments de donnes de la base avec laquelle vous travaillez. ATTENTION : Cette commande n'a pas d'effet si elle est excute sur 4D Client. Si vous avez besoin, pour des raisons d'administration, d'afficher une liste des segments de donnes sur un poste client, vous pouvez construire la liste et la stocker dans une variable sur le serveur l'aide d'une procdure stocke. Ensuite, vous pouvez rcuprer le contenu de cette variable en utilisant la commande LIRE VARIABLE PROCESS. Exemples (1) Dans le formulaire "Infos segments de donnes" de la table [Dialogues], vous voulez afficher une liste droulante comportant les noms des segments de donnes. Pour ce faire, vous crivez le code suivant : ` [Dialogues]; Mthode formulaire "Infos segments de donnes" Au cas ou : (Evenement formulaire=Sur chargement) ` ... TABLEAU ALPHA(255;taNomSegment;0) LISTE SEGMENTS DE DONNEES(taNomSegment) ` ... Fin de cas

(2) La mthode suivante vous indique si votre base est segmente : ` Fichier de donnes segment -> Boolen C_BOOLEEN ($0) LISTE SEGMENTS DE DONNEES($taNomSegment) $0:=(Taille tableau($taNomSegment)>1)

572

4e Dimension - Langage

(3) Aprs avoir appel AJOUTER SEGMENT DE DONNEES, vous voulez tester si l'utilisateur a ajout des segments de donnes.

LISTE SEGMENTS DE DONNEES($taAvant) AJOUTER SEGMENT DE DONNEES LISTE SEGMENTS DE DONNEES($taAprs) Si(Taille tableau($taAvant)#Taille tableau($taAprs)) ` Oui, un ou plusieurs segments de donnes ont t ajouts Sinon ` Il y a le mme nombre de segments de donnes Fin de si

Rfrence Fichier application, Fichier donnees, Fichier structure.

4e Dimension - Langage

573

AJOUTER SEGMENT DE DONNEES

Environnement 4D version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

AJOUTER SEGMENT DE DONNEES Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande AJOUTER SEGMENT DE DONNEES provoque l'apparition de la bote de dialogue de gestion des segments de donnes, prsente ci-dessous :

Si l'utilisateur clique sur le bouton OK pour valider la bote de dialogue, la variable OK prend la valeur 1. Si l'utilisateur clique sur le bouton Annuler, OK prend la valeur 0. NOTE : Cette commande ne fait rien lorsqu'elle est utilise avec 4D Server. Lorsque tous les segments de donnes sont pleins, 4e Dimension ou 4D Server gnre une erreur 9999. Un message d'erreur est affich, indiquant que le disque est plein. Si vous utilisez 4e Dimension, vous pouvez intercepter l'erreur avec une mthode installe par APPELER SUR ERREUR. Vous pouvez alors appeler la commande AJOUTER SEGMENT DE DONNEES pour permettre l'utilisateur de crer un nouveau segment sur un volume disposant d'espace libre. Si vous utilisez 4D Server, vous pouvez afficher une bote de dialogue d'alerte indiquant que l'Administrateur de la base doit crer un nouveau segment sur le poste serveur. Rfrence APPELER SUR ERREUR. Variables et ensembles systme OK vaut 1 si la bote de dialogue de gestion des segments de donnes est valide.

574

4e Dimension - Langage

ECRIRE CACHE

Environnement 4D version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRIRE CACHE Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande ECRIRE CACHE sauvegarde immdiatement les caches de donnes sur le disque. Toutes les modifications apportes la base sont alors stockes sur disque. Gnralement, vous n'avez pas besoin d'appeler cette commande, car 4D sauvegarde rgulirement les modifications. Il est prfrable d'utiliser la proprit de la base Sauvegarde toutes les X minutes (en mode Structure), qui spcifie les intervalles de sauvegarde des donnes, afin de contrler l'criture du cache de donnes sur le disque. Note : 4D utilise en interne un systme intgr de cache de donnes permettant d'acclrer les oprations d'E/S. Le fait que des modifications de donnes soient, par moments, prsentes dans le cache de donnes et pas sur le disque est entirement transparent pour votre code. Par exemple, si vous appelez la commande CHERCHER, le moteur de 4D va intgrer les donnes prsentes dans le cache pour effectuer l'opration.

4e Dimension - Langage

575

CREER FICHIER DONNEES

Environnement 4D version 6.8

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CREER FICHIER DONNEES (cheminAccs) Paramtre cheminAccs Type Alpha Description Nom ou chemin daccs complet du fichier de donnes crer

Description La commande CREER FICHIER DONNEES permet de crer un nouveau fichier de donnes sur disque et de remplacer la vole le fichier de donnes ouvert par lapplication 4D. Le fonctionnement gnral de cette commande est identique celui de la commande OUVRIR FICHIER DONNEES, la diffrence prs que le nouveau fichier de donnes dsign par le paramtre cheminAccs est cr juste aprs la rouverture du fichier de structure. Avant de lancer lopration, la commande vrifie que le chemin spcifi ne correspond pas un fichier existant. 4D Server : Cette commande ne peut pas tre utilise avec 4D Client ou 4D Server. Rfrence OUVRIR FICHIER DONNEES.

576

4e Dimension - Langage

OUVRIR FICHIER DONNEES

Environnement 4D version 6.8

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

OUVRIR FICHIER DONNEES (cheminAccs) Paramtre cheminAccs Type Alpha Description Nom ou chemin daccs complet du fichier de donnes ouvrir

Description La commande OUVRIR FICHIER DONNEES permet de changer la vole le fichier de donnes ouvert par lapplication 4D. Vous passez dans le paramtre cheminAccs le nom ou le chemin daccs complet du fichier de donnes ouvrir. Si vous passez uniquement un nom de fichier, il doit tre plac ct du fichier de structure de la base. Si ce chemin daccs dsigne un fichier de donnes valide, 4D quitte la base en cours et la rouvre avec le fichier de donnes spcifi. La Mthode base Sur fermeture et la Mthode base Sur ouverture sont successivement appeles. Attention : Comme cette commande provoque la fermeture pralable de l'application, il n'est pas possible de l'utiliser dans la Mthode base Sur ouverture ou une mthode appele par cette mthode base. La commande est excute de manire asynchrone : aprs son appel, 4D continue dexcuter le reste de la mthode. Ensuite, lapplication se comporte comme si la commande Quitter avait t slectionne dans le menu Fichier : les botes de dialogue ouvertes sont annules, les process ouverts ont 10 secondes pour se terminer avant dtre tus, etc. Avant de lancer lopration, la commande teste la validit du fichier de donnes spcifi : il doit comporter lextension .4DD sous Windows ou avoir le type dat5 sous MacOS. En outre, si le fichier a dj t ouvert, la commande vrifie quil correspond bien la structure courante. Si vous passez une chane vide dans cheminAccs, la commande rouvre la base sans changer de fichier de donnes. 4D Server : Cette commande ne peut pas tre utilise avec 4D Client ou 4D Server. Rfrence CREER FICHIER DONNEES.

4e Dimension - Langage

577

QUITTER 4D

Environnement 4D version 6.8 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QUITTER 4D {(dlai)} Paramtre dlai Type Numrique Description Dlai (mn) avant que le serveur ne quitte

Description La commande QUITTER 4D vous permet de quitter 4e Dimension ou 4D Server et de retourner sur le Bureau du systme d'exploitation. Le mcanismes mis en jeu par la commande sont diffrents suivant qu'elle est excute sur 4e Dimension/4D Client ou 4D Server (procdure stocke). Avec 4e Dimension et 4D Client : Aprs un appel QUITTER 4D, l'excution du process courant est stoppe, puis 4D effectue les oprations suivantes : Si une Mthode base Sur fermeture existe, 4D l'excute dans un nouveau process local. Par exemple, vous pouvez utiliser cette mthode base pour informer les autres process, via la communication interprocess, qu'ils doivent tre ferms (s'ils sont en saisie de donnes) ou stopper l'excution des oprations dmarres dans la Mthode base Sur ouverture (connexion de 4D un autre serveur de bases de donnes). Notez que 4D quittera dans tous les cas : la Mthode base Sur fermeture peut assurer le nettoyage et la fermeture de toutes les oprations que vous voulez, mais la fermeture de la base est inluctable. S'il n'existe pas de Mthode base Sur fermeture, 4D ferme tous les process un par un, sans distinction. Si l'utilisateur est en saisie de donnes, les enregistrements seront annuls et non valids. Si vous voulez permettre l'utilisateur de sauvegarder ses modifications effectues dans les fentres du process courant, vous pouvez utiliser la communication interprocess pour indiquer tous les autres process utilisateur que la base est sur le point d'tre quitte. Pour cela, vous pouvez adopter deux stratgies : Effectuer ces oprations depuis le process courant avant d'appeler QUITTER 4D. Traiter ces oprations depuis la Mthode base Sur fermeture.

578

4e Dimension - Langage

Une troisime stratgie est galement possible. Avant d'appeler QUITTER 4D, vous testez si une fentre ncessite une validation. Si c'est le cas, vous demandez l'utilisateur de valider ou d'annuler cette fentre puis de choisir Quitter de nouveau. Cependant, du point de vue purement "interface utilisateur", les deux premires solutions sont prfrables. Note : Le paramtre dlai n'est pas utilisable avec 4e Dimension ou 4D Client. Avec 4D Server (procdure stocke) : La commande QUITTER 4D peut tre excute sur le poste serveur, dans une procdure stocke. Dans ce cas, elle admet le paramtre optionnel dlai. Ce paramtre permet dallouer 4D Server un dlai dattente avant que lapplication ne quitte rellement, laissant ainsi aux postes clients le temps de se dconnecter. Vous devez passer dans dlai une valeur en minutes. Ce paramtre nest pris en compte que dans le cadre dune excution sur le poste serveur. Avec 4D Client ou 4e Dimension, il est ignor. Si vous ne passez pas le paramtre dlai, 4D Server attendra que tous les postes clients soient dconnects avant de quitter. A la diffrence de 4e Dimension/4D Client, le traitement de QUITTER 4D par 4D Server est asynchrone : la mthode dans laquelle la commande est appele nest pas interrompue aprs son excution. Si une Mthode base Sur arrt serveur existe, elle est excute lissue du dlai dfini par le paramtre dlai, ou de la dconnexion de tous les clients, suivant vos paramtrages. Laction de la commande QUITTER 4D utilise dans une procdure stocke est quivalente celle de la commande Quitter du menu Fichier de 4D Server : elle provoque lapparition, sur chaque poste client, dune bote de dialogue signalant que le serveur est sur le point de quitter. Exemple La mthode projet suivante est associe la commande Quitter du menu Fichier. ` Mthode projet M_QUITTER CONFIRMER("Etes-vous certain de vouloir quitter ?") Si (OK=1) QUITTER 4D Fin de si

Rfrence Mthode base Sur arrt serveur, Mthode base Sur fermeture.

4e Dimension - Langage

579

FIXER HISTORIQUE

Environnement 4D version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER HISTORIQUE (historique | *) Paramtre historique | * Type Alpha Description Nom du fichier d'historique ou * pour refermer l'historique courant

Description La commande FIXER HISTORIQUE ouvre, cre ou ferme le fichier d'historique de la base de donnes, suivant la valeur que vous passez dans historique. IMPORTANT : Appeler la commande FIXER HISTORIQUE quivaut choisir Fichier d'historique... dans le menu Fichier en mode Utilisation. Vous ne devez l'utiliser que si le plug-in 4D Backup est install dans la base. Si vous passez une chane vide dans historique, FIXER HISTORIQUE prsente une bote de dialogue standard d'ouverture de fichiers, permettant l'utilisateur d'ouvrir un fichier d'historique ou d'en crer un nouveau. Si l'utilisateur clique sur le bouton Ouvrir et que le fichier est ouvert correctement, la variable OK prend la valeur 1. Autrement, si l'utilisateur clique sur le bouton Annuler ou si le fichier d'historique ne peut pas tre ouvert ou cr, OK prend la valeur 0. Si vous passez * dans historique, FIXER HISTORIQUE referme le fichier d'historique courant de la base. La variable OK prend la valeur 1 lorsque le fichier d'historique est referm. Si vous utilisez FIXER HISTORIQUE pour crer ou ouvrir un fichier d'historique avant qu'une sauvegarde intgrale n'ait t ralise et si le fichier de donnes contient dj des enregistrements, 4e Dimension affiche l'alerte suivante :

580

4e Dimension - Langage

4D gnre alors une erreur -4447, que vous pouvez intercepter avec une mthode installe par APPELER SUR ERREUR. Note : La commande FIXER HISTORIQUE est sans effet lorsqu'elle est utilise avec 4D Server. Pour plus d'informations sur cette commande, reportez-vous la documentation du plug-in 4D Backup. Rfrence APPELER SUR ERREUR. Variables et ensembles systme OK prend la valeur 1 si le fichier d'historique est correctement ouvert, cr ou ferm. Gestion des erreurs L'erreur -4447 est gnre si l'opration ne peut pas tre ralise car la base de donnes doit tre auparavant sauvegarde.

4e Dimension - Langage

581

LIRE INFORMATIONS SERIALISATION

Environnement 4D version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE INFORMATIONS SERIALISATION (cl; utilisateur; socit; connects; maxUtilisateurs) Paramtre cl utilisateur socit connects maxUtilisateurs Type Entier long Alpha Alpha Entier long Entier long Description Cl unique du produit (crypt) Nom enregistr Organisation enregistre Nombre dutilisateurs connects Nombre maximum dutilisateurs

Description La commande LIRE INFORMATIONS SERIALISATION retourne diverses informations relatives la srialisation de lapplication 4D courante. cl : identifiant unique du produit install. Ce numro unique correspond une seule application 4D (4D Server, 4e Dimension, 4D Runtime,etc.) installe sur un seul poste. Bien entendu, ce numro est crypt. utilisateur : Nom de lutilisateur de lapplication, tel quil a t saisi au moment de linstallation. socit : Nom de la socit ou de lorganisation laquelle appartient lutilisateur, tel quil a t saisi au moment de linstallation. connects : Nombre dutilisateurs connects au moment de lexcution de la commande. maxUtilisateurs : Nombre maximal dutilisateurs pouvant se connecter simultanment. Note : Les deux derniers paramtres retournent toujours 1 pour les versions monopostes de 4D, sauf lorsquil sagit de versions de dmonstration, auquel cas ils retournent 0. La commande LIRE INFORMATIONS SERIALISATION sinscrit dans le schma gnral de protection des composants propos par 4D (pour plus dinformations sur les composants, reportez-vous la documentation de 4D Insider). Les dveloppeurs de composants peuvent, sils le souhaitent, lier chaque copie de leur produit une seule application 4D installe, afin dempcher toute copie illicite. Le principe de fonctionnement du systme est le suivant : un utilisateur souhaitant acqurir un composant fournit au dveloppeur sa cl unique gnre laide de la commande LIRE INFORMATIONS SERIALISATION. Cette opration peut, par exemple, tre effectue par lintermdiaire dun formulaire Bon de commande intgr la version de dmonstration du composant. La cl gnre est unique : il nexiste quune cl par application 4D installe.

582

4e Dimension - Langage

Le dveloppeur du composant peut alors gnrer son propre numro de srie, en combinant la cl et lalgorithme de cryptage de son choix. Le composant livr comportera une fonction permettant de tester si les informations retournes par LIRE INFORMATIONS SERIALISATION correspondent bien ce numro de srie. Dans le cas contraire, le composant sera rendu inutilisable. Note : Les dveloppeurs de plug-ins peuvent galement bnficier de ce systme de protection. Pour plus dinformations, reportez-vous la documentation de 4D External Kit. Rfrence Lire ID ressource composant.

4e Dimension - Langage

583

Licence disponible

Environnement 4D version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Licence disponible {(licence)} Boolen Paramtre licence Rsultat Type Numrique Boolen Description Produit/plug-in duquel tester la validit de la licence Vrai si le produit/plug-in est disponible, sinon Faux

Description La commande Licence disponible permet de connatre la disponibilit dun produit ou dun plug-in. Elle est utile, par exemple, pour afficher ou masquer des fonctions ncessitant la prsence dun plug-in. La commande Licence disponible peut tre utilise de trois manire diffrentes : Le paramtre licence est omis : dans ce cas, la commande retourne Faux si lapplication 4D est en mode dmonstration. Vous passez dans le paramtre licence Constante Type Licence 4D Draw Entier long Licence 4D for OCI Entier long Licence 4D View Entier long Licence 4D Web Entier long Licence 4D Write Entier long Licence Web 4D Client Entier long Licence SOAP 4D Client Entier long Licence 4D SOAP Entier long une des constantes du thme Licence disponible : Valeur 808464694 808465208 808465207 808464945 808464697 808465209 808465465 808465464

Dans ce cas, la commande retourne Vrai si le produit correspondant est charg et si (dans le cadre de 4D Server) il dispose dune licence dutilisation. Par exemple, si vous disposez dun numro de srie pour 4D Draw mais pas de numro dexpansion disponible, la commande retourne Vrai avec 4e Dimension monoposte mais Faux avec 4D Server. A linverse, si vous disposez dun numro dexpansion pour 4D Draw mais pas de numro de srie, la commande retourne Vrai avec 4D Server mais Faux avec 4e Dimension. Si vous disposez dun numro de srie et dun numro dexpansion, la commande retourne Vrai dans tous les cas. Vous passez directement dans le paramtre licence le numro dID de la ressource 4BNX du plug-in. Le fonctionnement de la commande est dans ce cas identique celui dcrit cidessus.

584

4e Dimension - Langage

OUVRIR PREFERENCES 4D

Environnement 4D version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

OUVRIR PREFERENCES 4D (slecteur) Paramtre slecteur Type Chane Description Cl dsignant un thme ou une page ou un groupe de paramtres de la bote de dialogue des Prfrences

Description La commande OUVRIR PREFERENCES 4D provoque louverture de la bote de dialogue des Prfrences de lapplication 4e Dimension courante et laffichage du thme ou de la page correspondant la cl passe dans le paramtre slecteur. Le paramtre slecteur doit contenir une ou plusieurs cls indiquant un thme, une page ou un groupe de paramtres de la bote de dialogue des Prfrences. La liste des cls utilisables est fournie ci-dessous. Vous pouvez passer dans slecteur soit un chemin daccs absolu, soit un nom dlment simple : chemin daccs absolu : le paramtre slecteur est construit de la manire suivante : /Thme{/Page{/Groupe de paramtre}}. La chane doit dbuter par le caractre / et chaque niveau doit tre spar par un /. Par exemple, pour dsigner la page Compilateur du thme Mode Structure, slecteur doit contenir "/Design Mode/Compiler". nom (chemin relatif) : dans ce cas, le paramtre slecteur ne doit pas dbuter par le caractre /. Il suffit de passer le nom de llment souhait et 4e Dimension ouvrira le premier lment correspondant dans lordre de recherche groupe de paramtres -> page -> thme. Par exemple, si vous passez Progress Indicator dans slecteur, 4e Dimension ouvrira la page Options du thme Application. Pour ouvrir directement la bote de dialogue sur la premire page, passez simplement / dans slecteur. La commande ouvre la page des Prfrences sur llment spcifi dans slecteur, mais tous les autres thmes et pages restent accessibles. Il est du ressort du dveloppeur de sassurer que laccs des utilisateurs aux Prfrences ne risque pas de perturber le fonctionnement de lapplication. Pour contrler les actions ralisables par les utilisateurs, il est recommand dactiver le systme de gestion des droits daccs.

4e Dimension - Langage

585

Cls de chemins Voici la liste des cls utilisables dans le paramtre slecteur : /Application /Application/Options /Application/Options/Options /Application/Options/Temporary Folder Location /Application/Options/Drag and Drop Highlight /Application/Options/Progress Indicator /Application/Options/Display Toolbar /Application/Options/Display Windows /Application/Access /Application/Access/Data Access /Application/Access/User Access /Application/CPU Priorities /Application/CPU Priorities/Set CPU Priority to: /Application/Shortcuts /Application/Shortcuts/Keys /Application/Compatibility /Application/Compatibility/Structure Compatibility /Application/Compatibility/Web Compatibility /Application/Compatibility/Platform /Design Mode /Design Mode/Structure /Design Mode/Structure/General Font /Design Mode/Structure/Forms and Methods Automatic Comments /Design Mode/Form Editor /Design Mode/Form Editor/Object Templates /Design Mode/Form Editor/Move /Design Mode/Form Editor/Auto Alignment /Design Mode/Form Editor/Default Display /Design Mode/Method Editor /Design Mode/Method Editor/Font /Design Mode/Method Editor/Default Display /Design Mode/Method Editor/Options /Design Mode/Method Editor/Structure Style-Sheets /Design Mode/Compiler /Design Mode/Compiler/Compilation Options /Design Mode/Compiler/Compiler Methods for... /Design Mode/Documentation /Design Mode/Documentation/Documentation Access from the Explorer /Database /Database/Data Management /Database/Data Management/General /Database/Data Management/Database Cache Settings /Database/Data Management/WEDD /Database/Script Manager /Database/Script Manager/Script Manager

586

4e Dimension - Langage

/Backup /Backup/Configuration /Backup/Configuration/Backup Contents /Backup/Configuration/Backup File Destination Folder /Backup/Configuration/Last Backup Information /Backup/Configuration/Log Management /Backup/Scheduler /Backup/Scheduler/Backup Frequency /Backup/Backup /Backup/Backup/General /Backup/Backup/Archive /Backup/Restore /Backup/Restore/Automatic Restore /Client-Server /Client-Server/Configuration /Client-Server/Configuration/Network /Client-Server/Configuration/Client-Server Connections Timeout /Client-Server/Configuration/Client-Server Communication /Client-Server/Configuration/4D Open /Client-Server/Publishing /Client-Server/Publishing/Publishing Information /Client-Server/Publishing/Allow-Deny Table Configuration /Client-Server/Publishing/Encryption /Web /Web/Configuration /Web/Configuration/Web Server Publishing /Web/Configuration/Default HTML Path /Web/Configuration/Starting Mode /Web/Advanced /Web/Advanced/Cache /Web/Advanced/Web Process /Web/Advanced/Options /Web/Advanced/Web Passwords /Web/Options /Web/Options/Text Conversion /Web/Options/4D WebSTAR /Web/Options/Persisent Connections /Web Services /Web Services/SOAP /Web Services/SOAP/Server Side /Web Services/SOAP/Client Side Exemples (1) Ouverture des Prfrences sur la premire page :

OUVRIR PREFERENCES 4D("/")

4e Dimension - Langage

587

(2) Ouverture de la page Raccourcis clavier du thme Application :

OUVRIR PREFERENCES 4D("/Application/Shortcuts")

(3) Ouverture de la page Editeur de mthodes du thme Mode Structure :

OUVRIR PREFERENCES 4D("Default Display")

Variables et ensembles systme Si llment demand est trouv et correctement ouvert, la variable systme OK retourne 1 ; sinon, elle retourne 0.

588

4e Dimension - Langage

18 ________________________ Environnement systme

4e Dimension - Langage

589

590

4e Dimension - Langage

Hauteur ecran

Environnement systme version 5.5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Hauteur ecran {(*)} Numrique Paramtre * Type * Description Windows : hauteur de la fentre de l'application ou hauteur de l'cran si * est spcifi Macintosh : hauteur de l'cran principal Hauteur exprime en pixels

Rsultat

Numrique

Description Sous Windows, Hauteur ecran retourne la hauteur de la fentre d'application 4D (fentre MDI). Si vous passez le paramtre optionnel *, Hauteur ecran retourne la hauteur de l'cran. Sous MacOS, Hauteur ecran retourne la hauteur de l'cran principal, c'est--dire celui qui contient la barre de menus. Rfrence COORDONNEES ECRAN, Largeur ecran.

4e Dimension - Langage

591

Largeur ecran

Environnement systme version 5.5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Largeur ecran {(*)} Numrique Paramtre * Type * Description Windows : largeur de la fentre de l'application ou largeur de l'cran si * est spcifi Macintosh : largeur de l'cran principal Largeur exprime en pixels

Rsultat

Numrique

Description Sous Windows, Largeur ecran retourne la largeur de la fentre d'application 4D (fentre MDI). Si vous passez le paramtre optionnel *, Largeur ecran retourne la largeur de l'cran. Sous MacOS, Largeur ecran retourne la largeur de l'cran principal, c'est--dire celui qui contient la barre de menus. Rfrence COORDONNEES ECRAN, Hauteur ecran.

592

4e Dimension - Langage

Nombre ecrans

Environnement systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nombre ecrans Entier long Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Entier long Nombre d'crans

Description Nombre ecrans renvoie le nombre de moniteurs qui sont connects votre machine. Note pour les utilisateurs Windows : Sous Windows, Nombre ecrans renvoie toujours 1. Rfrence COORDONNEES ECRAN, Ecran principal, Hauteur ecran, Largeur ecran, PROFONDEUR ECRAN.

4e Dimension - Langage

593

COORDONNEES ECRAN

Environnement systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

COORDONNEES ECRAN (gauche; haut; droite; bas{; cran}) Paramtre gauche haut droite bas cran Type Entier Entier Entier Entier Entier Description Coordonne gauche de la zone de l'cran Coordonne suprieure de la zone de l'cran Coordonne droite de la zone de l'cran Coordonne infrieure de la zone de l'cran Numro de l'cran ou cran principal si omis

long long long long long

Description La commande COORDONNEES ECRAN retourne dans les paramtres gauche, haut, droite et bas les coordonnes de l'cran spcifi dans le paramtre cran. Sous Windows Gnralement, vous n'aurez pas besoin de passer le paramtre cran. Sous Macintosh Si vous omettez le paramtre cran, COORDONNEES ECRAN retourne les coordonnes de l'cran principal, c'est--dire celui dans lequel la barre de menus est affiche. Rfrence Ecran principal, Nombre ecrans, PROFONDEUR ECRAN.

594

4e Dimension - Langage

PROFONDEUR ECRAN

Environnement systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

PROFONDEUR ECRAN (profondeur; couleurs{; cran}) Paramtre profondeur couleurs cran Type Numrique Numrique Numrique Description Profondeur de l'cran (nombre de couleurs = 2 ^ profondeur) 1 = cran couleur 0 = cran noir et blanc ou niveaux de gris Numro de l'cran ou cran principal si omis

Description La commande PROFONDEUR ECRAN retourne dans les paramtres profondeur et couleurs les caractristiques du moniteur utilis. Aprs l'appel : La profondeur de l'cran est retourne dans profondeur. La profondeur leve en tant que puissance de 2 vous permet de connatre le nombre de couleurs que votre moniteur affiche. Si par exemple votre moniteur est paramtr en 256 couleurs (2^8), la profondeur de votre cran est de 8. 4e Dimension fournit les constantes prdfinies suivantes : Constante Noir et blanc Quatre couleurs Seize couleurs Deux cent cinquante six coul Milliers de couleurs Million de couleurs 24 bits Million de couleurs 32 bits Type Entier Entier Entier Entier Entier Entier Entier long long long long long long long Valeur 0 2 4 8 16 24 32

Si le moniteur est configur pour afficher des couleurs, le paramtre couleur vaut 1. Si le moniteur est configur pour afficher des niveaux de gris, couleur vaut 0 (zro). Notez que cette valeur n'a de signification que sous MacOS. Vous disposez des constantes prdfinies suivantes : Constante Est en niveaux de gris Est en couleurs Type Entier long Entier long Valeur 0 1

4e Dimension - Langage

595

Le paramtre optionnel cran vous permet de spcifier le numro du moniteur sur lequel vous souhaitez obtenir des informations. Sous Windows, vous n'aurez gnralement pas besoin d'utiliser ce paramtre. Sous MacOS, si vous omettez le paramtre cran, la commande retourne la profondeur de l'cran principal, c'est--dire celui qui contient la barre de menus. Exemple Votre application affiche de nombreux graphiques en couleurs. Vous pouvez crire, quelque part dans votre base :

PROFONDEUR ECRAN ($vlProf;$vlCouleur) Si ($vlProf<8) ALERTE("Les formulaires seraient plus beaux si le moniteur"+" tait configur en 256 couleurs ou plus.") Fin de si

Rfrence FIXER PROFONDEUR ECRAN, Nombre ecrans.

596

4e Dimension - Langage

FIXER PROFONDEUR ECRAN

Environnement systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER PROFONDEUR ECRAN (profondeur{; couleurs{; cran}}) Paramtre profondeur couleurs cran Type Numrique Numrique Numrique Description Profondeur de l'cran (nombre de couleurs = 2 ^ profondeur) 1 = cran couleur 0 = cran en niveaux de gris Numro de l'cran ou cran principal si omis

Description Sous Windows, cette commande ne fait rien. Sous MacOS, FIXER PROFONDEUR ECRAN vous permet de modifier la profondeur et les paramtres de couleurs/niveaux de gris de l'cran dont vous avez pass le numro dans cran. Si vous ne passez pas ce paramtre, la commande s'applique l'cran principal. Pour connatre les valeurs passer dans les paramtres profondeur et couleurs, reportezvous la description de la commande PROFONDEUR ECRAN. Rfrence PROFONDEUR ECRAN.

4e Dimension - Langage

597

Ecran principal

Environnement systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ecran principal Entier long Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Entier long Numro de l'cran contenant la barre de menus

Description La commande Ecran principal retourne le numro de l'cran dans lequel se trouve la barre de menus. Note pour les utilisateurs Windows : Sous Windows, Ecran principal renvoie toujours 1. Rfrence Hauteur barre de menus, Nombre ecrans.

598

4e Dimension - Langage

Hauteur barre de menus

Environnement systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Hauteur barre de menus Entier long Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Entier long Hauteur (exprime en pixels) de la barre de menus (retourne zro si la barre de menus est cache)

Description La commande Hauteur barre de menus retourne la hauteur de la barre de menus, exprime en pixels. Rfrence AFFICHER BARRE DE MENUS, CACHER BARRE DE MENUS, Ecran principal.

4e Dimension - Langage

599

LISTE DES POLICES

Environnement systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LISTE DES POLICES (polices) Paramtre polices Type Tableau Description Tableau des noms des polices disponibles

Description La commande LISTE DES POLICES remplit le tableau polices (de type Alpha ou Texte) avec les noms des polices disponibles dans votre systme. Exemple Dans un formulaire, vous voulez obtenir une liste droulante qui affiche les polices disponibles dans le systme. Ecrivez la mthode suivante pour votre objet liste droulante : Au cas ou : (Evenement formulaire=Sur chargement) TABLEAU ALPHA (63;taPolices;0) LISTE DES POLICES(taPolices) ` ... Fin de cas

Rfrence Nom de police, Numero de police.

600

4e Dimension - Langage

Nom de police

Environnement systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nom de police (numro) Alpha Paramtre numro Rsultat Type Entier long Alpha Description Numro de la police de laquelle rcuprer le nom Nom de la police

Description La fonction Nom de police retourne le nom de la police dont le numro est pass dans le paramtre numro. Si aucune police de ce numro n'est disponible, Nom de police retourne une chane vide. Exemples (1) Pour afficher un objet dans votre formulaire avec la police du systme par dfaut, crivez la ligne suivante :

` 0 est le numro de la police du systme CHANGER JEU DE CARACTERES(monObjet;Nom de police(0))

(2) Pour afficher un objet dans votre formulaire avec la police de l'application par dfaut, crivez la ligne suivante :

` 1 est le numro de la police de l'application CHANGER JEU DE CARACTERES(monObjet;Nom de police(1))

Rfrence LISTE DES POLICES, Numero de police.

4e Dimension - Langage

601

Numero de police

Environnement systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Numero de police (nomPolice) Entier long Paramtre nomPolice Rsultat Type Alpha Entier long Description Nom de la police de laquelle rcuprer le numro Numro de police

Description La fonction Numero de police retourne le numro de la police dont le nom est pass dans le paramtre nomPolice. Si aucune police de ce nom n'existe, Numero de police retourne 0. Exemple Si certains formulaires dans votre base utilisent une police qui s'appelle Spciale, vous pouvez crire le code suivant :

Si (Numero de police("Spciale")=0) ALERTE("Vous devriez installer la police Spciale pour que ce formulaire soit correctement affich.") Fin de si

Rfrence LISTE DES POLICES, Nom de police.

602

4e Dimension - Langage

PROPRIETES PLATE FORME

Environnement systme version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

PROPRIETES PLATE FORME (plateForme{; systme{; machine}}) Paramtre plateForme systme machine Type Numrique Numrique Numrique Description 1 = Macintosh 68K 2 = Power Macintosh 3 = Windows Dpend de la version que vous utilisez Dpend de la version que vous utilisez

Description La commande PROPRIETES PLATE FORME retourne des informations sur le type de plateforme que vous utilisez, la version du systme d'exploitation et le processeur installs. PROPRIETES PLATE FORME retourne ces informations dans les paramtres plateForme, systme et machine. plateForme indique si vous utilisez une version Macintosh 68K, PowerPC ou Windows de 4e Dimension. Ce paramtre retourne une des constantes prdfinies suivantes : Constante Macintosh 68K Power Macintosh Windows Type Entier long Entier long Entier long Valeur 1 2 3

Les informations retournes dans le paramtre systme dpendent de la version de 4e Dimension que vous utilisez. Version Macintosh Avec une version MacOS de 4e Dimension, le paramtre systme retourne une valeur sur 32 bits (Entier long), dans laquelle le "mot machine haut" est inutilis et le "mot machine bas" est structur ainsi : - L'octet suprieur contient le numro de version principal, - L'octet infrieur est compos de deux "nibbles" de 4 bits chacun. Le nibble suprieur est le numro de mise jour principal et le nibble infrieur le numro de mise jour secondaire. Par exemple : le systme 9.0.4 est cod $0904, vous recevrez donc la valeur dcimale 2308. Note : Dans 4D, vous pouvez extraire ces valeurs l'aide des Oprateurs numriques % (modulo) et \ (division entire) ou des Oprateurs sur les bits.

4e Dimension - Langage

603

Utilisez la formule suivante pour connatre le numro de version principal de MacOS :

PROPRIETES PLATE FORME($vlPlatform;$vlSystem) $vlResult:=$vlSystem\256 `Si $vlResult = 8 vous tes sous MacOS 8.x `Si $vlResult = 9 vous tes sous MacOS 9.x `Si $vlResult = 16 vous tes sous MacOS 10.x

Version Windows Avec une version Windows de 4e Dimension, le paramtre systme retourne une valeur sur 32 bits (Entier long), structure ainsi : Si le bit suprieur vaut 0, vous utilisez Windows NT ou Windows 2000. S'il vaut 1, vous utilisez Windows 95 ou Windows 98. Note : Le bit suprieur dtermine le signe de la valeur Entier long. De ce fait, dans 4D, vous avez simplement besoin de tester la valeur ; si elle est positive, vous tes sous Windows NT, Windows 2000 ou Windows XP. Vous pouvez galement utiliser les Oprateurs sur les bits. L'octet infrieur fournit le numro de version principal de Windows. S'il vaut 4, vous utilisez Windows 95, 98 ou Windows NT 4. S'il vaut 5, vous utilisez Windows 2000 ou Windows XP. Dans les deux cas, le signe de la valeur indique si vous utilisez Windows NT/2000 ou non. L'octet infrieur suivant fournit le numro de version secondaire de Windows. Sous Windows 95, sa valeur est 0. Note : Dans 4D, vous pouvez extraire ces valeurs l'aide des Oprateurs numriques % (modulo) et \ (division entire) ou des Oprateurs sur les bits. Le paramtre machine retourne une valeur que vous pouvez comparer aux constantes prdfinies suivantes : Constante INTEL 386 INTEL 486 Pentium PowerPC 601 PowerPC 603 PowerPC 604 PowerPC G3 Autres G3 et suprieurs Type Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long Valeur 386 486 586 601 603 604 510 406

604

4e Dimension - Langage

Note : Une liste jour des numros Macintosh est publie par Apple Computer, Inc. dans sa documentation technique. De nouvelles valeurs apparaissent mesure qu'Apple ou d'autres fabricants crent de nouveaux modles de Macintosh. Exemple La mthode projet suivante affiche une bote de dialogue d'alerte dcrivant le systme d'exploitation utilis : ` Mthode projet VERSION SYSTEME

PROPRIETES PLATE FORME($vlPlatform;$vlSystem;$vlMachine) Si (($vlPlatform<1) | ($vlPlatform>3)) $vsPlatformOS:="" Sinon Si ($vlPlatform=3) $vsPlatformOS:="" Si ($vlSystem<0) $winMajVers:=((2^31)+$vlSystem)%256 $winMinVers:=(((2^31)+$vlSystem)\256)%256 Si ($winMinVers=0) $vsPlatformOS:="Windows 95" Sinon $vsPlatformOS:="Windows 98" Fin de si Sinon $winMajVers:=$vlSystem%256 $winMinVers:=($vlSystem\256)%256 Au cas ou : ($winMajVers=4) $vsPlatformOS:="Windows NT" : ($winMajVers=5) Si ($winMinVers=0) $vsPlatformOS:="Windows 2000" Sinon $vsPlatformOS:="Windows XP" Fin de si Fin de cas Fin de si $vsPlatformOS:=$vsPlatformOS+" version "+Chaine($winMajVers)+"."+ Chaine($winMinVers)

4e Dimension - Langage

605

Sinon $vsPlatformOS:="MacOS version " Si (($vlSystem\256) = 16) $vsPlatformOS:=$vsPlatformOS+"10" Sinon $vsPlatformOS:=$vsPlatformOS+Chaine($vlSystem\256) Fin de si $vsPlatformOS:=$vsPlatformOS+"."+Chaine(($vlSystem\16)%16)+ (("."+Chaine($vlSystem%16))*Num(($vlSystem%16) # 0)) Fin de si Fin de si ALERTE($vsPlatformOS) Sous Windows, vous obtenez une bote de dialogue semblable celle-ci :

Sous MacOS, vous obtenez une bote de dialogue semblable celle-ci :

Rfrence Oprateurs sur les bits.

606

4e Dimension - Langage

Dossier systeme

Environnement systme version 6.7 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Dossier systeme {(type)} Alpha Paramtre type Rsultat Type Entier long Alpha Description Type de dossier systme Chemin daccs dun dossier du systme actif

Description La fonction Dossier systeme retourne le chemin d'accs du dossier Systme Windows ou MacOS actif, ou le chemin daccs dun dossier particulier l'intrieur du dossier systme actif. Le paramtre optionnel type vous permet dindiquer le type de dossier dont vous souhaitez obtenir le chenim d'accs. Si vous ne passez pas ce paramtre, Dossier systeme retourne le chemin daccs du dossier Systme Windows ou MacOS actif. Vous passez dans type un code reprsentant le type de dossier. 4D fournit les constantes prdfinies suivantes (places dans le thme Dossier systme) : Constante Systme Polices Prfrences ou Profiles_Tous Prfrences ou Profiles Ouverture au dmarrage_Tous Ouverture au dmarrage Ouverture lextinction_Tous Ouverture lextinction Menu Pomme ou Dmarrer_Tous Menu Pomme ou Dmarrer Extensions Mac Tableaux de bord Mac System Win System32 Win Favoris Win Bureau Win Program Files Win Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long long Valeur 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

4e Dimension - Langage

607

Les constantes Extensions Mac et Tableaux de bord Mac sont rserves une utilisation sous MacOS. Lorsquelles sont utilises sous Windows, Dossier systeme retourne une chane vide. Les cinq dernires constantes sont rserves une utilisation sous Windows. Lorsquelles sont utilises sous MacOS, Dossier systeme retourne une chane vide. Lemplacement de certains dossiers peut tre diffrent suivant le type de session ouverte par lutilisateur. Les constantes 2 9 permettent de choisir si vous souhaitez obtenir le chemin daccs du dossier spcifique lutilisateur courant (constantes simples) ou commun tous les utilisateurs (constantes suivies de Tous). Note : Sous Windows, cette commande ncessite la prsence du fichier systme SHFolder.DLL version 4.71 minimum dans le dossier systme actif de Windows. Sinon, la commande retourne des chanes vides pour tous les types de dossiers, hormis pour le type 0 (Systme). Rfrence Dossier 4D, Dossier temporaire.

608

4e Dimension - Langage

Dossier temporaire

Environnement systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Dossier temporaire Alpha Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Alpha Chemin d'accs au dossier temporaire

Description La fonction Dossier temporaire retourne le chemin d'accs au dossier temporaire courant tel que dfini par votre systme d'exploitation. Exemple Reportez-vous l'exemple de la commande AJOUTER A PRESSE PAPIERS. Rfrence Dossier systeme.

4e Dimension - Langage

609

Nom de la machine

Environnement systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nom de la machine Alpha Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Alpha Nom de la machine sur le rseau

Description La commande Nom de la machine retourne le nom de votre machine tel qu'il a t dfini dans le tableau de bord Rseau. Exemple Mme si vous n'utilisez pas la version client/serveur de 4D, votre application peut comprendre des services rseaux qui ncessitent que votre machine soit correctement configure. Dans la Mthode base Sur ouverture de votre application, vous pouvez crire :

Si ( (Nom de la machine="") | (Nom du possesseur="")) ` Afficher ici une bote de dialogue demandant l'utilisateur de configurer ` ses paramtres rseau Fin de si

Rfrence Nom du possesseur.

610

4e Dimension - Langage

Nom du possesseur

Environnement systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nom du possesseur Alpha Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Alpha Nom du possesseur de la machine sur le rseau

Description La fonction Nom du possesseur retourne le nom du possesseur de la machine, tel qu'il a t dfini dans le tableau de bord Rseau. Exemple Reportez-vous l'exemple de la commande Nom de la machine. Rfrence Nom de la machine.

4e Dimension - Langage

611

Gestalt

Environnement systme version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Gestalt (slecteur; valeur) Numrique Paramtre slecteur valeur Rsultat Type Alpha Numrique Numrique Description Slecteur gestalt (4 caractres) Rsultat du gestalt Code d'erreur rsultant

Description La commande Gestalt retourne dans valeur une valeur numrique reprsentant les caractristiques de la configuration matrielle et logicielle de votre systme, en fonction du slecteur que vous avez pass dans le paramtre slecteur. Si l'information demande est obtenue, la fonction Gestalt retourne 0, sinon elle retourne l'erreur -5550. Si le slecteur est inconnu, Gestalt retourne l'erreur -5551. Important : Le Gestalt Manager est spcifique MacOS. Certains des slecteurs sont galement implments sous Windows mais l'utilit de cette fonction reste limite sur cette plate-forme. Pour plus d'informations sur les slecteurs que vous pouvez passer dans Gestalt, reportezvous la documentation technique Apple relative au Gestalt Manager, consultable en ligne l'adresse suivante : http://developer.apple.com/documentation/Carbon/Reference/Gestalt_Manager/index.html Exemple Dans la version 9.2 de MacOS, le code suivant :

$vlErrCode:=Gestalt("sysv";$vlInfo) Si ($vlErrCode=0) ALERTE("Vous utilisez la version suivante du systme : "+Chane($vlInfo;"&x")) Fin de si

... affiche l'alerte Vous utilisez la version suivante du systme : 0x0920.

612

4e Dimension - Langage

ENREGISTRER EVENEMENT

Environnement systme version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENREGISTRER EVENEMENT (message{; importance}) Paramtre message importance Type Alpha Entier Description Contenu du message Niveau dimportance du message

Note : Cette fonctionnalit est disponible sous Windows NT uniquement. Description 4D permet de tirer parti de lObservateur dvnements de Windows NT. Ce journal reoit et stocke des messages en provenance des applications en cours dexcution. Il permet donc de contrler le droulement dune session de travail. Pour plus dinformations sur ce point, reportez-vous au manuel Mode Structure. Pour que cette fonctionnalit soit disponible, le service Journal dvnements de Windows NT doit tre dmarr. La commande ENREGISTRER EVENEMENT vous permet dajouter des messages personnaliss qui apparatront dans lObservateur dvnements de Windows NT. Vous passez dans message le message inscrire dans le journal dvnements. Vous pouvez attribuer ce message un niveau dimportance, ce qui facilite la lecture du journal dvnements. Il existe trois niveaux dimportance : Information, Avertissement et Erreur. Le paramtre importance vous permet de fixer le niveau dimportance de message. 4e Dimension vous propose les constantes prdfinies suivantes, places dans le thme Journal dvnements Windows NT : Constante Message dinformation (valeur par dfaut) Message davertissement Message derreur Type Entier Entier Entier Valeur 0 1 2

Si vous ne passez pas le paramtre importance ou passez une valeur invalide, la valeur par dfaut (0) est utilise. Exemple Afin de conserver une trace des lancements de votre base, vous pouvez crire, dans la Mthode base Sur ouverture :

ENREGISTRER EVENEMENT ("Dmarrage de la base Facturation")

A chaque ouverture de la base, cette information sera inscrite dans lObservateur dvnements de Windows NT, avec le niveau dimportance 0. 4e Dimension - Langage 613

FIXER VARIABLE ENVIRONNEMENT

Environnement systme version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER VARIABLE ENVIRONNEMENT (nomVar; valeurVar) Paramtre nomVar valeurVar Type Chane Chane Description Nom de la variable fixer Valeur de la variable ou "" pour rtablir la valeur par dfaut

Description La commande FIXER VARIABLE ENVIRONNEMENT vous permet de fixer la valeur dune variable denvironnement sous MacOS X et Windows. Elle est destine une utilisation conjointe avec les commandes FIXER EXECUTABLE CGI ou LANCER PROCESS EXTERNE. Passez dans le paramtre nomVar le nom de la variable dfinir et dans le paramtre valeurVar sa valeur. Pour obtenir la liste gnrale des variables denvironnement et leurs valeurs possibles, reportez-vous la documentation technique de votre systme dexploitation. Pour connatre la liste des variables denvironnement utilisables avec la commande FIXER EXECUTABLE CGI, reportez-vous la section Support des CGI dans le chapitre Serveur Web. Pour connatre la liste des variables denvironnement utilisables avec la commande LANCER PROCESS EXTERNE, reportez-vous la documentation de cette commande. Exemple Reportez-vous l'exemple 7 de la commande LANCER PROCESS EXTERNE. Rfrence FIXER EXECUTABLE CGI, LANCER PROCESS EXTERNE, Support des CGI.

614

4e Dimension - Langage

LANCER PROCESS EXTERNE

Environnement systme version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LANCER PROCESS EXTERNE (nomFichier{; fluxEntre{; fluxSortie{; fluxErreur}}}) Paramtre nomFichier fluxEntre fluxSortie fluxErreur Type Chane Chane Chane Chane Description Chemin daccs et arguments du fichier lancer Flux dentre (stdin) Flux de sortie (stdout) Flux derreur (stderr)

Attention : Cette commande est destine aux utilisateurs avancs. Description La commande LANCER PROCESS EXTERNE permet de lancer un process externe depuis 4e Dimension, sous MacOS X et Windows. Sous MacOS X, cette commande donne accs toutes les applications pouvant tre lances depuis le Terminal. Note : Pour les utilisateurs de 4D Pack, cette commande reprend et tend les possibilits offertes par la commande AP_Sublaunch. Passez dans le paramtre nomFichier le chemin daccs absolu de lapplication excuter ainsi que les arguments ncessaires, le cas chant. Sous MacOS X, vous pouvez galement passer uniquement le nom de lapplication excuter, 4e Dimension utilisera alors la variable denvironnement PATH pour localiser lexcutable. Le paramtre fluxEntre (facultatif) contient le stdin du process externe. Aprs lexcution de la commande, les paramtres fluxSortie et fluxErreur (sils sont passs) retournent respectivement le stdout et le stderr du process externe. Exemples sous MacOS X Tous les exemples suivants utilisent le Terminal de MacOS X, accessible dans le dossier Applications/Utilitaires. (1) Pour modifier les accs un fichier (chmod est la commande MacOS X permettant de modifier les accs des fichiers) :

LANCER PROCESS EXTERNE ("chmod +x /dossier/monfichier.txt")

4e Dimension - Langage

615

(2) Pour diter un fichier texte (cat est la commande MacOS X permettant dditer les fichiers) ; dans cet exemple, le chemin daccs absolu de la commande est pass : C_TEXTE(entre;sortie) entre:="" LANCER PROCESS EXTERNE ("/bin/cat /dossier/monfichier.txt";entre;sortie)

(3) Pour rcuprer la liste du contenu du dossier Users (ls -l est semblable la commande dir du DOS) :

C_TEXTE($In;$Out) LANCER PROCESS EXTERNE("/bin/ls -l /Users";$In;$Out)

Exemples sous Windows (4) Pour lancer lapplication NotePad :

LANCER PROCESS EXTERNE ("C:\\WINDOWS\\notepad.exe")

(5) Pour lancer lapplication NotePad et ouvrir un document spcifique :

LANCER PROCESS EXTERNE ("C:\\WINDOWS\\notepad.exe C:\\Docs\\nouveau dossier\\res.txt")

(6) Pour lancer lapplication Microsoft Word et ouvrir un document spcifique ( noter lemploi de deux "") : $mondoc:="C:\\Program Files\\Microsoft Office\\Office10\\WINWORD.EXE\ "C:\\Documents and Settings\\JeanMarc\\Bureau \\MesDocs\\Nouveau dossier\\essai.xml\"" LANCER PROCESS EXTERNE($mondoc;$tIn;$tOut)

(7) Pour excuter un script Perl (requiert linstallation pralable dActivePerl) : C_TEXTE($entre;$sortie) FIXER VARIABLE ENVIRONNEMENT("mavariable";"valeur") LANCER PROCESS EXTERNE ("D:\\Perl\\bin\\perl.exe D:\\Perl\\eg\\cgi\\env.pl"; $entre;$sortie)

Rfrence FIXER VARIABLE ENVIRONNEMENT. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1. Sinon (fichier non trouv, mmoire insuffisante, etc.), elle prend la valeur 0.

616

4e Dimension - Langage

19 ________________________ Etats rapides

4e Dimension - Langage

617

618

4e Dimension - Langage

QR ETAT

Etats rapides version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR ETAT ({table; }document{; hirarchique{; assistant{; recherche{; *}}}}) Paramtre table document hirarchique assistant recherche * Type Table Alpha Boolen Boolen Boolen * Description Table utiliser ou Table par dfaut si ce paramtre est omis Document d'tat rapide charger Vrai = Afficher les tables N lies Faux ou omis = Ne pas les afficher Vrai = Afficher le bouton de lassistant Faux ou omis = Ne pas lafficher Vrai = Afficher les outils de recherche et la table principale; Faux ou omis = Ne pas les afficher Suppression des botes de dialogue d'impression

Description La commande QR ETAT imprime un tat pour table, l'aide de l'Editeur d'tats rapides prsent ci-dessous.

4e Dimension - Langage

619

Cet diteur permet l'utilisateur de construire en totalit son propre tat. Pour plus d'informations sur la cration d'tats l'aide de l'Editeur d'tats rapides, reportez-vous au manuel Mode Utilisation de 4e Dimension. Notes : L'diteur n'apparat pas si la table a t dclare Invisible. Lorsque l'diteur est appel via la commande QR ETAT, l'option Tous les liens en automatique, permettant de modifier le statut automatique/manuel des liens, est masque. Ce principe permet au dveloppeur de grer lui-mme ce statut l'aide des commandes FIXER LIENS AUTOMATIQUES et FIXER LIEN CHAMP. document Le paramtre document dsigne un modle d'tat cr dans l'diteur d'tats rapides et sauvegard sur disque. Le document stocke les paramtres de l'tat, pas les enregistrements. Si une chane vide ("") est passe dans document, QR ETAT affiche une bote de dialogue d'ouverture de fichiers, dans laquelle l'utilisateur peut choisir un modle d'tat imprimer. Si le paramtre document spcifie un document qui n'existe pas (si vous passez, par exemple, Caractere (1) dans document), l'diteur d'tats rapides s'affiche. hirarchique Le paramtre hirarchique indique si les tables lies N doivent tre ou non affiches dans la liste de slection de champs. Par dfaut, sa valeur est 0 (les tables N ne sont pas affiches). assistant Ce paramtre permet dindiquer si le bouton Ouvrir l'assistant doit apparatre ou non dans la fentre de lditeur dtats rapides. Passez Vrai pour afficher le bouton et Faux pour le masquer. Par dfaut (si ce paramtre est omis), le bouton n'est pas affich. recherche Ce paramtre permet dindiquer si le bouton Nouvelle recherche doit apparatre ou non dans la fentre de lditeur dtats rapides. Passez Vrai pour afficher le bouton et Faux pour le masquer. Par dfaut (si ce paramtre est omis), le bouton n'est pas affich. Une fois qu'un fichier d'tat est slectionn, les botes de dialogue d'impression s'affichent, sauf si le paramtre * a t spcifi dans ce cas, elles ne s'affichent pas. L'tat est alors imprim. Lorsque l'Editeur d'tats rapides n'est pas affich, la variable systme OK prend la valeur 1 si un tat est imprim ; sinon elle prend la valeur 0 (zro) par exemple si l'utilisateur a cliqu sur Annuler dans les botes de dialogue d'impression.

620

4e Dimension - Langage

4D Server : Cette commande peut tre excute sur 4D Server dans le cadre d'une procdure stocke. Dans ce contexte : Veillez ce quaucune bote de dialogue napparaisse sur le poste serveur (sauf besoin spcifique). Pour cela, il est ncessaire dappeler la commande avec le paramtre * ou >. La syntaxe faisant apparatre lditeur d'tats rapide ne fonctionne pas avec 4D Server, dans ce cas la variable systme OK prend la valeur 0. En cas de problme sur limprimante (plus de papier, imprimante dconnecte, etc.), aucun message d'erreur n'est gnr. Exemples (1) L'exemple suivant permet l'utilisateur d'effectuer une recherche dans la table [Personnes], puis imprime automatiquement l'tat "Liste dtaille" : CHERCHER ([Personnes]) Si (OK=1) QR ETAT ([Personnes]; "Liste dtaille";Faux;Faux;Faux;*) Fin de si

(2) L'exemple suivant permet l'utilisateur d'effectuer une recherche dans la table [Personnes], puis de slectionner le document d'tat qui sera ensuite utilis pour l'impression : CHERCHER ([Personnes]) Si (OK=1) QR ETAT ([Personnes];"";Faux;Faux;Faux) Fin de si

(3) L'exemple suivant permet l'utilisateur d'effectuer une recherche dans la table [Personnes], puis affiche l'Editeur d'tats rapides afin que l'utilisateur puisse construire, charger, sauvegarder ou imprimer tout tat, avec ou sans l'assistant : CHERCHER ([Personnes]) Si (OK=1) QR ETAT ([Personnes]; Caractere(1);Faux;Vrai) Fin de si

(4) Reportez-vous l'exemple de la commande FIXER LIEN CHAMP. Rfrence IMPRIMER ETIQUETTES, IMPRIMER SELECTION.

4e Dimension - Langage

621

QR ETAT VERS BLOB

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR ETAT VERS BLOB (zone; blob) Paramtre zone blob Type Entier long BLOB Description Rfrence de la zone BLOB devant recevoir l'tat rapide

Description La commande QR ETAT VERS BLOB place dans le BLOB blob (variable ou champ) ltat dont la rfrence a t passe dans le paramtre zone. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Exemple L'instruction suivante affecte l'tat rapide stock dans la zone MaZone un champ BLOB :

QR ETAT VERS BLOB (MaZone;[Table 1]ChampBlob)

Rfrence QR BLOB VERS ETAT.

622

4e Dimension - Langage

QR BLOB VERS ETAT

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR BLOB VERS ETAT (zone; blob) Paramtre zone blob Type Entier long BLOB Description Rfrence de la zone BLOB contenant l'tat

Description La commande QR BLOB VERS ETAT place ltat contenu dans le paramtre blob dans la zone d'tat rapide dsigne par le paramtre zone. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre blob est incorrect, lerreur -9852 est gnre. Exemples (1) Le code suivant affiche dans la zone MaZone l'tat rapide etat.4qr, stock ct du fichier de structure de la base. A noter que le fichier d'tat peut avoir t cr avec une version de 4e Dimension antrieure la 2003 : C_BLOB($doc) C_ENTIER LONG(MaZone) DOCUMENT VERS BLOB("etat.4qr";$doc) QR BLOB VERS ETAT (MaZone;$doc)

(2) L'instruction suivante affiche l'tat stock dans le champ ChampBlob dans la zone MaZone :

QR BLOB VERS ETAT (MaZone;[Table 1]ChampBlob)

Rfrence QR ETAT VERS BLOB.

4e Dimension - Langage

623

QR Creer zone hors ecran

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR Creer zone hors ecran Entier long Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Entier long Rfrence de la zone cre

Description La commande QR Creer zone hors ecran cre une zone d'Etat rapide hors cran et retourne son numro de rfrence. Rfrence QR SUPPRIMER ZONE HORS ECRAN.

624

4e Dimension - Langage

QR SUPPRIMER ZONE HORS ECRAN

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR SUPPRIMER ZONE HORS ECRAN (zone) Paramtre zone Type Entier long Description Rfrence de la zone

Description La commande QR SUPPRIMER ZONE HORS ECRAN efface de la mmoire la zone hors cran dont la rfrence a t passe dans le paramtre zone. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Rfrence QR Creer zone hors ecran.

4e Dimension - Langage

625

QR FIXER DESTINATION

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR FIXER DESTINATION (zone; type{; spcificits}) Paramtre zone type spcificits Type Entier long Entier long Chane | Variable Description Rfrence de la zone Type d'tat Spcificits du type de destination

Description La commande QR FIXER DESTINATION permet de dfinir le type de destination de sortie de l'tat rapide contenu dans la zone. Passez dans le paramtre type une des constantes du thme QR Destination de sortie. Le contenu du paramtre spcificits dpend de la valeur de type. Le tableau suivant liste les valeurs qui peuvent tre passes dans les paramtres type et spcificits. Destination Imprimante Fichier texte 4D View 4D Chart Fichier HTML Constante (valeur) qr imprimante (1) qr fichier texte (2) qr zone 4D View (3) qr zone 4D Chart (4) qr fichier HTML (5) spcificits N.A. Chemin d'accs du fichier N.A. N.A. Chemin d'accs du fichier

Fichier texte (2) : Si vous passez une chane vide dans le paramtre spcificits, une bote de dialogue standard d'enregistrement de fichiers apparat. Si vous passez un chemin d'accs valide, l'tat rapide sera enregistr l'emplacement indiqu. Par dfaut, le dlimiteur de champ est le caractre Tabulation (code ASCII 9) et le dlimiteur d'enregistrement est le caractre Retour chariot (code ASCII 13). Vous pouvez modifier ces caractres par dfaut en changeant la valeur des variables systme FldDelimit et RecDelimit. Sous Windows, si FldDelimit vaut 13, un caractre 10 (Saut de ligne) sera ajout aprs le Retour chariot. Tenez compte du fait que ces variables sont utilises par d'autres commandes, par exemple LECTURE ASCII. Toute modification de ces variables est rpercute sur l'ensemble de l'application. 4D View (3) : Si l'utilisateur courant dispose du plug-in 4D View, une fentre externe 4D View est cre et affiche les rsultats des paramtres courants de la zone d'tat rapide.

626

4e Dimension - Langage

4D Chart (4) : une fentre externe 4D Chart est cre et affiche les rsultats des paramtres courants de la zone d'tat rapide. Pour plus d'informations sur le mode de conversion des donnes, veuillez vous rfrer au manuel d'utilisation de l'diteur d'tats rapides. Fichier HTML (5) : Un fichier HTML est gnr d'aprs les paramtres courants de la zone d'tat rapide. Le fichier HTML est bas sur le modle dfini par la commande QR FIXER MODELE HTML. Pour plus d'informations sur le mode de conversion des donnes, veuillez vous rfrer au manuel d'utilisation de l'diteur d'tats rapides. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si la valeur de type de destination est incorrecte, lerreur -9852 est gnre. Exemple L'exemple suivant dfinit le fichier texte "MonDoc.txt" comme type de destination de l'tat puis l'excute :

QR FIXER DESTINATION(MaZone; 2; "MonDoc.txt") QR EXECUTER(MaZone)

Rfrence QR LIRE DESTINATION.

4e Dimension - Langage

627

QR LIRE DESTINATION

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR LIRE DESTINATION (zone; type{; spcificits}) Paramtre zone type spcificits Type Entier long Entier long Chane | Variable Description Rfrence de la zone Type d'tat Spcificits de la destination

Description La commande QR LIRE DESTINATION retourne le type de destination de l'tat rapide contenu dans la zone. Vous pouvez comparer la valeur obtenue dans le paramtre type avec les constantes du thme QR Destination de sortie. Le tableau suivant liste les valeurs qui peuvent tre retournes dans les paramtres type et spcificits : Destination Imprimante Fichier texte 4D View 4D Chart Fichier HTML Constante (valeur) qr imprimante (1) qr fichier texte (2) qr zone 4D View (3) qr zone 4D Chart (4) qr fichier HTML (5) spcificits N.A. Chemin d'accs du fichier N.A. N.A. Chemin d'accs du fichier

Si un numro de zone invalide est pass, lerreur -9850 est gnre. Rfrence QR FIXER DESTINATION.

628

4e Dimension - Langage

QR FIXER PROPRIETE DOCUMENT

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR FIXER PROPRIETE DOCUMENT (zone; proprit; valeur) Paramtre zone proprit valeur Type Entier long Entier long Entier long Description Rfrence de la zone 1 = Dialogue d'impression, 2 = Unit du document Valeur de la proprit

Description La commande QR FIXER PROPRIETE DOCUMENT permet d'afficher la bote de dialogue d'impression ou de dfinir l'unit du document prsent dans la zone. Vous pouvez passer dans le paramtre proprit une des constantes du thme QR Proprits de document : Constante qr dialogue d'impression qr unit Valeur 1 2

Si proprit vaut 1, la commande permet de paramtrer l'affichage de la bote de dialogue d'impression. Dans ce cas : - Si valeur vaut 0, la bote de dialogue d'impression n'est pas affiche avant l'impression. - Si valeur vaut 1, la bote de dialogue d'impression est affiche avant l'impression (valeur par dfaut). Si proprit vaut 2, la commande permet de paramtrer l'unit du document. Dans ce cas : - Si valeur vaut 0, l'unit du document est le point. - Si valeur vaut 1, l'unit du document est le centimtre. - Si valeur vaut 2, l'unit du document est le pouce. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si la valeur du paramtre proprit est incorrecte, lerreur -9852 est gnre. Rfrence QR Lire propriete document.

4e Dimension - Langage

629

QR Lire propriete document

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR Lire propriete document (zone; proprit) Entier long Paramtre zone proprit Rsultat Type Entier long Entier long Entier long Description Rfrence de la zone 1=Dialogue d'impression, 2=Unit du document Valeur de la proprit

Description La commande QR Lire propriete document vous permet de connatre la valeur courante de la proprit d'affichage de la bote de dialogue d'impression ou de l'unit du document prsent dans la zone. Vous pouvez passer dans le paramtre proprit une des constantes du thme QR Proprits de document : Constante qr dialogue d'impression qr unit Valeur 1 2

Si proprit vaut 1, la commande retourne le paramtrage de l'affichage de la bote de dialogue d'impression. Dans ce cas : - Si la commande retourne 0, la bote de dialogue d'impression n'est pas affiche avant l'impression. - Si la commande retourne 1, la bote de dialogue d'impression est affiche avant l'impression (valeur par dfaut). Si proprit vaut 2, la commande retourne le paramtrage de l'unit du document. Dans ce cas : - Si la commande retourne 0, l'unit du document est le point. - Si la commande retourne 1, l'unit du document est le centimtre. - Si la commande retourne 2, l'unit du document est le pouce. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si la valeur du paramtre proprit est incorrecte, lerreur -9852 est gnre. Rfrence QR FIXER PROPRIETE DOCUMENT.

630

4e Dimension - Langage

QR FIXER TYPE ETAT

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR FIXER TYPE ETAT (zone; type) Paramtre zone type Type Entier long Entier long Description Rfrence de la zone Type d'tat

Description La commande QR FIXER TYPE ETAT permet de dfinir le type de l'tat rapide prsent dans la zone. Vous pouvez passer dans le paramtre type une des constantes du thme QR Types dtats : Constante qr tat en liste qr tat tableau crois Valeur 1 2

Si vous dfinissez l'aide de cette commande un nouveau type pour un tat existant, les paramtrages prcdents sont supprims et un nouvel tat vide est cr. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si la valeur de type est incorrecte, lerreur -9852 est gnre. Rfrence QR Lire type etat.

4e Dimension - Langage

631

QR Lire type etat

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR Lire type etat (zone) Entier long Paramtre zone Rsultat Type Entier long Entier long Description Rfrence de la zone Type d'tat

Description La commande QR Lire type etat retourne le type d'tat prsent dans la zone. Si la commande retourne 1, l'tat est de type liste Si la commande retourne 2, l'tat est de type tableau crois Si un numro de zone invalide est pass, lerreur -9850 est gnre. Rfrence QR FIXER TYPE ETAT.

632

4e Dimension - Langage

QR FIXER PROPRIETE ZONE

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR FIXER PROPRIETE ZONE (zone; proprit; valeur) Paramtre zone proprit valeur Type Entier long Entier long Entier long Description Rfrence de la zone Elment d'interface 1 = affich, 0 = cach

Description La commande QR FIXER PROPRIETE ZONE vous permet d'afficher ou de masquer dans la zone l'lment d'interface (barre d'outils ou barre de menus) dont la rfrence est passe dans le paramtre proprit. La barre de menus et les barres d'outils sont numrotes de 1 6 (de haut en bas) et la valeur 7 est associe au menu contextuel. Vous pouvez utiliser les constantes du thme QR Proprits de zone afin de dsigner l'lment d'interface : Constante (valeur) qr barre menu (1) qr barre outils standard (2) qr qr qr qr qr Description Affichage de la barre de menus (Affiche=1, Cache=0) Affichage de la barre d'outils standard (Affiche=1, Cache=0) barre outils style (3) Affichage de la barre d'outils Style (Affiche=1, Cache=0) barre outils oprateurs (4) Affichage de la barre d'outils Oprateurs (Affiche=1, Cache=0) barre outils couleur (5) Affichage de la barre d'outils Couleurs de fond (Affiche=1, Cache=0) barre outils colonnes (6) Affichage de la barre d'outils Colonnes (Affiche=1, Cache=0) menus contextuels (7) Affichage des menus contextuels (Affichs=1, Cachs=0)

Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre proprit est incorrect, lerreur -9852 est gnre. Rfrence QR Lire propriete zone.

4e Dimension - Langage

633

QR Lire propriete zone

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR Lire propriete zone (zone; proprit) Entier long Paramtre zone proprit Rsultat Type Entier long Entier long Entier long Description Rfrence de la zone Elment d'interface 1 = affich, 0 = cach

Description La commande QR Lire propriete zone retourne 0 si l'lment d'interface (barre d'outils ou barre de menus) dont la rfrence est passe dans le paramtre proprit est masqu dans la zone, sinon elle retourne 1. La barre de menus et les barres d'outils sont numrotes de 1 6 (de haut en bas) et la valeur 7 est associe au menu contextuel. Vous pouvez utiliser les constantes du thme QR Proprits de zone afin de dsigner l'lment d'interface : Constante (valeur) qr barre menu (1) qr barre outils standard (2) qr barre outils style (3) qr barre outils oprateurs (4) qr barre outils couleur (5) qr barre outils colonnes (6) qr menus contextuels (7) Description Affichage de la barre de menus (Affiche=1, Cache=0) Affichage de la barre d'outils standard (Affiche=1, Cache=0) Affichage de la barre d'outils Style (Affiche=1, Cache=0) Affichage de la barre d'outils Oprateurs (Affiche=1, Cache=0) Affichage de la barre d'outils Couleurs de fond (Affiche=1, Cache=0) Affichage de la barre d'outils Colonnes (Affiche=1, Cache=0) Affichage des menus contextuels (Affichs=1, Cachs=0)

Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre proprit est incorrect, lerreur -9852 est gnre. Rfrence QR FIXER PROPRIETE ZONE.

634

4e Dimension - Langage

QR FIXER TABLE ETAT

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR FIXER TABLE ETAT (zone; table) Paramtre zone table Type Entier long Entier long Description Rfrence de la zone Numro de table

Description La commande QR FIXER TABLE ETAT dsigne via le paramtre table le numro de la table courante de l'tat rapide dont la rfrence est passe dans le paramtre zone. Il est impratif qu'une table soit associe un tat car l'diteur d'tats utilisera la slection courante de cette table pour afficher les donnes, effectuer les calculs et propager les liens si ncessaire. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre table est incorrect, lerreur -9852 est gnre. Rfrence QR Lire table etat.

4e Dimension - Langage

635

QR Lire table etat

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR Lire table etat (zone) Entier long Paramtre zone Rsultat Type Entier long Entier long Description Rfrence de la zone Numro de table

Description La commande QR Lire table etat retourne le numro de la table courante de l'tat dsign par le paramtre zone. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Rfrence QR FIXER TABLE ETAT.

636

4e Dimension - Langage

QR FIXER PROPRIETE TEXTE

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR FIXER PROPRIETE TEXTE (zone; numColonne; numLigne; proprit; valeur) Paramtre zone numColonne numLigne proprit valeur Type Entier Entier Entier Entier Entier Description Rfrence de la zone Numro de colonne Numro de ligne Numro de proprit Valeur de la proprit dfinie

long long long long long

Description La commande QR FIXER PROPRIETE TEXTE permet de dfinir les proprits de texte de la cellule dsigne par les paramtres numColonne et numLigne. Passez dans zone la rfrence de la zone d'tat rapide. Passez dans numColonne le numro de colonne de la cellule. Passez dans numLigne la rfrence de la ligne de la cellule : si numLigne vaut -1, elle dsigne l'intitul de la colonne. si numLigne vaut -2, elle dsigne la zone Dtail. si numLigne vaut -3, elle dsigne la zone Total gnral. si numLigne vaut -4, elle dsigne l'en-tte de page. si numLigne vaut -5, elle dsigne le pied de page. Vous pouvez passer dans numLigne une des constantes du thme QR Lignes pour Proprits. Note : Vous devez passer une valeur dans numColonne mme lorsque vous passez -4 ou -5 dans le paramtre numLigne (dans ce cas la valeur de numColonne est inutilise). si numLigne contient une valeur positive, elle dsigne la ligne de sous-total correspondante. Note : Dans les tableaux croiss, le principe est similaire sauf pour les valeurs des lignes, qui sont toujours positives.

4e Dimension - Langage

637

Passez dans proprit la valeur de la proprit de texte modifier. Vous pouvez utiliser les constantes du thme QR Proprits de texte et les valeurs suivantes peuvent tre dfinies : Constante (valeur) qr police (1) qr qr qr qr qr qr qr qr Si Si Si Si Valeur Numro de police tel que retourn par la commande LISTE DES POLICES taille police (2) Taille de police en points (9 255) gras (3) Attribut gras (0 ou 1) italique (4) Attribut italique (0 ou 1) soulign (5) Attribut soulign (0 ou 1) couleur de texte (6) Numro de couleur (Entier long) justification (7) Attribut de justification (0 = par dfaut, 1 = gauche, 2 = centre et 3 = droite) couleur de fond (8) Numro de couleur de fond couleur de fond alterne (9) Numro de couleur de fond alterne

un numro de zone invalide est pass, lerreur -9850 est gnre. le paramtre numColonne est incorrect, lerreur -9852 est gnre. le paramtre numLigne est incorrect, lerreur -9853 est gnre. le paramtre proprit est incorrect, lerreur -9854 est gnre.

Exemple Cette mthode dfinit plusieurs attributs pour l'intitul de la premire colonne :

`Affecte la police Times: QR FIXER PROPRIETE TEXTE(qr_zone;1;-1;qr police;Numero de police("Times")) `Affecte la taille de police 10 points: QR FIXER PROPRIETE TEXTE(qr_zone;1;-1;qr taille police;10) `Affecte l'attribut gras : QR FIXER PROPRIETE TEXTE(qr_zone;1;-1;qr gras;1) `Affecte l'attribut italique : QR FIXER PROPRIETE TEXTE(qr_zone;1;-1;qr italique;1) `Affecte l'attribut soulign : QR FIXER PROPRIETE TEXTE(qr_zone;1;-1;qr soulign;1) `Affecte la couleur vert clair : QR FIXER PROPRIETE TEXTE(qr_zone;1;-1;qr couleur de texte;0x0000FF00)

Rfrence QR Lire propriete texte.

638

4e Dimension - Langage

QR Lire propriete texte

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR Lire propriete texte (zone; numColonne; numLigne; proprit) Entier long Paramtre zone numColonne numLigne proprit Rsultat Type Entier Entier Entier Entier Description Rfrence de la zone Numro de colonne Numro de rupture Numro de proprit Valeur de la proprit

long long long long

Entier long

Description La commande QR Lire propriete texte retourne la valeur courante de la proprit de texte dans la cellule de zone dsigne par numColonne et numLigne. Passez dans zone la rfrence de la zone d'tat rapide. Passez dans numColonne le numro de colonne de la cellule. Passez dans numLigne la rfrence de la ligne de la cellule : si numLigne vaut -1, elle dsigne l'intitul de la colonne. si numLigne vaut -2, elle dsigne la zone Dtail. si numLigne vaut -3, elle dsigne la zone Total gnral. si numLigne vaut -4, elle dsigne l'en-tte de page. si numLigne vaut -5, elle dsigne le pied de page. Vous pouvez passer dans numLigne une des constantes du thme QR Lignes pour Proprits. Note : Vous devez passer une valeur dans numColonne mme lorsque vous passez -4 ou -5 dans le paramtre numLigne (dans ce cas la valeur de numColonne est inutilise). si numLigne contient une valeur positive, elle dsigne la ligne de sous-total correspondante. Note : Dans les tableaux croiss, le principe est similaire sauf pour les valeurs des lignes, qui sont toujours positives.

4e Dimension - Langage

639

Passez dans proprit la valeur de la proprit de texte lire. Vous pouvez utiliser les constantes du thme QR Proprits de texte et les valeurs suivantes peuvent tre retournes : Constante (valeur) qr police (1) qr qr qr qr qr qr qr qr Si Si Si Si Valeurs retournes Numro de police retourn par la commande LISTE DES POLICES taille police (2) Taille de police en points (9 255) gras (3) Attribut gras (0 ou 1) italique (4) Attribut italique (0 ou 1) soulign (5) Attribut soulign (0 ou 1) couleur de texte (6) Numro de couleur (Entier long) justification (7) Attribut de justification (0 = par dfaut, 1 = gauche, 2 = centre et 3 = droite) couleur de fond (8) Numro de couleur de fond couleur de fond alterne (9) Numro de couleur de fond alterne

un numro de zone invalide est pass, lerreur -9850 est gnre. le paramtre numColonne est incorrect, lerreur -9852 est gnre. le paramtre numLigne est incorrect, lerreur -9853 est gnre. le paramtre proprit est incorrect, lerreur -9854 est gnre.

Rfrence QR FIXER PROPRIETE TEXTE.

640

4e Dimension - Langage

QR EXECUTER

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR EXECUTER (zone) Paramtre zone Type Entier long Description Rfrence de la zone excuter

Description La commande QR EXECUTER provoque l'excution de l'tat rapide dsign par le paramtre zone. L'tat est gnr avec ses paramtrages courants, notamment son type de sortie. Si un numro de zone invalide est pass, lerreur -9850 est gnre.

4e Dimension - Langage

641

QR EXECUTER COMMANDE

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR EXECUTER COMMANDE (zone; numCommande) Paramtre zone numCommande Type Entier long Entier long Description Rfrence de la zone Commande de menu excuter

Description La commande QR EXECUTER COMMANDE excute la commande de menu ou le bouton de la barre d'outils dont la rfrence est passe dans le paramtre numCommande. En gnral, cette commande est utilise pour excuter une commande de menu slectionne par l'utilisateur et intercepte dans votre code via la commande QR APPELER SUR COMMANDE. Passez dans paramtre numCommande une des constantes du thme QR Commandes. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre numCommande est incorrect, lerreur -9852 est gnre. Rfrence QR APPELER SUR COMMANDE, QR Lire statut commande.

642

4e Dimension - Langage

QR Lire statut commande

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR Lire statut commande (zone; numCommande{; valeur}) Entier long Paramtre zone numCommande valeur Rsultat Type Entier long Entier long Texte | Entier long Entier long Description Rfrence de la zone Numro de commande Valeur du sous-lment slectionn Statut de la commande

Description La commande QR Lire statut commande retourne 0 si la commande dsigne par le paramtre numCommande est inactive et 1 si elle est active. valeur retourne la valeur du sous-lment slectionn, le cas chant. Par exemple, si la commande slectionne est la liste droulante des polices (1000) et que la police choisie est l'Arial, valeur vaut Arial ; si la commande slectionne est le menu des couleurs (1002, 1003 ou 1004), valeur retourne le numro de la couleur. La commande QR Lire statut commande peut tre utilise dans deux types de contextes : comme simple instruction pour dterminer si une commande est active ou non. dans une mthode installe par QR APPELER SUR COMMANDE afin de connatre le souslment slectionn. Dans cette mthode, $1 contient la rfrence de la zone et $2 le numro de la commande. Passez dans paramtre numCommande une des constantes du thme QR Commandes. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre numCommande est incorrect, lerreur -9852 est gnre. Rfrence QR APPELER SUR COMMANDE, QR EXECUTER COMMANDE.

4e Dimension - Langage

643

QR APPELER SUR COMMANDE

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR APPELER SUR COMMANDE (zone; nomMthode) Paramtre zone nomMthode Type Entier long Alpha Description Rfrence de la zone Nom de la mthode appeler

Description La commande QR APPELER SUR COMMANDE excute la mthode projet 4D dont le nom est pass dans le paramtre nomMthode lorsqu'une commande de l'diteur d'tats rapides est appele via la slection d'un menu ou le clic sur un bouton. Si le paramtre zone vaut 0 (zro), la mthode nomMthode sera appele pour toutes les zones de l'diteur d'tats rapides jusqu' ce que la base soit referme ou que l'instruction suivante soit excute : QR APPELER SUR COMMANDE(0;""). La mthode nomMthode reoit deux paramtres : $1 contient la rfrence de la zone (Entier long). $2 contient le numro de la commande slectionne (Entier long). Note : Si vous souhaitez compiler votre base l'aide du Compilateur, vous devez dclarer explicitement les paramtres $1 et $2 en entiers longs, mme si vous ne les utilisez pas. Si vous souhaitez que la commande initiale choisie par l'utilisateur soit excute, utilisez l'instruction suivante dans la mthode nomMthode : QR EXECUTER COMMANDE($1;$2). Si un numro de zone invalide est pass, lerreur -9850 est gnre. Rfrence QR EXECUTER COMMANDE, QR Lire statut commande.

644

4e Dimension - Langage

QR Chercher colonne

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR Chercher colonne (zone; expression) Entier long Paramtre zone expression Rsultat Type Entier long Chane | Pointeur Entier long Description Rfrence de la zone Objet de colonne Numro de colonne

Description La commande QR Chercher colonne retourne le numro de la premire colonne de la zone dont le contenu correspond l'expression passe en paramtre. expression peut contenir soit une chane soit un pointeur. QR Chercher colonne retourne -1 si la recherche n'aboutit pas. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Exemple Le code suivant permet de rcuprer le numro de la colonne contenant le champ [G.ER Tests]Quarter puis de supprimer la colonne :

$NumColonne:=QR Chercher colonne (MaZone;->[G.ER Tests]Quarter) $NumColonne:=QR Chercher colonne (MaZone;"[G.ER Tests]Quarter") Si ($NumColonne#-1) QR SUPPRIMER COLONNE (MaZone; $NumColonne) Fin de si

ou :

4e Dimension - Langage

645

QR FIXER SELECTION

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR FIXER SELECTION (zone; gauche; haut; droite; bas) Paramtre zone gauche haut droite bas Type Entier Entier Entier Entier Entier Description Rfrence de la zone Limite gauche Limite suprieure Limite droite Limite infrieure

long long long long long

Description La commande QR FIXER SELECTION permet de slectionner une cellule, une ligne, une colonne ou encore la totalit de la zone, comme vous le feriez l'aide de la souris. Cette commande permet galement de dslectionner la slection courante. gauche contient le numro de la colonne reprsentant la limite gauche de la slection. Si gauche vaut 0, la ligne entire est slectionne. haut contient le numro de la ligne reprsentant la limite suprieure de la slection. Si haut vaut 0, la colonne entire est slectionne. droite contient le numro de la colonne reprsentant la limite droite de la slection. bas contient le numro de la ligne reprsentant la limite infrieure de la slection. Notes : Si les paramtres gauche and haut valent 0, la totalit de la zone est slectionne. Pour tout dslectionner, passez -1 dans les paramtres gauche, haut, droite et bas. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Rfrence QR LIRE SELECTION.

646

4e Dimension - Langage

QR LIRE SELECTION

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR LIRE SELECTION (zone; gauche; haut{; droite{; bas}}) Paramtre zone gauche haut droite bas Type Entier Entier Entier Entier Entier Description Rfrence de la zone Limite gauche Limite suprieure Limite droite Limite infrieure

long long long long long

Description La commande QR LIRE SELECTION retourne les coordonnes de la slection courante de la zone. gauche retourne le numro de la colonne reprsentant la limite gauche de la slection. Si gauche vaut 0, la ligne entire est slectionne. haut retourne le numro de la ligne reprsentant la limite suprieure de la slection. Si haut vaut 0, la colonne entire est slectionne. Note : Si les paramtres gauche and haut valent 0, la totalit de la zone est slectionne. droite retourne le numro de la colonne reprsentant la limite droite de la slection. bas retourne le numro de la ligne reprsentant la limite infrieure de la slection. Note : Si la zone ne contient aucune slection, les paramtres gauche, haut, droite et bas retournent -1. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Rfrence QR FIXER SELECTION.

4e Dimension - Langage

647

QR FIXER ENTETE ET PIED DE PAGE

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR FIXER ENTETE ET PIED DE PAGE (zone; slecteur; titreGauche; titreCentre; titreDroite; hauteur{; image{; alignementImage}}) Paramtre zone slecteur titreGauche titreCentre titreDroite hauteur image alignementImage Type Entier long Entier long Alpha Alpha Alpha Numrique Image Entier long Description Rfrence de la zone 1 = En-tte, 2 = Pied de page Texte affich sur le ct gauche Texte affich au centre Texte affich sur le ct droit Hauteur de l'en-tte ou du pied de page Image afficher Alignement de l'image

Description La commande QR FIXER ENTETE ET PIED DE PAGE vous permet de dfinir le contenu et la taille de l'en-tte et du pied de page de la zone. Le paramtre slecteur vous permet de dfinir la zone affecter : si slecteur vaut 1, l'en-tte sera affect ; si slecteur vaut 2, le pied de page sera affect. Les paramtres titreGauche, titreCentre et titreDroite dfinissent le contenu des en-ttes ou pieds de page situs respectivement gauche, au centre et droite. Le paramtre hauteur indique la hauteur de l'en-tte ou du pied de page, exprime dans l'unit courante de l'tat rapide. Le paramtre image contient l'image afficher facultativement dans l'en-tte ou le pied de page. Le paramtre alignementImage dfinit la proprit d'alignement de l'image passe dans image : si alignementImage vaut 0, l'image est aligne sur la gauche. si alignementImage vaut 1, l'image est centre. si alignementImage vaut 2, l'image est aligne sur la droite. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre slecteur est incorrect, lerreur -9852 est gnre.

648

4e Dimension - Langage

Exemple L'instruction suivante place le libell Titre du centre dans l'en-tte de l'tat rapide dans MaZone et dfinit sa hauteur 200 points :

QR FIXER ENTETE ET PIED DE PAGE(MaZone; 1;"";"Titre du centre";""; 200)

Rfrence QR LIRE ENTETE ET PIED DE PAGE.

4e Dimension - Langage

649

QR LIRE ENTETE ET PIED DE PAGE

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR LIRE ENTETE ET PIED DE PAGE (zone; slecteur; titreGauche; titreCentre; titreDroit; hauteur{; image{; alignementImage}}) Paramtre zone slecteur titreGauche titreCentre titreDroit hauteur image alignementImage Type Entier long Entier long Alpha Alpha Alpha Numrique Image Entier long Description Rfrence de la zone 1 = En-tte, 2 = Pied de page Texte affich sur le ct gauche Texte affich au centre Texte affich sur le ct droit Hauteur de l'en-tte ou du pied de page Image afficher Alignement de l'image

Description La commande QR LIRE ENTETE ET PIED DE PAGE vous permet de rcuprer le contenu et la taille de l'en-tte et du pied de page de la zone. Le paramtre slecteur vous permet de dfinir la zone lire : si slecteur vaut 1, les informations de l''en-tte seront rcupres ; si slecteur vaut 2, les informations du pied de page seront rcupres. Les paramtres titreGauche, titreCentre et titreDroite retournent le contenu des en-ttes ou pieds de page situs respectivement gauche, au centre et droite. Le paramtre hauteur retourne la hauteur de l'en-tte ou du pied de page, exprime dans l'unit courante de l'tat rapide. Le paramtre image retourne le cas chant l'image affiche dans l'en-tte ou le pied de page. Le paramtre alignementImage retourne la proprit d'alignement de l'image : si alignementImage vaut 0, l'image est aligne sur la gauche. si alignementImage vaut 1, l'image est centre. si alignementImage vaut 2, l'image est aligne sur la droite. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre slecteur est incorrect, lerreur -9852 est gnre.

650

4e Dimension - Langage

Exemple La mthode suivante affiche le contenu et la hauteur des libells des en-ttes :

QR LIRE ENTETE ET PIED DE PAGE(MaZone;1;$TexteGauche;$TexteCentre; $TexteDroite;$Hauteur) Au cas ou : ($TexteGauche # "") ALERTE("Libell de l'en-tte de gauche : "+Caractere(34)+$TexteGauche+ Caractere(34)) : ($TexteCentre # "") ALERTE("Libell de l'en-tte du centre : "+Caractere(34)+$TexteCentre+ Caractere(34)) : ($TexteDroite # "") ALERTE("Libell de l'en-tte de droite : "+Caractere(34)+$TexteDroite+ Caractere(34)) Sinon ALERTE("Aucun libell d'en-tte dans cet Etat.") Fin de cas ALERTE("Hauteur des en-ttes : "+Chaine($Hauteur))

Rfrence QR FIXER ENTETE ET PIED DE PAGE.

4e Dimension - Langage

651

QR FIXER ENCADREMENTS

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR FIXER ENCADREMENTS (zone; colonne; ligne; encadrements; paisseur{; couleur}) Paramtre zone colonne ligne encadrements paisseur couleur Type Entier Entier Entier Entier Entier Entier Description Rfrence de la zone Numro de colonne Numro de ligne Valeur d'encadrements compose Epaisseur de ligne Couleur de ligne

long long long long long long

Description La commande QR FIXER ENCADREMENTS permet de dfinir le style d'encadrement d'une cellule spcifique. Passez dans zone la rfrence de la zone d'tat rapide. Passez dans colonne le numro de colonne de la cellule encadrer. Le paramtre ligne contient le numro de ligne de la cellule encadrer : passez -1 pour dsigner l'intitul de l'tat, passez -2 pour dsigner la zone Dtail de l'tat, passez -3 pour dsigner la zone Total gnral, passez une valeur entire positive pour dsigner la ligne de sous-total correspondante. Vous pouvez galement utiliser les constantes correspondantes dans le thme QR Lignes pour Proprits. Le paramtre encadrement contient une valeur compose permettant d'indiquer la ou les bordures(s) de cellule modifier : 1 dsigne la bordure gauche, 2 dsigne la bordure suprieure, 4 dsigne la bordure droite, 8 dsigne la bordure infrieure, 16 dsigne la bordure intrieure verticale, 32 dsigne la bordure intrieure horizontale. Vous pouvez galement utiliser les constantes correspondantes dans le thme QR Encadrements.

652

4e Dimension - Langage

Le paramtre encadrement peut contenir un cumul de plusieurs valeurs afin de dsigner simultanment plusieurs bordures. Par exemple, si vous passez 5 dans encadrement, les bordures droite et gauche seront affectes. Le paramtre paisseur permet de spcifier l'paisseur de l'encadrement : 0 indique une paisseur nulle (pas de bordure), 1 indique une paisseur d'1/4 point, 2 indique une paisseur d'1/2 point, 3 indique une paisseur d'1 point, 4 indique une paisseur de 2 points. Le paramtre couleur permet de dsigner la couleur de l'encadrement : si vous passez une valeur positive, couleur dsigne un numro de couleur, si vous passez 0, la couleur est noire, si vous passez -1, la couleur esrt inchange. Note : Par dfaut, la couleur est noire. Si Si Si Si Si un numro de zone invalide est pass, lerreur -9850 est gnre. le paramtre colonne est incorrect, lerreur -9852 est gnre. le paramtre ligne est incorrect, lerreur -9853 est gnre. le paramtre encadrement est incorrect, lerreur -9854 est gnre. le paramtre paisseur est incorrect, lerreur -9855 est gnre.

Rfrence QR LIRE ENCADREMENTS.

4e Dimension - Langage

653

QR LIRE ENCADREMENTS

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR LIRE ENCADREMENTS (zone; colonne; ligne; encadrement; paisseur{; couleur}) Paramtre zone colonne ligne encadrement paisseur couleur Type Entier Entier Entier Entier Entier Entier Description Rfrence de la zone Numro de colonne Numro de ligne Valeur d'encadrement Epaisseur de trait Couleur de l'encadrement

long long long long long long

Description La commande QR LIRE ENCADREMENTS retourne les attributs d'encadrement d'une cellule spcifique de zone. Passez dans zone la rfrence de la zone d'tat rapide et dans colonne le numro de colonne de la cellule lire. Le paramtre ligne contient le numro de ligne de la cellule lire : passez -1 pour dsigner l'intitul de l'tat, passez -2 pour dsigner la zone Dtail de l'tat, passez -3 pour dsigner la zone Total gnral, passez une valeur entire positive pour dsigner la ligne de sous-total correspondante. Vous pouvez galement utiliser les constantes correspondantes dans le thme QR Lignes pour Proprits. Le paramtre encadrement permet d'indiquer la bordure de cellule lire : 1 dsigne la bordure gauche, 2 dsigne la bordure suprieure, 4 dsigne la bordure droite, 8 dsigne la bordure infrieure, 16 dsigne la bordure intrieure verticale, 32 dsigne la bordure intrieure horizontale. Vous pouvez galement utiliser les constantes correspondantes dans le thme QR Encadrements. Note : A la diffrence de la commande QR FIXER ENCADREMENTS, QR LIRE ENCADREMENTS n'accepte pas de valeurs cumules. Vous devez tester sparment toutes les valeurs pour obtenir une description globale de l'encadrement de la cellule.

654

4e Dimension - Langage

Le paramtre paisseur retourne l'paisseur de l'encadrement : 0 indique une paisseur nulle (pas de bordure), 1 indique une paisseur d'1/4 point, 2 indique une paisseur d'1/2 point, 3 indique une paisseur d'1 point, 4 indique une paisseur de 2 points. Le paramtre couleur retourne le numro de la couleur de la bordure. Si Si Si Si un numro de zone invalide est pass, lerreur -9850 est gnre. le paramtre colonne est incorrect, lerreur -9852 est gnre. le paramtre ligne est incorrect, lerreur -9853 est gnre. le paramtre encadrement est incorrect, lerreur -9854 est gnre.

Rfrence QR FIXER ENCADREMENTS.

4e Dimension - Langage

655

QR FIXER INFO COLONNE

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR FIXER INFO COLONNE (zone; numColonne; titre; objet; cache; taille; valeursRptes; format) Paramtre zone numColonne titre objet cache taille valeursRptes format Description Etats en liste La commande QR FIXER INFO COLONNE vous permet de dfinir les paramtres d'une colonne existante de l'tat prsent dans la zone. Passez dans zone la rfrence de la zone d'tat rapide. Passez dans numColonne le numro de la colonne dfinir. Passez dans titre l'intitul devant apparatre dans l'en-tte de la colonne. Passez dans objet la rfrence de l'objet devant tre affect la colonne (variable, champ ou formule). Le paramtre cache indique si la colonne doit tre affiche ou masque : si cache vaut 1, la colonne est masque ; si cache vaut 0, la colonne est affiche. Passez dans taille la taille en pixels assigner la colonne. Si taille vaut -1, la taille de la colonne est automatique. Type Entier long Entier long Alpha Champ | Variable Entier long Entier long Entier long Alpha Description Rfrence de la zone Numro de colonne Titre de la colonne Objet affect la colonne 0 = visible, 1 = invisible Largeur de la colonne 0 = Non rptes, 1 = Rptes Format d'affichage

656

4e Dimension - Langage

valeursRptes indique le statut de la proprit de rptition des donnes. Par exemple, si la valeur d'un champ ou d'une variable ne change pas d'un enregistrement l'autre, il est possible de la rpter ou non dans chaque ligne de la colonne. si valeursRptes vaut 0, les valeurs ne sont pas rptes. si valeursRptes vaut 1, les valeurs sont rptes. Le paramtre format indique le format d'affichage de la colonne. Vous pouvez utiliser tout format d'affichage standard de 4D compatible avec les donnes affiches dans la colonne. Exemple : La ligne suivante associe la colonne 1 l'intitul Titre et le champ Champ2, rend la colonne visible avec une largeur de 150 pixels et dfinit le format d'affichage ###,##.

QR FIXER INFO COLONNE(zone; 1;"Titre"; "[Table 1]Champ2";0;150;0;"###,##")

Etats tableaux croiss Avec ce type d'tat, la commande QR FIXER INFO COLONNE permet de dfinir globalement les mmes paramtres que ceux dcrits dans le paragraphe ci-dessus, toutefois les zones auxquelles ils s'appliquent sont diffrentes et varient en fonction du paramtre fixer. En outre, les paramtres titre, cache et valeursRptes ne sont pas utiliss lorsque vous travaillez avec des tats tableaux croiss. La valeur passer dans le paramtre numColonne dpend de l'opration que vous souhaitez effectuer : dfinir la taille de la colonne ou dfinir la source de donnes et le format d'affichage. Taille de la colonne Il s'agit d'un attribut visuel, par consquent les colonnes sont simplement numrotes de gauche droite, comme illustr ci-dessous :

4e Dimension - Langage

657

La mthode suivante affecte une taille automatique toutes les colonnes d'un tat en tableau crois et laisse les autres lments inchangs : Boucle ($i;1;3) QR LIRE INFO COLONNE(qr_zone;$i;$titre;$obj;$cach;$taille;$rep;$format) QR FIXER INFO COLONNE(qr_zone;$i;$titre;$obj;$cach;0;$rep;$format) Fin de boucle

A noter que, comme vous voulez modifier uniquement la taille de la colonne, vous devez utiliser la commande QR LIRE INFO COLONNE pour rcuprer les proprits courantes de la colonne puis les passer QR FIXER INFO COLONNE afin de les conserver inchanges, except pour la taille. Source de donnes (objet) et format d'affichage Dans ce cas, la numrotation des colonnes s'effectue de la manire suivante :

A noter qu'il n'est pas possible d'adresser toutes les cellules avec la commande QR FIXER INFO COLONNE, les cellules non numrotes dans le schma ci-dessus doivent tre gres l'aide de la commande QR FIXER DONNEES TOTAUX. Le code suivant associe des sources de donnes aux trois cellules ncessaires la construction d'un tat en tableau crois simple : QR FIXER TABLE ETAT(qr_zone;Table(->[Factures])) TOUT SELECTIONNER([Factures]) QR FIXER TYPE ETAT(qr_zone;2) QR FIXER INFO COLONNE(qr_zone;1;"";->[Factures]Article;1;-1;1;"") QR FIXER INFO COLONNE(qr_zone;2;"";->[Factures]Date;1;-1;1;"") QR FIXER INFO COLONNE(qr_zone;3;"";->[Factures]Quantit;1;-1;1;"")

658

4e Dimension - Langage

La zone d'tat suivante est gnre :

Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre numColonne est incorrect, lerreur -9852 est gnre. Rfrence QR FIXER INFO LIGNE, QR LIRE INFO COLONNE, QR Lire info ligne.

4e Dimension - Langage

659

QR LIRE INFO COLONNE

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR LIRE INFO COLONNE (zone; numCol; titre; objet; cache; taille; valeursRptes; format) Paramtre zone numCol titre objet cache taille valeursRptes format Description Etats en liste La commande QR LIRE INFO COLONNE vous permet de rcuprer les paramtres d'une colonne existante de l'tat prsent dans la zone. Passez dans zone la rfrence de la zone d'tat rapide et dans numColonne le numro de la colonne dfinir. Le paramtre titre retourne l'intitul de l'en-tte de la colonne. Le paramtre objet retourne la rfrence de l'objet associ la colonne (variable, champ ou formule). Le paramtre cache indique si la colonne est affiche ou masque : si cache vaut 1, la colonne est masque ; si cache vaut 0, la colonne est affiche. Le paramtre taille retourne la taille en pixels de la colonne. Si la valeur retourne est ngative, la taille de la colonne est automatique. valeursRptes retourne le statut de la proprit de rptition des donnes. Par exemple, si la valeur d'un champ ou d'une variable ne change pas d'un enregistrement l'autre, il est possible de la rpter ou non dans chaque ligne de la colonne. si valeursRptes vaut 0, les valeurs ne sont pas rptes. si valeursRptes vaut 1, les valeurs sont rptes. Type Entier long Entier long Alpha Champ | Variable Entier long Entier long Entier long Texte Description Rfrence de la zone Numro de colonne Titre de la colonne Objet affect la colonne 0 = visible, 1 = invisible Largeur de la colonne 0 = non rptes, 1 = rptes Format d'affichage des donnes

660

4e Dimension - Langage

Le paramtre format retourne le format d'affichage de la colonne. Vous pouvez utiliser tout format d'affichage standard de 4D compatible avec les donnes affiches dans la colonne. Etats tableaux croiss Avec ce type d'tat, la commande QR LIRE INFO COLONNE permet de rcuprer globalement les mmes paramtres que ceux dcrits dans le paragraphe ci-dessus, toutefois les zones auxquelles ils s'appliquent sont diffrentes et varient en fonction du paramtre lire. En outre, les paramtres titre, cache et valeursRptes ne sont pas utiliss lorsque vous travaillez avec des tats tableaux croiss, les valeurs retournes dans ces paramtres ne sont donc pas significatives. La valeur passer dans le paramtre numColonne dpend de l'opration que vous souhaitez effectuer : lire la taille de la colonne ou lire la source de donnes et le format d'affichage. Taille de la colonne Il s'agit d'un attribut visuel, par consquent les colonnes sont simplement numrotes de gauche droite, comme illustr ci-dessous :

La mthode suivante affecte une taille automatique toutes les colonnes d'un tat en tableau crois et laisse les autres lments inchangs :

Boucle ($i;1;3) QR LIRE INFO COLONNE(qr_zone;$i;$titre;$obj;$cach;$taille;$rep;$format) QR FIXER INFO COLONNE(qr_zone;$i;$titre;$obj;$cach;0;$rep;$format) Fin de boucle

4e Dimension - Langage

661

Source de donnes (objet) et format d'affichage Dans ce cas, la numrotation des colonnes s'effectue de la manire suivante :

Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre numColonne est incorrect, lerreur -9852 est gnre. Rfrence QR FIXER INFO COLONNE, QR FIXER INFO LIGNE, QR Lire info ligne.

662

4e Dimension - Langage

QR FIXER INFO LIGNE

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR FIXER INFO LIGNE (zone; ligne; cache) Paramtre zone ligne cache Type Entier long Entier long Entier long Description Rfrence de la zone Ligne 0 = Visible, 1 = Cache

Description La commande QR FIXER INFO LIGNE permet d'afficher ou de masquer la ligne dont la rfrence est passe dans le paramtre ligne. Le paramtre ligne dsigne la ligne modifier : passez -1 pour dsigner l'intitul de l'tat, passez -2 pour dsigner la zone Dtail de l'tat, passez -3 pour dsigner la zone Total gnral, passez une valeur entire positive pour dsigner la ligne de sous-total correspondante. Vous pouvez galement utiliser les constantes du thme QR Lignes pour Proprits. cache permet de spcifier si le contenu de la ligne doit tre affich ou masqu : si cache vaut 1, le contenu de la ligne est masqu ; si cache vaut 0, le contenu de la ligne est affich. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre ligne est incorrect, lerreur -9852 est gnre. Exemple L'instruction suivante masque le contenu de la ligne Dtail :

QR FIXER INFO LIGNE (maZone;qr dtail; 1)

Rfrence QR FIXER INFO COLONNE, QR LIRE INFO COLONNE, QR Lire info ligne.

4e Dimension - Langage

663

QR Lire info ligne

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR Lire info ligne (zone; ligne) Entier long Paramtre zone ligne Rsultat Type Entier long Entier long Entier long Description Rfrence de la zone Ligne 0 = Visible, 1 = Cache

Description La commande QR Lire info ligne indique si la ligne dsigne par le paramtre ligne est affiche ou masque dans la zone. Le paramtre ligne dsigne la ligne vrifier : passez -1 pour dsigner l'intitul de l'tat, passez -2 pour dsigner la zone Dtail de l'tat, passez -3 pour dsigner la zone Total gnral, passez une valeur entire positive pour dsigner la ligne de sous-total correspondante. Vous pouvez galement utiliser les constantes du thme QR Lignes pour Proprits. La valeur retourne par QR Lire info ligne indique si le contenu de la ligne est affich ou masqu. Si la fonction retourne 1, le contenu de la ligne est masqu ; si elle retourne 0, le contenu de la ligne est affich. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre ligne est incorrect, lerreur -9852 est gnre. Rfrence QR FIXER INFO COLONNE, QR FIXER INFO LIGNE, QR LIRE INFO COLONNE.

664

4e Dimension - Langage

QR FIXER TRIS

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR FIXER TRIS (zone; tabColonnes{; tabTris}) Paramtre zone tabColonnes tabTris Type Entier long Tableau Rel Tableau Rel Description Rfrence de la zone Colonnes Ordres de tris

Description La commande QR FIXER TRIS vous permet de dfinir l'ordre de tri de chaque colonne de l'tat rapide dont la rfrence est passe dans zone. tabColonnes : vous devez stocker dans ce tableau le numro de chaque colonne pour laquelle vous souhaitez dfinir un ordre de tri. tabTris : chaque lment de ce tableau doit contenir l'ordre de tri pour la colonne correspondante rfrence dans le tableau tabColonnes. Si tabTris{$i} vaut 1, le tri est croissant. Si tabTris{$i} vaut - 1, le tri est dcroissant. Etats tableaux croiss Avec ce type d'tat, le tableau ne peut pas comporter plus de deux lments. Vous pouvez uniquement trier les colonnes (1) et les lignes (2). Les donnes (situes l'intersection des colonnes et des lignes) ne peuvent pas tre tries via cette commande. Voici le code permettant de trier les lignes uniquement dans un tat tableau crois : TABLEAU REEL($tabColonnes;1) $tabColonnes{1}:=2 TABLEAU REEL($tabTris;1) $tabTris{1}:=-1 `Tris dcroissant des lignes QR FIXER TRIS (qr_zone;$tabColonnes;$tabTris)

Si un numro de zone invalide est pass, lerreur -9850 est gnre. Rfrence QR LIRE TRIS.

4e Dimension - Langage

665

QR LIRE TRIS

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR LIRE TRIS (zone; tabColonnes; tabTris) Paramtre zone tabColonnes tabTris Type Entier long Tableau Rel Tableau Rel Description Rfrence de la zone Colonnes tries Ordres de tris

Description La commande QR LIRE TRIS remplit deux tableaux rels : tabColonnes Ce tableau contient toutes les colonnes auxquelles un ordre de tri a t associ. tabTris Chaque lment de ce tableau fournit l'ordre de tri courant de la colonne correspondante. - si tabTris{$i} vaut 1, le tri est croissant. - si tabTris{$i} vaut - 1, le tri est dcroissant. Etats tableaux croiss Avec ce type d'tat, les tableaux ne peut pas comporter plus de deux lments puisque les tris ne peuvent tre effectus que sur les colonnes (1) et les lignes (2) (valeurs pour tabColonnes). Si un numro de zone invalide est pass, lerreur -9850 est gnre. Rfrence QR FIXER TRIS.

666

4e Dimension - Langage

QR FIXER DONNEES TOTAUX

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR FIXER DONNEES TOTAUX (zone; numColonne; numRupture; oprateur | valeur) Paramtre zone numColonne numRupture oprateur | valeur Description Note : Cette commande ne cre pas de sous-total. Etat en liste La commande QR FIXER DONNEES TOTAUX permet de dfinir le contenu d'une ligne de rupture spcifique (sous-total ou total gnral). Passez dans zone la rfrence de la zone d'tat rapide. Passez dans numColonne le numro de colonne de la cellule que vous souhaitez dfinir. Passez dans numRupture le numro de la ligne de rupture modifier (sous-total ou total gnral). Pour une ligne de sous-total, numRupture correspond au numro d'ordre de la rupture. Pour le total gnral, numRupture vaut -3 (vous pouvez galement utiliser la constante qr total gnral du thme QR Lignes pour Proprits). Le paramtre oprateur contient la valeur cumule de tous les oprateurs placer dans la cellule. Utilisez les constantes du thme QR Oprateurs pour dfinir ce paramtre : Constante qr somme qr moyenne qr min qr max qr nombre qr cart type Valeur 1 2 4 8 16 32 Type Entier Entier Entier Entier Description Rfrence de la zone Numro de colonne Numro de rupture Oprateur pour la cellule ou Contenu de la cellule

long long long long | Chane

4e Dimension - Langage

667

Si vous ne souhaitez utiliser aucun oprateur, passez 0 dans le paramtre oprateur. Si vous choisissez d'insrer du texte dans la cellule, passez-le dans le paramtre valeur. Note : Les paramtres oprateur et valeur sont mutuellement exclusifs, vous pouvez passer soit une combinaison de valeurs numriques, soit du texte. Si vous souhaitez saisir la fois du texte et des oprateurs, vous pouvez utiliser les codes suivants dans le paramtre valeur : - # pour la valeur provoquant la rupture ou le sous-total - ##S sera remplac par la somme. - ##A sera remplac par la moyenne. - ##C sera remplac par le nombre - ##X sera remplac par le maximum. - ##N sera remplac par le minimum. - ##D sera remplac par l'cart type. - ##xx, o xx est un numro de colonne. Ce code sera remplac par la valeur de la colonne dsigne, dans son propre formatage. Si la colonne n'existe pas, le code apparat dans l'tat. Etat tableau crois La commande QR FIXER DONNEES TOTAUX vous permet de dfinir le contenu d'une cellule spcifique. Passez dans zone la rfrence de la zone d'tat rapide. Passez dans numColonne le numro de colonne de la cellule que vous souhaitez dfinir. Passez dans numRupture le numro de ligne de la cellule que vous souhaitez dfinir. Le paramtre oprateur contient la valeur cumule de tous les oprateurs placer dans la cellule. Utilisez les constantes du thme QR Oprateurs pour dfinir ce paramtre (cf. paragraphe prcdent). Le paramtre alternatif valeur permet de dfinir le texte insrer dans la cellule.

668

4e Dimension - Langage

L'illustration suivante prcise la manire dont les paramtres numColonne et numRupture sont combins dans un tableau crois :

Types de donnes accepts Vous pouvez passer deux types de donnes : des libells et des oprateurs. Libells Un libell est une chane de caractres passe via le paramtre valeur. Cette valeur ne peut tre utilise qu'avec les cellules suivantes : numColonne=3,numRupture=1 et numColonne=1,numRupture=3. Oprateurs Un oprateur ou un cumul d'oprateurs (cf. paragraphe prcdent) peut tre pass via le paramtre oprateur aux cellules suivantes : numColonne=2,numRupture=2 numColonne=3,numRupture=2 numColonne=2,numRupture=3 Notez que ces deux dernires valeurs affectent galement la cellule (colonne 3,ligne 3). En effet, si par exemple un calcul est effectu dans la cellule (colonne 2,ligne 3), le contenu de la cellule (colonne 3/ligne 3) sera modifi en consquence. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre numColonne est incorrect, lerreur -9852 est gnre. Si le paramtre numRupture est incorrect, lerreur -9853 est gnre. Rfrence QR LIRE DONNEES TOTAUX.

4e Dimension - Langage

669

QR LIRE DONNEES TOTAUX

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR LIRE DONNEES TOTAUX (zone; numColonne; numLigne; oprateur; texte) Paramtre zone numColonne numLigne oprateur texte Description Etat en liste La commande QR LIRE DONNEES TOTAUX permet de rcuprer le contenu d'une ligne de rupture spcifique (sous-total ou total gnral). Passez dans zone la rfrence de la zone d'tat rapide. Passez dans numColonne le numro de colonne de la cellule que vous souhaitez lire. Passez dans numRupture le numro de la ligne de rupture lire (sous-total ou total gnral). Pour une ligne de sous-total, numRupture correspond au numro de la ligne. Pour le total gnral, numRupture vaut -3 (vous pouvez galement utiliser la constante qr total gnral du thme QR Lignes pour Proprits). Le paramtre oprateur retourne la valeur cumule de tous les oprateurs ventuellement prsents dans la cellule. Vous pouvez utiliser les constantes du thme QR Oprateurs pour traiter les valeurs retournes : Constante Valeur qr somme 1 qr moyenne 2 qr min 4 qr max 8 qr nombre 16 qr cart type 32 Si oprateur retourne 0, la cellule ne contient aucun oprateur. Type Entier Entier Entier Entier Alpha Description Rfrence de la zone Numro de colonne Numro de rupture Oprateur de la cellule Contenu de la cellule

long long long long

670

4e Dimension - Langage

texte retourne le texte de la cellule. Note : Les paramtres oprateur et texte sont mutuellement exclusifs ; en fonction du contenu de la cellule, seul l'un des deux paramtres retournera une valeur. Etat tableau crois La commande QR LIRE DONNEES TOTAUX vous permet de recuprer le contenu d'une cellule spcifique. Passez dans zone la rfrence de la zone d'tat rapide. Passez dans numColonne le numro de colonne et dans numRupture le numro de ligne de la cellule que vous souhaitez lire. Le paramtre oprateur retourne la valeur cumule de tous les oprateurs ventuellement prsents dans la cellule. Utilisez les constantes du thme QR Oprateurs pour valuer la valeur rcupre (cf. paragraphe prcdent). Le paramtre texte retourne le contenu de la cellule. L'illustration suivante prcise la manire dont les paramtres numColonne et numRupture sont combins dans un tableau crois :

Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre numColonne est incorrect, lerreur -9852 est gnre. Si le paramtre numRupture est incorrect, lerreur -9853 est gnre. Rfrence QR FIXER DONNEES TOTAUX.

4e Dimension - Langage

671

QR FIXER ESPACEMENT TOTAUX

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR FIXER ESPACEMENT TOTAUX (zone; sousTotal; valeur) Paramtre zone sousTotal valeur Type Entier long Entier long Entier long Description Rfrence de la zone Numro de sous-total 0=pas d'espace, 32000=insre une saut de page, >0=espace ajout en haut du niveau de rupture, <0=augmentation proportionnelle

Description La commande QR FIXER ESPACEMENT TOTAUX permet de dfinir l'espacement ajout audessus d'une ligne de sous-total. Elle ne peut tre utilise qu'avec des tats en liste. Le paramtre zone contient la rfrence de la zone d'tat rapide. Le paramtre sousTotal dsigne le niveau de sous-total (ou de rupture) modifier. Le paramtre valeur permet de dfinir la valeur de l'espacement : Si valeur vaut 0, aucun espacement n'est ajout. Si valeur vaut 32000, un saut de page est ajout. Si valeur est une valeur positive, elle exprime l'espacement ajouter en pixels. Si valeur est une valeur ngative, elle exprime l'espacement ajouter en pourcentage de la ligne de sous-total. Par exemple, la valeur -100 dfinit l'ajout d'un espace au-dessus de la ligne de sous-total correspondant 100% de la hauteur courante de la ligne. Note : Si l'espacement ajout au-dessus d'une ligne de sous-total repousse la ligne sur la page suivante, aucun espace n'apparatra au-dessus de la ligne sur cette page. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre sousTotal est incorrect, lerreur -9852 est gnre. Rfrence QR LIRE ESPACEMENT TOTAUX.

672

4e Dimension - Langage

QR LIRE ESPACEMENT TOTAUX

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR LIRE ESPACEMENT TOTAUX (zone; sousTotal; valeur) Paramtre zone sousTotal valeur Type Entier long Entier long Entier long Description Rfrence de la zone Numro de sous-total 0=pas d'espace, 32000=insre une saut de page, >0=espace ajout en haut du niveau de rupture, <0=augmentation proportionnelle

Description La commande QR LIRE ESPACEMENT TOTAUX permet de rcuprer la valeur de l'espacement ajout au-dessus d'une ligne de sous-total. Elle ne peut tre utilise qu'avec des tats en liste. Le paramtre zone contient la rfrence de la zone d'tat rapide. Le paramtre sousTotal dsigne le niveau de sous-total (ou de rupture) dont vous souhaitez connatre l'espacement. Ce paramtre contient une valeur comprise entre 1 et le nombre de lignes de sous-total/rupture. Le paramtre valeur retourne la valeur de l'espacement : Si valeur vaut 0, aucun espacement n'est ajout. Si valeur vaut 32000, un saut de page est ajout. Si valeur est une valeur positive, elle exprime l'espacement en pixels. Si valeur est une valeur ngative, elle exprime l'espacement en pourcentage de la ligne de sous-total. Par exemple, la valeur -100 indique un espace au-dessus de la ligne de sous-total correspondant 100% de la hauteur courante de la ligne. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre sousTotal est incorrect, lerreur -9852 est gnre. Rfrence QR FIXER ESPACEMENT TOTAUX.

4e Dimension - Langage

673

QR INSERER COLONNE

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR INSERER COLONNE (zone; numColonne; objet) Paramtre zone numColonne objet Type Entier long Entier long Champ | Variable | Pointeur Description Rfrence de la zone Numro de colonne Objet insrer dans la colonne

Description La commande QR INSERER COLONNE insre ou cre dans zone une colonne un emplacement spcifique. Les colonnes situes droite de la colonne ajoute seront dcales en consquences. numColonne indique le numro de la colonne, correspondant la position de la colonne les colonnes sont numrotes de gauche droite. La valeur passe dans objet sera l'intitul par dfaut de la colonne. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Exemple La ligne suivante insre (ou cre) une premire colonne dans la zone MaZone et la remplit avec le contenu du champ Noms. L'intitul par dfaut de la colonne sera Noms :

QR INSERER COLONNE (MaZone;1;->[Table 1]Noms)

Rfrence QR SUPPRIMER COLONNE.

674

4e Dimension - Langage

QR Lire colonne deposee

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR Lire colonne deposee (zone) Entier long Paramtre zone Rsultat Type Entier long Entier long Description Rfrence de la zone Emplacement du "dposer"

Description La commande QR Lire colonne deposee retourne une valeur indiquant l'emplacement auquel un dposer a t effectu dans zone : Si la valeur est ngative, elle indique un numro de colonne (par exemple, -3 indique qu'un dposer a t effectu sur la colonne n 3). Si la valeur est positive, elle indique que le dposer a t effectu sur le sparateur situ devant la colonne (par exemple, 3 indique qu'un dposer a t effectu aprs la colonne n 2). Gardez l'esprit qu'un dposer ne peut pas tre effectu devant une colonne existante. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Rfrence QR SUPPRIMER COLONNE.

4e Dimension - Langage

675

QR Nombre de colonnes

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR Nombre de colonnes (zone) Entier long Paramtre zone Rsultat Type Entier long Entier long Description Rfrence de la zone Nombre de colonnes dans la zone

Description La commande QR Nombre de colonnes retourne le nombre de colonnes prsentes dans l'tat rapide dsign par le paramtre zone. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Exemple L'exemple suivant permet d'ajouter une colonne supplmentaire droite de la dernire colonne de la zone :

$NbCol:=QR Nombre de colonnes(MaZone) QR INSERER COLONNE(MaZone;$NbCol+1;->[Table 1]Noms)

Rfrence QR INSERER COLONNE, QR SUPPRIMER COLONNE.

676

4e Dimension - Langage

QR SUPPRIMER COLONNE

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR SUPPRIMER COLONNE (zone; numColonne) Paramtre zone numColonne Type Entier long Entier long Description Rfrence de la zone Numro de colonne

Description La commande QR SUPPRIMER COLONNE supprime de la zone la colonne dont le numro a t pass dans numColonne. Cette commande ne peut pas tre utilise avec les tats en tableau crois. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Si le paramtre numColonne est incorrect, lerreur -9852 est gnre. Exemple Cet exemple supprime la troisime colonne de l'tat :

Si(QR Lire type etat(MaZone )=qr tat en liste) QR SUPPRIMER COLONNE (MaZone;3) Fin de si

Rfrence QR INSERER COLONNE.

4e Dimension - Langage

677

QR FIXER MODELE HTML

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR FIXER MODELE HTML (zone; modle) Paramtre zone modle Type Entier long Texte Description Rfrence de la zone Code du modle HTML

--> -->

Description La commande QR FIXER MODELE HTML permet de dfinir le modle HTML utiliser pour la zone d'tat rapide rfrence par zone. Ce modle sera utilis lors de l'excution des tats au format HTML. Le modle est construit l'aide d'un ensemble de balises de traitement des donnes. Ce fonctionnement vous permet de gnrer des documents HTML proches des tats originaux ou des documents l'apparence entirement personnalise. Note : Vous devez appeler au pralable QR FIXER DESTINATION pour dfinir le format HTML comme destination de sortie. Balises HTML <!--#4DQRheader--> ... <!--/#4DQRheader--> Les intituls des colonnes seront insrs entre ces balises. Ces balises sont gnralement utilises pour dfinir la ligne de titre de l'tat. <!--#4DQRrow--> ... <!--/#4DQRrow--> Les informations insres entre ces balises seront rptes pour chaque ligne de donnes (dtail et sous-total compris). <!--#4DQRcol--> ... <!--/#4DQRcol--> Les informations insres entre ces balises seront rptes pour chaque colonne de donnes l'intrieur des lignes. Le tri de la colonne est identique celui de l'tat. Lorsqu'elles sont utilises conjointement <!--#4DQRcol;n--> ... <!--/#4DQRcol;n-->, les balises <!--#4DQRcol--> ... <!--/#4DQRcol--> ne seront effectives qu'avec les colonnes dont le contenu n'est pas insr l'aide de <!--#4DQRcol;n--> ... <!--/#4DQRcol;n-->. Par exemple, dans un tat comportant cinq colonnes, vous utilisez les balises <!-#4DQRcol;2--> ... <!--/#4DQRcol;2--> afin d'insrer les donnes de la deuxime colonne. <!-#4DQRcol--> ... <!--/#4DQRcol--> traiteront, pour chaque ligne, les colonnes 1, 3, 4 et 5. Ces balises ignoreront la colonne dont le contenu est publi l'aide de <!--#4DQRcol;2--> ... <!--/#4DQRcol;2-->.

678

4e Dimension - Langage

<!--#4DQRcol;n--> ... <!--/#4DQRcol;n--> Les informations insres entre ces balises seront extraites de la colonne de l'tat dont le numro est n. Si, par exemple, dans un tat HTML trois colonnes, vous souhaitez afficher les colonnes dans un ordre diffrent de celui de l'tat initial, vous pouvez crire : <!--#4DQRrow--> <!--#4DQRcol;3--> ... <!--/#4DQRcol;3--><!--#4DQRcol;2--> ... <!-/#4DQRcol;2--><!--#4DQRcol;1--> ... <!--/#4DQRcol;1--> <!--/#4DQRrow--> Dans cet exemple, les colonnes sont gnres dans l'ordre inverse de l'tat. <!--#4DQRfont--> ... <!--/#4DQRfont--> Les informations insres entre ces balises seront utilises pour la dfinition de la police de la colonne ou cellule courante. <!--#4DQRfont--> sera remplac par une dfinition de police HTML et <!--/#4DQRfont--> sera remplac par la balise de fermeture standard (</font>). <!--#4DQRface--> ... <!--/#4DQRface--> Les informations insres entre ces balises seront utilises pour la dfinition du style de la colonne ou cellule courante. <!--#4DQRface--> sera remplac par une dfinition de style HTML <!--#4DQRface--> sera remplac par la balise de fermeture standard (</face>). <!--#4DQRbgcolor--> Cette balise de couleur sera remplace par la dfinition de couleur de la cellule courante. <!--#4DQRdata--> Cette balise sera remplace par les donnes de la cellule courante. <!--#4DQRlHeader--><!--#4DQRdata--><!--/#4DQRlHeader--> <!--#4DQRcHeader--><!--#4DQRdata--><!--/#4DQRcHeader--> <!--#4DQRrHeader--><!--#4DQRdata--><!--/#4DQRrHeader--> Ces balises seront remplaces respectivement par les donnes de l'en-tte gauche, central et droit. <!--#4DQRlFooter--><!--#4DQRdata--><!--/#4DQRlFooter--> <!--#4DQRcFooter--><!--#4DQRdata--><!--/#4DQRcFooter--> <!--#4DQRrFooter--><!--#4DQRdata--><!--/#4DQRrFooter--> Ces balises seront remplaces respectivement par les donnes du pied de page gauche, central et droit. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Rfrence QR Lire modele HTML.

4e Dimension - Langage

679

QR Lire modele HTML

Etats rapides version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

QR Lire modele HTML (zone) Texte Paramtre zone Rsultat Type Entier long Texte Description Rfrence de la zone Code HTML utilis comme modle

Description La commande QR Lire modele HTML retourne le modle HTML utilis pour la zone d'tat rapide rfrence par zone. La valeur retourne, de type texte, contient la totalit du code HTML utilis comme modle. Si aucun modle spcifique n'a t dfini, le code du modle par dfaut est retourn. A noter que si le format de destination HTML n'a pas t dfini pour l'tat (manuellement ou par programmation), aucune valeur n'est retourne. Si un numro de zone invalide est pass, lerreur -9850 est gnre. Rfrence QR FIXER MODELE HTML.

680

4e Dimension - Langage

20 ________________________ Evnements formulaire

4e Dimension - Langage

681

682

4e Dimension - Langage

Evenement formulaire

Evnements formulaire version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Evenement formulaire Numrique Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Numrique Numro d'vnement formulaire

Description Evenement formulaire retourne une valeur numrique qui identifie le type d'vnement formulaire qui vient de se produire. Gnralement, Evenement formulaire s'utilise dans une mthode formulaire ou une mthode objet. 4e Dimension fournit des constantes prdfinies (places dans le thme Evnements formulaire) permettant de comparer les valeurs retournes par la commande Evenement formulaire. Certains vnements sont gnriques (gnrs pour tout type d'objet), d'autres sont spcifiques un type d'objet particulier. Evnements gnriques Les vnements suivants sont gnrs pour tout formulaire ou objet : Constante Valeur Description Sur chargement 1 Le formulaire s'affiche ou s'imprime Sur libration 24 Le formulaire se referme et est dcharg Sur validation 3 La saisie des donnes dans l'enregistrement est valide Sur clic 4 Un clic est survenu sur un objet Sur double clic 13 Un double-clic est survenu sur un objet Sur avant frappe clavier 17 Un caractre vient d'tre saisi dans l'objet qui a le focus, Lire texte edite retourne le contenu sans ce caractre Sur aprs frappe clavier 28 Un caractre vient d'tre saisi dans l'objet qui a le focus, Lire texte edite retourne le contenu avec ce caractre Sur gain focus 15 Un objet de formulaire va avoir le focus Sur perte focus 14 Un objet de formulaire perd le focus Sur activation 11 La fentre du formulaire passe au premier plan Sur dsactivation 12 La fentre du formulaire passe en arrire-plan

4e Dimension - Langage

683

Sur appel extrieur Sur dposer Sur glisser Sur dbut survol Sur survol Sur fin survol Sur menu slectionn Sur donnes modifies Sur appel zone du plug in Sur Sur Sur Sur Sur Sur Sur entte impression corps impression sous total impression pied de page case de fermeture affichage corps ouverture corps

10 16 21 35 37 36 18 20 19 5 23 6 7 22 8 25 26 31

Sur fermeture corps Sur nouvelle slection

Sur chargement ligne

40

Sur minuteur Sur redimensionnement

27 29

Le formulaire a reu un appel de la commande APPELER PROCESS Des donnes sont dposes sur un objet Des donnes peuvent tre dposes sur un objet Le curseur de la souris entre dans la zone graphique dun objet Le curseur de la souris bouge (dau moins un pixel) alors quil se trouve dans la zone graphique dun objet Le curseur de la souris sort de la zone graphique dun objet Une commande de menu a t slectionne Les donnes d'un objet ont t modifies Un plug-in demande que sa mthode objet soit excute L'en-tte du formulaire va tre imprim ou affich Le corps du formulaire va tre imprim Une rupture du formulaire va tre imprime Le pied de page du formulaire va tre imprim On a cliqu sur la case de fermeture de la fentre Un enregistrement va tre affich dans la liste On a double-cliqu sur un enregistrement et on passe au formulaire entre Le formulaire entre se referme et on retourne au formulaire sortie List box : la slection courante de lignes ou de colonnes est modifie Enregistrements en liste : lenregistrement courant ou la slection courante de lignes est modifi(e) dans un formulaire en liste ou un sous-formulaire Liste hirarchique : la slection dans la liste est modifie la suite dun clic ou de la frappe dune touche au clavier En mode saisie en liste, un enregistrement est charg en modification (lutilisateur a cliqu sur la ligne de lenregistrement et un champ passe en dition) Le nombre de ticks dfini par FIXER MINUTEUR est atteint La fentre du formulaire est redimensionne

684

4e Dimension - Langage

List box Les vnements suivants sont gnrs uniquement pour les objets de type List box : Constante Valeur Description Sur avant saisie 41 Une cellule de list box est sur le point de passer en mode dition Sur dplacement colonne 32 Une colonne de list box est dplace par lutilisateur via le glisser-dposer Sur dplacement ligne 34 Une ligne de list box est dplace par lutilisateur via le glisser-dposer Sur redimensionnement colonne 33 La largeur dune colonne de list box est modifie Sur clic entte 42 Un clic est survenu dans len-tte dune colonne de list box Sur aprs tri 30 Un tri standard vient d'tre effectu dans une colonne de list box Boutons 3D Les vnements suivants sont gnrs uniquement pour les objets de type bouton 3D : Constante Valeur Description Sur clic long 39 Un bouton 3D reoit un clic et le bouton de la souris reste enfonc pendant un certain laps de temps Sur clic flche 38 La zone flche d'un bouton 3D reoit un clic Listes hirarchiques Les vnements suivants sont gnrs uniquement pour les objets de type Liste hirarchique : Constante Valeur Description Sur dployer 43 Un lment de liste hirarchique a t dploy via un clic ou une touche du clavier Sur contracter 44 Un lment de liste hirarchique a t contract via un clic ou une touche du clavier Evnements et mthodes
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lorsqu'un vnement formulaire se produit, 4e Dimension effectue les actions suivantes : En premier lieu, il examine chaque objet du formulaire et appelle la mthode de ceux dont la proprit d'vnement correspondante a t slectionne et qui sont impliqus dans l'vnement. Ensuite, il appelle la mthode formulaire si la proprit d'vnement correspondante a t slectionne pour le formulaire.

4e Dimension - Langage

685

Les diffrentes mthodes objet ne sont pas appeles dans un ordre particulier. La rgle est que les mthodes objet sont toujours appeles avant la mthode formulaire. Dans le cas des sous-formulaires, les mthodes objet du formulaire sortie du sous-formulaire sont d'abord appeles, puis la mthode formulaire du formulaire sortie, puis enfin 4D appelle les mthodes objet du formulaire parent. Autrement dit, lorsqu'un objet est un sousformulaire, 4D utilise la mme rgle pour les mthodes formulaire et objet dans le sousformulaire. Lorsque, pour un vnement particulier, la proprit d'vnement du formulaire n'est pas slectionne, cela n'empche pas les appels aux mthodes des objets pour lesquels l'vnement est slectionn. Autrement dit, la slection ou la dslection d'un vnement au niveau du formulaire n'a pas d'effet sur les proprits d'vnements des objets. ATTENTION : Ce principe ne s'applique pas aux vnements Sur chargement et Sur libration. Ces vnements ne seront gnrs pour un objet que si les proprits d'vnement correspondantes ont t slectionnes la fois pour l'objet et pour le formulaire auquel il appartient. Si les proprits sont slectionnes pour l'objet uniquement, les vnements ne seront pas gnrs ; ces deux vnements doivent tre slectionns au niveau du formulaire. Le nombre d'objets impliqus par un vnement dpend de la nature de l'vnement. En particulier : Pour l'vnement Sur chargement, les mthodes objet de tous les objets du formulaire (sur toutes les pages) pour lequels la proprit d'vnement Sur chargement est slectionne seront appeles. Si l'vnement Sur chargement est slectionn pour le formulaire, la mthode formulaire sera appele. Pour les vnements Sur activation ou Sur redimensionnement, aucune mthode objet ne sera appele car ces vnements s'appliquent au formulaire, pas un objet en particulier. Par consquent, si ces vnements sont slectionns pour le formulaire, seule la mthode formulaire sera appele. L'vnement Sur minuteur n'est gnr que si la mthode formulaire contient un appel pralable la commande FIXER MINUTEUR. Seule la mthode formulaire reoit cet vnement, aucune mthode objet ne sera appele. Pour l'vnement Sur glisser, seule la mthode de l'objet dposable impliqu par l'vnement sera appele (si, bien entendu, la proprit d'vnement Sur glisser est slectionne pour l'objet). La mthode formulaire ne sera pas appele. ATTENTION : Contrairement tous les autres vnements, la mthode d'un objet, pendant l'vnement Sur glisser, est excute dans le contexte du process de l'objet source du glisser-dposer, et non dans celui du process de l'objet de destination de l'opration. Pour plus d'informations, reportez-vous aux descriptions des commandes PROPRIETES GLISSER DEPOSER et Position deposer.

686

4e Dimension - Langage

Si les vnements Sur dbut survol, Sur survol et Sur fin survol sont cochs pour le formulaire, ils sont gnrs pour chaque objet du formulaire. Sils sont cochs pour un objet, ils sont gnrs pour cet objet uniquement. En cas de superposition dobjets, lvnement est gnr par le premier objet capable de le grer dans lordre des plans du haut vers le bas. Les objets rendus invisibles par la commande CHOIX VISIBLE ne gnrent pas ces vnements. Pendant la saisie dun objet, les autres objets peuvent recevoir les vnements de survol en fonction de la position de la souris. Enregistrements en liste : lenchanement dappels des mthodes et des vnements formulaires dans les formulaires liste affichs via MODIFIER SELECTION / VISUALISER SELECTION et les sous-formulaires est le suivant : Pour chaque objet de la zone den-tte : Mthode objet avec vnement Sur entte Mthode formulaire avec vnement Sur entte Pour chaque enregistrement : Pour chaque objet de la zone de corps : Mthode objet avec vnement Sur affichage corps Mthode formulaire avec vnement Sur affichage corps Lappel depuis les vnements Sur affichage corps et Sur entte dune commande 4D provoquant laffichage dune bote de dialogue est interdit et provoque une erreur de syntaxe. Les commandes concernes sont notamment : ALERTE, DIALOGUE, CONFIRMER, Demander, AJOUTER ENREGISTREMENT, MODIFIER ENREGISTREMENT, VISUALISER SELECTION et MODIFIER SELECTION. Le tableau suivant rsume, pour chaque type d'vnement, l'appel des mthodes formulaire et objet : Evnement Sur chargement Sur libration Sur validation Sur clic Sur double clic Sur avant frappe clavier Sur aprs frappe clavier Sur gain focus Sur perte focus Sur activation Sur dsactivation Sur appel extrieur Sur dposer Sur glisser Sur dbut survol Sur survol Sur fin survol Sur menu slectionn Sur donnes modifies Mthode(s) objet Oui Oui Oui Oui (si cliquable) (*) Oui (si cliquable) (*) Oui (si saisissable) (*) Oui (si saisissable) (*) Oui (si tabulable) (*) Oui (si tabulable) (*) Jamais Jamais Jamais Oui (si dposable) (*) Oui (si dposable) (*) Oui Oui Oui Jamais Oui (si modifiable)(*) Mthode formulaire Oui Oui Oui Oui Oui Oui Oui Oui Oui Oui Oui Oui Oui Jamais Oui Oui Oui Oui Oui Quel(s) objet(s) Tous Tous Tous Seul l'objet impliqu Seul l'objet impliqu Seul l'objet impliqu Seul l'objet impliqu Seul l'objet impliqu Seul l'objet impliqu Aucun Aucun Aucun Seul l'objet impliqu Seul l'objet impliqu Tous Tous Tous Aucun Seul l'objet impliqu 687

4e Dimension - Langage

Evnements, objets et proprits


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Une mthode objet est appele si l'vnement peut rellement se produire pour l'objet en fonction de sa nature et de ses proprits. Ce paragraphe dtaille les vnements utiliser pour grer les diffrents types d'objets. A noter que la Liste des proprits de l'diteur de formulaires n'affiche que les vnements compatibles avec l'objet slectionn ou le formulaire. Objets cliquables Les objets cliquables sont grs principalement avec la souris. Ces objets sont les suivants : Variables ou champs saisissables de type Boolen Boutons, boutons par dfaut, boutons radio, cases cocher, grilles de boutons Boutons 3D, boutons radio 3D, cases cocher 3D Pop up menus, pop up menus hirarchiques, menus Images Listes droulantes, menus, Zones de dfilement, listes hirarchiques, list box Boutons invisibles, boutons inverss, boutons radio image Thermomtres, rgles, cadrans Onglets, Sparateurs. Lorsque lvnement Sur clic ou Sur double clic est slectionn pour un de ces objets, vous pouvez dtecter et grer les clics sur l'objet l'aide de la la commande Evenement formulaire qui retourne Sur clic ou Sur double clic selon le cas. Si les deux vnements sont slectionns pour un mme objet, les vnements Sur clic puis Sur double clic seront gnrs en cas de double-clic sur lobjet. Pour tous les objets cliquables, l'vnement Sur clic se produit une fois que le bouton de la souris est relch. Il y a cependant des exceptions : Avec les boutons invisibles et les onglets, l'vnement Sur clic se produit ds qu'un clic a t dtect sans attendre le relchement du bouton de la souris. Avec les thermomtres, rgles et cadrans, si le format d'affichage indique que la mthode objet doit tre appele pendant que vous faites glisser les curseurs de contrle, l'vnement Sur clic survient ds que le clic est dtect. Avec les boutons 3D, l'vnement Sur clic flche est gnr lorsque lutilisateur clique sur la flche (ds que le bouton de la souris est enfonc), voir ci-dessous. Note : Quelques objets peuvent tre activs par le clavier. Une case cocher, par exemple, une fois qu'elle a le focus, peut tre slectionne l'aide de la barre d'espace. Dans ce cas, l'vnement Sur clic est quand mme gnr.

688

4e Dimension - Langage

ATTENTION : Les combo-boxes ne sont pas considres comme des objets cliquables. Une combo-box doit tre perue comme une zone de texte saisissable dont la liste droulante fournit les valeurs par dfaut. Par consquent, vous grez la saisie des donnes dans une combo-box l'aide des vnements Sur avant frappe clavier, Sur aprs frappe clavier et Sur donnes modifies. Objets saisissables par clavier Les objets saississables par clavier sont des objets dans lesquels vous saisissez des donnes par le clavier et pour lesquels vous pouvez filtrer les donnes au plus bas niveau en dtectant les vnements Sur avant frappe clavier et Sur aprs frappe clavier. Vous pouvez tirer pleinement parti de ces vnements l'aide de la commande Lire texte edite. Les objets saisissables sont les suivants : Tous les champs saisissables (sauf images, sous-formulaires et BLOB) Toutes les variables saisissables (sauf images, BLOB, pointeurs et tableaux) Combo-boxes List boxes Une fois que les vnements Sur avant frappe clavier et Sur aprs frappe clavier ont t slectionns pour un de ces objets, vous pouvez dtecter et grer la saisie par le clavier dans l'objet l'aide de la commande Evenement formulaire qui va retourner Sur avant frappe clavier puis Sur aprs frappe clavier (pour plus d'informations, reportez-vous la description de la commande Lire texte edite). Notes : La commande GENERER FRAPPE CLAVIER active les vnements formulaire Sur avant frappe clavier et Sur aprs frappe clavier. Bien qu'objets saisissables, les listes hirarchiques ne grent pas les vnements formulaire Sur avant frappe clavier et Sur aprs frappe clavier (voir aussi le paragraphe Listes hirarchiques ci-dessous). Objets modifiables Les objets modifiables sont des objets ayant une source de donnes, dont la valeur peut tre modifie l'aide de la souris ou du clavier, mais qui ne sont pas grs par l'vnement Sur clic. Ces objets sont les suivants : Tous les champs saisissables (sauf sous-tables et BLOB) Toutes les variables saisissables (sauf BLOB, pointeurs et tableaux) Combo-boxes Objets externes (pour lesquels la saisie de donnes est valide par le plug-in 4D) Listes hirarchiques List box Ces objets reoivent l'vnement Sur donnes modifies. Lorsque l'vnement Sur donnes modifies est slectionn pour un de ces objets, vous pouvez dtecter et grer la modification des valeurs l'aide de la commande Evenement formulaire qui retourne Sur donnes modifies.

4e Dimension - Langage

689

Objets tabulables Les objets tabulables sont ceux qui peuvent recevoir le focus lorsque vous utilisez la touche Tab et/ou si vous cliquez dessus. L'objet qui a le focus est celui qui reoit les caractres saisis via le clavier et qui ne sont pas les acclerateurs (Windows) ou les raccourcis-clavier (MacOS) d'une commande de menu ou d'un objet tel qu'un bouton. TOUS les objets sont tabulables SAUF ceux lists ci-dessous : Variables ou champs non saisissables Grilles de boutons Boutons 3D, boutons radio 3D, cases cocher 3D Pop-up/listes droulantes Menus droulants hirarchiques Pop-up menus Image Zones de dfilement Boutons invisibles, boutons inverss, boutons radio Images Graphes Objets externes (pour lesquels la saisie de donnes est valide par le plug-in 4D) Onglets Sparateurs Lorsque les vnements Sur gain focus et/ou Sur perte focus sont slectionns pour un objet tabulable, vous pouvez dtecter et grer la modification du focus l'aide de la commande Evenement formulaire qui retournera Sur gain focus ou Sur perte focus en fonction de l'vnement. Boutons 3D Les boutons 3D autorisent la mise en place dinterfaces graphiques avances (pour une description des boutons 3D, reportez-vous au manuel Mode Structure). Outre les vnements gnriques, deux vnements spcifiques permettent de grer de ces boutons : Sur clic long : cet vnement est gnr lorsquun bouton 3D reoit un clic et que le bouton de la souris reste enfonc pendant un certain laps de temps. En pratique, le dlai lissue duquel lvnement est gnr est gal au dlai maximal sparant un double-clic, tel quil a t dfini dans les prfrences du systme. Cet vnement peut tre gnr pour tous les styles de boutons 3D, boutons radio 3D et cases cocher 3D, lexception des boutons 3D ancienne gnration (style Dcalage du fond) et des zones de flche des boutons 3D avec pop up menu (cf. ci-dessous). Cet vnement est gnralement utilis pour afficher des pop up menus en cas de clics longs sur des boutons. Lvnement Sur clic, sil est coch, est gnr si lutilisateur relche le bouton de la souris avant le dlai du clic long. Sur clic flche : certains styles de boutons 3D peuvent tre associs un pop up menu et afficher une flche. Un clic sur cette flche fait gnralement apparatre un menu de slection proposant des actions supplmentaires en rapport avec laction du bouton.

690

4e Dimension - Langage

4e Dimension vous permet de grer ce type de bouton laide de l'vnement Sur clic flche. Cet vnement est gnr lorsque lutilisateur clique sur la flche (ds que le bouton de la souris est enfonc) : - si le pop up menu est de type Spar, lvnement est gnr uniquement en cas de clic sur la zone flche du bouton. - si le pop up menu est de type Li, lvnement est gnr en cas de clic sur nimporte quelle partie du bouton. A noter quavec ce type de bouton, lvnement Sur clic long ne peut pas tre gnr.

Les styles de boutons 3D, boutons radio 3D et cases cocher 3D acceptant la proprit Avec pop up menu sont : Aucun, Bouton barre outils, Bevel, Bevel arrondi et Office XP. List box Sept vnements formulaires permettent de prendre en charge les spcificits des list box : Sur avant saisie : cet vnement est gnr juste avant quune cellule de list box passe en mode dition (cest--dire, avant que le curseur de saisie soit affich). Cet vnement permet au dveloppeur, par exemple, dafficher un texte diffrent selon que lutilisateur est en mode affichage ou dition. Sur nouvelle slection : cet vnement est gnr chaque fois que la slection courante de lignes ou de colonnes de la list box est modifie. Cet vnement est galement gnr pour les listes denregistrements et les listes hirarchiques. Sur dplacement colonne : cet vnement est gnr lorsquune colonne de list box est dplace par lutilisateur via le glisser-dposer. Il nest pas gnr si la colonne est glisse et dpose son emplacement initial. La commande Numero colonne listbox deplacee permet de connatre le nouvel emplacement de la colonne. Sur dplacement ligne : cet vnement est gnr lorsquune ligne de list box est dplace par lutilisateur via le glisser-dposer. Il nest pas gnr si la ligne est glisse et dpose son emplacement initial. Sur redimensionnement colonne : cet vnement est gnr lorsque la largeur dune colonne de list box est modifie (via la souris ou par programmation laide de la commande FIXER LARGEUR COLONNE LISTBOX). Sur clic entte : cet vnement est gnr lorsquun clic se produit sur len-tte dune colonne de list box. Dans ce cas, la commande Self permet de connatre len-tte de colonne sur laquelle le clic sest produit. Lvnement Sur clic est gnr lorsquun clic droit (Windows) ou un Ctrl+clic (MacOS) a lieu sur une colonne ou un en-tte de colonne.

4e Dimension - Langage

691

Si la proprit Triable a t coche pour la list box, il est possible dautoriser ou non le tri standard sur la colonne en passant la valeur 0 ou -1 dans la variable $0 : - Si $0 vaut 0, le tri standard est effectu. - Si $0 vaut -1, le tri standard nest pas effectu et len-tte naffiche pas la flche de tri. Le dveloppeur peut toutefois gnrer un tri des colonnes sur des critres personnaliss laide des commandes de gestion des tableaux de 4e Dimension. Si la proprit Triable na pas t coche pour la list box, la variable $0 nest pas utilise. Sur aprs tri : cet vnement est gnr juste aprs quun tri standard ait t effectu (par consquent, il nest pas gnr si $0 retourne -1 dans lvnement Sur clic entte). Ce mcanisme est utile pour conserver le sens du dernier tri effectu par lutilisateur. Dans cet vnement, la commande Self retourne un pointeur sur la variable de la colonne ayant t trie. Listes hirarchiques Outre les vnements gnriques, trois vnements formulaires spcifiques permettent de prendre en charge les actions utilisateurs effectues sur les listes hirarchiques : Sur nouvelle slection : cet vnement est gnr chaque fois que la slection dans la liste hirarchique est modifie la suite dun clic ou de la frappe dune touche au clavier. Cet vnement est galement gnr dans les objets list box et les listes denregistrements. Sur dployer : cet vnement est gnr chaque fois quun lment de la liste hirarchique a t dploy via un clic ou une touche du clavier. Sur contracter : cet vnement est gnr chaque fois quun lment de la liste hirarchique a t contract via un clic ou une touche du clavier. Ces vnements ne sont pas mutuellement exclusifs. Ils peuvent tre gnrs les uns aprs les autres pour une liste hirarchique : - Suite la frappe dune touche clavier (dans lordre) : Evnement Contexte Sur donnes modifies Un lment tait en dition Sur dployer / Sur contracter Ouverture/fermeture de sous-liste laide des touches flches -> ou <Sur nouvelle slection Slection dun nouvel lment Sur clic Activation de la liste par le clavier - Suite un clic souris (dans lordre) : Evnement Contexte Sur donnes modifies Un lment tait en dition Sur dployer / Sur contracter Ouverture/fermeture de sous-liste via un clic sur licne de dploiement/contraction ou bien Double-clic sur une sous-liste non ditable Sur nouvelle slection Slection dun nouvel lment Sur clic / Sur double clic Activation de la liste par un clic ou un double-clic

692

4e Dimension - Langage

Exemples Dans tous les exemples ci-dessous, nous supposons que les proprits d'vnements des formulaires et des objets ont t slectionnes de manire approprie. (1) L'exemple suivant trie une slection de sous-enregistrements pour la sous-table [Parents]Enfants avant qu'un formulaire de la table [Parents] ne soit affich l'cran : ` Mthode d'un formulaire pour la table [Parents] Au cas ou : (Evenement formulaire=Sur chargement) TRIER SOUS ENREGISTREMENTS([Parents]Enfants;[Parents]Enfants'Prnom;>) ` ... Fin de cas

(2) L'exemple suivant montre l'utilisation de l'vnement Sur validation pour affecter automatiquement la date lorsque l'enregistrement est modifi : ` Mthode d'un formulaire Au cas ou ` ... : (Evenement formulaire=Sur validation) [LaTable]Date de modification:=Date du jour Fin de cas

(3) Dans l'exemple suivant, la gestion complte d'un menu droulant (initialisation, clics et relchement de l'objet) est place dans la mthode de l'objet : ` Mthode objet du menu droulant taTaille Au cas ou : (Evenement formulaire=Sur chargement) TABLEAU ALPHA(31;taTaille;3) taTaille{1}:="Petit" taTaille{2}:="Moyen" taTaille{3}:="Grand" : (Evenement formulaire=Sur clic) Si (taTaille#0) ALERTE("Vous avez choisi la taille "+taTaille{taTaille}+".") Fin de si : (Evenement formulaire=Sur libration) EFFACER VARIABLE(taTaille) Fin de cas

4e Dimension - Langage

693

(4) L'exemple suivant montre comment, dans une mthode objet, grer et valider l'opration de glisser-dposer partir d'un champ qui n'accepte que des images. ` Mthode objet du champ Image [LaTable]uneImage Au cas ou : (Evenement formulaire=Sur glisser) ` On est en train de glisser-dposer un objet et la souris est au-dessus d'un ` champ, on souhaite obtenir les informations sur l'objet source PROPRIETES GLISSER DEPOSER ($vpObjetSource;$vlElmentSource; $lProcessSource) ` Notez que nous n'avons pas besoin de tester le numro de process source ` pour la mthode objet excute parce qu'elle est dans le mme process $vlTypeDonnes:=Type ($vpSrcObject->) ` Les donnes source sont-elles une image (champ, variable ou tableau) ? Si (($vlTypeDonnes=Est une image) | ($vlTypeDonnes=Est un tableau image)) ` Accepter l'opration ` Notez que le bouton de la souris est toujours enfonc, 4D affiche l'objet ` en vido inverse afin d'informer l'utilisateur que les donnes source ` peuvent tre dposes sur cet objet $0:=0 Sinon ` Sinon, refuser l'opration $0:=-1 ` Dans ce cas, l'objet n'est pas affich en vido inverse Fin de si : (Evenement formulaire=Sur dposer) ` Les donnes source ont t dposes sur l'objet, donc nous avons besoin de ` les copier dans l'objet. ` Obtenir les informations sur l'objet source PROPRIETES GLISSER DEPOSER ($vpObjetSource;$vlElmentSource; $lProcessSource) $vlTypeDonnes:=Type ($vpSrcObject->) Au cas ou ` L'objet source est un champ ou une variable de type Image : ($vlTypeDonnes=Est une image) ` Est-ce que l'objet source est dans le mme process (dans la mme ` fentre et le mme formulaire) ? Si ($lProcessSource=Numero du process courant) ` Copier la valeur source [LaTable]uneImage:=$vpObjetSource->

694

4e Dimension - Langage

Sinon ` Sinon, est-ce que l'objet source est une variable ? Si (Est une variable ($vpObjetSource)) ` Obtenir la valeur du process source LIRE VARIABLE PROCESS ($lProcessSource;$vpObjetSource->; $vgImageGlisse) [LaTable]uneImage:=$vgImageGlisse Sinon ` Sinon, utiliser APPELER PROCESS pour obtenir la valeur du champ ` du process source Fin de si Fin de si ` L'objet source est un tableau de type Image : ($vlTypeDonnes=Est un tableau image) ` Est-ce que l'objet source est dans le mme process (dans la mme ` fentre et le mme formulaire) ? Si ($lProcessSource=Numero du process courant) ` Copier la valeur source [LaTable]uneImage:=$vpSrcObject->{$vlElmentSource} Sinon ` Sinon, obtenir la valeur du process source LIRE VARIABLE PROCESS ($lProcessSource;$vpObjetSource ->{$vlElmentSource};$vgImageGlisse) [LaTable]uneImage:=$vgImageGlisse Fin de si Fin de cas Fin de cas Note : Pour d'autres exemples sur la gestion des vnements Sur glisser et Sur dposer, rfrez-vous aux exemples de la commande PROPRIETES GLISSER DEPOSER. (5) L'exemple suivant est une mthode formulaire gnrique. Elle fait apparatre chacun des vnements qui peuvent survenir lorsqu'un formulaire est utilis comme formulaire sortie : ` Mthode formulaire d'un formulaire sortie $vpFormTable:=Table du formulaire courant Au cas ou ` ... : (Evenement formulaire=Sur entte) ` La zone en-tte va tre imprime ou affiche Au cas ou : (Avant selection($vpFormTable->)) ` Le code pour la premire rupture d'en-tte doit tre plac ici

4e Dimension - Langage

695

: (Niveau = 1) ` Le code pour la rupture d'en-tte niveau 1 doit tre plac ici : (Niveau = 2) ` Le code pour la rupture d'en-tte niveau 2 doit tre plac ici ` ... Fin de cas : (Evenement formulaire=Sur impression corps) ` Un enregistrement va tre imprim ` Le code pour chaque enregistrement doit tre plac ici : (Evenement formulaire=Sur impression sous total) ` Une rupture va tre imprime Au cas ou : (Niveau = 0) ` Le code pour la rupture 0 doit tre plac ici : (Niveau = 1) ` Le code pour la rupture 1 doit tre plac ici ` ... Fin de cas : (Evenement formulaire=Sur impression pied de page) Si (Fin de selection($vpFormTable->)) ` Le code pour le dernier pied de page doit tre plac ici Sinon ` Le code pour le pied de page doit tre plac ici Fin de si Fin de cas

(6) L'exemple suivant montre une mthode formulaire gnrique qui gre les vnements pouvant survenir dans un formulaire sortie quand il s'affiche l'aide de VISUALISER SELECTION ou MODIFIER SELECTION. Dans un but informatif, elle affiche l'vnement dans la barre de titre de la fentre. ` Une mthode formulaire exemple Au cas ou : (Evenement formulaire=Sur chargement) $vaEvnement:="Le formulaire va tre affich" : (Evenement formulaire=Sur libration) $vaEvnement:="Le formulaire sortie vient de se fermer et va disparatre" : (Evenement formulaire=Sur affichage corps) $vaEvnement:="Affichage de l'enregistrement n"+ Chaine(Numero dans selection([LaTable])) : (Evenement formulaire=Sur menu slectionn) $vaEvnement:="Une commande de menu a t slectionne"

696

4e Dimension - Langage

: (Evenement formulaire=Sur entte) $vaEvnement:="L'en-tte va tre imprim ou affich" : (Evenement formulaire=Sur clic) $vaEvnement:="On a cliqu sur un enregistrement" : (Evenement formulaire=Sur double clic) $vaEvnement:="On a double-cliqu sur un enregistrement" : (Evenement formulaire=Sur ouverture corps) $vaEvnement:="On a double-cliqu sur l'enregistrement n"+Chaine (Numero dans selection([LaTable])) : (Evenement formulaire=Sur fermeture corps) $vaEvnement:="Retour au formulaire sortie" : (Evenement formulaire=Sur activation) $vaEvnement:="La fentre du formulaire passe au premier plan" : (Evenement formulaire=Sur dsactivation) $vaEvnement:="La fentre du formulaire n'est plus au premier plan" : (Evenement formulaire=Sur menu slectionn) $vaEvnement:="Une ligne de menu a t slectionne" : (Evenement formulaire=Sur appel extrieur) $vaEvnement:="Un appel extrieur a t reu" Sinon $vaEvnement:="Que se passe-t-il ? L'vnement n"+ Chaine(Evenement formulaire) Fin de cas CHANGER TITRE FENETRE ($vaEvnement)

(7) Pour des exemples de gestion des vnements Sur avant frappe clavier et Sur aprs frappe clavier, rfrez-vous aux exemples des commandes Lire texte edite, Frappe clavier et FILTRER FRAPPE CLAVIER. (8) L'exemple suivant montre comment traiter de la mme manire les clics et double-clics dans une zone de dfilement : ` Mthode objet pour la zone de dfilement taChoix Au cas ou : (Evenement formulaire=Sur chargement) TABLEAU ALPHA (...;taChoix;...) ` ... taChoix:=0

4e Dimension - Langage

697

: ((Evenement formulaire=Sur clic) | (Evenement formulaire=Sur double clic)) Si (taChoix#0) ` On a cliqu sur un lment, faire quelque chose ` ... Fin de si ` ... Fin de cas

(9) L'exemple suivant montre comment traiter les clics et double-clics de manire diffrente (notez l'utilisation de l'lment zro pour conserver la valeur de l'lment slectionn) : ` Mthode objet pour la zone de dfilement taChoix Au cas ou : (Evenement formulaire=Sur chargement) TABLEAU ALPHA (...;taChoix;...) ` ... taChoix:=0 taChoix{0}:="0" : (Evenement formulaire=Sur clic) Si (taChoix#0) Si (taChoix#Num(taChoix)) ` On a cliqu sur un lment, faire quelque chose ` ... ` Sauvegarder l'lment nouvellement slectionn pour la prochaine fois taChoix{0}:=Chaine(taChoix) Fin de si Sinon taChoix:=Num(taChoix{0}) Fin de si : (Evenement formulaire=Sur double clic souris) Si (taChoix#0) ` On a double-cliqu sur un lment, faire quelque chose Fin de si ` ... Fin de cas

698

4e Dimension - Langage

(10) L'exemple suivant montre comment maintenir une zone contenant du texte partir d'une mthode formulaire l'aide des vnements Sur gain focus et Sur perte focus : ` Mthode formulaire [Contacts];"Entre" Au cas ou : (Evenement formulaire=Sur chargement) C_TEXTE(vtZoneEtat) vtZoneEtat:="" : (Evenement formulaire=Sur gain focus) RESOUDRE POINTEUR (Objet focus;$vsNomVar;$vlNumTable;$vlNumChamp) Si (($vlNumTable#0) & ($vlNumChamp#0)) Au cas ou : ($vlNumChamp=1) ` Champ nom vtZoneEtat:="Saisissez le nom du contact, il sera automatiquement mis en majuscules." ` ... : ($vlNumChamp=10) ` Champ code postal vtZoneEtat:="Saisissez un code postal, il sera automatiquement vrifi et valid." ` ... Fin de cas Fin de si : (Evenement formulaire=Sur perte focus) vtZoneEtat:="" ` ... Fin de cas

(11) L'exemple suivant montre comment traiter l'vnement de fermeture de fentre avec un formulaire utilis pour l'entre des donnes : ` Mthode pour un formulaire entre $vpFormulaireTable:=Table du formulaire courant Au cas ou ` ... : (Evenement formulaire=Sur case de fermeture) Si (Enregistrement modifie($vpFormulaireTable->)) CONFIRMER ("Cet enregistrement a t modifi. Voulez-vous sauvegarder les modifications ?") Si (OK=1) VALIDER Sinon NE PAS VALIDER Fin de si

4e Dimension - Langage

699

(10) L'exemple suivant montre comment maintenir une zone contenant du texte partir d'une mthode formulaire l'aide des vnements Sur gain focus et Sur perte focus : ` Mthode formulaire [Contacts];"Entre" Au cas ou : (Evenement formulaire=Sur chargement) C_TEXTE(vtZoneEtat) vtZoneEtat:="" : (Evenement formulaire=Sur gain focus) RESOUDRE POINTEUR (Objet focus;$vsNomVar;$vlNumTable;$vlNumChamp) Si (($vlNumTable#0) & ($vlNumChamp#0)) Au cas ou : ($vlNumChamp=1) ` Champ nom vtZoneEtat:="Saisissez le nom du contact, il sera automatiquement mis en majuscules." ` ... : ($vlNumChamp=10) ` Champ code postal vtZoneEtat:="Saisissez un code postal, il sera automatiquement vrifi et valid." ` ... Fin de cas Fin de si : (Evenement formulaire=Sur perte focus) vtZoneEtat:="" ` ... Fin de cas

(11) L'exemple suivant montre comment traiter l'vnement de fermeture de fentre avec un formulaire utilis pour l'entre des donnes : ` Mthode pour un formulaire entre $vpFormulaireTable:=Table du formulaire courant Au cas ou ` ... : (Evenement formulaire=Sur case de fermeture) Si (Enregistrement modifie($vpFormulaireTable->)) CONFIRMER ("Cet enregistrement a t modifi. Voulez-vous sauvegarder les modifications ?") Si (OK=1) VALIDER Sinon NE PAS VALIDER Fin de si

700

4e Dimension - Langage

Sinon NE PAS VALIDER Fin de si ` ... Fin de cas (12) L'exemple suivant montre comment mettre en majuscules un champ Texte ou Alphanumrique chaque fois que la valeur est modifie : ` Mthode objet pour [Contacts]Prnom Au cas ou ` ... : (Evenement formulaire=Sur donnes modifies) [Contacts]Prnom:= Majusc(Sous chaine([Contacts]Prnom;1;1)) +Minusc(Sous chaine([Contacts]Prnom;2)) ` ... Fin de cas Rfrence APPELER PROCESS, FILTRER FRAPPE CLAVIER, FIXER MINUTEUR, Frappe clavier, Lire texte edite, PROPRIETES GLISSER DEPOSER, Table du formulaire courant.

4e Dimension - Langage

701

Avant

Evnements formulaire version 5

Note de compatibilit Cette fonction n'est conserve que pour des raisons de compatibilit avec les versions prcdentes de 4D. A compter de la version 6, il est prfrable d'utiliser la fonction Evenement formulaire et de tester si elle retourne l'vnement Sur chargement.
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Avant Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Description Si vous souhaitez que la phase Avant du cycle d'excution soit gnre, assurez-vous que l'vnement Sur chargement a bien t slectionn, en mode Structure, dans les proprits du formulaire et/ou des objets concerns. Rfrence Evenement formulaire.

702

4e Dimension - Langage

Pendant

Evnements formulaire version 5

Note de compatibilit Cette fonction n'est conserve que pour des raisons de compatibilit avec les versions prcdentes de 4D. A compter de la version 6, il est prfrable d'utiliser la fonction Evenement formulaire et de tester si elle retourne un vnement tel que Sur clic.
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Pendant Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Description Si vous souhaitez que la phase Pendant du cycle d'excution soit gnre, assurez-vous qu'au moins un vnement tel que Sur clic a bien t slectionn, en mode Structure, dans les proprits du formulaire et/ou des objets concerns. Rfrence Evenement formulaire.

4e Dimension - Langage

703

Apres

Evnements formulaire version 5

Note de compatibilit Cette fonction n'est conserve que pour des raisons de compatibilit avec les versions prcdentes de 4D. A compter de la version 6, il est prfrable d'utiliser la fonction Evenement formulaire et de tester si elle retourne un vnement tel que Sur validation.
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Apres Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Description Si vous souhaitez que la phase Apres du cycle d'excution soit gnre, assurez-vous que l'vnement Sur validation a bien t slectionn, en mode Structure, dans les proprits du formulaire et/ou des objets concerns. Rfrence Evenement formulaire.

704

4e Dimension - Langage

En entete

Evnements formulaire version 5

Note de compatibilit Cette commande a t conserve pour des raisons de compatibilit. A partir de la version 6 de 4D, il est prfrable d'utiliser la commande Evenement formulaire et de tester si elle retourne l'vnement Sur entte.
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

En entete Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Description Si vous souhaitez que le cycle d'excution En entete soit gnr, assurez-vous que l'vnement formulaire Sur entte a bien t activ dans la bote de dialogue des proprits du formulaire ou du (des) objet(s) slectionn(s), en mode Structure. Rfrence En pied, En rupture, Pendant.

4e Dimension - Langage

705

En rupture

Evnements formulaire version 5

Note de compatibilit Cette commande a t conserve pour des raisons de compatibilit. A partir de la version 6 de 4D, il est prfrable d'utiliser la commande Evenement formulaire et de tester si elle retourne l'vnement Sur impression sous total.
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

En rupture Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Description Si vous souhaitez que le cycle d'excution En rupture soit gnr, assurez-vous que l'vnement formulaire Sur impression sous total a bien t activ dans la bote de dialogue des proprits du formulaire ou du (des) objet(s) slectionn(s), en mode Structure. Rfrence En entete, En pied, Pendant.

706

4e Dimension - Langage

En pied

Evnements formulaire version 5

Note de compatibilit Cette fonction n'est conserve que pour des raisons de compatibilit avec les versions prcdentes de 4D. A compter de la version 6, il est prfrable d'utiliser la fonction Evenement formulaire et de tester si elle retourne l'vnement Sur impression pied de page.
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

En pied Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Description Si vous voulez que le cycle d'excution En pied soit gnr, vrifiez que la proprit d'vnement Sur impression pied de page du formulaire et/ou des objets est slectionne en mode Structure. Rfrence En entete, En rupture, Pendant.

4e Dimension - Langage

707

Activation

Evnements formulaire version 5

Note de compatibilit Cette fonction n'est conserve que pour des raisons de compatibilit avec les versions prcdentes de 4D. A compter de la version 6, il est prfrable d'utiliser la fonction Evenement formulaire et de tester si elle retourne l'vnement Sur activation.
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Activation Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Vrai si le cycle d'excution est en activation

Description Activation retourne Vrai dans une mthode formulaire lorsque la fentre contenant le formulaire passe au premier plan. ATTENTION : N'appelez pas de commandes telles que TRACE ou ALERTE dans la phase Activation d'un formulaire, car cela provoquerait une boucle sans fin. Note : Si vous voulez que le cycle d'excution Activation soit gnr, assurez-vous que la proprit d'vnement Sur activation du formulaire et/ou des objet(s) est slectionne en mode Structure. Cette proprit est automatiquement dfinie pour les bases converties. Rfrence Desactivation, Evenement formulaire.

708

4e Dimension - Langage

Desactivation

Evnements formulaire version 5

Note de compatibilit Cette fonction n'est conserve que pour des raisons de compatibilit avec les versions prcdentes de 4D. A compter de la version 6, il est prfrable d'utiliser la fonction Evenement formulaire et de tester si elle retourne l'vnement Sur dsactivation.
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Desactivation Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Vrai si le cycle d'excution est en dsactivation

Description Desactivation retourne Vrai dans une mthode formulaire ou mthode objet lorsque la fentre appartenant au process du premier plan, contenant le formulaire, passe l'arrireplan. Si vous voulez que le cycle d'excution Desactivation soit gnr, vrifiez que la proprit d'vnement Sur dsactivation du formulaire et/ou de l'objet est slectionne en mode Structure. Rfrence Activation, Evenement formulaire.

4e Dimension - Langage

709

Appel exterieur

Evnements formulaire version 5

Note de compatibilit Cette fonction n'est conserve que pour des raisons de compatibilit avec les versions prcdentes de 4D. A compter de la version 6, il est prfrable d'utiliser la fonction Evenement formulaire et de tester si elle retourne un vnement tel que Sur appel exterieur.
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Appel exterieur Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Description Si vous voulez que le cycle d'excution Appel exterieur soit gnr, vrifiez que la proprit d'vnement Sur appel extrieur du formulaire et/ou des objets est slectionne en mode Structure. Rfrence APPELER PROCESS, Evenement formulaire.

710

4e Dimension - Langage

Lire texte edite

Evnements formulaire version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire texte edite Texte Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Texte Texte en cours de saisie

Description La commande Lire texte edite retourne le texte en cours de saisie dans un objet de formulaire. Cette commande est principalement destine tre utilise avec le nouvel vnement formulaire Sur aprs frappe clavier pour rcuprer le texte au fur et mesure de la frappe. Elle peut galement tre utilise avec lvnement formulaire Sur avant frappe clavier. Note : Pour des raisons dharmonisation avec le nouvel vnement formulaire Sur aprs frappe clavier, lvnement Sur entre clavier a t renomm en Sur avant frappe clavier compter de la version 6.5 de 4D. La combinaison de cette commande avec les vnements formulaire Sur avant frappe clavier et Sur aprs frappe clavier fonctionne de la manire suivante : Ds quun caractre est tap au clavier, lvnement Sur avant frappe clavier est gnr. Dans cet vnement, la fonction Lire texte edite retourne le contenu de la zone avant la dernire frappe clavier. Par exemple, si la zone contient PA et que lutilisateur tape R, Lire texte edite retourne PA dans lvnement Sur avant frappe clavier. Si la zone ne contient rien au dpart, Lire texte edite retourne une chane vide. Ensuite, l'vnement formulaire Sur aprs frappe clavier est gnr. Dans cet vnement, la fonction Lire texte edite retourne le contenu de la zone y compris le dernier caractre entr au clavier. Par exemple, si la zone contient PA et que lutilisateur tape R, Lire texte edite retourne PAR dans lvnement Sur aprs frappe clavier. Ces deux vnements ne sont gnrs que dans les mthodes des objets concerns. Dans un contexte autre que la saisie dans un formulaire, cette fonction retourne une chane vide. Exemples (1) Dans un formulaire entre, vous souhaitez que les caractres saisis soient automatiquement mis en majuscules :

Si (Evenement formulaire=Sur apres frappe clavier) [Voyages]Agences:=Majusc(Lire texte edite) Fin de si

4e Dimension - Langage

711

(2) Voici un exemple de traitement la vole des caractres saisis dans un champ texte. Le principe consiste placer dans un autre champ texte (appel Mots) la dcomposition en mots de la phrase en cours de saisie. Pour cela, crivez dans la mthode objet du champ de saisie :

Si (Evenement formulaire=Sur apres frappe clavier) $SaisieTempsRel:=Lire texte edite PROPRIETES PLATE FORME ($plate_forme) Si ($plate_forme#3) ` Macintosh ou Power Macintosh Repeter $PhraseDcompose:=Remplacer chaine($SaisieTempsRel;Caractere(32); Caractere(13)) Jusque (Position(" ";$PhraseDcompose)=0) Sinon ` Windows Repeter $PhraseDcompose:=Remplacer chaine($SaisieTempsRel;Caractere(32); Caractere(13)+Caractere(10)) Jusque (Position(" ";$PhraseDcompose)=0) Fin de si [Exemple]Mots:=$PhraseDcompose Fin de si

Note : Cet exemple nest pas exhaustif puisque lon considre que les mots sont spars par des espaces uniquement (Caractere (32)). La mise au point dun systme complet ncessiterait lajout dautres filtres afin de reprer tous les mots (point-virgules, virgules, apostrophes, etc...). Rfrence Evenement formulaire.

712

4e Dimension - Langage

FIXER MINUTEUR

Evnements formulaire version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER MINUTEUR (tickCount) Paramtre tickCount Type Entier long Description Nombre de ticks

Description La commande FIXER MINUTEUR permet dactiver lvnement formulaire Sur minuteur et de fixer, pour le process courant, le nombre de ticks (1 tick = 1/60me de seconde) entre chaque vnement formulaire Sur minuteur. Note : Pour plus dinformations sur cet vnement formulaire, reportez-vous la description de la commande Evenement formulaire. Si elle est appele dans un contexte autre que laffichage dun formulaire, cette commande ne fait rien. Note serveur Web : Le serveur Web 4D peut tirer parti de cette commande ainsi que de lvnement formulaire Sur minuteur pour rafficher des formulaires 4D en mode contextuel. Ce fonctionnement permet dobtenir lenvoi de pages HTML mises jour en temps rel, tout en conomisant la bande passante. En effet, dans ce cas la mise jour du formulaire nest pas automatique, il vous faut pour cela appeler la commande REDESSINER. Il est donc possible doptimiser le systme en nappelant REDESSINER que lorsque les donnes ont t modifies. Seuls les browsers qui interprtent le JavaScript permettront le redessinement automatique. La priode dfinie par FIXER MINUTEUR sera utilise par le browser ; elle doit tre comprise entre quelques secondes (5 tant une valeur pratique) et le timeout du process Web. Reportez-vous lexemple n2. Pour inactiver par programmation le dclenchement de lvnement formulaire Sur minuteur, appelez de nouveau la commande FIXER MINUTEUR en passant 0 dans le paramtre nbTicks. Exemples (1) Vous souhaitez que, lorsquun formulaire est affich lcran, un bip soit mis toutes les trois secondes. Pour cela, crivez dans la mthode du formulaire :

Si (Evenement formulaire=Sur chargement) FIXER MINUTEUR(60*3) Fin de si ... Si (Evenement formulaire=Sur minuteur) BEEP Fin de si 4e Dimension - Langage 713

(2) Vous souhaitez que votre serveur Web provoque la mise jour dun formulaire 4D sur les browsers toutes les cinq secondes. Vous pouvez crire, dans la mthode du formulaire :

Si (Evenement formulaire=Sur chargement) FIXER MINUTEUR(60*5) Fin de si ... Si (Evenement formulaire=Sur minuteur) ... `Vous pouvez placer ici un test sur la modification des donnes et `nexcuter la ligne suivante que si les donnes ont t modifies REDESSINER ([MaTable];"MonFormulaire") Fin de si

Rfrence Evenement formulaire, REDESSINER.

714

4e Dimension - Langage

Clic droit

Evnements formulaire version 6.8.1

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Clic droit Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Vrai si un clic droit a t dtect, sinon Faux

Description La commande Clic droit retourne Vrai si un clic effectu avec le bouton droit de la souris a t effectu. Cette commande doit tre appele uniquement dans le cadre de lvnement formulaire Sur clic. Il est donc ncessaire de vrifier en mode Structure que cet vnement a bien t coch dans les Proprits du formulaire et/ou de lobjet. Note : Cette commande fonctionne uniquement sous Windows et sous MacOS X. Elle retourne toujours Faux sous MacOS 9. Rfrence Clic contextuel, Evenement formulaire.

4e Dimension - Langage

715

Clic contextuel

Evnements formulaire version 6.8.1

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Clic contextuel Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Faux Boolen Vrai si un clic contextuel a t dtect, sinon

Description La commande Clic contextuel retourne Vrai si un clic de type contextuel a t effectu : Sous Windows, les clics contextuels sont effectus avec le bouton droit de la souris. Sous MacOS, les clics contexuels sont effectus laide de la combinaison Control+clic. Cette commande doit tre appele uniquement dans le cadre de lvnement formulaire Sur clic. Il est donc ncessaire de vrifier en mode Structure que cet vnement a bien t coch dans les Proprits du formulaire et/ou de lobjet. Exemple Cette mthode, associe une zone de dfilement, permet de changer la valeur dun lment de tableau laide dun menu contextuel :

Si(Clic contextuel) Si (Pop up menu("Vrai;Faux")=1) monTableau{monTableau}:="Vrai" Sinon monTableau{monTableau}:="Faux" Fin de si Fin de si

Rfrence Clic droit, Evenement formulaire.

716

4e Dimension - Langage

21 ________________________ Fentres

4e Dimension - Langage

717

718

4e Dimension - Langage

Gestion des fentres

Fentres version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le rle des fentres est d'afficher des informations pour l'utilisateur. Trois actions principales ncessitent laffichage dune fentre : la saisie de donnes, laffichage de donnes et laffichage de messages destins lutilisateur. Il y a toujours au moins une fentre ouverte lcran. Si ncessaire, des barres de dfilement sont ajoutes, afin de permettre l'utilisateur de faire dfiler le contenu d'un formulaire lorsque celui-ci est plus grand que la fentre. En mode Utilisation, cette fentre sera soit la fentre prsentant vos enregistrements sous forme de liste (formulaire sortie), soit la fentre proposant un enregistrement en saisie (formulaire entre). En mode Menus crs, cette fentre sera lcran prsentant par dfaut le logo de 4e Dimension. Lorsque vous slectionnez une commande de menu en mode Menus crs, la fentre d'accueil peut tre efface et remplace par des donnes lorsque vous faites appel aux commandes qui affichent des formulaires. Une fois que l'excution de ces commandes est termine, l'cran d'accueil apparat de nouveau par dfaut. Pour crer vos propres fentres, faites appel la commande Creer fenetre ou Creer fenetre formulaire. Il existe diffrents types de fentres personnalises. Lorsque vous n'en avez plus besoin, vous pouvez fermer une fentre personnalise avec la commande FERMER FENETRE, ou en double-cliquant sur la case du menu Systme (Windows) ou sur la case de fermeture (MacOS), s'il y en a une. Certaines commandes, telles que GRAPHE SUR SELECTION, QR ETAT ou encore IMPRIMER ETIQUETTES ouvrent leurs propres fentres et les placent au premier plan. Si vous dmarrez un nouveau process et n'ouvrez pas de fentre au dmarrage de la mthode process, 4D en crera une automatiquement avec le type par dfaut, ds qu'il sera ncessaire d'afficher un formulaire.

4e Dimension - Langage

719

Bords pousseurs A compter de la version 2004 de 4e Dimension, les bords droits et bas des fentres sont par dfaut des sparateurs pousseurs. Cela signifie que les objets se trouvant droite ou audessous des limites dune fentre affiche lcran seront automatiquement repousss vers la droite ou vers le bas en cas dagrandissement de la fentre :

Ce mcanisme permet notamment de grer des fentres volets escamotables de type Explorateur (voir l'exemple de la commande FIXER TAILLE FORMULAIRE). Note : Ce principe nest pas mis en oeuvre lorsque la fentre comporte des barres de dfilement. Rfrence Creer fenetre, Creer fenetre formulaire, Types de fentres.

720

4e Dimension - Langage

Types de fentres

Fentres version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous spcifiez le type de fentre ouvrir avec Creer fenetre l'aide d'une des constantes prdfinies suivantes : Constante Fentre standard Fentre standard sans zoom Fentre standard de taille fixe Dialogue modal Dialogue modal dplaable Dialogue simple Dialogue ombr Fentre palette Fentre coins arrondis Fentre pop up Fentre feuille Fentre feuille redim Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long Valeur 8 0 4 1 5 2 3 1984 16 32 33 34 Fentre flottante Non Non Non Non Oui Oui Oui Oui Non Non Non Non

Fentres flottantes Si vous passez une de ces constantes Creer fenetre, vous crez une fentre standard. Pour ouvrir une fentre flottante, passez un type de fentre ngatif Creer fenetre. Fentres modales Une fentre modale place l'utilisateur dans un tat (ou mode) o il ne peut agir qu' l'intrieur de la fentre. Tant qu'une fentre modale est affiche, les commandes de menu et les autres fentres de l'application sont inaccessibles. Pour refermer une fentre modale, l'utilisateur doit la valider, l'annuler ou utiliser une des options qu'elle propose. Les botes de dialogue d'alerte sont des exemples typiques de fentres modales. Dans 4D, les fentres de type 1 et 5 sont modales. Note : Une fentre modale reste toujours au premier plan. Par consquent, lorsqu'une fentre modale appelle une fentre non modale, cette dernire s'affiche en arrire-plan, bien qu'elle ait t appele postrieurement. Il ne faut donc pas effectuer ce type d'opration. En revanche, lorsqu'une fentre modale appelle une autre fentre modale, cette dernire s'affiche au premier plan Vous trouverez dans les pages suivantes une description de chaque type de fentre, sous Windows ( gauche) et MacOS ( droite).

4e Dimension - Langage

721

Fentre standard (8)


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Peut avoir un titre : Oui Peut comporter une case de fermeture ou un quivalent : Oui Peut tre redimensionne : Oui Peut tre agrandie/rduite ou "zoome" : Oui Adapte aux barres de dfilement : Oui Utilisation : saisie de donnes avec des barres de dfilement, VISUALISER SELECTION, MODIFIER SELECTION, etc. Fentre standard sans zoom (0)
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Peut avoir un titre : Oui Peut comporter une case de fermeture ou un quivalent : Oui Peut tre redimensionne : Oui Peut tre agrandie/rduite ou "zoome" : Non sous MacOS Adapte aux barres de dfilement : Oui Utilisation : saisie de donnes avec des barres de dfilement, VISUALISER SELECTION, MODIFIER SELECTION, etc.

722

4e Dimension - Langage

Fentre standard de taille fixe (4)


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Peut avoir un titre : Oui Peut comporter une case de fermeture ou un quivalent : Oui Peut tre redimensionne : Non sous MacOS Peut tre agrandie/rduite ou "zoome" : Non Adapte aux barres de dfilement : Oui et Non Utilisation : saisie de donnes par AJOUTER ENREGISTREMENT(...;...*) ou quivalent Dialogue modal (1)
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Peut avoir un titre : Non Peut comporter une case de fermeture ou un quivalent : Non Peut tre redimensionne : Non Peut tre agrandie/rduite ou "zoome" : Non Adapte aux barres de dfilement : Non Utilisation : DIALOGUE, AJOUTER ENREGISTREMENT(...;...*) ou quivalent Les fentres de ce type sont modales

4e Dimension - Langage

723

Dialogue modal dplaable (5)


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Peut avoir un titre : Oui Peut comporter une case de fermeture ou un quivalent : Non Peut tre redimensionne : Non Peut tre agrandie/rduite ou "zoome" : Non Adapte aux barres de dfilement : Non Utilisation : DIALOGUE, AJOUTER ENREGISTREMENT(...;...*) ou quivalent Les fentres de ce type sont modales mais peuvent tre dplaces et utilises comme fentres flottantes Dialogue ombr (3)
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Peut avoir un titre : Non Peut comporter une case de fermeture ou un quivalent : Non Peut tre redimensionne : Non Peut tre agrandie/rduite ou "zoome" : Non Adapte aux barres de dfilement : Non Utilisation : DIALOGUE, AJOUTER ENREGISTREMENT(...;...*) ou quivalent, sous MacOS (non standard sous Windows).

724

4e Dimension - Langage

Dialogue simple (2)


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Peut avoir un titre : Non Peut comporter une case de fermeture ou un quivalent : Non Peut tre redimensionne : Non Peut tre agrandie/rduite ou "zoome" : Non Adapte aux barres de dfilement : Non Utilisation : DIALOGUE, AJOUTER ENREGISTREMENT(...;...*) ou quivalent, sous MacOS (non standard sous Windows). Fentre palette ( 1984 {+ 1} {+ 2} {+ 4} {+ 8} )
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lorsque vous appelez Creer fenetre, vous pouvez additionner une ou plusieurs constantes supplmentaires (listes ci-dessous) la constante Fentre palette afin de crer des variantes ayant des comportements diffrents : Constante Avec case de zoom Avec case de contrle de taille Avec titre de fentre Avec barre de titre active Type Entier Entier Entier Entier long long long long Valeur 8 4 2 1

4e Dimension - Langage

725

Peut avoir un titre : Oui si la variante Avec titre de fentre est spcifie Peut comporter une case de fermeture ou un quivalent : Oui Peut tre redimensionne : Oui si la variante Avec case de contrle de taille est spcifie Peut tre agrandie/rduite ou "zoome" : Oui si la variante Avec case de zoom est spcifie Adapte aux barres de dfilement : Oui si la variante Avec case de contrle de taille est spcifie Utilisation : fentres flottantes avec DIALOGUE ou VISUALISER SELECTION (pas de saisie de donnes). Fentre coins arrondis (16)
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Peut avoir un titre : Oui Peut comporter une case de fermeture ou un quivalent : Oui Peut tre redimensionne : Non sous MacOS Peut tre agrandie/rduite ou "zoome" : Non Adapte aux barres de dfilement : Non Utilisation : rare (obsolte)

726

4e Dimension - Langage

Fentre pop up (32)


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ce type de fentre reprend les caractristiques essentielles du type Dialogue simple (2) et dispose de proprits avances spcifiques : La fentre est automatiquement referme avec annulation lorsque : - un clic se produit en-dehors de la fentre ; - la fentre darrire-plan ou la fentre MDI est dplace ; - lutilisateur appuie sur la touche Echap (ou Esc). Cette fentre saffiche devant une fentre parente (elle ne doit d'ailleurs pas tre utilise comme fentre principale dun process). La fentre darrire-plan nest pas dsactive. En revanche, elle ne reoit plus dvnement. Il nest pas possible de redimensionner ou de dplacer la fentre laide de la souris ; toutefois, lorsque cette opration est effectue par programmation, le redessinement des lments darrire-plan est optimis. Utilisation : ce type de fentre est particulirement adapt la prise en charge des pop up menus associs aux boutons 3D de type bevel ou barres outils. Fentre feuille (33) et Fentre feuille redim (34)
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension - Langage

727

Les fentres feuilles (sheet windows) sont des fentres spcifiques de linterface MacOS X. Ces fentres descendent de la barre de titre de la fentre principale via une animation et saffichent par-dessus celle-ci. Elles sont automatiquement centres dans la fentre principales. Leurs proprits sont identiques celles des botes de dialogue modales. Elles sont gnralement utilises pour effectuer une action en relation directe avec celle se droulant dans la fentre principale. Il nest possible de crer une fentre feuille sous Mac OS X que si la dernire fentre ouverte est visible et de type document (formulaire). La commande cre une fentre de type 1 (Dialogue modal) au lieu du type 33 et de type 8 (Fentre standard) au lieu du type 34 : - si la dernire fentre ouverte nest pas visible ou nest pas de type document, - sous Windows. Comme une fentre feuille doit tre dessine par-dessus un formulaire, son affichage est repouss dans lvnement Sur chargement du premier formulaire charg dans la fentre (cf. exemple 4 de la commande Creer fenetre). Utilisation : DIALOGUE, AJOUTER ENREGISTREMENT(...;...*) ou quivalent, sous MacOS (non standard sous Windows). Rfrence Creer fenetre, Creer fenetre externe.

728

4e Dimension - Langage

Creer fenetre

Fentres version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Creer fenetre (gauche; haut; droite; bas{; type{; titre{; caseFermeture}}}){ RefFen } Paramtre gauche haut droite bas type titre caseFermeture Type Numrique Numrique Numrique Numrique Numrique Alpha Alpha Description Coordonne gauche de l'intrieur de la fentre Coordonne suprieure de l'intrieur de la fentre Coordonne droite de l'intrieur de la fentre Coordonne infrieure de l'intrieur de la fentre Type de la fentre Titre de la fentre Mthode appeler en cas de double-clic sur la case du menu Systme ou de clic sur la case de fermeture Numro de rfrence de la fentre

Rsultat

RefFen

Description Creer fenetre ouvre une nouvelle fentre dont les dimensions sont dfinies par les quatre premiers paramtres : gauche est la distance en pixels entre le ct gauche de la fentre de l'application et le ct intrieur gauche de la fentre. haut est la distance en pixels entre le haut de la fentre de l'application et le bord suprieur de l'intrieur de la fentre. droite est la distance en pixels entre le ct gauche de la fentre de l'application et le ct intrieur droit de la fentre. bas est la distance en pixels entre le haut de la fentre de l'application et le bord infrieur de l'intrieur de la fentre. Si vous passez -1 dans droite et bas,vous indiquez 4D qu'il faut redimensionner automatiquement la fentre si les conditions suivantes sont runies : Vous avez conu un formulaire et dfini ses options de dimensionnement dans la fentre des proprits des formulaires du mode Structure. Avant d'appeler Creer fenetre vous avez slectionn le formulaire l'aide de la commande FORMULAIRE ENTREE, laquelle vous avez pass le paramtre optionnel *.

4e Dimension - Langage

729

Important : Ce dimensionnement automatique de la fentre n'aura lieu que si vous avez au pralable appel la commande FORMULAIRE ENTREE pour le formulaire que vous allez afficher dans la fentre, et si vous lui avez pass le paramtre optionnel *. Le paramtre type est optionnel. Il dfinit le type de fentre que vous souhaitez afficher, et correspond aux diffrentes fentres prsentes dans la section Types de fentres. Si le type pass est ngatif, la fentre sera flottante. Si le type n'est pas spcifi, le type 1 est utilis par dfaut. Le paramtre titre indique le titre (optionnel) de la fentre. Si vous passez une chane de caractres vide ("") dans titre, vous indiquez 4D d'utiliser les valeurs saisies dans la zone Nom de la fentre de la fentre des Proprits du formulaire en mode Structure pour le titre du formulaire que vous allez afficher dans la fentre. Important : Le nom par dfaut du formulaire ne sera appliqu la fentre que si vous avez appel la commande FORMULAIRE ENTREE pour le formulaire que vous allez afficher dans la fentre et si vous lui avez pass le paramtre optionnel *. Le paramtre caseFermeture, optionnel, dsigne la mthode de gestion de la fermeture de la fentre. Si ce paramtre est pass, la case du menu Systme (sous Windows) ou une case de fermeture (sous MacOS) est ajoute la fentre. Lorsque l'utilisateur Windows doubleclique sur la case du menu Systme ou que l'utilisateur MacOS clique sur la case de fermeture, la mthode passe dans caseFermeture est excute. Note version 6 : Vous pouvez aussi grer la fermeture partir de la mthode du formulaire affich dans la fentre pendant l'vnement Sur case de fermeture. Pour plus d'informations sur ce point, reportez-vous la commande Evenement formulaire. Si plusieurs fentres sont ouvertes dans le mme process, la dernire fentre cre est la fentre active (de premier plan) du process. Seules les informations situes dans la fentre active peuvent tre modifies. Toutes les autres fentres peuvent tre visualises. Lorsque l'utilisateur tape une touche du clavier, la fentre active vient toujours se placer au premier plan, si elle n'y est pas dj. Les formulaires sont affichs l'intrieur de fentres ouvertes l'cran. Le texte pass la commande MESSAGE est galement affich dans une fentre.

730

4e Dimension - Langage

Exemples (1) La mthode projet suivante ouvre une fentre centre dans la fentre principale (sous Windows) ou dans l'cran principal (sous MacOS). Notez qu'elle accepte deux, trois ou quatre paramtres : ` Mthode projet OUVRIR FENETRE CENTREE ` $1 Largeur de la fentre ` $2 Hauteur de la fentre ` $3 Type de la fentre (optionnel) ` $4 Titre de la fentre (optionnel) $SW:=Largeur ecran\2 $SH:=(Hauteur ecran\2)-10 $WW:=$1\2 $WH:=$2\2 Au cas ou : (Nombre de parametres=2) Creer fenetre($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH) : (Nombre de parametres=3) Creer fenetre($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3) : (Nombre de parametres=4) Creer fenetre($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3;$4) Fin de cas

Une fois que cette mthode projet est crite, vous pouvez l'utiliser de la manire suivante : OUVRIR FENETRE CENTREE (400;250;Dialogue simple;"Mise jour Archives") DIALOGUE([Table outils];"OPTIONS MAJ") FERMER FENETRE Si (OK=1) ` ... Fin de si (2) L'exemple suivant cre une fentre flottante comportant une case de menu systme (sous Windows) ou une case de fermeture (sous MacOS). La fentre est cre dans le coin suprieur droit de la fentre de l'application.

Creer fenetre(Largeur ecran-149;33;Largeur ecran-4;178;-Fentre palette;""; "caseFermeture") DIALOGUE([Dialogues];"Palette de couleurs")

La mthode caseFermeture appelle la commande NE PAS VALIDER : NE PAS VALIDER

4e Dimension - Langage

731

(3) L'exemple suivant ouvre une fentre dont le titre et la taille proviennent des proprits du formulaire affich dans la fentre :

FORMULAIRE ENTREE([Clients];"Ajout d'enregistrements";*) Creer fenetre(10;80;-1;-1;Fentre standard;"") Repeter AJOUTER ENREGISTREMENT([Clients]) Jusque (OK=0)

Rappel : Pour que la fonction Creer fenetre utilise automatiquement les proprits du formulaire, vous devez avoir appel FORMULAIRE ENTREE avec le paramtre optionnel * et les proprits du formulaire doivent avoir t dfinies en fonction de cette utilisation. (4) Cet exemple illustre le mcanisme de retard daffichage des fentres feuille sous MacOS X : $maFentre:=Creer fenetre(10;10;400;400;Fentre feuille) `A cet instant la fentre est cre mais reste invisible DIALOGUE([Table];"formDial") `Lvnement Sur chargement est gnr puis la fentre feuille est affiche, elle `"descend" du dessous de la barre de titre Rfrence Creer fenetre externe, Creer fenetre formulaire, FERMER FENETRE.

732

4e Dimension - Langage

Creer fenetre externe

Fentres version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Creer fenetre externe (gauche; haut; droit; bas; type; titre; zonePlugin) Numrique Paramtre gauche haut droit bas type titre zonePlugin Rsultat Type Numrique Numrique Numrique Numrique Numrique Alpha Alpha Numrique Description Coordonne gauche de l'intrieur de la fentre Coordonne suprieure de l'intrieur de la fentre Coordonne droite de l'intrieur de la fentre Coordonne infrieure de l'intrieur de la fentre Type de la fentre Titre de la fentre Commande de zone externe Numro de rfrence de la fentre et de la zone externe

Description Creer fenetre externe cre une nouvelle fentre et affiche la zone externe gre par la commande zonePlugin fournie par un plug-in 4D. Le code passer dans zonePlugin est gnralement de la forme "_NomPlugin", par exemple : _4D Write, _4D View ou _4D Draw. Creer fenetre externe retourne un Entier long qui peut tre utilis la fois comme numro de rfrence de fentre (qui peut tre exploit par les autres commandes du thme Fentres) et comme rfrence de la zone externe affiche dans la fentre (qui peut tre exploit par les autres routines du plug-in 4D). Les six premiers paramtres sont identiques ceux de la commande Creer fenetre. Cependant, aucun d'entre eux n'est optionnel. Creer fenetre externe cre une fentre "sans mode", c'est--dire que la commande n'attend pas d'action de l'utilisateur, ce qui vous permet d'afficher plusieurs fentres actives simultanment. Vous pouvez naviguer parmi chaque fentre en cliquant dessus. Vous pouvez modifier celle qui se trouve au premier plan. Si le type de la fentre comporte une barre de titre, une case du menu Systme (Windows) ou une case de fermeture (Macintosh) sera ajoute la fentre pour permettre l'utilisateur de refermer la fentre.

4e Dimension - Langage

733

Exemples (1) L'exemple suivant ouvre une fentre externe et affiche une zone externe 4D Write :

wrWind:=Creer fenetre externe (50; 50; 350; 450; 8; "Ecrire lettre"; "_4D WRITE")

(2) L'exemple suivant referme la fentre externe ouverte dans l'exemple prcdent : FERMER FENETRE (wrWind) Rfrence Creer fenetre, FERMER FENETRE.

734

4e Dimension - Langage

FERMER FENETRE

Fentres version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FERMER FENETRE {(fentre)} Paramtre fentre Type RefFen Description Numro de rfrence de la fentre externe ou Fentre de premier plan du process si ce paramtre est omis

Description FERMER FENETRE referme la dernire fentre cre l'aide de la commande Creer fenetre dans le process courant. S'il n'y a pas de fentre personnalise ouverte, FERMER FENETRE ne fait rien ; la commande ne ferme pas les fentres standard. Si FERMER FENETRE est appele alors qu'un formulaire est actif dans la fentre, elle n'a pas d'effet non plus. Vous devez appeler FERMER FENETRE lorsque vous avez fini d'utiliser une fentre ouverte avec Creer fenetre. Il est inutile de passer un numro FERMER FENETRE lorsque vous l'utilisez pour refermer des fentres ouvertes l'aide de la fonction Creer fenetre. En effet, si plusieurs fentres ont t ouvertes par une succession d'appels Creer fenetre, elles ne pourront tre refermes que dans l'ordre inverse de leur cration. Si vous passez en paramtre la rfrence d'une zone externe cre l'aide de la fonction Creer fenetre externe, FERMER FENETRE referme la fentre externe. Pour plus d'informations sur les fentres externes, reportez-vous la description de la fonction Creer fenetre externe. Exemple L'exemple suivant ouvre une fentre et cre des enregistrements l'aide de la commande AJOUTER ENREGISTREMENT. Une fois les enregistrements ajouts, la fentre est ferme par la commande FERMER FENETRE : Creer fenetre (5; 40; 250; 300; 0; "Nouvel employ") Repeter AJOUTER ENREGISTREMENT ([Employs]) ` Ajout d'un enregistrement d'employ Jusque (OK = 0) ` Boucle jusqu' ce que l'utilisateur annule FERMER FENETRE ` Fermeture de la fentre

Rfrence Creer fenetre, Creer fenetre externe.

4e Dimension - Langage

735

EFFACER FENETRE

Fentres version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

EFFACER FENETRE {(fentre)} Paramtre fentre Type RefFen Description Numro de rfrence de fentre ou Fentre au premier plan du process courant si ce paramtre est omis

Description La commande EFFACER FENETRE efface le contenu de la fentre dont vous avez pass la rfrence dans fentre. Si vous omettez le paramtre fentre, EFFACER FENETRE efface le contenu de la fentre de premier plan du process courant. Gnralement, vous utiliserez EFFACER FENETRE en combinaison avec MESSAGE et POSITION MESSAGE. Dans ce cas, EFFACER FENETRE efface le contenu de la fentre et place le curseur dans son angle suprieur gauche, c'est--dire la position correspondant POSITION MESSAGE (0; 0). Ne confondez pas EFFACER FENETRE, qui efface le contenu d'une fentre, et FERMER FENETRE, qui supprime la fentre de l'cran. Rfrence MESSAGE, POSITION MESSAGE.

736

4e Dimension - Langage

REDESSINER FENETRE

Fentres version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

REDESSINER FENETRE {(fentre)} Paramtre fentre Type RefFen Description Numro de rfrence de la fentre ou Fentre de premier plan du process courant si ce paramtre est omis

Description La commande REDESSINER FENETRE provoque une mise jour du contenu de la fentre dont le numro de rfrence est pass dans fentre. Si vous omettez le paramtre fentre, REDESSINER FENETRE s'appliquera la fentre de premier plan du process courant. Note : 4e Dimension gre automatiquement les mises jour graphiques des fentres chaque fois que vous dplacez, redimensionnez ou passez au premier plan une fentre ainsi qu' chaque fois que vous changez le formulaire et/ou les valeurs affich(e)s dans une fentre. Cette commande est rarement utilise. Rfrence EFFACER FENETRE.

4e Dimension - Langage

737

DEPLACER FENETRE

Fentres version 6.8 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DEPLACER FENETRE Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande DEPLACER FENETRE permet de faire glisser la fentre dans laquelle l'utilisateur a cliqu puis de la dplacer en fonction des mouvements de la souris. Gnralement, cette commande est appele depuis la mthode d'un objet capable de rpondre instantanment aux clics souris (par exemple un bouton invisible). Exemple Le formulaire suivant, prsent ici en mode Structure, contient un fond cr par une image statique par-dessus laquelle quatre boutons invisibles ont t placs (un par ct) :

Chaque bouton est associ la mthode suivante : DEPLACER FENETRE ` Commencer faire glisser la fentre au premier clic

738

4e Dimension - Langage

En mode Utilisation ou Menus crs, aprs l'excution de la mthode projet suivante : Creer fenetre(50;50;50+400;50+300;2) DIALOGUE([Table1];"Custom Drag") FERMER FENETRE ... vous obtenez une fentre semblable celle-ci :

Vous pouvez la dplacer en cliquant sur les bordures. Rfrence CHANGER COORDONNEES FENETRE, COORDONNEES FENETRE.

4e Dimension - Langage

739

CACHER FENETRE

Fentres version 6.0.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CACHER FENETRE {(fentre)} Paramtre fentre Type RefFen Description Numro de rfrence de la fentre ou Fentre de premier plan du process courant si omis

Description La commande CACHER FENETRE permet de masquer la fentre dont vous avez pass le numro de rfrence dans fentre ou, si ce paramtre est omis, la fentre de premier plan du process courant. Cette commande vous permet, par exemple, dans un process comportant plusieurs fentres, de ne conserver l'cran que la fentre active. La fentre disparat de l'cran mais reste ouverte. Vous pouvez continuer lui appliquer par programmation tout traitement support par les fentres 4D. Pour rafficher une fentre masque par CACHER FENETRE : Utilisez la commande AFFICHER FENETRE et passez-lui le numro de rfrence de la fentre. Ou bien, dans la page Process de l'Explorateur d'excution, slectionnez le process dans lequel la fentre est gre (process de gestion de la fentre ou Process principal) puis cliquez sur le bouton Montrer. Pour cacher toutes les fentres d'un process, utilisez la commande CACHER PROCESS. Exemple Cet exemple est la mthode d'un bouton plac dans un formulaire entre. Ce bouton ouvre une bote de dialogue dans une nouvelle fentre du mme process. Vous souhaitez masquer les autres fentres du process (un formulaire de saisie et une palette d'outils) afin de ne prsenter que la bote de dialogue. Une fois que celle-ci a t valide, vous raffichez les fentres du process.

` Mthode objet du bouton "Informations" CACHER FENETRE(Saisie) ` Masquer la fentre de saisie CACHER FENETRE(Palette) ` Masquer la palette $Infos:=Creer fenetre(20;100;500;400;8) ` Crer la fentre d'informations ... ` Placer ici les instructions ncessaires au remplissage et la gestion du dialogue FERMER FENETRE($Infos) ` Fermer le dialogue AFFICHER FENETRE(Saisie) AFFICHER FENETRE(Palette) ` Rafficher les autres fentres du process

Rfrence AFFICHER FENETRE.

740

4e Dimension - Langage

AFFICHER FENETRE

Fentres version 6.0.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

AFFICHER FENETRE {(fentre)} Paramtre fentre Type RefFen Description Numro de rfrence de la fentre ou Fentre de premier plan du process courant si omis

Description La commande AFFICHER FENETRE permet d'afficher la fentre dont vous avez pass le numro de rfrence dans fentre ou, si ce paramtre est omis, la fentre de premier plan du process courant. La fentre doit au pralable avoir t cache l'aide de la commande CACHER FENETRE. Si la fentre est dj affiche, la commande ne fait rien. Exemple Voir l'exemple de la commande CACHER FENETRE. Rfrence CACHER FENETRE.

4e Dimension - Langage

741

MAXIMISER FENETRE

Fentres version 6.0.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

MAXIMISER FENETRE {(fentre)} Paramtre fentre Type RefFen Description Numro de rfrence de la fentre Si omis = Toutes les fentres (Windows) ou Fentre de premier plan du process courant (MacOS)

Description La commande MAXIMISER FENETRE provoque le zoom de la fentre dont vous avez pass le numro de rfrence dans fentre ou, si ce paramtre est omis, de toutes les fentres de l'application (sous Windows) ou de la fentre de premier plan du process courant (sous MacOS). Cette commande produit le mme effet qu'un clic sur la case de zoom d'une fentre de l'application 4D : Sous Windows La fentre est agrandie et s'adapte la taille courante de la fentre de l'application. Si vous ne passez pas le paramtre fentre, toutes les fentres de l'application sont maximises. La fentre maximise est passe au premier plan. Case de zoom ("bouton d'agrandissement") sous Windows Sous MacOS La fentre est agrandie et s'adapte la taille de l'cran principal. Si vous ne passez pas le paramtre fentre, la fentre du premier plan du process courant est maximise. Case de zoom sous MacOS Les fentres que vous souhaitez maximiser doivent comporter une case de zoom. Si le type de fentre n'en contient pas, la commande ne fait rien (pour plus d'informations sur ce point, reportez-vous la section Types de fentres). La fentre est dimensionne sa taille "maximale". Si la fentre est un formulaire dont la taille maximale a t dfinie dans les Proprits du formulaire, le zoom de la fentre se limitera cette taille. Si fentre est dj maximise, la commande ne fait rien.

742

4e Dimension - Langage

Un clic ultrieur sur la case de zoom ou l'appel de la commande MINIMISER FENETRE provoque le retour de la fentre sa taille initiale. Sous Windows, un clic sur la case de zoom ou l'appel de la commande MINIMISER FENETRE (sans paramtre) entrane le retour leur taille initiale de toutes les fentres de l'application. Exemple Vous souhaitez que votre base de donnes s'ouvre sur une fentre "plein cran". Pour cela, vous placez la commande MAXIMISER FENETRE dans la Mthode base Sur ouverture : ` Mthode base Sur ouverture

MAXIMISER FENETRE

Rfrence MINIMISER FENETRE.

4e Dimension - Langage

743

MINIMISER FENETRE

Fentres version 6.0.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

MINIMISER FENETRE {(fentre)} Paramtre fentre Type RefFen Description Numro de rfrence de la fentre Si omis = Toutes les fentres (Windows) ou Fentre de premier plan du process courant (MacOS)

Description La commande MINIMISER FENETRE provoque un zoom arrire de la fentre dont vous avez pass le numro de rfrence dans fentre ou, si ce paramtre est omis, de toutes les fentres de l'application (sous Windows) ou de la fentre de premier plan du process courant (sous MacOS). Cette commande produit le mme effet qu'un clic sur la case de rduction d'une fentre de l'application 4D ayant t pralablement maximise : Sous Windows La fentre est rduite et retrouve sa taille initiale. Si vous ne passez pas le paramtre fentre, toutes les fentres de l'application sont redimensionnes leur taille initiale.

Case de rduction sous Windows Sous MacOS La fentre est rduite et retrouve sa taille initiale. Si vous ne passez pas le paramtre fentre, la fentre de premier plan du process courant est minimise. Case de zoom/rduction sous MacOS Si la ou les fentres concernes n'ont pas t pralablement maximises (manuellement ou l'aide de MAXIMISER FENETRE), la commande ne fait rien. De mme, si le type de fentre ne comporte pas de case de zoom, la commande ne fait rien (pour plus d'informations sur ce point, reportez-vous la section Types de fentres). Note : Sous Windows, ne confondez pas cette fonction avec la rduction de la fentre sous forme d'icne, accessible par l'intermdiaire du bouton suivant :

Rfrence MAXIMISER FENETRE.

744

4e Dimension - Langage

Titre fenetre

Fentres version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Titre fenetre {(fentre)} Chane Paramtre fentre Type RefFen Description Numro de rfrence de la fentre ou Fentre de premier plan du process courant si ce paramtre est omis Titre de la fentre

Rsultat

Chane

Description La commande Titre fenetre retourne le titre de la fentre dont le numro de rfrence est pass dans fentre. Si la fentre n'existe pas, une chane vide est retourne. Si vous omettez le paramtre fentre, Titre fenetre retourne le titre de la fentre de premier plan du process courant. Exemple Reportez-vous l'exemple de la commande CHANGER TITRE FENETRE. Rfrence CHANGER TITRE FENETRE.

4e Dimension - Langage

745

CHANGER TITRE FENETRE

Fentres version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER TITRE FENETRE (titre{; fentre}) Paramtre titre fentre Type Alpha RefFen Description Titre de la fentre Numro de rfrence de fentre ou Fentre au premier plan du process courant si ce paramtre est omis

Description La commande CHANGER TITRE FENETRE remplace le titre de la fentre dont le numro de rfrence est pass dans fentre par le texte pass dans titre (longueur maximale 80 caractres). Si la fentre n'existe pas, CHANGER TITRE FENETRE ne fait rien. Si vous omettez le paramtre fentre, CHANGER TITRE FENETRE remplace le titre de la fentre de premier plan du process courant. Note : En mode Utilisation, 4e Dimension dfinit automatiquement les titres des fentres par exemple Saisie pour table1 est affich lorsque vous passez en saisie de donnes. Si vous changez le titre d'une fentre du mode Utilisation, il est probable que 4D le remplacera par la suite. En revanche, en mode Menus crs, 4e Dimension ne modifie pas le titre des fentres.

746

4e Dimension - Langage

Exemple Vous effectuez une saisie dans un formulaire et vous cliquez sur un bouton qui dclenche une longue opration (par exemple une modification par programmation des enregistrements lis affichs dans un sous-formulaire). Vous pouvez afficher des informations sur la progression des oprations dans le titre de la fentre : ` Mthode objet du bouton bAnalyse Au cas ou : (Evenement formulaire=Sur clic) ` Sauvegarde du titre courant de la fentre dans une variable $vsTitreCour:=Titre fenetre ` Commencer l'opration longue DEBUT SELECTION([Lignes facture]) Boucle($vlRecord;1;Enregistrements trouves([Lignes facture])) FAIRE QUELQUE CHOSE ` Afficher la progression CHANGER TITRE FENETRE("Traitement de la ligne #"+Chaine($vlEnreg)) Fin de si ` Remettre en place l'ancien titre de fentre CHANGER TITRE FENETRE($vsTitreCour) Fin de cas Rfrence Titre fenetre.

4e Dimension - Langage

747

LISTE FENETRES

Fentres version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LISTE FENETRES (fentres{; *}) Paramtre fentres * Type Tableau * Description Tableau des numros de rfrence des fentres Si omis, ignorer fentres flottantes ; si spcifi, tenir compte des fentres flottantes

Description La commande LISTE FENETRES remplit le tableau fentres avec les numros de rfrence des fentres ouvertes dans tous les process (process moteur et process utilisateur). Si vous ne passez pas le paramtre optionnel *, les fentres flottantes sont ignores. Exemple La mthode projet suivante place en "mosaque" toutes les fentres ouvertes ( l'exception des fentres flottantes et des botes de dialogue) :

` Mthode projet Mosaque LISTE FENETRES($alWnd) $vlLeft:=10 $vlTop:=80 ` Laissons de la place la barre d'outils Boucle ($vlWnd;1;Taille tableau($alWnd)) Si (Type fenetre($alWnd{$vlWnd}) # Fentre modale) COORDONNEES FENETRE($vlWL;$vlWT;$vlWR;$vlWB;$alWnd{$vlWnd}) $vlWR:=$vlLeft+($vlWR-$vlWL) $vlWB:=$vlTop+($vlWB-$vlWT) $vlWL:=$vlLeft $vlWT:=$vlTop CHANGER COORDONNEES FENETRE($vlWL;$vlWT;$vlWR;$vlWB; $alWnd{$vlWnd}) $vlLeft:=$vlLeft+10 $vlTop:=$vlTop+25 Fin de si Fin de boucle

Note : Cette mthode pourrait tre amliore par l'ajout de tests sur la taille de la fentre principale (sous Windows) et l'emplacement du ou des cran(s) (sous MacOS). Rfrence Process de la fenetre, Type fenetre.

748

4e Dimension - Langage

Type fenetre

Fentres version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Type fenetre {(fentre)} Paramtre fentre Type RefFen Description Numro de rfrence de la fentre ou Fentre de premier plan du process courant si ce paramtre est omis

Description La commande Type fenetre retourne le type de fentre 4e Dimension dont vous avez pass la rfrence dans fentre. Si la fentre n'existe pas, Type fenetre retourne 0 (zro). Sinon, Type fenetre retourne une des constantes prdfinies suivantes : Constante Fentre standard Fentre modale Fentre externe Fentre flottante Type Entier Entier Entier Entier long long long long Valeur 8 9 5 14

Si vous omettez le paramtre fentre, Type fenetre s'applique la fentre de premier plan du process courant. Exemple Reportez-vous l'exemple de la commande LISTE FENETRES. Rfrence COORDONNEES FENETRE, Process de la fenetre, Titre fenetre.

4e Dimension - Langage

749

Process de la fenetre

Fentres version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Process de la fenetre {(fentre)} Numrique Paramtre fentre Rsultat Type RefFen Numrique Description Numro de rfrence de fentre Numro de rfrence de process

Description La commande Process de la fenetre retourne le numro du process qui excute la fentre dont le numro de rfrence est pass dans fentre. Si la fentre n'existe pas, la commande retourne 0 (zro). Si vous omettez le paramtre fentre, Process de la fenetre retourne le numro du process de la fentre de premier plan du process courant. Rfrence Numero du process courant.

750

4e Dimension - Langage

COORDONNEES FENETRE

Fentres version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

COORDONNEES FENETRE (gauche; haut; droite; bas{; fentre}) Paramtre gauche haut droite bas fentre Type Numrique Numrique Numrique Numrique RefFen Description Coordonne gauche de l'intrieur de la fentre Coordonne suprieure de l'intrieur de la fentre Coordonne droite de l'intrieur de la fentre Coordonne infrieure de l'intrieur de la fentre Numro de rfrence de la fentre ou Fentre de premier plan du process si omis ou Fentre MDI si -1 (Windows)

Description La commande COORDONNEES FENETRE retourne les coordonnes globales de la fentre dont vous avez pass le numro de rfrence dans le paramtre fentre. Si la fentre n'existe pas, les variables des paramtres sont inchanges. Si vous omettez le paramtre fentre, COORDONNEES FENETRE s'applique la fentre de premier plan du process courant. Les coordonnes retournes sont exprimes relativement au coin suprieur gauche de la zone de contenu de la fentre d'application (sous Windows) ou de l'cran principal (sous MacOS). Les coordonnes retournent le rectangle correspondant la zone de contenu de la fentre (en excluant les barres de titres et les bordures). Note : Sous Windows, si vous passez -1 dans fentre, COORDONNEES FENETRE retourne les coordonnes de la fentre d'application (fentre MDI) relativement l'cran. Exemple Reportez-vous l'exemple de la commande LISTE FENETRES. Rfrence CHANGER COORDONNEES FENETRE.

4e Dimension - Langage

751

CHANGER COORDONNEES FENETRE

Fentres version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER COORDONNEES FENETRE (gauche; haut; droite; bas{; fentre}) Paramtre gauche haut droite bas fentre Type Numrique Numrique Numrique Numrique RefFen Description Coordonne gauche de l'intrieur de la fentre Coordonne suprieure de l'intrieur de la fentre Coordonne droite de l'intrieur de la fentre Coordonne infrieure de l'intrieur de la fentre Numro de rfrence de la fentre ou Fentre de premier plan du process si ce paramtre est omis

Description La commande CHANGER COORDONNEES FENETRE modifie les coordonnes globales de la fentre dont vous avez pass le numro de rfrence dans le paramtre fentre. Si la fentre n'existe pas, la commande ne fait rien. Si vous omettez le paramtre fentre, CHANGER COORDONNEES FENETRE s'applique la fentre de premier plan du process courant. Ces coordonnes doivent tre exprimes relativement au coin suprieur gauche de la zone de contenu de la fentre d'application (sous Windows) ou de l'cran principal (sous MacOS). Les coordonnes dcrivent le rectangle correspondant la zone de contenu de la fentre (en excluant les barres de titres et les bordures). Attention : Utilisez cette commande avec prcaution, car vous pouvez dplacer une fentre en-dehors des limites de la fentre principale (sous Windows) ou de l'cran (sous MacOS). Pour viter cela, vous pouvez utiliser des fonctions telles que Largeur ecran et Hauteur ecran pour bien vrifier les nouvelles coordonnes de la fentre. Cette commande naffecte pas les objets du formulaire. Si la fentre contient un formulaire, les objets du formulaire ne sont pas dplacs ou redimensionns par la commande (quelles que soient leurs proprits). Seule la fentre est modifie. Pour modifier une fentre de formulaire en tenant compte de ses proprits de redimensionnement et des objets quelle contient, vous devez utiliser la commande REDIMENSIONNER FENETRE FORMULAIRE.

752

4e Dimension - Langage

Exemples (1) Reportez-vous l'exemple de la commande LISTE FENETRES. (2) Soit la fentre suivante :

Aprs l'excution de la ligne suivante :

CHANGER COORDONNEES FENETRE(100;100;300;300)

La fentre apparat ainsi :

Rfrence COORDONNEES FENETRE, DEPLACER FENETRE, REDIMENSIONNER FENETRE FORMULAIRE.

4e Dimension - Langage

753

Fenetre premier plan

Fentres version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Fenetre premier plan {(*)} RefFen Paramtre * Type * Description Si omis = ignorer les fentres flottantes Si spcifi = prendre en compte les fentres flottantes Numro de rfrence de fentre

Rsultat

RefFen

Description La commande Fenetre premier plan retourne le numro de rfrence de la fentre actuellement situe au premier plan. Rfrence Fenetre suivante, Process de premier plan.

754

4e Dimension - Langage

Fenetre suivante

Fentres version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Fenetre suivante (fentre) RefFen Paramtre fentre Rsultat Type RefFen RefFen Description Numro de rfrence de la fentre Numro de rfrence de fentre

Description La commande Fenetre suivante retourne le numro de rfrence de la fentre situe derrire la fentre dont vous avez pass le numro de rfrence dans fentre (en fonction de l'ordre des fentres). Rfrence Fenetre premier plan.

4e Dimension - Langage

755

Chercher fenetre

Fentres version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Chercher fenetre (gauche; haut{; partieFentre}) RefFentre Paramtre gauche haut partieFentre Rsultat Type Numrique Numrique Numrique RefFentre Description Coordonne globale gauche Coordonne globale suprieure Numro de partie de fentre Numro de rfrence de fentre

Description La commande Chercher fenetre retourne (s'il existe) le numro de rfrence de la premire fentre "touche" par le point dont vous passez les coordonnes dans gauche et haut. Ces coordonnes doivent tre exprimes relativement au coin suprieur gauche de la zone de contenu (l'intrieur) de la fentre d'application (sous Windows) ou de l'cran principal (sous MacOS). Si vous passez le paramtre partieFentre, qu'une fentre ait t trouve ou non, ce paramtre retournera une des constantes prdfinies suivantes : Constantes Dans barre de menu Dans fentre systme Dans zone contenu Dans barre de titre Dans case de contrle de taille Dans case de fermeture Dans case de zoom Rfrence Fenetre premier plan, Fenetre suivante. Type Entier Entier Entier Entier Entier Entier Entier long long long long long long long Valeur 1 2 3 4 5 6 8 Plate-forme Macintosh Macintosh Windows ou Macintosh Macintosh Macintosh Macintosh Macintosh

756

4e Dimension - Langage

Creer fenetre formulaire

Fentres version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Creer fenetre formulaire ({table; }nomForm{; type{; posH{; posV{; *}}}}) RefFen Paramtre table nomForm type posH posV * Rsultat Type Table Alpha Entier long Entier long Entier long * RefFen Description Table du formulaire ou Table par dfaut si ce paramtre est omis Nom du formulaire Type de la fentre Position horizontale de la fentre Position verticale de la fentre Conserver la position et la taille prcdentes de la fentre Numro de rfrence de la fentre

Description La commande Creer fenetre formulaire cre une nouvelle fentre utilisant les proprits de taille et de redimensionnement du formulaire nomForm, pass en paramtre. A noter que le formulaire nomForm nest pas affich dans la fentre cre. Il vous appartient, si vous le souhaitez, dafficher le formulaire (par exemple laide de la commande AJOUTER ENREGISTREMENT). Par dfaut, si le paramtre type nest pas pass, la fentre cre est de type standard et comporte une case de fermeture. A la diffrence de la commande Creer fenetre, aucune mthode nest associe cette case de fermeture : un clic sur la case de fermeture provoquera simplement lannulation du formulaire, sauf si lvnement Sur case de fermeture est activ pour le formulaire, auquel cas le code associ cet vnement sera excut. Si le formulaire nomForm est redimensionnable, la fentre cre comporte galement une case de zoom et une case de contrle de taille. Note : Vous pouvez connatre les principales proprits dun formulaire laide de la commande LIRE PROPRIETES FORMULAIRE.

4e Dimension - Langage

757

Le paramtre optionnel type vous permet de spcifier un type de fentre. Ce paramtre doit contenir une des constantes prdfinies suivantes, places dans le thme Creer fenetre formulaire : Constante Type Valeur Form fentre standard Entier long 8 Form dialogue modal Entier long 1 Form dialogue modal dplaable Entier long 5 Form fentre palette Entier long 1984 Form fentre pop up Entier long 32 Form fentre feuille Entier long 33 Notes : Les attributs de la fentre cre (case de contrle de taille, case de fermeture...) dpendent des spcifications d'interface du systme d'exploitation pour le type choisi. Il est donc possible d'obtenir des rsultats diffrents en fonction de la plate-forme. Pour plus d'informations sur les types de fentres, reportez-vous la section Types de fentres. A noter que seuls les types lists dans le thme Creer fenetre formulaire peuvent tre utiliss avec la commande Creer fenetre formulaire. Le paramtre optionnel posH vous permet de dfinir lemplacement horizontal de la fentre. Vous pouvez passer dans ce paramtre une coordonne fixe exprime en points (cf. commande Creer fenetre), ou lune des constantes prdfinies suivantes, places dans le thme Creer fenetre formulaire : Constante Type Valeur Centre horizontalement Entier long 65536 A gauche Entier long 131072 A droite Entier long 196608 Le paramtre optionnel posV vous permet de dfinir lemplacement vertical de la fentre. Vous pouvez passer dans ce paramtre une coordonne fixe exprime en points (cf. commande Creer fenetre), ou lune des constantes prdfinies suivantes, places dans le thme Creer fenetre formulaire : Constante Type Valeur Centre verticalement Entier long 262144 En haut Entier long 327680 En bas Entier long 393216 Ces paramtres tiennent compte de la prsence de la barre doutils, de la barre de menus, et de la taille courante de la fentre de lapplication (sous Windows). Si vous passez le paramtre optionnel *, la position et la taille courantes de la fentre sont mmorises au moment o elle est referme. Lorsque la fentre est rouverte par la suite, elle conserve sa position et sa taille prcdentes. Dans ce cas, les paramtres posV et posH ne sont utiliss que pour la premire ouverture de la fentre.

758

4e Dimension - Langage

Exemples (1) Linstruction suivante ouvre une fentre standard avec case de fermeture automatiquement ajuste la taille du formulaire Entre. Comme le formulaire a la proprit Redimensionnable, la fentre comporte galement une case de contrle de taille et une case de zoom :

$refFen:=Creer fenetre formulaire ([Table1];"Entre")

(2) Linstruction suivante ouvre, en haut et gauche de lcran, une palette flottante. Cette palette conservera sa prcdente position chaque nouvelle ouverture :

$refFen:=Creer fenetre formulaire ([Table1]; "Outils"; Form fentre palette; A gauche; En haut;*)

Rfrence Creer fenetre, LIRE PROPRIETES FORMULAIRE, Types de fentres.

4e Dimension - Langage

759

Fenetre formulaire courant

Fentres version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Fenetre formulaire courant RefFen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat RefFen Numro de rfrence de la fentre du formulaire courant

Description La commande Fenetre formulaire courant retourne la rfrence de la fentre du formulaire courant. Sil ny a pas de fentre dfinie pour le formulaire courant, la commande retourne 0. La fentre du formulaire courant peut avoir t gnre automatiquement par une commande telle que AJOUTER ENREGISTREMENT, la suite dune action utilisateur ou via les commandes Creer fenetre ou Creer fenetre formulaire. Rfrence Creer fenetre, Creer fenetre formulaire, REDIMENSIONNER FENETRE FORMULAIRE.

760

4e Dimension - Langage

REDIMENSIONNER FENETRE FORMULAIRE

Fentres version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

REDIMENSIONNER FENETRE FORMULAIRE (largeur; hauteur) Paramtre largeur hauteur Type Entier long Entier long Description Pixels ajouter ou soustraire la largeur courante de la fentre formulaire Pixels ajouter ou soustraire la hauteur courante de la fentre formulaire

Description La commande REDIMENSIONNER FENETRE FORMULAIRE permet de modifier la taille de la fentre du formulaire courant. Passez dans les paramtres largeur et hauteur le nombre de pixels que vous souhaitez ajouter aux dimensions courantes de la fentre. Pour ne pas modifier une dimension, passez 0 dans le paramtre correspondant. Pour rduire une dimension, passez une valeur ngative dans largeur et hauteur. Cette commande produit exactement le mme rsultat quun redimensionnement manuel de la fentre laide de la case de redimensionnement (si le type de fentre le permet). Par consquent, la commande tient compte des proprits de redimensionnement des objets et des contraintes de taille dfinies dans les proprits du formulaire : si par exemple la commande entrane un redimensionnement de la fentre suprieur la taille maximale du formulaire, elle na pas deffet. A noter que ce fonctionnement est diffrent de celui de la commande CHANGER COORDONNEES FENETRE, qui ne tient pas compte des proprits du formulaire ni de son contenu en cas de redimensionnement de la fentre. A noter galement que cette commande ne modifie pas forcment les dimensions du formulaire lui-mme. Pour modifier par programmation la taille dun formulaire, reportezvous la description de la commande FIXER TAILLE FORMULAIRE.

4e Dimension - Langage

761

Exemple Soit la fentre suivante (les champs et l'encadrement ont pour proprit de redimensionnement horizontal Agrandir) :

Aprs l'excution de cette ligne :

REDIMENSIONNER FENETRE FORMULAIRE(25;0)

... la fentre a l'apparence suivante :

Rfrence CHANGER COORDONNEES FENETRE, FIXER TAILLE FORMULAIRE, LIRE PROPRIETES FORMULAIRE.

762

4e Dimension - Langage

22 ________________________ Fonctions mathmatiques

4e Dimension - Langage

763

764

4e Dimension - Langage

Abs

Fonctions mathmatiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Abs (nombre) Numrique Paramtre nombre Rsultat Type Numrique Numrique Description Nombre dont vous voulez obtenir la valeur absolue Valeur absolue de nombre

Description Abs retourne la valeur absolue (positive et sans signe) de nombre. Si nombre est ngatif, sa valeur positive est retourne. Si nombre est positif, il est retourn inchang. Exemple L'exemple suivant retourne la valeur absolue de -10,3, qui est 10,3 :

vVector := Abs (10,3)

4e Dimension - Langage

765

Ent

Fonctions mathmatiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ent (nombre) Numrique Paramtre nombre Rsultat Type Numrique Numrique Description Valeur dont vous voulez obtenir la partie entire Partie entire de nombre

Description Ent retourne la partie entire de nombre en l'arrondissant l'entier infrieur. Exemple L'exemple suivant illustre le fonctionnement de Ent pour les nombres positifs et ngatifs. Notez que la partie dcimale du nombre est supprime :

x := Ent (123,4) ` x vaut 123 y := Ent (123,4) ` y vaut 124

Rfrence Dec.

766

4e Dimension - Langage

Dec

Fonctions mathmatiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Dec (nombre) Numrique Paramtre nombre Rsultat Type Numrique Numrique Description Valeur dont voulez obtenir la partie dcimale Partie dcimale de nombre

Description Dec retourne la partie dcimale de nombre. La valeur retourne est toujours positive ou nulle. Exemple L'exemple suivant utilise une valeur montaire exprime sous forme numrique et en extrait les parties "francs" et "centimes". Si vlMontant valait 7,31, vlFrancs vaudrait 7 et vlCentimes 31 :

vlFrancs := Ent (vlMontant) ` Extraire les francs vlCentimes := Dec (vlMontant) * 100 ` Extraire la partie dcimale

Rfrence Ent.

4e Dimension - Langage

767

Arrondi

Fonctions mathmatiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Arrondi (nombre; nbDcimales) Numrique Paramtre nombre nbDcimales Rsultat Type Numrique Numrique Numrique Description Nombre arrondir Nombre de dcimales de l'arrondi Valeur de nombre arrondie avec une prcision gale nbDcimales

Description Arrondi retourne la valeur arrondie de nombre avec une prcision gale nbDcimales. Si nbDcimales est positif, l'arrondi se fait sur la partie dcimale de nombre. Si nbDcimales est ngatif, l'arrondi se fait sur la partie entire de nombre. Si le chiffre plac derrire le nombre de dcimales dfini par nbDcimales est compris entre 5 et 9, nombre est arrondi la valeur suprieure s'il est positif et infrieure s'il est ngatif. Si le chiffre plac derrire la dernire dcimale est compris entre 0 et 4, la fonction arrondit nombre vers zro. Exemples L'exemple suivant illustre la manire dont Arrondi fonctionne dans diffrents cas. A chaque ligne, une valeur est assigne la variable vRsultat. Les commentaires dcrivent le rsultat :

vRsultat vRsultat vRsultat vRsultat

:= := := :=

Arrondi Arrondi Arrondi Arrondi

(16,857; 2) ` vRsultat vaut 16,86 (32345,67; 3) ` vRsultat vaut 32000 (29,8725; 3) ` vRsultat vaut 29,873 (1,5; 0) ` vRsultat vaut 2

Rfrence Troncature.

768

4e Dimension - Langage

Troncature

Fonctions mathmatiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Troncature (nombre; nbDcimales) Numrique Paramtre nombre nbDcimales Rsultat Type Numrique Numrique Numrique Description Nombre tronquer Nombre de dcimales conserver nombre tronqu partir du nombre de dcimales indiqu par nbDcimales

Description Troncature retourne nombre dont la partie dcimale a t tronque partir du nombre de dcimales spcifi par nbDcimales. Troncature arrondit toujours nombre la valeur infrieure. Si nbDcimales est positif, la troncature se fait sur la partie dcimale de nombre. Si nbDcimales est ngatif, la troncature se fait sur la partie entire de nombre. Exemples L'exemple suivant illustre la manire dont Troncature fonctionne dans diffrents cas. A chaque ligne, une valeur est assigne la variable vRsultat. Les commentaires dcrivent le rsultat :

vRsultat vRsultat vRsultat vRsultat

:= := := :=

Troncature Troncature Troncature Troncature

(216,897; 1) ` Rsultat prend la valeur 216,8 (216,897; 1) ` Rsultat prend la valeur 210 (216,897; 1) ` Rsultat prend la valeur 216,9 (216,897; 1) ` Rsultat prend la valeur 220

Rfrence Arrondi.

4e Dimension - Langage

769

Hasard

Fonctions mathmatiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Hasard Numrique Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Numrique Nombre alatoire

Description Hasard retourne une valeur entire alatoire comprise entre 0 et 32 767 (inclus). Pour que la valeur alatoire soit situe dans un intervalle donn, utilisez la formule suivante : (Hasard % (fin dbut + 1)) + dbut La valeur dbut est le premier nombre de l'intervalle, fin est le dernier. Exemple L'exemple suivant assigne une valeur entire alatoire entre 10 et 30 la variable vRsultat :

Rsultat := (Hasard % 21) + 10

770

4e Dimension - Langage

Modulo

Fonctions mathmatiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Modulo (nombre1; nombre2) Numrique Paramtre nombre1 nombre2 Rsultat Type Numrique Numrique Numrique Description Nombre diviser (numrateur) Nombre diviseur (dnominateur) Reste de la division entire de nombre1 par nombre2

Description La fonction Modulo divise nombre1 par nombre2 et retourne le reste sous forme d'un nombre entier. Notes : Modulo accepte des expressions de type Entier, Entier long et Rel (numrique). Cependant, si nombre1 et/ou nombre2 sont des nombres rels, ils sont arrondis avant le calcul du Modulo. La fonction Modulo est utiliser avec prcaution avec des nombres rels de grande taille (au-del de 2^31). Dans ce cas en effet, son fonctionnement peut se heurter aux limites des capacits de calcul des processeurs standard. Vous pouvez galement utiliser l'oprateur "%" pour calculer le reste d'une division (reportez-vous la section Oprateurs numriques). Toutefois, cet oprateur retourne des rsultats valides uniquement avec des expressions de type Entier et Entier long. Si vous voulez calculer le modulo de nombres rels, vous devez utiliser la commande Modulo. Exemple L'exemple suivant illustre le fonctionnement de Modulo dans diffrents cas de figure. A chaque ligne, un nombre est assign la variable vRsultat. Les commentaires fournissent le rsultat obtenu :

vRsultat := Modulo(3;2) ` vRsultat prend la valeur 1 vRsultat := Modulo(4;2) ` vRsultat prend la valeur 0 vRsultat := Modulo(3,5;2) ` vRsultat prend la valeur 0

Rfrence Oprateurs numriques.

4e Dimension - Langage

771

Racine carree

Fonctions mathmatiques version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Racine carree (nombre) Numrique Paramtre nombre Rsultat Type Numrique Numrique Description Nombre duquel calculer la racine carre Racine carre de nombre

Description Racine carree retourne la racine carre de nombre. Exemples (1) La ligne :

$vrRacineDeDeux := Racine carree (2)

affecte la valeur 1,414213562373 la variable $vrRacineDeDeux. (2) La mthode liste ci-dessous retourne l'hypotnuse du triangle rectangle dont les deux cts sont passs en paramtres : ` Mthode Hypotnuse ` Hypotnuse ( Rel ; Rel ) -> Rel ` Hypotnuse ( ctA ; ctB ) -> Hypotnuse C_REEL($0;$1;$2) $0 := Racine carree(($1^2)+($2^2))

Par exemple, Hypotnuse (4;3) retourne 5. Rfrence Oprateurs numriques.

772

4e Dimension - Langage

Log

Fonctions mathmatiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Log (nombre) Numrique Paramtre nombre Rsultat Type Numrique Numrique Description Nombre dont vous voulez obtenir le logarithme nprien Logarithme nprien de nombre

Description Log retourne le logarithme nprien de nombre. Log est la fonction inverse de Exp. Note : 4D fournit la constante prdfinie Nombre e (2,71828...). Exemple L'exemple suivant affiche 1 :

ALERTE (Chaine(Log(Exp (1)))

Rfrence Exp.

4e Dimension - Langage

773

Exp

Fonctions mathmatiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Exp (nombre) Numrique Paramtre nombre Rsultat Type Numrique Numrique Description Nombre valuer Exponentielle de nombre

Description Exp retourne l'exponentielle (e=2,71828...) de nombre. Exp est la fonction inverse de Log. Note : La fonction exponentielle, qui au nombre rel x fait correspondre le nombre rel y, est note y = ex. 4D fournit la constante prdfinie Nombre e (2,71828...). Exemple L'exemple suivant assigne l'exponentielle de 1 vrE (le logarithme de vrE est 1) :

vrE := Exp (1)

` vrE vaut e (e = 2,71828...)

Rfrence Log.

774

4e Dimension - Langage

Sin

Fonctions mathmatiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Sin (nombre) Numrique Paramtre nombre Rsultat Type Numrique Numrique Description Nombre, exprim en radians, dont vous voulez connatre le sinus Sinus de nombre

Description Sin retourne le sinus de nombre. La valeur nombre est exprime en radians. Note : 4D fournit les constantes prdfinies Pi, Degr et Radian. Pi retourne le nombre Pi (3,14159...), Degr retourne la valeur en radians d'un degr (0,01745...) et Radian retourne la valeur en degrs d'un radian (57,29577...). Rfrence Arctan, Cos, Tan.

4e Dimension - Langage

775

Cos

Fonctions mathmatiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Cos (nombre) Numrique Paramtre nombre Rsultat Type Numrique Numrique Description Nombre, exprim en radians, dont vous voulez connatre le cosinus Cosinus de nombre

Description Cos retourne le cosinus de nombre. La valeur nombre est exprime en radians. Note : 4D fournit les constantes prdfinies Pi, Degr et Radian. Pi retourne le nombre Pi (3,14159...), Degr retourne la valeur en radians d'un degr (0,01745...) et Radian retourne la valeur en degrs d'un radian (57,29577...). Rfrence Arctan, Sin, Tan.

776

4e Dimension - Langage

Tan

Fonctions mathmatiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Tan (nombre) Numrique Paramtre nombre Rsultat Type Numrique Numrique Description Nombre, exprim en radians, dont vous voulez connatre la tangente Tangente de nombre

Description Tan retourne la tangente de nombre. La valeur nombre est exprime en radians. Note : 4D fournit les constantes prdfinies Pi, Degr et Radian. Pi retourne le nombre Pi (3,14159...), Degr retourne la valeur en radians d'un degr (0,01745...) et Radian retourne la valeur en degrs d'un radian (57,29577...). Rfrence Arctan, Cos, Sin.

4e Dimension - Langage

777

Arctan

Fonctions mathmatiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Arctan (nombre) Numrique Paramtre nombre Rsultat Type Numrique Numrique Description Tangente pour laquelle vous souhaitez calculer l'angle en radians Angle en radians

Description Arctan retourne en radians la valeur de l'angle dont la tangente est spcifie par nombre. Note : 4D fournit les constantes prdfinies Pi, Degr et Radian. Pi retourne le nombre Pi (3,14159...), Degr retourne la valeur en radians d'un degr (0,01745...) et Radian retourne la valeur en degrs d'un radian (57,29577...). Exemple Cet exemple permet d'afficher la valeur de Pi :

ALERTE ("Pi est gal : "+Chaine(Arctan(1)*4))

Rfrence Cos, Sin, Tan.

778

4e Dimension - Langage

FIXER NIVEAU COMPARAISON REEL

Fonctions mathmatiques version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER NIVEAU COMPARAISON REEL (epsilon) Paramtre epsilon Type Numrique Description Valeur epsilon pour les comparaisons d'galit des rels

Description La commande FIXER NIVEAU COMPARAISON REEL dfinit la valeur epsilon utilise par 4e Dimension lors d'une comparaison d'galit des valeurs et expressions de type Rel. Comme un ordinateur effectue des calculs approximatifs sur les rels, les tests sur l'galit de valeurs relles doivent tenir compte de cette approximation. Pour cela, 4e Dimension, lorsqu'il compare des valeurs relles, teste en fait si la diffrence entre les deux valeurs est suprieure ou non une certaine valeur. Cette valeur s'appelle l'epsilon et fonctionne de la manire suivante : soient deux valeurs relles a et b. Si Abs(a-b) est suprieur l'epsilon, les valeurs sont considres comme diffrentes ; sinon, elles sont dclares gales. Par dfaut, 4e Dimension fixe la valeur epsilon 10 la puissance moins 6 (10^-6). Exemples : 0,00001=0,00002 retourne Faux car la diffrence 0,00001 est suprieure 10^-6. 0,000001=0,000002 retourne Vrai car la diffrence 0,000001 n'est pas suprieure 10^-6. 0,000001=0,000003 retourne Faux car la diffrence 0,000002 est suprieure 10^-6. A l'aide de FIXER NIVEAU COMPARAISON REEL, vous pouvez augmenter ou rduire la valeur epsilon, en fonction de vos besoins. Note : La commande n'aura pas d'effet si epsilon > 10^-3 ou si epsilon < 0. Modifier l'epsilon affecte seulement la comparaison d'galit des rels. Cela n'a pas d'effet sur les calculs et l'affichage des valeurs relles. ATTENTION : Cette commande doit tre utilise dans des cas spcifiques, comme par exemple un tri sur un champ dont les valeurs sont infrieures 10^-6. En gnral, vous n'avez pas besoin de modifier la valeur par dfaut d'epsilon. Note : Si vous souhaitez effectuer un traitement (tri, recherche) sur un champ numrique index dont les valeurs sont infrieures 10^-6, veillez ce que la commande FIXER NIVEAU COMPARAISON REEL soit excute avant la construction de l'index. Rfrence Oprateurs de comparaison.

4e Dimension - Langage

779

Affichage des nombres rels

Fonctions mathmatiques version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Note prliminaire Si vous ne faites pas de dveloppement multi-plate-forme, vous pouvez tout simplement ignorer cette section. Dans le monde de l'informatique, l'arithmtique des nombres dcimaux tient plus de la technologie que de la science exacte. Vous avez avez appris en classe, par exemple, qu'un tiers peut tre crit comme une suite infinie de 3 aprs la virgule. Un ordinateur, quant lui, ne le sait pas mais doit cependant valuer cette expression. De la mme manire, vous savez que trois tiers sont gal un ; l'ordinateur calculera l'expression pour obtenir le rsultat. Suivant le type d'ordinateur que vous utilisez, un tiers sera valu comme un nombre fini de trois aprs la virgule. Ce nombre est appel la prcision de la machine. Sur les Macintosh base de processeur 68K, ce nombre est gal 19 ; cela signifie qu'un tiers sera valu avec 19 chiffres significatifs. Sous Windows ou sur une machine base de PowerPC, ce chiffre est gal 15 ; cela signifie qu'un tiers sera valu avec 15 chiffres significatifs. Si vous affichez la valeur 1/3 dans le dbogueur de 4e Dimension, vous obtiendrez 0,3333333333333333333 sur les Macintosh base de processeur 68K et environ 0,3333333333333333148 sous Windows ou sur une machine base de processeur PowerPC. Il est noter que les trois derniers chiffres sont diffrents car la prcision des Macintosh base de 68K est suprieure celle des PC ou des machines base de PowerPC. Cependant, si vous affichez l'expression (1/3)*3 vous obtenez 1 sur tous ces types de machines. Si vos calculs dcimaux se rapportent au nombre de mtres carrs de votre jardin, il est probable que vous n'aurez qu'un besoin trs relatif des chiffres aprs la virgule. D'un autre ct, si vous remplissez une dclaration d'impts, vous pouvez certains moments vous sentir plus concern par la prcision de votre ordinateur. Cependant, une prcision de 15 ou 19 est suffisante, mme pour grer des milliards de francs de revenus ! Pourquoi la valeur 1/3 semble-t-elle diffrente entre des Macintosh base de processeur 68K et des machines Windows ou base de PowerPC ? Sur les Macintosh base de processeur 68K, le systme d'exploitation stocke les nombres rels sur 10 octets (80 bits), alors que sur un PC ou un Power Macintosh les nombres rels sont stocks sur 8 octets (64 bits). C'est pour cette raison que les nombres rels ont jusqu' 19 chiffres significatifs sur des Macintosh base de processeur 68K et jusqu' 15 chiffres significatifs sur PC et Power Macintosh.

780

4e Dimension - Langage

Pourquoi l'expression (1/3)*3 retourne-t-elle 1 sur ces trois types de machines ? Un ordinateur ne peut faire que des calculs approximatifs. Par consquent, lorsqu'il compare ou calcule des nombres, il ne traite pas les nombres rels comme des lments mathmatiques mais comme des valeurs approximatives. Dans l'exemple voqu plus haut, 0,3333... multipli par 3 est gal 0,9999..., cette valeur est tellement proche de 1 que la machine considre que le rsultat est gal 1. Pour plus d'informations sur ce point, reportez vous la commande FIXER NIVEAU COMPARAISON REEL. Une distinction doit tre tablie entre : La manire dont les nombres rels sont calculs et compars, La manire dont les nombres rels sont affichs l'cran (ou imprims). A l'origine, 4e Dimension manipulait les nombres rels l'aide du type standard de 10 octets correspondant au systme d'exploitation des Macintosh 68K. De ce fait, les valeurs relles sauvegardes sur disque sont sauvegardes dans ce format. Afin de maintenir une compatibilit entre toutes les versions (Windows, Power Macintosh et Macintosh) de 4e Dimension, les fichiers de donnes utilisent toujours le mme type de format de 10 octets. Comme les calculs internes sont raliss sur 8 octets pour les versions PC et Power Macintosh, 4e Dimension convertit en interne les valeurs de 10 8 octets, ou inversement. De ce fait, si vous chargez un enregistrement sous Windows ou sur une machine base de PowerPC, et que cet enregistrement contient des valeurs relles qui ont t sauvegardes sur une machine base de processeur 68K, il est possible de perdre de la prcision (en passant de 19 15 chiffres significatifs). Si vous chargez un enregistrement sur un Macintosh base de processeur 68K et que cet enregistrement contient des valeurs relles cres ou stockes sur une machine Windows ou base de processeur PowerPC, il n'y aura aucune perte de prcision. De manire gnrale, si vous utilisez une base de donnes sur des machines base de processeur 68K, PowerPC ou une machine Windows, comptez sur une prcision de 15 et non 19 chiffres. A l'aide de Customizer Plus, vous pouvez dfinir le nombre de chiffres qui doivent tre ignors pour l'affichage des nombres rels l'cran pour ces trois types de machines. Les rglages par dfaut sont 0 pour les machines base de processeur 68K et 5 pour les autres.

4e Dimension - Langage

781

Convertisseur Euro

Fonctions mathmatiques version 6.7 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Convertisseur Euro (valeur; deMonnaie; versMonnaie) Numrique Paramtre valeur deMonnaie versMonnaie Rsultat Type Numrique Alpha Alpha Numrique Description Valeur convertir Code ISO de la monnaie dans laquelle la valeur est exprime Code ISO de la monnaie dans laquelle la valeur doit tre convertie Valeur convertie

Description La commande Convertisseur Euro vous permet deffectuer tout type de conversion de valeurs entre les diffrentes monnaies des pays de la zone euro et lEuro lui-mme. Vous pouvez convertir : une monnaie nationale en Euros, des Euros en une monnaie nationale, une monnaie nationale en une autre monnaie nationale. Dans ce cas, la conversion seffectue toujours par lintermdiaire de lEuro, comme le stipule la rglementation. Par exemple, pour convertir des Francs belges en Marks allemands, 4D effectuera les conversions suivantes : Francs belges -> Euro -> Marks allemands. Vous passez dans le premier paramtre la valeur convertir. Dans le second paramtre, vous indiquez le code ISO de la monnaie dans laquelle valeur est exprime. Dans le troisime paramtre, vous indiquez le code ISO de la monnaie dans laquelle vous souhaitez que valeur soit convertie.

782

4e Dimension - Langage

Pour dsigner les codes ISO, 4e Dimension vous propose les constantes prdfinies suivantes, places dans le thme Euro monnaies : Constante Drachme grecque Escudo portugais Euro Florin nerlandais Franc belge Franc franais Franc luxembourgeois Lire italienne Livre irlandaise Mark allemand Mark finlandais Peseta espagnole Schilling autrichien Type Alpha Alpha Alpha Alpha Alpha Alpha Alpha Alpha Alpha Alpha Alpha Alpha Alpha Valeur GRD PTE EUR NLG BEF FRF LUF ITL IEP DEM FIM ESP ATS

Si ncessaire, 4e Dimension arrondit automatiquement le rsultat des conversions et conserve 2 dcimales lexception des conversions vers les Lires italiennes, Francs luxembourgeois, Francs belges et Pesetas espagnoles, pour lesquelles 4D conserve 0 dcimale (le rsultat est un nombre entier). La parit des diffrentes monnaies vis--vis de lEuro est fixe. Les taux de conversion, utiliss en interne par 4e Dimension, sont les suivants : Monnaie Drachme grecque Escudo portugais Florin nerlandais Franc belge Franc franais Franc luxembourgeois Lire italienne Livre irlandaise Mark allemand Mark finlandais Peseta espagnole Schilling autrichien Valeur pour 1 Euro 340,750 200,482 2,20371 40,3399 6,55957 40,3399 1936,27 0,787564 1,95583 5,94573 166,386 13,7603

Exemple Voici diffrents types de conversion pouvant tre obtenus laide de cette commande : $valeur:=10000 `Valeur exprime en francs franais `Convertir la valeur en euros $EnEuros:=Convertisseur Euro ($valeur;Franc franais; Euro) `Convertir la valeur en lires italiennes $EnLires:=Convertisseur Euro ($valeur;Franc franais; Lire italienne)

4e Dimension - Langage

783

784

4e Dimension - Langage

23 ________________________ Fonctions statistiques

4e Dimension - Langage

785

786

4e Dimension - Langage

Prsentation des fonctions statistiques

Fonctions statistiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les fonctions de ce thme effectuent des calculs sur des sries de valeurs. Les fonctions Moyenne, Max, Min, Somme, Somme des carres, Ecart type et Variance peuvent s'appliquer aux champs et aux sous-champs. Dans le cas d'un champ, elles s'appliquent une slection d'enregistrements. Dans le cas d'un sous-champ, elles s'appliquent une slection de sous-enregistrements de l'enregistrement courant. Notez que les fonctions Somme des carres, Ecart type et Variance ne peuvent tre utilises pour un champ que pendant l'impression. Les fonctions ne travaillent que sur des valeurs numriques. Chacune de ces fonctions retourne une valeur numrique. Utiliser un champ Lorsque les fonctions Moyenne, Max, Min ou Somme sont utilises sur un champ en-dehors d'une opration d'impression, il se peut qu'elles aient charger chaque enregistrement de la slection courante pour calculer le rsultat. S'il y a beaucoup d'enregistrements, l'opration peut tre longue. Pour viter le problme, indexez le champ. Lorsque ces fonctions sont utilises dans un tat, elles se comportent diffremment, car c'est l'tat lui-mme qui charge chaque enregistrement. Utilisez ces fonctions dans une mthode formulaire ou objet quand vous imprimez avec la commande IMPRIMER SELECTION ou quand vous imprimez en mode Utilisation l'aide de la commande Imprimer dans le menu Fichier. Lorsque vous utilisez ces fonctions dans un tat, les valeurs retournes sont fiables uniquement dans le niveau 0 de rupture et seulement si la phase de traitement des ruptures est active. Cela signifie qu'elles ne sont utiles qu'en fin d'tat, lorsque tous les enregistrements ont t traits. Vous ne devez utiliser ces fonctions avec une mthode objet que dans une zone nonsaisissable incluse dans la zone de rupture R0. Pour mmoire : un champ pass comme paramtre une fonction statistique doit tre un numrique. Rfrence Ecart type, Max, Min, Moyenne, Somme, Somme des carres, Variance.

4e Dimension - Langage

787

Somme

Fonctions statistiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Somme (sries) Numrique Paramtre sries Rsultat Type Champ | Sous-chp Numrique Description Champ ou sous-champ dont vous souhaitez calculer la somme Somme de sries

Description Somme retourne la somme (c'est--dire le total de toutes les valeurs) de sries. Si sries est un champ index, l'index est utilis pour le calcul. Exemples L'exemple ci-dessous est la mthode objet d'une variable, vTotal, place dans un formulaire. La mthode assigne la variable la somme de tous les salaires :

vTotal := Somme ([Employs]Salaire)

La mthode suivante est appele pour imprimer les enregistrements de la slection courante et activer le traitement des ruptures : TOUT SELECTIONNER ([Employs]) TRIER ([Employs];[Employs]Nom;>) NIVEAUX DE RUPTURES (1) CUMULER SUR ([Employs]Salaire) FORMULAIRE SORTIE ([Employs];"FormImpression") IMPRIMER SELECTION ([Employs]) Note : La valeur du paramtre de la commande NIVEAUX DE RUPTURES doit tre gale au nombre de ruptures que contient l'tat. Pour plus d'informations sur les ruptures, reportezvous aux commandes du thme Impressions. Rfrence CUMULER SUR, IMPRIMER SELECTION, Max, Min, Moyenne, NIVEAUX DE RUPTURES, Sous total, TRIER.

788

4e Dimension - Langage

Moyenne

Fonctions statistiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Moyenne (sries) Numrique Paramtre sries Rsultat Type Champ | Sous-chp Numrique Description Champ ou sous-champ pour lequel vous voulez calculer la moyenne Moyenne arithmtique de sries

Description Moyenne retourne la moyenne arithmtique de sries. Si sries est un champ index, l'index est utilis pour le calcul. Exemple Dans l'exemple suivant, une valeur est assigne une variable se trouvant dans la zone de rupture R0 d'un formulaire sortie. La ligne de code ci-dessous constitue la mthode objet de la variable. Elle n'est excute qu' l'impression du niveau de rupture 0 :

vMoyenne := Moyenne ([Employs]Salaire)

La mthode suivante est appele pour imprimer les enregistrements de la slection courante et activer la phase de rupture : TOUT SELECTIONNER ([Employs]) TRIER ([Employs];[Employs]Nom;>) NIVEAUX DE RUPTURES (1) CUMULER SUR ([Employs]Salaire) FORMULAIRE SORTIE ([Employs];"FormImpression") IMPRIMER SELECTION ([Employs]) Note : La valeur du paramtre de la commande NIVEAUX DE RUPTURES doit tre gale au nombre de ruptures que contient l'tat. Pour plus d'informations sur les ruptures, reportezvous aux commandes du thme Impressions. Rfrence CUMULER SUR, IMPRIMER SELECTION, Max, Min, NIVEAUX DE RUPTURES, Somme, Sous total, TRIER.

4e Dimension - Langage

789

Min

Fonctions statistiques version 3

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Min (sries) Numrique Paramtre sries Rsultat Type Champ | Sous-chp Numrique Description Champ ou sous-champ pour lequel vous voulez obtenir la valeur la plus basse Valeur la plus basse de sries

Description Min retourne la valeur la plus faible de sries. Si sries est un champ index, l'index est utilis pour la recherche de cette valeur. Exemples (1) L'exemple ci-dessous est la mthode objet d'une variable, vMin, place dans la zone de rupture R0 d'un formulaire sortie. La variable est imprime la fin de l'tat. La mthode objet assigne la valeur la plus basse du champ la variable, qui est alors imprime dans la dernire rupture de l'tat.

vMin := Min ([Employs] Salaire)

La mthode suivante est appele pour imprimer les enregistrements de la slection courante et activer la phase de rupture : TOUT SELECTIONNER ([Employs]) TRIER ([Employs];[Employs]Nom;>) NIVEAUX DE RUPTURES (1) CUMULER SUR ([Employs]Salaire) FORMULAIRE SORTIE ([Employs];"FormImpression") IMPRIMER SELECTION ([Employs]) Note : La valeur du paramtre de la commande NIVEAUX DE RUPTURES doit tre gale au nombre de ruptures que contient l'tat. Pour plus d'informations sur les ruptures, reportezvous aux commandes du thme Impressions. (2) L'exemple suivant recherche la plus petite vente d'un employ et affiche le rsultat dans une bote de dialogue d'alerte. Les montants des ventes sont stocks dans un souschamp, [Employs]VentesFrancs :

ALERTE ("Plus petite vente = " + Chaine(Min([Employs]VentesFrancs)))

790

4e Dimension - Langage

Max

Fonctions statistiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Max (sries) Numrique Paramtre sries Rsultat Type Champ | Sous-chp Numrique Description Champ ou sous-champ dont vous voulez obtenir la valeur la plus leve Valeur la plus leve de sries

Description Max retourne la valeur la plus leve contenue dans sries. Si sries est un champ index, l'index est utilis pour la recherche de cette valeur. Exemple L'exemple ci-dessous est la mthode objet d'une variable, vMax, place dans la zone de rupture R0 d'un formulaire sortie. La variable est imprime la fin de l'tat. La mthode objet assigne la valeur la plus leve du champ la variable, qui est alors imprime dans la dernire rupture de l'tat.

vMax := Max ([Employs] Salaire)

La mthode suivante est appele pour imprimer les enregistrements de la slection courante et activer la phase de rupture : TOUT SELECTIONNER ([Employs]) TRIER ([Employs];[Employs]Nom;>) NIVEAUX DE RUPTURES (1) CUMULER SUR ([Employs]Salaire) FORMULAIRE SORTIE ([Employs];"FormImpression") IMPRIMER SELECTION ([Employs]) Note : La valeur du paramtre de la commande NIVEAUX DE RUPTURES doit tre gale au nombre de ruptures que contient l'tat. Pour plus d'informations sur les ruptures, reportezvous aux commandes du thme Impressions. Rfrence Min.

4e Dimension - Langage

791

Ecart type

Fonctions statistiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ecart type (sries) Numrique Paramtre sries Rsultat Type Champ | Sous-chp Numrique Description Champ ou sous-champ dont vous voulez obtenir l'cart type Ecart type de sries

Description Ecart type retourne l'cart type (c.--d. la racine carre de la variance) de sries. Si sries est un champ index, l'index sera utilis pour le calcul. Lorsqu'elle est appele lors de l'impression d'un tat, cette fonction ne peut tre applique qu' un champ. Exemple L'exemple suivant est la mthode objet d'une variable appele EcartT. La mthode assigne l'cart type d'une srie EcartT :

EcartT := Ecart type ([Table1]SrieValeurs)

La mthode suivante est appele pour imprimer les enregistrements de la slection et activer la phase de rupture : TOUT SELECTIONNER ([Table1]) TRIER ([Table1];[Table1]SrieValeurs;>) NIVEAUX DE RUPTURES (1) CUMULER SUR ([Table1]SrieValeurs) FORMULAIRE SORTIE ([Table1];"FormImpression") IMPRIMER SELECTION ([Table1]) Note : La valeur du paramtre de la commande NIVEAUX DE RUPTURES doit tre gale au nombre de ruptures que contient l'tat. Pour plus d'informations sur les ruptures, reportezvous aux commandes du thme Impressions. Rfrence Moyenne, Somme, Somme des carres, Variance.

792

4e Dimension - Langage

Variance

Fonctions statistiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Variance (sries) Numrique Paramtre sries Rsultat Type Champ | Sous-chp Numrique Description Champ ou sous-champ dont vous voulez obtenir la variance Variance de sries

Description Variance retourne la variance de sries. Si sries est un champ index, l'index est utilis pour le calcul. Lorsqu'elle est appele lors de l'impression d'un tat, cette fonction ne peut tre applique qu' un champ. La variance d'un ensemble de valeurs est la moyenne des carrs des carts par rapport la moyenne. C'est une valeur de dispersion autour de la moyenne. 4D utilise la formule de variance suivante : Variance(x) = Somme (x-m)*(x-m)/(n-1) m = Moyenne n = Nombre de valeurs Si les valeurs considres ne constituent pas un chantillon, multipliez la valeur retourne par Variance par (n-1)/n. Exemple L'exemple suivant est la mthode objet d'une variable appele Var. La mthode assigne la variance de la srie Var:

Var:= Variance ([Etudiants]Notes)

La mthode suivante est appele pour imprimer les enregistrements de la slection et activer la phase de rupture : TOUT SELECTIONNER ([Etudiants]) TRIER ([Etudiants];[Etudiants]Classe;>) NIVEAUX DE RUPTURES (1) CUMULER SUR ([Etudiants]Notes) FORMULAIRE SORTIE ([Etudiants];"FormImpression") IMPRIMER SELECTION ([Etudiants])

4e Dimension - Langage

793

Note : La valeur du paramtre de la commande NIVEAUX DE RUPTURES doit tre gale au nombre de ruptures que contient l'tat. Pour plus d'informations sur les ruptures, reportezvous aux commandes du thme Impressions. Rfrence Ecart type, Moyenne, Somme, Somme des carres.

794

4e Dimension - Langage

Somme des carres

Fonctions statistiques version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Somme des carres (sries) Numrique Paramtre sries Rsultat Type Champ | Sous-chp Numrique Description Champ ou sous-champ dont vous voulez obtenir la somme des carrs Somme des carrs de sries

Description Somme des carres retourne la somme des carrs de sries. Si sries est un champ index, l'index est utilis pour le calcul. Lorsqu'elle est appele lors de l'impression d'un tat, cette fonction ne peut tre applique qu' un champ. Exemple L'exemple suivant est la mthode objet d'une variable appele Carrs. La mthode assigne la somme des carrs d'une srie de valeurs Carrs. La mthode est imprime dans la dernire rupture de l'tat :

Carrs := Somme des carres ([Table1]SrieValeurs)

La mthode suivante est appele pour imprimer les enregistrements de la slection et activer la phase de rupture : TOUT SELECTIONNER ([Table1]) TRIER ([Table1];[Table1]SrieValeurs;>) NIVEAUX DE RUPTURES (1) CUMULER SUR ([Table1]SrieValeurs) FORMULAIRE SORTIE ([Table1];"FormImpression") IMPRIMER SELECTION ([Table1]) Note : La valeur du paramtre de la commande NIVEAUX DE RUPTURES doit tre gale au nombre de ruptures que contient l'tat. Pour plus d'informations sur les ruptures, reportezvous aux commandes du thme Impressions. Rfrence Ecart type, Moyenne, Somme, Variance.

4e Dimension - Langage

795

796

4e Dimension - Langage

24 ________________________ Formulaires

4e Dimension - Langage

797

798

4e Dimension - Langage

LIRE PROPRIETES FORMULAIRE

Formulaires version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE PROPRIETES FORMULAIRE ({table; }nomForm; largeur; hauteur{; nbPages{; largeurFixe{; hauteurFixe{; titre}}}}) Paramtre table nomForm largeur hauteur nbPages largeurFixe hauteurFixe titre Type Table Alpha Entier long Entier long Entier long Boolen Boolen Texte Description Table du formulaire ou Table par dfaut si ce paramtre est omis Nom du formulaire Largeur du formulaire (en pixels) Hauteur du formulaire (en pixels) Nombre de pages du formulaire Vrai = Largeur fixe, Faux = Largeur variable Vrai = Hauteur fixe, Faux = Hauteur variable Nom de la fentre du formulaire

Description La commande LIRE PROPRIETES FORMULAIRE retourne des proprits du formulaire nomForm. Les paramtres largeur et hauteur retournent (en pixels) la largeur et la hauteur du formulaire. Ces valeurs sont dtermines partir des proprits de dimensionnement du formulaire : Si la taille du formulaire est automatique, sa largeur et sa hauteur sont calcules de manire ce quil affiche tous les objets quil contient, en tenant compte, le cas chant, des marges horizontale et verticale qui ont t dfinies. Si la taille du formulaire est fixe, sa largeur et sa hauteur sont celles qui ont t saisies manuellement dans les zones correspondantes. Si la taille du formulaire est base sur un objet, sa largeur et sa hauteur sont calcules par rapport la position de cet objet. Le paramtre nbPages retourne le nombre de pages du formulaire, page 0 (zro) non comprise. Les paramtres largeurFixe et hauteurFixe indiquent si la largeur et la hauteur du formulaire sont fixes (le paramtre contient Vrai) ou redimensionnables (le paramtre contient Faux). Le paramtre titre retourne le nom de la fentre du formulaire, tel quil a t dfini. Si aucun nom na t dfini, le paramtre titre contient une chane vide. Rfrence Creer fenetre formulaire, FIXER TAILLE FORMULAIRE, LIRE OBJETS FORMULAIRE.

4e Dimension - Langage

799

FIXER TAILLE FORMULAIRE

Formulaires version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER TAILLE FORMULAIRE ({objet; }horizontal; vertical{; *}) Paramtre objet horizontal vertical * Type Chane Entier long Entier long * Description Nom dobjet indiquant les limites du formulaire Si * pass : marge horizontale (pixels) Si * omis : largeur (pixels) Si * pass : marge verticale (pixels) Si * omis : hauteur (pixels) Si pass, ajouter les marges dfinies par les paramtres horizontal et vertical (taille automatique ou taille base sur objet, si objet est pass) Si omis, utiliser horizontal et vertical comme largeur et hauteur du formulaire

Description La commande FIXER TAILLE FORMULAIRE permet de modifier par programmation la taille du formulaire courant. La nouvelle taille est dfinie pour le process courant, elle nest pas stocke avec le formulaire. Comme en mode Structure, cette commande permet de dfinir la taille dun formulaire de trois manires : automatiquement 4e Dimension dtermine la taille du formulaire sur le principe que tous les objets doivent tre visibles en ajoutant ventuellement une marge horizontale et une marge verticale, sur la base de lemplacement dun objet du formulaire auquel sajoutent ventuellement une marge horizontale et une marge verticale, en saisissant des dimensions absolues (largeur et hauteur). Pour plus dinformations sur les possibilits de dimensionnement des formulaires, reportez-vous au manuel Mode Structure de 4e Dimension. Taille automatique Pour que le formulaire ait une taille automatique, vous devez utiliser la syntaxe suivante : FIXER TAILLE FORMULAIRE(horizontal; vertical;*) Dans ce cas, vous devez passer dans horizontal et vertical les marges (en pixels) que vous souhaitez ajouter droite et en bas du formulaire.

800

4e Dimension - Langage

Taille base sur un objet Pour que la taille du formulaire soit base sur un objet, vous devez utiliser la syntaxe suivante : FIXER TAILLE FORMULAIRE(objet; horizontal; vertical;*) Dans ce cas, vous devez passer dans horizontal et vertical les marges (en pixels) que vous souhaitez ajouter droite et en bas de lobjet. Taille en valeur absolue Pour passer une taille de formulaire absolue, vous devez utiliser la syntaxe suivante : FIXER TAILLE FORMULAIRE(horizontal; vertical) Dans ce cas, vous devez passer dans horizontal et vertical la largeur et la hauteur (en pixels) du formulaire. La commande FIXER TAILLE FORMULAIRE modifie la taille du formulaire mais tient compte de ses proprits de redimensionnement. Par exemple, si la largeur minimale du formulaire est de 500 pixels et si la commande dfinit une largeur de 400 pixels, la nouvelle largeur du formulaire sera de 500 pixels. A noter galement que cette commande ne modifie pas la taille de la fentre du formulaire (il est possible de redimensionner un formulaire sans que la taille de la fentre soit modifie, et inversement). Pour modifier la taille de la fentre dun formulaire, reportezvous la description de la commande REDIMENSIONNER FENETRE FORMULAIRE. Exemple Voici un exemple de mise en place dune fentre de type Explorateur. Le formulaire suivant est dfini en mode Structure :

La taille du formulaire est automatique. La fentre est affiche via linstruction suivante : $ref:=Creer fenetre formulaire([Table 1];"Form1";Form fentre standard; Centre horizontalement;Centre verticalement ;*) DIALOGUE([Table 1];"Form1") FERMER FENETRE 4e Dimension - Langage 801

La partie droite de la fentre peut tre affiche ou masque via un clic sur loption dagrandissement/rduction :

La mthode objet associe ce bouton est la suivante : Au cas ou : (Evenement formulaire=Sur chargement ) C_BOOLEEN(b1;<>contract) C_ENTIER LONG(marge) marge:=15 b1:=<>contract Si (<>contract) FIXER REDIMENSIONNEMENT FORMULAIRE HORIZONTAL(Faux) FIXER TAILLE FORMULAIRE("b1";marge;marge) Sinon FIXER REDIMENSIONNEMENT FORMULAIRE HORIZONTAL(Vrai) FIXER TAILLE FORMULAIRE("onglet";marge;marge) Fin de si : (Evenement formulaire=Sur clic) <>contract:=b1 Si (b1) `contract LIRE RECT OBJET(*;"b1";$g;$h;$d;$b) COORDONNEES FENETRE($gf;$hf;$df;$bf;Fenetre formulaire courant) CHANGER COORDONNEES FENETRE($gf;$hf;$gf+$d+marge;$hf+$b+marge; Fenetre formulaire courant) FIXER REDIMENSIONNEMENT FORMULAIRE HORIZONTAL(Faux) FIXER TAILLE FORMULAIRE("b1";marge;marge) Sinon `dploy LIRE RECT OBJET(*;"onglet";$g;$h;$d;$b) COORDONNEES FENETRE($gf;$hf;$df;$bf;Fenetre formulaire courant) 802 4e Dimension - Langage

CHANGER COORDONNEES FENETRE($gf;$hf;$gf+$d+marge;$hf+$b+marge; Fenetre formulaire courant) FIXER REDIMENSIONNEMENT FORMULAIRE HORIZONTAL(Vrai) FIXER TAILLE FORMULAIRE("onglet";marge;marge) Fin de si Fin de cas

Rfrence FIXER REDIMENSIONNEMENT FORMULAIRE HORIZONTAL, FIXER REDIMENSIONNEMENT FORMULAIRE VERTICAL.

4e Dimension - Langage

803

FIXER REDIMENSIONNEMENT FORMULAIRE HORIZONTAL

Formulaires version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER REDIMENSIONNEMENT FORMULAIRE HORIZONTAL (redimension{; largeurMini{; largeurMaxi}}) Paramtre redimension Type Boolen Description Vrai : le formulaire est redimensionnable horizontalement Faux : le formulaire nest pas redimensionnable horizontalement Largeur minimale du formulaire (pixels) Largeur maximale du formulaire (pixels)

largeurMini largeurMaxi

Entier long Entier long

Description La commande FIXER REDIMENSIONNEMENT FORMULAIRE HORIZONTAL permet de modifier par programmation les proprits de redimensionnement horizontal du formulaire courant. Par dfaut, ces proprits sont dfinies dans lditeur de formulaires en mode Structure. Les nouvelles proprits sont fixes pour le process courant, elles ne sont pas stockes avec le formulaire. Le paramtre redimension permet de dfinir si le formulaire est redimensionnable horizontalement, cest--dire si sa largeur est modifiable (manuellement par lutilisateur ou par programmation). Si vous passez Vrai, la largeur du formulaire peut tre modifie par lutilisateur ; 4e Dimension utilise comme bornes les valeurs ventuellement passes dans les paramtres largeurMini et largeurMaxi. Si vous passez Faux, la largeur courante du formulaire nest pas modifiable ; dans ce cas, il est inutile de passer des valeurs dans les paramtres largeurMini et largeurMaxi. Si vous avez pass Vrai dans le premier paramtre, vous pouvez passer dans les paramtres facultatifs largeurMini et largeurMaxi les nouvelles largeurs minimale et maximale du formulaire en pixels. Si vous omettez ces paramtres, les valeurs dfinies en mode Structure (le cas chant) seront utilises. Exemple Reportez-vous l'exemple de la commande FIXER TAILLE FORMULAIRE. Rfrence FIXER REDIMENSIONNEMENT FORMULAIRE VERTICAL, FIXER TAILLE FORMULAIRE.

804

4e Dimension - Langage

FIXER REDIMENSIONNEMENT FORMULAIRE VERTICAL

Formulaires version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER REDIMENSIONNEMENT FORMULAIRE VERTICAL (redimension{; hauteurMini{; hauteurMaxi}}) Paramtre redimension Type Boolen Description Vrai : le formulaire est redimensionnable verticalement Faux : le formulaire nest pas redimensionnable verticalement Hauteur minimale du formulaire (pixels) Hauteur maximale du formulaire (pixels)

hauteurMini hauteurMaxi

Entier long Entier long

Description La commande FIXER REDIMENSIONNEMENT FORMULAIRE VERTICAL permet de modifier par programmation les proprits de redimensionnement vertical du formulaire courant. Par dfaut, ces proprits sont dfinies dans lditeur de formulaires en mode Structure. Les nouvelles proprits sont fixes pour le process courant, elles ne sont pas stockes avec le formulaire. Le paramtre redimension permet de dfinir si le formulaire est redimensionnable verticalement, cest--dire si sa hauteur est modifiable (manuellement par lutilisateur ou par programmation). Si vous passez Vrai, la hauteur du formulaire peut tre modifie par lutilisateur ; 4e Dimension utilise comme bornes les valeurs ventuellement passes dans les paramtres hauteurMini et hauteurMaxi. Si vous passez Faux, la hauteur courante du formulaire nest pas modifiable ; dans ce cas, il est inutile de passer des valeurs dans les paramtres hauteurMini et hauteurMaxi. Si vous avez pass Vrai dans le premier paramtre, vous pouvez passer dans les paramtres facultatifs hauteurMini et hauteurMaxi les nouvelles hauteurs minimale et maximale du formulaire en pixels. Si vous omettez ces paramtres, les valeurs dfinies en mode Structure (le cas chant) seront utilises. Exemple Reportez-vous l'exemple de la commande FIXER TAILLE FORMULAIRE. Rfrence FIXER REDIMENSIONNEMENT FORMULAIRE HORIZONTAL, FIXER TAILLE FORMULAIRE.

4e Dimension - Langage

805

LIRE OBJETS FORMULAIRE

Formulaires version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE OBJETS FORMULAIRE (tabObjets{; tabVariables{; tabPages}}{; *}) Paramtre tabObjets tabVariables tabPages * Type Tableau alpha Tableau pointeur Tableau entier * Description Noms des objets du formulaire Pointeurs sur les variables ou champs associs aux objets Numro de page de chaque objet Si pass = rduire la page courante

Description La commande LIRE OBJETS FORMULAIRE retourne sous forme de tableau(x) la liste de tous les objets prsents dans le formulaire courant de la table courante. Cette liste peut tre restreinte la page courante du formulaire. La commande peut tre utilise avec les formulaires entre et sortie. Si un tableau pass en paramtre nest pas pralablement dclar, la commande le cre et le dimensionne automatiquement. Toutefois, dans la perspective de la compilation de lapplication, il est recommand de dclarer explicitement chaque tableau. Passez dans tabObjets le nom du tableau alpha devant tre rempli avec les noms des objets (chaque nom dobjet est unique au sein dun formulaire). Lordre dans lequel les objets apparaissent dans le tableau nest pas significatif. Les autres tableaux remplis facultativement par la commande sont synchroniss avec le premier. Passez dans le paramtre facultatif tabVariables le nom du tableau de pointeurs devant tre rempli avec des pointeurs vers les variables ou champs associs aux objets. Si un objet na pas de variable associe, le pointeur Nil est retourn. Dans le cas dun objet de type sousformulaire, un pointeur sur la table du sous-formulaire est retourn. Le troisime tableau (facultatif), tabPages, est rempli avec les numros de pages du formulaire. Chaque ligne de ce tableau contient le numro de la page sur laquelle se trouve lobjet correspondant. Les objets provenant dun formulaire hrit sont considrs comme appartenant la page 0 du formulaire courant. Le paramtre facultatif * permet de rduire la liste des objets retourns la page courante du formulaire. Lorsque ce paramtre est pass, seuls les objets de la page courante, de la page 0 et des pages hrites sont retourns par la commande. Tous les objets prsents dans la page courante du formulaire (visibles ou non) sont traits par la commande. Rfrence LIRE PROPRIETES FORMULAIRE. 806 4e Dimension - Langage

ALLER A PAGE

Formulaires version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ALLER A PAGE (numroPage) Paramtre numroPage Type Numrique Description Numro de la page afficher

Description ALLER A PAGE change la page courante d'un formulaire pour afficher la page dsigne par numroPage. Si aucun formulaire n'est affich, ALLER A PAGE ne fait rien. Si numroPage est suprieur au nombre de pages du formulaire, la dernire page est affiche. Si numroPage est infrieur 1, la premire page est affiche. A propos des commandes de gestion des pages formulaire 4D vous fournit des actions automatiques pour les boutons qui effectuent les mmes tches que les commandes PREMIERE PAGE, DERNIERE PAGE, PAGE SUIVANTE, PAGE PRECEDENTE, ALLER A PAGE que vous pouvez associer aux objets tels que les onglets, les listes droulantes, etc. A chaque fois que c'est possible, utilisez les actions automatiques pour les boutons plutt que ces commandes. Les commandes de gestion des pages peuvent tre utilises avec des formulaires entre ou des formulaires affichs dans des botes de dialogue. Les formulaires sortie n'utilisent que la premire page. Un formulaire comprend toujours au minimum une page, la premire. Notez que quel que soit le nombre de pages qu'il contient, un formulaire ne peut tre associ qu' une seule mthode formulaire. Vous pouvez utiliser la commande Page formulaire courante pour savoir quelle page est affiche l'cran. Note : Pendant que vous construisez un formulaire, vous pouvez utiliser les pages 1 N du formulaire ainsi que la page 0 (zro), dans laquelle vous placez les objets que vous voulez faire apparatre sur toutes les pages. Lors de l'utilisation du formulaire, et donc lorsque les commandes de gestion des pages sont appeles, seules les pages 1 N sont accessibles : la page 0 est automatiquement combine la page affiche l'cran. Exemple L'exemple suivant est la mthode objet d'un bouton affichant la page 3 du formulaire :

ALLER A PAGE (3)

Rfrence DERNIERE PAGE, Page formulaire courante, PAGE PRECEDENTE, PAGE SUIVANTE, PREMIERE PAGE.

4e Dimension - Langage

807

PREMIERE PAGE

Pages formulaire version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

PREMIERE PAGE Paramtre Type Description Cette commande ne requiert pas de paramtre Description PREMIERE PAGE change la page courante d'un formulaire pour afficher la premire page du formulaire. Si aucun formulaire n'est affich, ou si la premire page du formulaire est dj affiche, PREMIERE PAGE ne fait rien. Exemple Cet exemple est une mthode appele par une commande de menu. Elle affiche la premire page du formulaire :

PREMIERE PAGE

Rfrence ALLER A PAGE, DERNIERE PAGE, Page formulaire courante, PAGE PRECEDENTE, PAGE SUIVANTE.

808

4e Dimension - Langage

DERNIERE PAGE

Formulaires version 5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DERNIERE PAGE Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande DERNIERE PAGE change la page courante d'un formulaire pour afficher la dernire page du formulaire. Si aucun formulaire n'est affich ou si la dernire page du formulaire est dj affiche, DERNIERE PAGE ne fait rien. Exemple Cet exemple est une mthode appele par une commande de menu. Elle affiche la dernire page du formulaire courant :

DERNIERE PAGE

Rfrence ALLER A PAGE, Page formulaire courante, PAGE PRECEDENTE, PAGE SUIVANTE, PREMIERE PAGE.

4e Dimension - Langage

809

PAGE SUIVANTE

Formulaires version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

PAGE SUIVANTE Paramtre Type Description Cette commande ne requiert pas de paramtre Description PAGE SUIVANTE change la page courante d'un formulaire pour afficher la page suivante. Si aucun formulaire n'est affich, ou si la page affiche est la dernire page du formulaire, PAGE SUIVANTE ne fait rien. Exemple Cet exemple est une mthode appele par une commande de menu. Elle provoque l'affichage la page qui suit celle qui actuellement affiche :

PAGE SUIVANTE

Rfrence ALLER A PAGE, DERNIERE PAGE, Page formulaire courante, PAGE PRECEDENTE, PREMIERE PAGE.

810

4e Dimension - Langage

PAGE PRECEDENTE

Formulaires version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

PAGE PRECEDENTE Paramtre Type Description Cette commande ne requiert pas de paramtre Description PAGE PRECEDENTE change la page courante d'un formulaire pour afficher la page prcdente. Si aucun formulaire n'est affich, ou si la page affiche est la premire page du formulaire, PAGE PRECEDENTE ne fait rien. Exemple Cet exemple est une mthode appele par une commande de menu. Elle provoque l'affichage la page qui prcde celle qui est actuellement affiche :

PAGE PRECEDENTE

Rfrence ALLER A PAGE, DERNIERE PAGE, Page formulaire courante, PAGE SUIVANTE, PREMIERE PAGE.

4e Dimension - Langage

811

Page formulaire courante

Formulaires version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Page formulaire courante Numrique Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Numrique Numro de la page courante du formulaire actuellement affich

Description Page formulaire courante retourne le numro de la page courante du formulaire actuellement affich. Exemple Alors que vous tre en train d'utiliser un formulaire, si vous choisissez une commande de menu ou si le formulaire reoit un appel d'un autre process, vous voulez que des actions diffrentes soient effectues en fonction de la page du formulaire affiche. Vous pouvez alors crire : ` Mthode formulaire [maTable];"monFormulaire" Au cas ou : (Evenement formulaire=Sur chargement) ` ... : (Evenement formulaire=Sur libration) ` ... : (Evenement formulaire=Sur menu slectionn) $vlNumroMenu:=Menu choisi >> 16 $vlNumroCmde:=Menu choisi & 0xFFFF

812

4e Dimension - Langage

Au cas ou : ($vlNumroMenu=...) Au cas ou : ($vlNumroCmde=...) : (Page formulaire courante=1) ` Effectuer une action approprie pour la page 1 : (Page formulaire courante=2) ` Effectuer une action approprie pour la page 2 ` ... : ($vlNumroCmde=...) ` ... Fin de cas : ($vlNumroMenu=...) ` ... Fin de cas : (Evenement formulaire=Sur appel extrieur) Au cas ou : (Page formulaire courante=1) ` Fournir une rponse approprie pour la page 1 : (Page formulaire courante=2) ` Fournir une rponse approprie pour la page 2 Fin de cas ` ... Fin de cas

Rfrence ALLER A PAGE, DERNIERE PAGE, PAGE PRECEDENTE, PAGE SUIVANTE, PREMIERE PAGE.

4e Dimension - Langage

813

FORMULAIRE ENTREE

Formulaires version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FORMULAIRE ENTREE ({table; }formulaire{; formUtilisateur}{; *}) Paramtre table formulaire formUtilisateur * Type Table Alpha Alpha * Description Table pour laquelle dfinir le formulaire entre ou Table par dfaut si ce paramtre est omis Nom du formulaire utiliser Nom du formulaire utilisateur utiliser Taille de fentre automatique

Description FORMULAIRE ENTREE dsigne formulaire ou formUtilisateur comme formulaire entre courant de table pour le process courant. formulaire doit appartenir table. La porte de cette commande est le process courant. Chaque table dispose d'un formulaire entre courant pour chaque process. La commande FORMULAIRE ENTREE n'affiche pas de formulaire ; elle dsigne juste celui qui sera affich ou utilis par d'autres commandes. Pour plus d'informations sur la cration de formulaires, reportez-vous au manuel Mode Structure de 4e Dimension. Pour chaque table de la base, un formulaire entre par dfaut est dfini dans la fentre de l'Explorateur en mode Structure. Ce formulaire est utilis si la commande FORMULAIRE ENTREE n'est pas appele, ou si le paramtre formulaire est invalide. Le paramtre facultatif formUtilisateur permet de dsigner un formulaire utilisateur (issu du formulaire) comme formulaire entre par dfaut. Si vous passez un nom de formulaire utilisateur valide, ce formulaire sera utilis par dfaut en lieu et place du formulaire entre dans le process courant. Ce principe permet de disposer simultanment de diffrents formulaires utilisateurs personnaliss (gnrs laide de la commande CREER FORMULAIRE UTILISATEUR) et dutiliser celui qui convient en fonction du contexte. Pour plus dinformations sur les formulaires utilisateurs, reportez-vous la section Prsentation des formulaires utilisateurs.

814

4e Dimension - Langage

Le formulaire entre est affich par de nombreuses commandes. Ces commandes sont gnralement utilises pour la saisie ou la modification de valeurs. Les commandes suivantes affichent un formulaire entre : AJOUTER ENREGISTREMENT CHERCHER PAR EXEMPLE AFFICHER ENREGISTREMENT MODIFIER ENREGISTREMENT Les commandes VISUALISER SELECTION et MODIFIER SELECTION affichent une liste d'enregistrements dans le formulaire sortie. Chacune d'entre elles permet ensuite l'utilisateur de double-cliquer sur un enregistrement, qui s'affiche alors dans le formulaire entre. Le formulaire entre est aussi utilis par les commandes d'import LECTURE DIF, LECTURE SYLK et LECTURE ASCII. Le paramtre optionnel * est destin tre utilis conjointement avec les proprits du formulaire, que vous dfinissez en mode Structure dans la fentre des Proprits du formulaire, et avec la commande Creer fenetre. En passant le paramtre *, vous indiquez 4D d'utiliser les proprits du formulaire pour redimensionner automatiquement la fentre lors de l'utilisation ultrieure de la fentre comme formulaire entre ou comme dialogue. Reportez-vous la description de la commande Creer fenetre pour plus d'informations sur ce point. Note : Que vous passiez ou non le paramtre *, FORMULAIRE ENTREE change le formulaire entre pour la table. Exemples (1) L'exemple suivant illustre une utilisation typique de FORMULAIRE ENTREE. A noter que, si dans cet exemple FORMULAIRE ENTREE est appel juste avant que le formulaire soit utilis, cela n'est absolument pas ncessaire. FORMULAIRE ENTREE peut en fait tre excut dans une toute autre mthode, du moment qu'elle est excute avant celle-ci :

` Formulaire pour les nouvelles socits FORMULAIRE ENTREE ([Socits]; "Nouvelle St") AJOUTER ENREGISTREMENT ([Socits]) ` Ajout d'une nouvelle socit

4e Dimension - Langage

815

(2) Dans une base de facturation grant plusieurs socits, la cration dune facture doit seffectuer dans le formulaire utilisateur correspondant : Au cas ou : (socit="4D SA") FORMULAIRE ENTREE([Factures];"Saisie";"4D_SA") : (socit="4D Inc") FORMULAIRE ENTREE([Factures];"Saisie";"4D_Inc") : (socit="Acme") FORMULAIRE ENTREE([Factures];"Saisie";"ACME") Fin de cas AJOUTER ENREGISTREMENT([Factures])

Rfrence AFFICHER ENREGISTREMENT, AJOUTER ENREGISTREMENT, CHERCHER PAR EXEMPLE, Creer fenetre, CREER FORMULAIRE UTILISATEUR, FORMULAIRE SORTIE, LECTURE ASCII, LECTURE DIF, LECTURE SYLK, MODIFIER ENREGISTREMENT, MODIFIER SELECTION, VISUALISER SELECTION.

816

4e Dimension - Langage

FORMULAIRE SORTIE

Formulaires version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FORMULAIRE SORTIE ({table; }formulaire{; formUtilisateur}) Paramtre table formulaire formUtilisateur Type Table Alpha Alpha Description Table pour laquelle dfinir le formulaire sortie ou Table par dfaut si ce paramtre est omis Nom du formulaire Nom du formulaire utilisateur utiliser

Description FORMULAIRE SORTIE vous permet de dfinir formulaire ou formUtilisateur comme formulaire sortie courant de table pour le process courant. formulaire doit appartenir table. La porte de cette commande est le process courant. Chaque table dispose de son propre formulaire sortie dans chaque process. La commande FORMULAIRE SORTIE ne provoque pas l'affichage du formulaire ; elle dsigne simplement le formulaire devant tre imprim, affich, ou utilis par d'autres commandes. Pour plus d'informations sur la cration de formulaires, reportez-vous au manuel Mode Structure de 4e Dimension. Le formulaire sortie par dfaut est dfini dans la fentre de l'Explorateur du mode Structure pour chaque table. Il est identifi par la lettre S place prs de son nom dans l'Explorateur et dans les botes de dialogue listant les formulaires. Ce formulaire par dfaut sera utilis si vous n'appelez pas la commande FORMULAIRE SORTIE ou si vous passez cette commande un nom de formulaire erron ou inexistant. Le paramtre facultatif formUtilisateur permet de dsigner un formulaire utilisateur (issu du formulaire) comme formulaire sortie par dfaut. Si vous passez un nom de formulaire utilisateur valide, ce formulaire sera utilis par dfaut en lieu et place du formulaire sortie dans le process courant. Ce principe permet de disposer simultanment de diffrents formulaires utilisateurs personnaliss (gnrs laide de la commande CREER FORMULAIRE UTILISATEUR) et dutiliser celui qui convient en fonction du contexte. Pour plus dinformations sur les formulaires utilisateurs, reportez-vous la section Prsentation des formulaires utilisateurs.

4e Dimension - Langage

817

Les formulaires sortie sont exploits par trois groupes de commandes. Le premier groupe gre l'affichage des enregistrements l'cran, le deuxime gre la gnration d'tats et le troisime gre l'export de donnes. Chacune des commandes suivantes affiche une liste d'enregistrements dans un formulaire sortie : VISUALISER SELECTION MODIFIER SELECTION Vous utilisez le formulaire sortie lorsque vous crez des tats l'aide des commandes suivantes : IMPRIMER ETIQUETTES IMPRIMER SELECTION Chacune des commandes d'export suivantes utilise galement le formulaire sortie : ECRITURE DIF ECRITURE SYLK ECRITURE ASCII Exemple L'exemple suivant illustre une utilisation typique FORMULAIRE SORTIE. Notez que, bien que dans cet exemple la commande FORMULAIRE SORTIE soit place juste avant que le formulaire soit utilis, cela n'est pas obligatoire. En fait, la commande pourrait se trouver dans n'importe quelle autre mthode, dans la mesure o elle est excute avant celle-ci :

FORMULAIRE ENTREE ([Parties]; "Saisie Parties") ` Slection du formulaire entre FORMULAIRE SORTIE ([Parties]; "Liste Parties") ` Slection du formulaire sortie MODIFIER SELECTION ([Parties]) ` Cette commande utilise les deux formulaires

Rfrence CREER FORMULAIRE UTILISATEUR, ECRITURE ASCII, ECRITURE DIF, ECRITURE SYLK, FORMULAIRE ENTREE, IMPRIMER ETIQUETTES, IMPRIMER SELECTION, MODIFIER SELECTION, VISUALISER SELECTION.

818

4e Dimension - Langage

25 ________________________ Formulaires utilisateurs

4e Dimension - Langage

819

820

4e Dimension - Langage

Prsentation des formulaires utilisateurs

Formulaires utilisateurs version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Dans 4e Dimension, le dveloppeur peut proposer aux utilisateurs de crer ou de modifier des formulaires personnaliss. Ces formulaires utilisateurs sont alors utilisables pour l'affichage, la saisie, etc., comme nimporte quel formulaire de 4e Dimension. Principes d'utilisation Un formulaire utilisateur est bas sur un formulaire 4e Dimension standard cr par le dveloppeur en mode Structure (appel formulaire source ou formulaire dveloppeur), auquel la proprit Modifiable par lutilisateur a t applique dans l'diteur de formulaires. Un diteur de formulaires simplifi (appel par la commande MODIFIER FORMULAIRE) permet aux utilisateurs de modifier lapparence du formulaire, dajouter des objets graphiques (via une bibliothque d'objets spcifique), de masquer des lments, etc. le dveloppeur peut contrler les actions autorises. Les formulaires utilisateurs peuvent tre employs de deux manires diffrentes : Lutilisateur modifie le formulaire source pour ladapter ses besoins laide de la commande MODIFIER FORMULAIRE. Le formulaire utilisateur est conserv en local et est utilis automatiquement la place du formulaire original. Ce fonctionnement rpond aux besoins pour le dveloppeur de paramtrer sur site des botes de dialogue, par exemple pour coller le logo de lentreprise dans les formulaires, masquer des champs inutiles, etc. Le formulaire source sert de modle de base que lutilisateur peut dupliquer loisir pour gnrer autant de copies que ncessaire (via la commande CREER FORMULAIRE UTILISATEUR). Chaque copie est librement paramtrable (contenu, nom, etc.) laide de la commande MODIFIER FORMULAIRE. Le nom de chaque formulaire utilisateur doit simplement tre unique. Les commandes FORMULAIRE ENTREE et FORMULAIRE SORTIE permettent ensuite de dsigner le formulaire utilisateur utiliser dans chaque process. Ce fonctionnement rpond par exemple aux besoins de gnration dtats personnaliss. Stockage et mise jour des formulaires utilisateurs Les mcanismes des formulaires utilisateurs fonctionnent avec les bases compiles et interprtes, avec 4e Dimension monoposte, 4D Server ou 4D Runtime. En mode client/serveur, les formulaires modifis par lutilisateur sont disponibles sur tous les postes. 4D assure automatiquement la gestion des modifications des formulaires. Lorsquun formulaire est dclar Modifiable par lutilisateur, il est verrouill en mode Structure. Le dveloppeur doit explicitement cliquer sur licne de dverrouillage afin de pouvoir accder aux objets du formulaire. Cette opration rend automatiquement obsoltes les formulaires utilisateurs lis, qui devront alors tre regnrs. Lorsquun formulaire source est supprim, les formulaires utilisateurs lis sont supprims.

4e Dimension - Langage

821

Les formulaires utilisateurs sont stocks dans un fichier indpendant suffix .4DA, plac ct du fichier de structure principal (.4DB / .4DC). Ce fichier est appel fichier de structure utilisateur. Le fonctionnement de ce fichier est transparent : 4e Dimension utilise un formulaire utilisateur lorsquil existe (la commande LISTE FORMULAIRES UTILISATEURS permet de connatre tout moment les formulaires utilisateurs valides). C'est galement dans ce fichier que les commandes FORMULAIRE ENTREE et FORMULAIRE SORTIE recherchent les formulaires utilisateurs. Lorsquun formulaire utilisateur est obsolte, il est supprim et 4e Dimension utilise par dfaut le formulaire source. En client/serveur, le fichier .4DA est distribu sur les postes clients suivant les mmes rgles que le fichier de structure principal. Ce principe permet de conserver les formulaires utilisateurs non obsoltes en cas de mise jour de la structure par le dveloppeur. Codes d'erreurs Des codes d'erreurs spcifiques peuvent tre retourns lors de l'utilisation des commandes de gestion des formulaires utilisateurs. Ces codes, situs dans l'intervalle -9750 -9759, sont dcrits dans la section Erreurs de la base de donnes.

822

4e Dimension - Langage

MODIFIER FORMULAIRE

Formulaires utilisateurs version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

MODIFIER FORMULAIRE (table; formulaire{; formUtilisateur}{; bibliothque}) Paramtre table formulaire formUtilisateur bibliothque Type Table Chane Chane Chane Description Table du formulaire modifier Nom du formulaire modifier Nom du formulaire utilisateur modifier Chemin d'accs de la bibliothque dobjets utilisable

Description La commande MODIFIER FORMULAIRE ouvre le formulaire dsign par les paramtres table, formulaire ainsi que, facultativement, formUtilisateur dans lditeur de formulaires utilisateurs :

Note : La fentre de lditeur ne souvre que si elle est la premire fentre du process. Autrement dit, il sera gnralement ncessaire douvrir un nouveau process pour afficher lditeur. Si vous ne passez pas le paramtre formUtilisateur et sil nexiste pas dj un formulaire utilisateur li formulaire, le formulaire source est affich dans lditeur. Le formulaire modifi est ensuite dupliqu dans le fichier de structure utilisateur (.4DA) et sera utilis en remplacement de formulaire.

4e Dimension - Langage

823

Si un formulaire utilisateur avait dj t gnr partir de formulaire laide de cette commande, le formulaire utilisateur saffiche dans lditeur. Si vous souhaitez dans ce cas repartir du formulaire source, vous devez au pralable supprimer le formulaire utilisateur laide de la commande SUPPRIMER FORMULAIRE UTILISATEUR. Le paramtre formUtilisateur permet de dsigner un formulaire utilisateur (cr laide de la commande CREER FORMULAIRE UTILISATEUR) modifier. Dans ce cas, ce formulaire est affich dans lditeur. Passez dans le paramtre facultatif bibliothque le chemin daccs complet de la bibliothque dobjets que lutilisateur sera autoris utiliser pour personnaliser le formulaire. Lorsquelles sont utilises dans le contexte de lditeur de formulaires utilisateurs, les bibliothques dobjets permettent de coller des objets avec leurs proprits graphiques et leurs actions automatiques. Les objets auxquels une mthode est associe napparaissent pas dans la bibliothque. Attention, il est du ressort du dveloppeur de vrifier que lajout des objets dune bibliothque nest pas incompatible avec le formulaire utilisateur (et ses objets) au niveau des noms, des variables et des types. En mode client/serveur, la bibliothque doit se trouver dans le dossier Extra de la base de donnes, au mme niveau que le dossier Plugins, afin quelle soit disponible sur tous les postes clients. Si la bibliothque est valide, elle est ouverte avec la fentre du formulaire. Pour plus dinformations sur les bibliothques dobjets, reportez-vous au manuel Mode Structure de la documentation de 4e Dimension. Exemple Voici une mthode projet permettant lutilisateur de modifier un formulaire de dialogue :

MODIFIER FORMULAIRE([Dialogs];"Welcome";"Bib_Logos.4il")

Rfrence CREER FORMULAIRE UTILISATEUR, LISTE FORMULAIRES UTILISATEURS, Prsentation des formulaires utilisateurs, SUPPRIMER FORMULAIRE UTILISATEUR. Variables et ensembles systme Si lutilisateur sauvegarde les modifications ventuellement effectues dans l'diteur, la variable OK prend la valeur 1. En cas d'erreur, OK prend la valeur 0. Gestion des erreurs Une erreur est gnre si : le formulaire na pas t dclar modifiable par lutilisateur en mode Structure ou nexiste pas, le formulaire est dj ouvert en modification dans un autre process, lutilisateur ne possde pas les droits daccs adquats. Vous pouvez intercepter ces erreurs laide dune mthode installe par la commande APPELER SUR ERREUR.

824

4e Dimension - Langage

CREER FORMULAIRE UTILISATEUR

Formulaires utilisateurs version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CREER FORMULAIRE UTILISATEUR (table; formulaire; formUtilisateur) Paramtre table formulaire formUtilisateur Type Table Chane Chane Description Table du formulaire source Nom du formulaire source Nom du nouveau formulaire utilisateur

Description La commande CREER FORMULAIRE UTILISATEUR duplique le formulaire 4e Dimension dont la table et le nom sont passs en paramtres et cre un nouveau formulaire utilisateur nomm formUtilisateur. Une fois cr, le formulaire formUtilisateur pourra tre modifi laide de la commande MODIFIER FORMULAIRE. Cette commande permet de crer N formulaires utilisateurs (par exemple divers formulaires dtats) partir dun mme formulaire source. Rfrence FORMULAIRE ENTREE, FORMULAIRE SORTIE, LISTE FORMULAIRES UTILISATEURS, MODIFIER FORMULAIRE, Prsentation des formulaires utilisateurs, SUPPRIMER FORMULAIRE UTILISATEUR. Variables et ensembles systme La variable OK retourne 1 si lopration sest droule correctement et 0 sinon. Gestion des erreurs Une erreur est gnre si : formulaire est dj un formulaire utilisateur, le nom du formulaire utilisateur formUtilisateur est identique celui du formulaire source ou dun formulaire utilisateur existant, lutilisateur ne possde pas les droits daccs adquats. Vous pouvez intercepter ces erreurs laide dune mthode installe par la commande APPELER SUR ERREUR.

4e Dimension - Langage

825

LISTE FORMULAIRES UTILISATEURS

Formulaires utilisateurs version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LISTE FORMULAIRES UTILISATEURS (table; formulaire; tabFormUtilisateurs) Paramtre table formulaire tabFormUtilisateurs Type Table Chane Tab Alpha Description Table du formulaire source Nom du formulaire source Noms des formulaires utilisateurs issus du formulaire source

Description La commande LISTE FORMULAIRES UTILISATEURS remplit le tableau tabFormUtilisateurs avec les noms des formulaires utilisateurs issus du formulaire dveloppeur dsign par les paramtres table et formulaire. Si le formulaire utilisateur a t cr directement l'aide de la commande MODIFIER FORMULAIRE, tabFormUtilisateurs contient comme seul lment une chane vide (""). Le tableau est retourn vide si aucun formulaire utilisateur nexiste pour le formulaire dveloppeur spcifi. Rfrence CREER FORMULAIRE UTILISATEUR, MODIFIER FORMULAIRE, Prsentation des formulaires utilisateurs.

826

4e Dimension - Langage

SUPPRIMER FORMULAIRE UTILISATEUR

Formulaires utilisateurs version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER FORMULAIRE UTILISATEUR (table; formulaire; formUtilisateur) Paramtre table formulaire formUtilisateur Type Table Chane Chane Description Table du formulaire utilisateur Nom du formulaire source Nom du formulaire utilisateur

Description La commande SUPPRIMER FORMULAIRE UTILISATEUR permet de supprimer le formulaire utilisateur dsign par les paramtres table, formulaire et formUtilisateur. Si le formulaire utilisateur supprimer a t cr directement l'aide la commande MODIFIER FORMULAIRE, passez une chane vide ("") dans formUtilisateur. Rfrence CREER FORMULAIRE UTILISATEUR, LISTE FORMULAIRES UTILISATEURS, Prsentation des formulaires utilisateurs. Variables et ensembles systme Si le formulaire utilisateur est correctement supprim, la variable OK retourne 1. Dans le cas contraire, OK prend la valeur 0. Gestion des erreurs Une erreur est gnre si : le formulaire utilisateur nexiste pas, lutilisateur ne possde pas les droits daccs adquats. Vous pouvez intercepter ces erreurs laide dune mthode installe par la commande APPELER SUR ERREUR.

4e Dimension - Langage

827

828

4e Dimension - Langage

26 ________________________ Formules

4e Dimension - Langage

829

830

4e Dimension - Langage

FIXER METHODES AUTORISEES

Formules version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER METHODES AUTORISEES (tabMthodes) Paramtre tabMthodes Type Tableau Alpha Description Tableau de noms de mthodes

Description La commande FIXER METHODES AUTORISEES permet de dfinir les mthodes qui seront affiches dans lditeur de formules pour le process courant. Les mthodes dsignes apparatront la fin de la liste des commandes et pourront tre utilises dans les formules. Par dfaut (si vous nutilisez pas cette commande), aucune mthode nest utilisable dans lditeur de formules. Si une formule utilise un nom de mthode non autorise, une erreur de syntaxe est gnre et la formule ne peut pas tre valide. Passez dans le paramtre tabMthodes le nom d'un tableau contenant la liste de mthodes proposer dans lditeur de formules. Le tableau doit avoir t dfini pralablement. Vous pouvez utiliser le caractre joker (@) dans les noms des mthodes afin de dfinir un ou plusieurs groupe(s) de mthodes autorises. Note : Si vous souhaitez que lutilisateur puisse appeler des commandes 4D non autorises par dfaut ou des commandes de plug-ins, vous devez utiliser des mthodes spcifiques charges dexcuter ces commandes. Exemple Cet exemple autorise toutes les mthodes dont le nom dbute par formule et de la mthode Total_gnral dans lditeur de formules : TABLEAU ALPHA(15;tabmthodes;2) tabmthodes{1}:="formule@" tabmthodes{2}:="Total_gnral" FIXER METHODES AUTORISEES(tabmthodes)

Rfrence EDITER FORMULE, LIRE METHODES AUTORISEES.

4e Dimension - Langage

831

LIRE METHODES AUTORISEES

Formules version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE METHODES AUTORISEES (tabMthodes) Paramtre tabMthodes Type Tableau Alpha Description Tableau de noms de mthodes

Description La commande LIRE METHODES AUTORISEES retourne dans le tableau tabMthodes le nom des mthodes autorises dans lditeur de formules, cest--dire pouvant tre utilises lors de lcriture dune formule ces mthodes sont listes la fin de la liste des commandes dans lditeur. Par dfaut, aucune mthode nest utilisable dans lditeur de formules. Les mthodes doivent avoir t explicitement autorises via la commande FIXER METHODES AUTORISEES. Si cette commande na pas t excute, LIRE METHODES AUTORISEES retourne une chane vide. LIRE METHODES AUTORISEES retourne prcisment ce qui a t pass la commande FIXER METHODES AUTORISEES, cest--dire un tableau alpha (la commande cre et dimensionne le tableau). En outre, si le caractre joker (@) a t utilis pour dsigner un groupe de mthodes, la chane contenant le caractre @ est retourne (et non les noms des mthodes du groupe). Cette commande est utile pour prserver le paramtrage de lensemble courant de mthodes autorises avant lexcution dune formule dans un contexte spcifique (par exemple un tat rapide). Exemple Cet exemple permet dautoriser ponctuellement un ensemble de mthodes spcifiques pour la cration dun tat rapide :

`Stockage du paramtrage courant LIRE METHODES AUTORISEES(tabmthodes) `Dfinition des mthodes pour ltat mthodes_Etats:="Etats_@" FIXER METHODES AUTORISEES(mthodes_Etats) QR ETAT([Personnes];"MonEtat") `Rtablissement des paramtres courants FIXER METHODES AUTORISEES(tabmthodes)

Rfrence FIXER METHODES AUTORISEES. 832 4e Dimension - Langage

EDITER FORMULE

Formules version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

EDITER FORMULE (table; formule) Paramtre table formule Type Table Variable chane Description Table afficher par dfaut dans lditeur de formules Variable contenant la formule afficher dans lditeur de formules ou "" pour uniquement afficher lditeur Formule valide par lutilisateur

Description La commande EDITER FORMULE affiche lditeur de formules afin de permettre lutilisateur dcrire ou de modifier une formule. Lditeur contient l'ouverture : dans la liste de gauche, les champs de la table dsigne par le paramtre table, dans la zone de formule, la formule contenue dans la variable formule. Si vous avez pass une chane vide dans formule, lditeur est affich sans formule. Lutilisateur peut modifier la formule affiche et la sauvegarder. Il peut galement en crire ou en charger une nouvelle. Dans tous les cas, lorsque lutilisateur valide la bote de dialogue, la variable systme OK prend la valeur 1 et la variable formule contient la formule dfinie. Si lutilisateur annule la bote de dialogue, la variable systme OK prend la valeur 0 et formule est inchange. Note : Si la formule fait appel des mthodes qui nont pas t pralablement autorises dans lditeur de formules laide de la commande FIXER METHODES AUTORISEES, une erreur de syntaxe est gnre et il nest pas possible de valider la bote de dialogue. A noter quau moment de la validation de la bote de dialogue, la commande nexcute pas la formule, seul le contenu de la variable est valid et mis jour. Si vous voulez excuter la formule, vous devez utiliser la commande EXECUTER. Exemple Affichage de lditeur avec la table [Salaires] et sans formule pr-saisie puis excution de la formule sur la slection courante :

$maFormule:="" EDITER FORMULE([Salaires];$maFormule) Si (OK=1) APPLIQUER A SELECTION([Salaires];EXECUTER($maFormule)) Fin de si

Rfrence FIXER METHODES AUTORISEES.

4e Dimension - Langage

833

Variables et ensembles systme Si lutilisateur valide la bote de dialogue, la variable systme OK prend la valeur 1. Si lutilisateur annule la bote de dialogue, la variable systme OK prend la valeur 0.

834

4e Dimension - Langage

27 ________________________ Gestion de la saisie

4e Dimension - Langage

835

836

4e Dimension - Langage

VALIDER

Gestion de la saisie version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

VALIDER Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande VALIDER doit tre employe dans une mthode objet ou formulaire (ou une sous-routine) pour : valider un enregistrement ou un sous-enregistrement cr ou modifi dont les donnes ont t saisies la suite d'un AJOUTER ENREGISTREMENT, MODIFIER ENREGISTREMENT, AJOUTER SOUS ENREGISTREMENT ou MODIFIER SOUS ENREGISTREMENT. valider un formulaire affich par l'intermdiaire de la commande DIALOGUE. quitter un formulaire affichant une slection d'enregistrements l'aide de VISUALISER SELECTION ou MODIFIER SELECTION. VALIDER effectue la mme action que lorsque l'utilisateur appuie sur la touche Entre. Une fois que le formulaire a t valid, la variable systme OK prend la valeur 1. VALIDER est frquemment excute la suite de la slection d'une commande de menu. VALIDER est galement souvent appele dans la mthode objet d'un bouton auquel la proprit "Pas d'action" a t associe. Enfin, cette commande peut tre place dans la mthode de la case de fermeture (optionnelle) d'une fentre cre par la commande Creer fenetre. Si la fentre comporte une case de menu Systme, VALIDER et NE PAS VALIDER peuvent tre appeles dans la mthode excuter lorsque l'utilisateur double-clique sur la case du menu Systme ou slectionne la commande de menu Fermeture. Il n'est pas possible d'enchaner plusieurs VALIDER. En d'autres termes, l'excution conscutive de deux commandes VALIDER dans une mthode en rponse un vnement aura le mme rsultat que l'excution d'une seule. Rfrence NE PAS VALIDER.

4e Dimension - Langage

837

NE PAS VALIDER

Gestion de la saisie version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

NE PAS VALIDER Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande NE PAS VALIDER doit tre employe dans une mthode objet ou formulaire (ou une sous-routine) pour : annuler la cration ou la modification d'un enregistrement ou un sous-enregistrement dont les donnes ont t saisies la suite d'un AJOUTER ENREGISTREMENT, MODIFIER ENREGISTREMENT, AJOUTER SOUS ENREGISTREMENT ou MODIFIER SOUS ENREGISTREMENT. annuler un formulaire affich par l'intermdiaire de la commande DIALOGUE. quitter un formulaire affichant une slection d'enregistrements l'aide de VISUALISER SELECTION ou MODIFIER SELECTION. annuler l'impression d'une ligne sur le point dtre imprime l'aide de la commande Imprimer ligne (voir ci-dessous). Dans le contexte de la saisie, NE PAS VALIDER effectue la mme action que lorsque l'utilisateur utilise la touche d'annulation (Esc). NE PAS VALIDER est frquemment excute la suite de la slection d'une commande de menu. NE PAS VALIDER est galement souvent appele dans la mthode objet d'un bouton auquel la proprit "Pas d'action" a t associe. Cette commande peut galement tre place dans la mthode de la case de fermeture (optionnelle) d'une fentre cre par la commande Creer fenetre. Si la fentre comporte une case de menu Systme, NE PAS VALIDER et VALIDER peuvent tre appeles dans la mthode excuter lorsque l'utilisateur double-clique sur la case du menu Systme ou slectionne la commande de menu Fermeture. Il n'est pas possible d'enchaner plusieurs NE PAS VALIDER. En d'autres termes, l'excution conscutive de deux commandes NE PAS VALIDER dans une mthode en rponse un vnement aura le mme rsultat que l'excution d'une seule.

838

4e Dimension - Langage

Enfin, cette commande peut tre utilise dans lvnement formulaire Sur impression corps, dans le cadre de lutilisation de la commande Imprimer ligne. Dans ce contexte, la commande NE PAS VALIDER suspend limpression de la ligne sur le point dtre imprime, puis la reprend page suivante. Ce mcanisme permet de grer le manque de place ou les sauts de page lors des impressions des lignes. Note : Ce fonctionnement est diffrent de celui de linstruction SAUT DE PAGE(*) qui provoque lannulation de TOUTES les lignes en attente dimpression. Exemple Reportez-vous l'exemple de la commande FIXER TAQUET IMPRESSION. Rfrence Imprimer ligne, SAUT DE PAGE, VALIDER. Variables et ensembles systme Lorsque la commande NE PAS VALIDER est excute (formulaire annul ou annulation d'impression), la variable systme OK prend la valeur 0.

4e Dimension - Langage

839

Frappe clavier

Gestion de la saisie version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Frappe clavier Alpha Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Alpha Caractre saisi par l'utilisateur

Description Frappe clavier retourne le caractre tap par l'utilisateur dans un champ ou une zone saisissable. En gnral, vous appelez Frappe clavier dans une mthode formulaire ou objet, lors de la gestion des vnements formulaire Sur avant frappe clavier et Sur aprs frappe clavier. Pour dtecter les vnements de frappe clavier, utilisez la commande Evenement formulaire. Si vous voulez remplacer un caractre saisi par l'utilisateur par un autre, utilisez la commande FILTRER FRAPPE CLAVIER. IMPORTANT : Si vous voulez effectuer des oprations la vole en fonction de la valeur courante de la zone saisissable en cours de modification ainsi que du caractre saisir, rappelez-vous que le texte affich l'cran n'est pas encore la valeur du champ ou de la variable. La valeur saisie dans une variable ou un champ ne lui est affecte que lorsque la zone est valide (si l'utilisateur appuie sur la touche Tabulation, clique sur un bouton, etc.). En consquence, pensez placer les valeurs saisies dans une variable temporaire et travailler avec celle-ci, ou utilisez la commande Lire texte edite. Vous devez procder ainsi si vous souhaitez connatre la valeur courante du texte pour effectuer des actions spciales. Vous pouvez utiliser la commande Frappe clavier pour : effectuer un filtrage personnalis des caractres crer un filtre de saisie non disponible en standard, par exemple dans les filtres de saisie implmenter des zones de recherche ou de pr-saisie dynamiques. Note : Vous ne pouvez pas utiliser la fonction Frappe clavier dans les sous-formulaires. Exemples (1) Rfrez-vous aux exemples de la commande FILTRER FRAPPE CLAVIER.

840

4e Dimension - Langage

(2) Lorsque vous traitez un vnement Sur avant frappe clavier, vous grez la modification de la zone de texte courante (celle qui contient le curseur), et non la valeur future de la source de donnes (champ ou variable) de cette zone. La mthode Grer frappe clavier dcrite ci-dessous vous permet de placer dans une seconde variable les caractres saisis dans une zone de texte. Vous pouvez alors utiliser cette variable pour effectuer diffrentes actions pendant la saisie des caractres dans la zone. Vous passez comme premier paramtre un pointeur vers la source des donnes de la zone, et comme second paramtre un pointeur vers cette seconde variable. La mthode renvoie la nouvelle valeur de la zone de texte dans la seconde variable et retourne Vrai si cette valeur est diffrente de ce qu'elle tait avant la saisie du dernier caractre. ` Mthode projet Grer frappe clavier ` Grer frappe clavier ( Pointeur ; Pointeur ) -> Boolen ` Grer frappe clavier ( -> zoneSource ; -> valeurCourante ) -> Nouvelle valeur ? C_POINTEUR ($1;$2) C_TEXTE ($vtNouvValeur) ` Rcuprer le texte slectionn dans la zone saisissable TEXTE SELECTIONNE ($1->;$vlDbut;$vlFin) ` Commencer travailler avec la valeur courante $vtNouvValeur:=$2-> ` Selon la touche appuye ou le caractre saisi, effectuer les actions appropries Au cas ou

` La touche Retour arrire a t enfonce : (Code ascii (Frappe clavier)=Touche Retour arrire ) ` Supprimer les caractres slectionns ou le caractre gauche du curseur $vtNouvValeur:=Sous chaine ($vtNouvValeur;1;$vlDbut-1-Num($vlDbut= $vlFin))+Sous chaine($vtNouvValeur;$vlFin) ` Un caractre acceptable a t saisi : (Position (Frappe clavier;"abcdefghjiklmnopqrstuvwxyz -0123456789")>0) Si ($vlDbut#$vlFin) ` Un ou plusieurs caractres sont slectionns, la frappe clavier va les effacer $vtNouvValeur:=Sous chaine($vtNouvValeur;1;$vlDbut-1) +Frappe clavier+Sous chaine($vtNouvValeur;$vlFin) Sinon ` La slection de texte est le curseur Au cas ou ` Le curseur est actuellement au dbut du texte : ($vlDbut<=1) ` Insertion du caractre au dbut du texte $vtNouvValeur:=Frappe clavier+$vtNouvValeur ` Le curseur est actuellement la fin du texte : ($vlDbut>=Longueur($vtNouvValeur))

4e Dimension - Langage

841

` Ajouter le caractre la fin du texte $vtNouvValeur:=$vtNouvValeur+Frappe clavier Sinon ` Le curseur se trouve dans le texte, insrer le nouveau caractre $vtNouvValeur:=Sous chaine($vtNouvValeur;1;$vlDbut-1)+ Frappe clavier+Sous chaine($vtNouvValeur;$vlDbut) Fin de cas Fin de si ` Une touche flche a t enfonce ` Ne rien faire, mais valider la frappe clavier : (Code ascii(Frappe clavier)=Touche gauche ) : (Code ascii(Frappe clavier)=Touche droite ) : (Code ascii(Frappe clavier)=Touche haut ) : (Code ascii(Frappe clavier)=Touche bas ) ` Sinon ` Ne pas accepter des caractres autres que des lettres, chiffres, espaces et tirets FILTRER FRAPPE CLAVIER ("") Fin de cas ` Est-ce que la valeur est maintenant diffrente ? $0:=($vtNouvValeur#$2->) ` Retourner la valeur pour la gestion de la prochaine frappe clavier $2->:=$vtNouvValeur

Une fois que vous avez ajout cette mthode projet votre application, vous pouvez l'utiliser ainsi : ` Mthode objet de la zone saisissable MonObjet Au cas ou : (Evenement formulaire=Sur chargement) MonObjet:="" MonObjetCach:="" : (Evenement formulaire=Sur avant frappe clavier) Si (Grer frappe clavier (->MonObjet;->MonObjetCach)) ` Effectuer des actions appropries par rapport ` la valeur stocke dans MonObjetCach Fin de si Fin de cas

842

4e Dimension - Langage

Examinons par exemple le formulaire suivant :

Il est compos des objets suivants : une zone saisissable vaRecherche, une zone nonsaisissable vaMessage et une zone de dfilement taRecherche. Lorsque l'utilisateur saisit des caractres dans vaRecherche, la mthode objet effectue une recherche sur la table [Codes postaux] permettant d'afficher des villes amricaines en saisissant seulement les premiers caractres de leur nom. Voici la mthode objet de vaRecherche : ` Mthode objet de la zone saisissable vaRecherche Au cas ou : (Evenement formulaire=Sur chargement ) vaRecherche:="" vaRsultat:="" vaMessage:="Saisissez les premiers caractres de la ville que vous cherchez." EFFACER VARIABLE(taRecherche) : (Evenement formulaire=Sur avant frappe clavier ) Si (Grer frappe clavier (->vaRecherche;->vaRsultat)) Si (vaRsultat#"") CHERCHER([Codes postaux];[Codes postaux]Ville=vaRsultat+"@") SUPPRIMER MESSAGES VALEURS DISTINCTES([Codes postaux]Ville;taRecherche) LAISSER MESSAGES $vlRsultat:=Taille tableau(taRecherche) Au cas ou : ($vlRsultat=0) vaMessage:="Aucune ville trouve." : ($vlRsultat=1) vaMessage:="Une ville trouve." Sinon vaMessage:=Chaine($vlRsultat)+" villes trouves." Fin de cas

4e Dimension - Langage

843

Sinon SUPPRIMER LIGNES(taRecherche;1;Taille tableau(taRecherche)) vaMessage:="Saisissez les premires lettres de la ville que vous cherchez." Fin de si Fin de si Fin de cas Voici le formulaire en mode Utilisation :

A l'aide des possibilits de communication interprocess de 4e Dimension, vous pouvez construire une interface dans laquelle les recherches se construisent dans des palettes flottantes communiquant avec les process dans lesquels les enregistrements sont affichs ou modifis. Rfrence Evenement formulaire, FILTRER FRAPPE CLAVIER, Lire texte edite.

844

4e Dimension - Langage

FILTRER FRAPPE CLAVIER

Gestion de la saisie version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FILTRER FRAPPE CLAVIER (carFiltr) Paramtre carFiltr Type Alpha Description Caractre(s) de remplacement ou Chane vide pour annuler le filtrage clavier

Description FILTRER FRAPPE CLAVIER vous permet de remplacer le caractre saisi par l'utilisateur dans un champ ou une zone saisissable par le premier caractre de la chane carFiltr. Si vous passez une chane vide, le filtrage clavier en cours est annul. Vous appelez gnralement FILTRER FRAPPE CLAVIER dans une mthode formulaire ou objet lorsque vous grez l'vnement formulaire Sur avant frappe clavier. Pour dtecter les vnements de frappe clavier, utilisez la commande Evenement formulaire. Pour rcuprer les caractres saisis au clavier, utilisez la fonction Frappe clavier. IMPORTANT : Si vous voulez effectuer des oprations la vole en fonction de la valeur courante de la zone saisissable en cours de modification ainsi que du caractre saisir, rappelez-vous que le texte affich l'cran n'est pas encore la valeur du champ ou de la variable. La valeur saisie dans une variable ou un champ ne lui est affecte que lorsque la zone est valide (lorsque l'utilisateur appuie sur la touche Tabulation, clique sur un bouton, etc.). En consquence, pensez placer les valeurs saisies dans une variable temporaire et travailler avec celle-ci, puis assigner cette variable la zone de saisie (reportez-vous l'exemple ci-dessous). Vous pouvez galement utiliser la fonction Lire texte edite. Utilisez la commande FILTRER FRAPPE CLAVIER dans les cas suivants : Pour effectuer un filtrage personnalis des caractres, Pour crer un filtre de saisie non disponible en standard, Pour implmenter des zones de recherche ou de pr-saisie dynamiques. ATTENTION : si vous appelez la commande Frappe clavier aprs avoir appel FILTRER FRAPPE CLAVIER, c'est le caractre pass cette commande qui sera retourn et non le caractre rellement saisi.

4e Dimension - Langage

845

Exemples (1) Avec le code suivant : ` Mthode objet de la zone saisissable monObjet Au cas ou : (Evenement formulaire=Sur chargement ) monObjet:="" : (Evenement formulaire=Sur avant frappe clavier ) Si(Position(Frappe clavier;"0123456789")>0) FILTRER FRAPPE CLAVIER("*") Fin de si Fin de cas

... tous les chiffres saisis dans la zone monObjet seront transforms en astrisques. (2) Le code ci-dessous dfinit le comportement d'une zone de saisie de mot de passe, dans laquelle les caractres saisis sont remplacs l'cran par des caractres alatoires : ` Mthode objet de la zone saisissable vaMotsPasse Au cas ou : (Evenement formulaire=Sur chargement) vaMotsPasse:="" vaMotPasseActuel:="" : (Evenement formulaire=Sur avant frappe clavier) Grer frappe clavier (->vaMotsPasse;->vaMotPasseRel) Si (Position(Frappe clavier;Caractere(Touche Retour arrire)+ Caractere(Touche gauche )+Caractere(Touche droite )+ Caractere(Touche haut )+Caractere(Touche bas ))=0) FILTRER FRAPPE CLAVIER(Caractere(65+(Hasard%26))) Fin de si Fin de cas

Une fois la zone valide, vous rcuprez le mot de passe rellement saisi par l'utilisateur dans la variable vaMotPasseRel. La mthode Grer frappe clavier est liste dans l'exemple de la commande Frappe clavier. (3) Vous disposez dans votre application de diverses zones de texte dans lesquelles vous pouvez saisir quelques phrases. Votre application comporte galement une table de glossaire contenant les termes les plus frquemment utiliss dans votre base. Lors de l'dition de vos zones de texte, vous voulez pouvoir rapidement, partir du glossaire, retrouver et insrer des mots en fonction des caractres slectionns dans le texte. Pour cela, vous avez deux solutions : soit placer des boutons avec des touches associes qui vont excuter l'opration, soit intercepter les frappes clavier spciales pendant la saisie. L'exemple ci-dessous utilise la seconde solution, base sur la touche Aide.

846

4e Dimension - Langage

Comme dcrit ci-dessus, lorsque vous ditez une zone de texte, la valeur du champ ou de la variable de texte ne sera rellement modifie que lorsque que vous l'aurez valide. Pour retrouver et insrer rapidement des entres du glossaire dans une zone de texte alors qu'elle est en train d'tre modifie, vous devez donc crer une seconde zone "tampon" pour y placer les valeurs saisies. Vous pouvez effectuer cette opration l'aide de la mthode projet dcrite ci-dessous. Vous passez comme premiers paramtres des pointeurs vers la zone de saisie et vers la variable, puis la chane de caractre interdits comme troisime paramtre. Peu importe comment l'entre clavier sera traite, la mthode retourne la valeur saisie originale. Les caractres interdits sont les caractres que vous ne voulez pas insrer dans la zone saisissable et que vous voulez traiter en tant que caractres spciaux. ` Mthode projet Frappe clavier tampon ` Frappe clavier tampon ( Pointeur ; Pointeur ; Alpha ) -> Alpha ` Frappe clavier tampon ( -> zoneSource ; -> valeurCourante ; Filtre ) -> Ancien frappe clavier C_ALPHA(1;$0) C_POINTEUR($1;$2) C_TEXTE($vtNouvValeur) C_ALPHA(255;$3) ` Retourne la frappe clavier originale $0:=Frappe clavier ` Obtenir la slection de texte dans la zone saisissable TEXTE SELECTIONNE($1->;$vlDbut;$vlFin) ` Commencer travailler sur la valeur courante $vtNouvValeur:=$2-> ` En fonction de la touche ou du caractre tap(e), effectuer les actions appropries Au cas ou ` La touche Retour arrire a t enfonce : (Code ascii($0)=Touche Retour arrire ) ` Supprimer les caractres slectionns ou le caractre gauche du curseur $vtNouvValeur:=Supprimer texte ($vtNouvValeur;$vlDbut;$vlFin) ` Une touche "flche" a t appuye ` Ne faites rien sauf accepter la frappe clavier : (Code ascii($0)=Touche gauche ) : (Code ascii($0)=Touche droite ) : (Code ascii($0)=Touche haut ) : (Code ascii($0)=Touche bas )

4e Dimension - Langage

847

` Un caractre valide a t saisi : (Position($0;$3)=0) $vtNouvValeur:=Inserer texte ($vtNouvValeur;$vlDbut;$vlFin;$0) Sinon ` Le caractre n'est pas accept FILTRER FRAPPE CLAVIER("") Fin de cas ` Retourner la valeur pour la prochaine gestion de la frappe clavier $2->:=$vtNouvValeur

Cette mthode utilise les sous-mthodes suivantes : ` Mthode projet Supprimer texte ` Supprimer texte ( Alpha ; Long ; Long ) -> Alpha ` Supprimer texte ( -> Texte ; SelDbut ; SelFin ) -> Nouveau texte C_TEXTE($0;$1) C_ENTIER LONG($2;$3) $0:=Sous chaine($1;1;$2-1-Num($2=$3))+Sous chaine($1;$3) ` Mthode projet Inserer texte ` Inserer texte ( Alpha ; Long ; Long ; Alpha ) -> Alpha ` Inserer texte ( -> texteSource ; SelDbut ; SelFin ; Texte insrer ) -> Nouveau texte C_TEXTE($0;$1;$4) C_ENTIER LONG($2;$3) $0:=$1 Si ($2#$3) $0:=Sous chaine($0;1;$2-1)+$4+Sous chaine($0;$3) Sinon Au cas ou : ($2<=1) $0:=$4+$0 : ($2>Longueur($0)) $0:=$0+$4 Sinon $0:=Sous chaine($0;1;$2-1)+$4+Sous chaine($0;$2) Fin de cas Fin de si

848

4e Dimension - Langage

Une fois que vous avez ajout ces mthodes projet votre base, vous pouvez les utiliser de la manire suivante : ` Mthode objet de la zone saisissable vaDescription Au cas ou : (Evenement formulaire=Sur chargement ) vaDescription:="" vaDescriptionDouble:="" ` Etablir la liste des caractres interdits traiter comme des touches ` spciales (dans cet exemple, seule la touche Aide est filtre ) vaTouchesSpciales:=Caractere(Touche Aide) : (Evenement formulaire=Sur avant frappe clavier ) $vsKey:=Frappe clavier tampon (->vaDescription;->vaDescriptionDouble; vaTouchesSpciales) Au cas ou : (Code ascii($vsKey)=Touche Aide) ` Faire quelque chose lorsque la touche Aide est enfonce ` Dans cet exemple, une saisie de glossaire doit tre recherche et insre chercher_Glossaire (->vaDescription;->vaDescriptionDouble) Fin de cas Fin de cas La mthode projet chercher_Glossaire est liste ci-dessous (le point principal est l'utilisation de la variable tampon pour raffecter la zone saisissable modifier) : ` Mthode projet chercher_Glossaire ` chercher_Glossaire ( Pointeur ; Pointeur ) ` chercher_Glossaire ( -> zone saisissable ; ->variable double ) C_POINTEUR($1;$2) C_ENTIER LONG($vlDbut;$vlFin) ` Obtenir la slection de texte dans la zone saisissable TEXTE SELECTIONNE($1->;$vlDbut;$vlFin) ` Obtenir le texte slectionn ou le mot situ gauche du curseur $vtTexteSelectionne:=obtenirTexteSelectionne ($2->;$vlDbut;$vlFin) ` Y a-t-il quelque chose rechercher ? Si ($vtTexteSelectionne#"") ` Si la slection de texte tait le curseur, la slection dbute au mot situ aprs ` le curseur Si ($vlDbut=$vlFin) $vlDbut:=$vlDbut-Longueur($vtTexteSelectionne) Fin de si ` Chercher la premire entre du glossaire disponible CHERCHER([Glossaire];[Glossaire]Saisie=$vtTexteSelectionne+"@")

4e Dimension - Langage

849

` Existe-t-elle ? Si (Enregistrements trouves([Glossaire])>0) ` Si oui, l'insrer dans la zone tampon $2->:=Inserer texte ($2->;$vlDbut;$vlFin;[Glossaire]Saisie) ` Copier le tampon dans la zone saisissable $1->:=$2-> ` Fixer la slection aprs avoir insr l'entre du glossaire $vlFin:=$vlDbut+Longueur([Dictionnaire]Saisie) SELECTIONNER TEXTE(vsComments;$vlFin;$vlFin) Sinon ` Il n'y a pas d'entre qui correspond dans le glossaire BEEP Fin de si Sinon ` Il n'y a pas de texte slectionn BEEP Fin de si La mthode obtenirTexteSelectionne est la suivante : ` Mthode objet obtenirTexteSelectionne ` obtenirTexteSelectionne ( Alpha ; Entier long ; Entier long ) -> Alpha ` obtenirTexteSelectionne ( Texte ; SelDbut ; SelFin ) -> texte slectionn C_TEXTE($0;$1) C_ENTIER LONG($2;$3) Si ($2<$3) $0:=Sous chaine($1;$2;$3-$2) Sinon $0:="" $2:=$2-1 Repeter Si ($2>0) Si (Position($1[[$2]];" ,.!?:;()-_")=0) $0:=$1[[$2]]+$0 $2:=$2-1 Sinon $2:=0 Fin de si Fin de si Jusque ($2=0) Fin de si Rfrence Evenement formulaire, Frappe clavier, Lire texte edite.

850

4e Dimension - Langage

ALLER A CHAMP

Gestion de la saisie version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ALLER A CHAMP ({*; }objet) Paramtre * objet Type * Champ | Variable Description Si spcifi = objet est un nom dobjet (chane) Si omis = objet est un champ ou une variable Nom dobjet (si * spcifi) sinon Variable ou champ saisissable slectionner

Description La commande ALLER A CHAMP permet de slectionner l'objet saisissable objet (variable ou champ) en tant que zone active du formulaire. C'est l'quivalent d'un clic de l'utilisateur dans la zone ou de l'utilisation de la touche Tabulation pour slectionner le champ ou la variable. Si vous passez le paramtre optionnel *, vous indiquez que le second paramtre dsigne le nom d'un objet (une chane). Si vous ne passez pas le paramtre *, vous indiquez que le paramtre dsigne un champ ou une variable. Dans ce cas, vous ne passez pas une chane de caractres mais la rfrence du champ ou de la variable (champs ou variables texte uniquement). Pour plus d'informations sur les noms d'objets, reportez-vous la section Proprits des objets. Note : Cette commande fonctionne uniquement dans un contexte de saisie dans un formulaire. Elle ne fait rien lorsqu'elle est utilise avec des zones de saisie situes dans un sous-formulaire en mode liste. Exemples (1) Voici les deux modes d'utilisation de la commande ALLER A CHAMP :

ALLER A CHAMP ([Personnel]Nom) `Rfrence de champ ALLER A CHAMP (*;"ZonePrnoms") `Nom d'objet

(2) Reportez-vous l'exemple de la commande REFUSER. Rfrence REFUSER.

4e Dimension - Langage

851

REFUSER

Gestion de la saisie version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

REFUSER {(champ)} Paramtre champ Type Champ Description Champ dont la saisie doit tre refuse

Description REFUSER accepte deux syntaxes. Dans la premire syntaxe, REFUSER n'a pas de paramtre. Dans ce cas, la commande rejette la totalit de la saisie et force l'utilisateur rester dans le formulaire. La seconde syntaxe permet de ne refuser que champ et force l'utilisateur rester dans le champ. Note : Nous vous conseillons d'utiliser en priorit les outils intgrs de validation de saisie de 4D, avant de faire appel cette commande. La premire syntaxe de REFUSER est utilise pour empcher l'utilisateur de valider un enregistrement incomplet. Vous pouvez parvenir au mme rsultat sans utiliser REFUSER : associez la touche Entre un bouton n'effectuant "Pas d'action" et utilisez les commandes VALIDER et NE PAS VALIDER pour valider ou annuler l'enregistrement, une fois que les champs ont t correctement remplis. Il est recommand d'employer cette seconde technique plutt que d'utiliser la premire syntaxe de REFUSER. En gnral, vous employez la premire syntaxe de REFUSER pour empcher l'utilisateur de valider un enregistrement incomplet ou comportant des valeurs incorrectes. Si l'utilisateur tente de valider l'enregistrement, l'excution de REFUSER provoque l'annulation de cette commande et l'enregistrement reste affich dans le formulaire. L'utilisateur doit alors recommencer la saisie jusqu' ce que les valeurs soient considres comme correctes ou annuler l'enregistrement. Le meilleur emplacement pour la commande REFUSER, lorsque vous utilisez cette syntaxe, est la mthode objet d'un bouton de type Valider associ la touche de validation. De cette manire, la validation n'est possible que lorsque l'enregistrement est accept, et l'utilisateur ne peut pas "forcer" la validation en appuyant sur la touche Entre. La seconde syntaxe de REFUSER utilise le paramtre champ. Si elle est excute, le curseur reste dans la zone de saisie du champ. Cette syntaxe oblige l'utilisateur saisir une valeur correcte. Cette instruction doit tre appele juste aprs la modification du champ. Vous pouvez tester la modification d'un champ l'aide de la fonction Modifie.

852

4e Dimension - Langage

Vous pouvez galement placer la commande REFUSER dans la mthode objet de la zone de saisie. Lorsqu'elle est utilise avec des champs de sous-formulaires, cette commande ne fait rien. Vous devez placer cette syntaxe de REFUSER soit dans la mthode formulaire, soit dans une mthode objet du formulaire en train d'tre modifi. Si vous utilisez REFUSER avec le formulaire "pleine page" d'un sous-formulaire, placez-la dans la mthode formulaire ou une mthode objet du formulaire "pleine page". Vous pouvez utiliser la commande SELECTIONNER TEXTE pour slectionner, l'intrieur du champ, les valeurs qui ont t refuses. Exemples (1) L'exemple suivant illustre la premire syntaxe de REFUSER, place dans la mthode objet d'un bouton Valider. La touche Entre a t dfinie comme quivalent clavier pour ce bouton. Cela signifie que mme si l'utilisateur appuie sur cette touche pour valider l'enregistrement, la mthode objet du bouton sera excute. L'enregistrement est une transaction bancaire. Si la transaction est un chque, un numro de chque doit tre saisi. S'il n'y a pas de numro, la validation est refuse : Au cas ou ` Si c'est un chque sans numro... : (([Opration]Trans = "Chque") & ([Opration]Numro = "")) ALERTE ("Veuillez saisir le numro du chque.") ` Alerter l'utilisateur REFUSER ` Refuser la saisie ` Placer le curseur dans le champ "numro de chque" ALLER A CHAMP ([Opration]Numro) Fin de cas

(2) L'exemple suivant est une partie de la mthode objet d'un champ [Employs]Salaire. La mthode objet teste si la valeur de ce champ est infrieure 60 000 F et la refuse si c'est le cas. Vous pourriez effectuer le mme contrle en spcifiant une valeur minimum pour le champ, dans l'diteur de formulaires du mode Structure : Si ([Employs]Salaire<60000) ALERTE ("Le salaire annuel doit tre suprieur 60 000 F.") REFUSER ([Employs]Salaire) Fin de si

Rfrence ALLER A CHAMP, NE PAS VALIDER, VALIDER.

4e Dimension - Langage

853

EDITER ELEMENT

Gestion de la saisie version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

EDITER ELEMENT ({*; }objet{; lment}) Paramtre * objet lment Type * Objet de formulaire Numrique Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est un champ ou une variable Nom dobjet (si * spcifi) ou Champ ou variable (si * omis) Numro dlment

Description La commande EDITER ELEMENT permet de passer en mode dition llment courant ou llment de numro lment du tableau ou de la liste dsign(e) par le paramtre objet. Le mode dition signifie que llment est slectionn et prt tre modifi : la saisie dun caractre remplacera intgralement le contenu de llment. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (dans ce cas, passez une chane dans objet). Si vous ne passez pas le paramtre, vous indiquez que le paramtre objet est un champ ou une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de champ ou variable. Cette commande sapplique aux objets saisissables suivants : Listes hirarchiques List box Sous-formulaires (dans ce cas, seul un nom dobjet le sous-formulaire peut tre pass dans objet), Formulaires liste affichs via la commande MODIFIER SELECTION ou VISUALISER SELECTION. Si la commande est utilise avec un objet saisissable qui nest pas une liste, elle quivaut la commande ALLER A CHAMP. La commande ne fait rien si la liste ou le tableau dsign(e) est vide ou invisible. Si la liste ou le tableau nest pas saisissable, la commande slectionne (sans passer en dition) llment spcifi. Le paramtre facultatif lment vous permet de dsigner la position de llment (liste hirarchique) ou le numro de la ligne (list box, formulaire liste et sous-formulaire en mode multi-slection) passer en dition. Si vous ne passez pas ce paramtre, la commande sapplique llment courant de l'objet. Sil ny a pas dlment courant, le premier lment de l'objet passe en dition.

854

4e Dimension - Langage

Notes : Dans le cadre des listes hirarchiques, la commande EDITER ELEMENT provoque automatiquement un redessinement de la liste. Par consquent, vous ne devez PAS appeler la commande REDESSINER LISTE lorsque la commande EDITER ELEMENT est utilise. Dans le cadre des sous-formulaires et des formulaires liste, la commande passe en dition le premier champ de la ligne spcifie, dans lordre de saisie. Dans le cadre des sous-formulaires en mode slection unique, la commande passe en dition la ligne courante, quelle que soit la valeur du paramtre lment. Exemples (1) Cette commande peut tre utile notamment lors de la cration dun nouvel lment de liste hirarchique. Au moment de lappel de la commande, le dernier lment ajout ou insr dans la liste devient automatiquement ditable, sans que lutilisateur nait effectuer daction spcifique. Le code suivant pourrait tre la mthode dun bouton permettant dinsrer un nouvel lment dans une liste existante. Le libell Nouvel_lment propos par dfaut est automatiquement plac en mode dition : vlUniqueRef:=vlUniqueRef+1 INSERER ELEMENT(hList;*;"Nouvel_lment";vlUniqueRef) EDITER ELEMENT(*;"MaListe")

4e Dimension - Langage

855

(2) Soient deux colonnes dune list box dont les noms de variables associes sont respectivement Tableau1 et Tableau2. Lexemple suivant insre un nouvel lment dans les deux tableaux et passe le nouvel lment du tableau 2 en mode dition : $vlNumLigne:=Taille tableau(Tableau1)+1 INSERER LIGNE LISTBOX(*;"MaListBox";$vlNumLigne) Tableau1{$vlNumLigne}:="Nouvelle valeur 1" Tableau2{$vlNumLigne}:="Nouvelle valeur 2" EDITER ELEMENT(Tableau2; $vlNumLigne)

(3) Lexemple suivant permet de passer en mode dition le premier champ du dernier sous-enregistrement de la sous-slection :

ALLER A DERNIER SOUS ENREGISTREMENT([Enfants]) EDITER ELEMENT(*;"Sousform")

Rfrence ALLER A CHAMP, CHANGER ELEMENT, INSERER ELEMENT.

856

4e Dimension - Langage

28 ________________________ Glisser-Dposer

4e Dimension - Langage

857

858

4e Dimension - Langage

Prsentation du Glisser-Dposer

Glisser-Dposer version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension dispose de fonctions intgres vous permettant de grer le glisser-dposer ("drag and drop") parmi les objets de vos formulaires. Vous pouvez glisser-dposer un objet sur un autre objet situ dans la mme fentre ou dans une autre fentre. Autrement dit, vous pouvez effectuer des glisser-dposer l'intrieur d'un mme process ou entre diffrents process. 4e Dimension ne comporte pas de fonctions intgres permettant le glisser-dposer d'objets entre 4D et le bureau ou une autre application. Cependant, cette fonctionnalit est disponible via des plug-ins dvelopps par les Partenaires 4D. Note : Pour ne pas alourdir cette introduction, nous admettrons ici que le glisser-dposer permet de "transporter" des donnes d'un point un autre. Nous verrons plus loin qu'un glisser-dposer peut aussi tre la mtaphore (c'est--dire la reprsentation au niveau de l'interface utilisateur) de toute opration, quelle qu'elle soit. Proprits d'objets "Glissable" et "Dposable"
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Si vous souhaitez qu'un objet soit glissable, c'est--dire que vous puissiez le faire glisser et le dposer sur un autre objet, vous devez slectionner la proprit "Glissable" pour cet objet dans la palette des proprits d'objets. L'objet que vous faites glisser est appel objet source de l'opration de glisser-dposer. Si vous souhaitez qu'un objet soit dposable, c'est--dire que l'objet puisse tre la destination d'une opration de glisser-dposer, vous devez slectionner la proprit "Dposable" pour cet objet dans la palette des proprits d'objets. L'objet qui reoit les donnes est appel objet de destination de l'opration de glisser-dposer. Par dfaut, les objets nouvellement crs ne possdent aucune de ces proprits. Il est de votre ressort de les slectionner explicitement. Tous les objets situs dans un formulaire entre ou dans une bote de dialogue peuvent tre dfinis comme glissables et dposables. Les lments individuels d'un tableau (par exemple une zone de dfilement) ou les lments d'une liste hirarchique peuvent tre glisss et dposs. Inversement, vous pouvez faire glisser et dposer tout objet sur un lment individuel d'un tableau ou d'une liste hirarchique. Il n'est toutefois pas possible de faire glisser et de dposer des objets depuis la zone de corps d'un formulaire sortie.

4e Dimension - Langage

859

Afin de vous laisser "carte blanche" lors de la construction d'une interface utilisateur exploitant le glisser-dposer, 4D vous permet d'utiliser tout type d'objet actif (champ ou variable) en tant qu'objet source ou destination. Par exemple, si vous le souhaitez, vous pouvez glisser-dposer des boutons. Note : Pour faire glisser un bouton ayant la proprit "glissable", vous devez au pralable appuyer sur la touche Alt (Windows) ou Option (MacOS). Seuls les boutons de type 3D peuvent tre "glisss" directement. Notez qu'un objet "glissable" et "dposable" peut tre dpos sur lui-mme ( moins que vous n'interdisiez cette opration, reportez-vous aux paragraphes suivants). Voici la Liste des proprits, dans laquelle les proprits "Glissable" et "Dposable" ont t dfinies pour l'objet slectionn :

860

4e Dimension - Langage

Ces proprits peuvent galement tre dfinies dans la palette Proprits de l'objet :

Grer une interface utilisateur exploitant le glisser-dposer


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension gre l'aspect "interface utilisateur" du glisser-dposer. Si vous cliquez sur un objet glissable et maintenez le bouton de la souris enfonc puis dplacez la souris, 4D reprsente l'cran le dplacement de l'objet par un cadre pointill suivant les mouvements de la souris. Dans l'cran ci-dessous, un lment de liste hirarchique est sur le point d'tre dpos dans un champ de type Texte :

4e Dimension - Langage

861

Notez le cadre gris actif qui entoure alors le champ de texte. Cette activation indique l'objet de destination (ici le champ de texte). Si vous relchez le bouton de la souris cet instant, 4D comprend que vous voulez dposer l'objet que vous avez fait glisser sur l'objet activ. La reprsentation l'cran de l'activation d'une zone de dposer peut tre paramtre dans la bote de dialogue des Prfrences de la base :

Par dfaut, le type d'activation est "Cadre". Cela correspond l'encadrement de la zone tel que prsent dans l'cran prcdent : un rectangle gris invers apparat autour de l'objet. Si vous utilisez des couleurs d'arrire-plan ou de contours d'objets s'accommodant mal de l'activation par encadrement, vous pouvez plutt slectionner le type d'activation "Motif".

862

4e Dimension - Langage

Dans ce cas, l'objet de destination est rempli par un motif de lignes diagonales, comme illustr ci-dessous :

Ici, un lment d'un tableau est dpos l'intrieur du mme tableau :

Vous pouvez, si vous le souhaitez, dfinir simultanment les deux types d'activation. Si vous n'en slectionnez aucun, l'option par dfaut sera "Cadre". Note : L'activation de l'objet de destination suit chaque lment lorsque l'objet de destination est un tableau (zone de dfilement) ou une liste hirarchique.

4e Dimension - Langage

863

Grer le glisser-dposer par programmation


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension gre l'aspect "interface utilisateur" du glisser-dposer et il vous revient d'en traiter l'aspect "programmation". Pour cela, 4D vous fournit deux vnements formulaires : Sur glisser et Sur dposer. Ces deux vnements sont envoys l'objet de destination. Lors d'une opration de glisser-dposer, la mthode de l'objet source n'est sollicite en aucun cas. Pour que l'objet de destination puisse traiter ces deux vnements, il doivent avoir t slectionns pour l'objet dans la Liste des proprits ou dans la palette Proprits de l'objet, comme illustr ci-desous : Liste des proprits :

864

4e Dimension - Langage

Palette Proprits de l'objet :

Sur glisser L'vnement Sur glisser est envoy de manire rpte l'objet de destination lorsque le pointeur de la souris est plac sur l'objet. Gnralement, en rponse cet vnement, vous effectuez les actions suivantes : Vous appelez la commande PROPRIETES GLISSER DEPOSER qui vous renseigne sur l'objet source. En fonction de la nature et du type de l'objet de destination (celui duquel la mthode est en cours d'excution) et de l'objet source, vous acceptez ou refusez le glisser. Pour signaler que le glisser est accept, la mthode de l'objet de destination doit retourner 0 (zro), vous excutez donc $0:=0. Pour signaler que le glisser est refus, la mthode de l'objet de destination doit retourner -1 (moins un), vous excutez donc $0:=-1. Pendant un vnement Sur glisser, 4D traite la mthode de l'objet comme une fonction. Si aucun rsultat n'est retourn, 4D considre que le glisser est accept. Si vous acceptez le glisser, l'objet de destination est activ. Si vous le refusez, l'objet de destination reste inactiv. Accepter le glisser ne signifie pas que les donnes glisses vont tre insres dans l'objet de destination. Cela signifie uniquement que l'objet de destination, si le bouton de la souris tait relch cet instant, accepterait les donnes. Si vous ne traitez pas l'vnement Sur glisser pour un objet dont la proprit "Dposable" a t slectionne, l'objet sera activ pour tous les glisser, quelle que soit la nature et le type des donnes glisses.

4e Dimension - Langage

865

La traitement de l'vnement Sur glisser vous permet de contrler la premire phase d'une opration de glisser-dposer : non seulement vous pouvez tester si le type des donnes glisses est compatible avec l'objet de destination et donc accepter ou refuser le glisser mais galement, vous en informez l'utilisateur, car 4D active ou non l'objet de destination en fonction de votre dcision. Le code traitant un vnement Sur glisser doit tre court et s'excuter rapidement car cet vnement est envoy de manire rpte l'objet de destination courant, en fonction des mouvements de la souris. ATTENTION : Si le glisser-dposer est un glisser-dposer interprocess, ce qui signifie que l'objet source est situ dans un process (fentre) diffrent de celui de l'objet de destination, la mthode de l'objet de destination lors de l'vnement Sur glisser est excute dans le contexte du process source (le process de l'objet source) et non dans le process de l'objet de destination. C'est le seul cas o un tel type d'excution a lieu (les avantages que procure ce fonctionnement sont dcrits la fin de cette section). Sur dposer L'vnement Sur dposer est envoy (une seule fois) l'objet de destination lorsque le bouton de la souris est relch alors que le pointeur se trouvait au-dessus de l'objet. Cet vnement est la seconde phase d'un glisser-dposer, dans laquelle vous effectuez les vritables oprations rpondant l'action de l'utilisateur. Cet vnement n'est pas envoy l'objet si le glisser n'a pas t accept dans le ou les vnement(s) Sur glisser. Si vous traitez l'vnement Sur glisser pour un objet et refusez le glisser, l'vnement Sur dposer ne se dclenche pas. Ainsi, si pendant l'vnement Sur glisser vous avez test la compatibilit entre le type des donnes de l'objet source et de destination et accept le glisser, vous n'avez pas besoin de tester de nouveau les donnes dans l'vnement Sur dposer : vous savez dj qu'elles sont compatibles. L'aspect le plus intressant de l'implmentation du glisser-dposer dans 4D est que le programme vous permet de faire ce que vous voulez. Par exemple : Si un lment de liste hirarchique est dpos sur un champ de type Texte, vous pouvez dcider d'insrer le texte de l'lment de liste au dbut, au milieu ou la fin du champ de texte. Votre formulaire contient un bouton image deux tats reprsentant une corbeille vide et une corbeille pleine. Le glisser-dposer d'un objet sur ce bouton pourrait provoquer, du point de vue de l'interface utilisateur : supprimer l'objet qui a t gliss-dpos dans la corbeille. Ici, le glisser-dposer ne transporte pas des donnes d'un point un autre, mais plutt il dclenche une action.

866

4e Dimension - Langage

Glisser un lment de tableau depuis une palette flottante vers un objet dans un formulaire pourrait signifier afficher dans cette fentre l'enregistrement du client dont le nom a t gliss-dpos depuis la fentre flottante listant les noms de tous les clients stocks dans la base. Etc. La gestion du glisser-dposer de 4D est une bote outils vous permettant d'implmenter toutes les mtaphores d'interface utilisateur auxquelles vous pouvez penser. Les commandes du thme Glisser-Dposer
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La commande PROPRIETES GLISSER DEPOSER retourne : un pointeur vers l'objet gliss (champ ou variable), le numro de l'lment de tableau ou de liste hirarchique le cas chant, le numro du process source. La commande Position deposer retourne le numro ou la position de l'lment cible si l'objet de destination est un tableau (c'est--dire une zone de dfilement) ou une liste hirarchique. Les commandes telles que RESOUDRE POINTEUR et Type sont utiles pour tester la nature et le type de l'objet source. Lorsque l'opration de glisser-dposer est destine copier les donnes glisses : Si le glisser-dposer est effectu l'intrieur du mme process, utilisez ces commandes pour effectuer les actions correspondantes (c'est--dire simplement assigner l'objet source l'objet de destination). Si le glisser-dposer est interprocess, soyez vigilant lorsque vous accdez aux donnes glisses : vous devez rcuprer l'instance des donnes situe dans le process source. Si les donnes glisses proviennent d'une variable, utilisez la commande LIRE VARIABLE PROCESS pour obtenir la valeur correcte. Si les donnes glisses proviennent d'un champ, il est probable que l'enregistrement courant de la table n'est pas le mme d'un process l'autre, vous devez donc accder au bon enregistrement. Dans ce dernier cas, plusieurs solutions sont envisageables : Puisque l'vnement Sur glisser de la mthode de l'objet de destination est excut dans le contexte du process source, vous pouvez copier, au moment de son excution, les donnes du champ ou le numro de l'enregistrement dans une variable interprocess, que vous rutiliserez lors de l'vnement Sur dposer. Pendant l'vnement Sur dposer, vous pouvez tablir une communication interprocess avec le process source dans le but de rcuprer les donnes requises.

4e Dimension - Langage

867

Lorsque le glisser-dposer n'est pas destin dplacer des donnes mais plutt crer des mtaphores d'interface pour des oprations particulires, vous pouvez virtuellement raliser tout ce que vous voulez. Rfrence Evenement formulaire, LIRE VARIABLE PROCESS, Liste existante, Position deposer, PROPRIETES GLISSER DEPOSER, RESOUDRE POINTEUR, Type.

868

4e Dimension - Langage

Position deposer

Glisser-Dposer version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Position deposer Numrique Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Numrique Numro (tableau) ou position (liste) de l'lment de destination ou -1 si le dposer a lieu aprs le dernier lment de tableau ou de liste

Description Position deposer retourne le numro de l'lment de tableau ou la position de l'lment de liste hirarchique sur lequel un objet a t (gliss et) dpos. Gnralement, vous utiliserez Position deposer pendant le traitement d'un vnement glisser-dposer qui s'est produit dans un tableau ou une liste hirarchique. Si l'objet de destination est un tableau, la fonction retourne un numro d'lment. Si l'objet de destination est une liste hirarchique, la fonction retourne une position d'lment. Dans les deux cas, la fonction retourne -1 si l'objet source a t dpos aprs le dernier lment du tableau ou de la liste. Si vous appelez Position deposer pendant le traitement d'un vnement qui n'est pas de type glisser-dposer dans un tableau ou dans une liste, la fonction retourne galement -1. Rappel : Pour qu'un objet de formulaire accepte des donnes dposes, la proprit Dposable doit lui avoir t assigne. De plus, sa mthode objet doit tre appele par l'vnement Sur glisser et/ou Sur dposer si vous voulez pouvoir grer ce type d'vnement. Exemples Reportez-vous l'exemple de la commande PROPRIETES GLISSER DEPOSER. Rfrence Prsentation du Glisser-Dposer, PROPRIETES GLISSER DEPOSER.

4e Dimension - Langage

869

PROPRIETES GLISSER DEPOSER

Glisser-Dposer version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

PROPRIETES GLISSER DEPOSER (srcObjet; srcElment; srcProcess) Paramtre srcObjet srcElment Type Pointeur Numrique Description Pointeur vers l'objet source du glisser-dposer Numro de l'lment de tableau gliss ou Elment de la liste hirarchique gliss ou -1 si l'objet gliss n'est pas un lment de tableau ni de liste Numro du process source

srcProcess

Numrique

Description La commande PROPRIETES GLISSER DEPOSER vous permet de rcuprer des informations sur l'objet source lorsque l'vnement Sur glisser ou Sur dposer est dclench pour un objet. Gnralement, la commande PROPRIETES GLISSER DEPOSER se place dans la mthode objet (ou une des sous-mthodes qu'elle appelle) de l'objet pour lequel l'vnement Sur glisser ou Sur dposer se produit. Rappel : Des donnes peuvent tre dposes sur un objet de formulaire si la proprit Dposable lui a t assigne. De plus, la mthode qui lui est associe doit tre appele par l'vnement Sur dposer et/ou Sur glisser si vous voulez traiter ce type d'vnement. Aprs l'appel de cette commande : Le paramtre srcObjet est un pointeur vers l'objet source, c'est--dire l'objet qui a t gliss et dpos. Notez que cet objet peut tre ou non identique l'objet de destination, autrement dit l'objet pour lequel l'vnement Sur dposer ou Sur glisser a t dclench. Le glisser-dposer de valeurs entre des objets de mme type est utile pour les tableaux et les listes hirarchiques : cela vous fournit un moyen simple de permettre l'utilisateur de trier manuellement un tableau ou une numration. Si les donnes glisses-dposes sont un lment de tableau (l'objet source tant un tableau), le paramtre srcElment est gal au numro de cet lment. Si les donnes glisses-dposes sont un lment de liste hirarchique, le paramtre srcElment retourne la position de cet lment. Sinon, si l'objet source n'est ni un tableau ni une liste hirarchique, srcElment est gal -1.

870

4e Dimension - Langage

Des oprations de glisser-dposer peuvent tre effectues entre diffrents process. Le paramtre srcProcess est gal au numro du process auquel appartient l'objet source. Il est important de tester la valeur de ce paramtre. En effet, vous pouvez traiter un glisserdposer process en copiant simplement les donnes source dans l'objet de destination. En revanche, lorsque vous traitez un glisser-dposer interprocess, vous devez utiliser la commande LIRE VARIABLE PROCESS pour rcuprer les donnes source partir de l'instance de l'objet du process source. Si l'objet source est un champ, vous devez rcuprer sa valeur dans le process source via les outils de communication interprocess ou traiter ce cas particulier pendant que vous rpondez l'vnement Sur glisser (reportez-vous aux paragraphes ci-dessous). Notez cependant que gnralement, le glisser-dposer dans une interface utilisateur s'effectue partir de variables (tableaux et liste hirarchiques) vers des zones de saisie de donnes (champs ou variables). Si vous appelez PROPRIETES GLISSER DEPOSER alors qu'aucun vnement glisser-dposer ne s'est produit, srcObjet retourne un pointeur NIL, srcElment retourne -1 et srcProcess retourne 0. Astuce : 4e Dimension gre pour vous l'aspect graphique du glisser-dposer. Mais c'est vous de traiter l'vnement de manire approprie. Dans les exemples ci-dessous, le traitement consiste copier les donnes qui ont t glisses. Mais vous pouvez galement implmenter des interfaces plus sophistiques dans lesquelles, par exemple, le glisserdposer d'un lment de tableau depuis une palette flottante provoque le remplissage de la fentre de destination (la fentre dans laquelle se trouve l'objet de destination) avec des donnes structures (comme plusieurs champs provenant d'un enregistrement dsign par l'lment de tableau source). Vous pouvez appeler la commande PROPRIETES GLISSER DEPOSER lors de l'vnement formulaire Sur glisser afin de dcider si l'objet de destination doit ou non accepter l'opration, en fonction du type et/ou de la nature de l'objet source (ou pour toute autre raison). Si vous acceptez le glisser-dposer, la mthode de l'objet doit retourner $0:=0. Si vous n'acceptez pas l'opration, la mthode de l'objet doit retourner $0:=-1. L'acceptation ou le refus d'un glisser-dposer est visible l'cran : l'objet sera ou ne sera pas slectionnable (par exemple encadr) en tant que destination du glisser-dposer. Astuce : Pendant l'vnement Sur glisser, la mthode de l'objet de destination est exceptionnellement excute dans le contexte du process de l'objet source. Si le glisserdposer est interprocess et si l'objet source est un champ, vous pouvez profiter de l'occasion pour copier les donnes source dans une variable interprocess. Ainsi, vous n'aurez pas besoin par la suite, pendant l'vnement Sur dposer, d'ouvrir une communication interprocess avec le process source pour rcuprer la valeur du champ gliss. Si l'objet source du glisser-dposer interprocess est une variable, vous pouvez utiliser la commande LIRE VARIABLE PROCESS pendant l'vnement Sur dposer.

4e Dimension - Langage

871

Exemples (1) Vous disposez, dans plusieurs formulaires de votre base, de zones de dfilement. Vous voulez que l'utilisateur puisse rordonner manuellement les lments des zones par simple glisser-dposer l'intrieur de chaque zone. Plutt que d'crire du code spcifique pour chaque cas, vous voulez utiliser une mthode projet gnrique qui traite toutes les zones de dfilement. Pour cela, vous pouvez crire : ` Mthode projet de traitement de glisser-dposer interne dans un tableau ` Traitement de glisser-dposer interne dans un tableau ( Pointeur ) -> Boolen ` Traitement de glisser-dposer interne dans un tableau ( -> Tableau ) -> Est un glisserdposer interne dans un tableau Au cas ou : (Evenement formulaire=Sur glisser) PROPRIETES GLISSER DEPOSER ($vpSrcObj;$vlSrcElem;$vlPID) Si ($vpSrcObj=$1) `Accepter le glisser-dposer s'il est interne au tableau $0:=0 Sinon $0:=-1 Fin de si : (Evenement formulaire=Sur dposer) ` Rcuprer les informations sur l'objet source du glisser-dposer PROPRIETES GLISSER DEPOSER ($vpSrcObj;$vlSrcElem;$vlPID) ` Rcuprer le numro de l'lment de destination $vlDstElem := Position deposer ` Si l'lment n'a pas t gliss-dpos sur lui-mme Si ($vlDstElem # $vlSrcElem) ` Stocker l'lment gliss dans l'lment 0 du tableau $1->{0}:=$1->{$vlSrcElem} ` Effacer l'lment gliss SUPPRIMER LIGNES ($1->;$vlSrcElem) ` Si l'lment de destination est au-del de l'lment gliss Si ($vlDstElem>$vlSrcElem) ` Dcrmenter le numro de l'lment de destination $vlDstElem:=$vlDstElem-1 Fin de si ` Si le glisser-dposer s'est produit au-del du dernier lment Si ($vlDstElem=-1) ` Dfinir le numro de l'lment de destination comme un nouvel ` lment ajout la fin du tableau $vlDstElem:=Taille tableau ($1->)+1 Fin de si

872

4e Dimension - Langage

` Insrer ce nouvel lment INSERER LIGNES ($1->;$vlDstElem) ` Fixer sa valeur, pralablement stocke dans l'lment zro du tableau $1->{$vlDstElem}:=$1->{0} ` L'lment devient le nouvel lment slectionn du tableau $1->:=$vlDstElem Fin de si Fin de cas Une fois que vous avez crit cette mthode projet, vous pouvez l'utiliser ainsi : ` Mthode objet Zone de dfilement unTableau Au cas ou `... : (Evenement formulaire=Sur glisser ) $0:=Traitement de glisser-dposer interne dans un tableau (Self) : (Evenement formulaire=Sur dposer ) Traitement de glisser-dposer interne dans un tableau (Self)) `... Fin de cas (2) Vous disposez, dans plusieurs formulaires de votre base, de zones de texte saisissables. Vous voulez que l'utilisateur puisse y saisir des donnes par glisser-dposer partir de sources multiples. Plutt que d'crire du code spcifique pour chaque cas, vous voulez utiliser une mthode projet gnrique qui traite toutes les zones de texte. Pour cela, crivez la mthode suivante : ` Mthode projet Traitement du dposer dans variable Texte ` Traitement du dposer dans variable Texte ( Pointeur ) ` Traitement du dposer dans variable Texte ( -> variable texte ou chane ) Au cas ou ` Utilisation de cet vnement pour accepter ou refuser le glisser-dposer : (Evenement formulaire=Sur glisser) ` Initialiser $0 pour le refus $0:=-1 ` Rcuprer les informations sur l'objet source du glisser-dposer PROPRIETES GLISSER DEPOSER($vpSrcObj;$vlSrcElem;$vlPID) ` Dans cet exemple, nous refusons le glisser-dposer d'un objet sur lui-mme Si ($vpSrcObj#$1) ` Rcuprer le type des donnes glisses $vlSrcType:=Type($vpSrcObj->)

4e Dimension - Langage

873

Au cas ou : ($vlSrcType=Est un champ alpha) ` OK pour les champs alphanumriques $0:=0 ` Copie immdiate de la valeur dans une variable interprocess vtDonnesGlisses:=$vpSrcObj-> : ($vlSrcType=Est un texte) ` OK pour les champs ou variables texte $0:=0 RESOUDRE POINTEUR($vpSrcObj;$vsVarName;$vlTableNum; $vlFieldNum) ` Si c'est un champ Si (($vlTableNum>0) & ($vlFieldNum>0)) ` Copie immdiate de la valeur dans une variable interprocess vtDonnesGlisses:=$vpSrcObj-> Fin de si : ($vlSrcType=Est une variable chane) ` OK pour les variables chane $0:=0 : (($vlSrcType=Est un tableau chane) | ($vlSrcType=Est un tableau texte)) ` OK pour les tableaux chane et texte $0:=0 : (($vlSrcType=Est un entier long) | ($vlSrcType=Est un numrique)) Si (Liste existante($vpSrcObj->)) ` OK pour les liste hirarchiques $0:=0 Fin de si Fin de cas Fin de si ` Utilisation de cet vnement pour effectuer rellement l'action de glisserdposer : (Evenement formulaire=Sur dposer) $vtDonnesGlisses:="" ` Rcuprer les informations sur l'objet source du glisser-dposer PROPRIETES GLISSER DEPOSER($vpSrcObj;$vlSrcElem;$vlPID) RESOUDRE POINTEUR($vpSrcObj;$vsVarName;$vlTableNum;$vlFieldNum) `Si c'est un champ Si (($vlTableNum>0) & ($vlFieldNum>0)) ` Rcuprons la variable interprocess cre lors du Sur glisser $vtDonnesGlisses:=vtDonnesGlisses Sinon ` Rcuprer le type des donnes glisses $vlSrcType:=Type($vpSrcObj->)

874

4e Dimension - Langage

Au cas ou ` Si c'est un tableau : (( $vlSrcType=Tableau chane) | ($vlSrcType=Tableau texte)) Si ($vlPID#Numero du process courant) ` Lire l'lment depuis l'instance de la variable dans le process source LIRE VARIABLE PROCESS ($vlPID;$vpSrcObj->{$vlSrcElem}; $vtDraggedData) Sinon ` Glisser-dposer depuis le mme process, copions juste la valeur $vtDraggedData:=$vpSrcObj->{$vlSrcElem} Fin de si ` Si c'est une liste : (($vlSrcType=Est un numrique ) | ($vlSrcType=Est un entier long )) ` Si c'est une liste en provenance d'un autre process Si ($vlPID#Numero du process courant) `Rcuprer la rfrence de la liste dans l'autre process LIRE VARIABLE PROCESS ($vlPID;$vpSrcObj->;$vlList) Sinon $vlList:=$vpSrcObj-> Fin de si ` Si la liste existe Si (Liste existante($vpSrcObj->)) `Rcuprer le texte de l'lment dont on a obtenu la position INFORMATION ELEMENT($vlList;$vlSrcElem;$vlItemRef; $vsItemText) $vtDraggedData:=$vsItemText Fin de si Sinon ` C'est une variable chane ou texte Si ($vlPID#Numero du process courant) LIRE VARIABLE PROCESS ($vlPID;$vpSrcObj->;$vtDraggedData) Sinon $vtDraggedData:=$vpSrcObj-> Fin de si Fin de cas Fin de si

4e Dimension - Langage

875

` S'il y a effectivement quelque chose dposer (l'objet source pourrait tre vide) Si ($vtDraggedData # "") ` Vrifions que la longueur de la variable texte ne dpasse pas 32 000 caractres Si ((Longueur($1->)+Longueur($vtDraggedData))<=32000) $1->:=$1->+$vtDraggedData Sinon BEEP ALERTE("Le glisser-dposer ne peut tre effectu car il y aurait trop de texte.") Fin de si Fin de si Fin de cas Une fois que vous avez crit cette mthode projet, vous pouvez l'utiliser ainsi : ` Mthode objet du champ de texte [uneTable]unTexte Au cas ou ` ... : (Evenement formulaire=Sur glisser ) $0:=Traitement du dposer dans variable texte (Self) : (Evenement formulaire=Sur dposer ) Traitement du dposer dans variable texte (Self) ` ... Fin de cas Rfrence Evenement formulaire, LIRE VARIABLE PROCESS, Liste existante, Position deposer, Prsentation du Glisser-Dposer, RESOUDRE POINTEUR.

876

4e Dimension - Langage

29 ________________________ Graphes

4e Dimension - Langage

877

878

4e Dimension - Langage

GRAPHE

Graphes version 6.0 (Modifie)

Notes version 6 : A partir de la version 6 de 4e Dimension, les graphes sont raliss l'aide du plug-in 4D Chart, intgr 4e Dimension. Les commandes du thme Graphe de la version prcdente de 4D sont dsormais rediriges de manire transparente vers 4D Chart. Si vous souhaitez personnaliser une Zone de graphe place dans un formulaire avec les commandes de 4D Chart, utilisez le paramtre graphZone dcrit dans cette commande comme rfrence de zone externe pour les commandes de 4D Chart. Pour plus d'informations sur les commandes de 4D Chart, reportez-vous au manuel Langage de 4D Chart. La commande GRAPHE fonctionne avec une Zone de graphe cre dans un formulaire 4D. Elle doit imprativement tre place dans la mthode formulaire ou dans une mthode objet appartenant au formulaire, ou encore dans une mthode projet appele par l'une des deux prcdentes.
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

GRAPHE (graphZone; graphNum; xCatgories; zValeurs{; zValeurs2; ...; zValeursN}) Paramtre graphZone graphNum xCatgories zValeurs Type Variable Numrique Tableau | Sous-champ Tableau | Sous-champ Description Zone de graphe dans le formulaire Numro de type de graphe Catgories sur l'axe des x Valeurs reprsenter graphiquement (jusqu' 8 valeurs)

Description La commande GRAPHE cre un graphe dans une zone de graphe place dans un formulaire. Les valeurs reprsenter peuvent provenir soit de tableaux soit de souschamps. Le paramtre graphZone est le nom de la zone de graphe qui affiche le graphe. Les zones de graphe sont cres en mode Structure, dans l'diteur de formulaires. Le nom du graphe est celui de la variable de type Zone de graphe. Pour plus d'informations sur la cration de zones de graphe dans les formulaires, reportez-vous au manuel Mode Structure de 4e Dimension. Le paramtre graphNum dfinit le type de graphe utiliser. Vous devez passer un nombre entre 1 et 8. Les diffrents types de graphes disponibles sont lists dans l'exemple prsent plus bas. Une fois le graphe cr, vous pouvez modifier son type en modifiant la valeur de graphNum et en excutant de nouveau la commande GRAPHE.

4e Dimension - Langage

879

Le paramtre xCatgories dfinit les valeurs qui seront utilises pour l'axe des X. Vous pouvez passer un champ de type Alpha, Heure, Date, ou un type numrique. Il doit y avoir le mme nombre de sous-enregistrements ou d'lments de tableau dans xCatgories qu'il y en a dans chaque zValeurs. Le paramtre zValeurs dfinit les valeurs reprsenter graphiquement. Elles doivent tre de type numrique. Vous pouvez passer jusqu' huit ensembles de donnes. Les graphes en secteurs ne reprsentent que le premier zValeurs. Exemples (1) L'exemple suivant illustre l'utilisation des tableaux pour gnrer un graphe. Ce code doit tre plac dans la mthode formulaire (ou une mthode objet) du formulaire contenant la zone de graphe. A noter que, dans notre exemple, les donnes reprsentes sont constantes, ce qui n'est gnralement pas le cas : TABLEAU ALPHA (4; X; 2) ` Cration d'un tableau pour l'axe des X X{1} := "1995" ` libell X #1 X{2} := "1996" ` Libell X #2 TABLEAU REEL (A; 2) ` Cration d'un tableau pour l'axe des Z A{1} := 30 ` Insertion des donnes A{2} := 40 TABLEAU REEL (B; 2) ` Cration d'un tableau pour l'axe des Z B{1} := 50 ` Insertion des donnes B{2} := 80 GRAPHE (vGraph; vType; X; A; B) ` Dessiner le graphe ` Dfinition des lgendes du graphe PARAMETRES DU GRAPHE (vGraph; 0; 0; 0; 0; Faux; Faux; Vrai; "France"; "USA")

Les images suivantes reprsentent les graphes rsultants : Lorsque vType est gal 1, vous obtenez un graphe en Colonnes :

880

4e Dimension - Langage

Lorsque vType est gal 2, vous obtenez un graphe en Colonnes proportionnelles :

Lorsque vType est gal 3, vous obtenez un graphe en Colonnes empiles :

Lorsque vType est gal 4, vous obtenez un graphe en Lignes :

4e Dimension - Langage

881

Lorsque vType est gal 5, vous obtenez un graphe en Aires :

Lorsque vType est gal 6, vous obtenez un graphe en Points :

Lorsque vType est gal 7, vous obtenez un graphe en Secteurs :

882

4e Dimension - Langage

Lorsque vType est gal 8, vous obtenez un graphe en Images :

(2) L'exemple suivant effectue la reprsentation graphique des ventes des commerciaux. La sous-table comporte trois champs : Nom, TotalAnnePrcdente, et TotalCetteAnne. Le graphe affichera les ventes de chaque commercial pour les deux dernires annes :

GRAPHE (GrapheVentes; 1; Commerciaux'Nom; Commerciaux'TotalAnnePrcdente; Commerciaux'TotalCetteAnne)

Rfrence GRAPHE SUR SELECTION, PARAMETRES DU GRAPHE.

4e Dimension - Langage

883

PARAMETRES DU GRAPHE

Graphes version 6.0 (Modifie)

Notes version 6 : A partir de la version 6 de 4e Dimension, les graphes sont raliss l'aide du plug-in 4D Chart, intgr 4e Dimension. Les commandes du thme Graphe de la version prcdente de 4D sont dsormais rediriges de manire transparente vers 4D Chart. Si vous souhaitez personnaliser une Zone de graphe place dans un formulaire avec les commandes de 4D Chart, utilisez le paramtre grapheZone dcrit dans cette commande comme rfrence de zone externe pour les commandes de 4D Chart. Pour plus d'informations sur les commandes de 4D Chart, reportez-vous au manuel Langage de 4D Chart. La commande PARAMETRES DU GRAPHE fonctionne avec une Zone de graphe cre dans un formulaire 4D. Elle doit imprativement tre place dans la mthode formulaire ou dans une mthode objet appartenant au formulaire, ou encore dans une mthode projet appele par l'une des deux prcdentes.
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

PARAMETRES DU GRAPHE (grapheZone; xmin; xmax; ymin; ymax; xprop; grilleX; grilleY; titre{; titre2; ...; titreN}) Paramtre grapheZone xmin xmax ymin ymax xprop grilleX grilleY titre Type Variable Numrique, Date ou Heure Numrique, Date ou Heure Numrique Numrique Boolen Boolen Boolen Alpha Description Nom de la zone de graphe Valeur minimale de l'chelle des X pour graphe proportionnel (lignes ou points) Valeur maximale de l'chelle des X pour graphe proportionnel (lignes ou points) Valeur minimale de l'chelle des Y Valeur maximale de l'chelle des Y VRAI pour l'chelle des X proportionnelle ; FAUX pour l'chelle des X normale (lignes ou points) VRAI pour la grille sur l'axe des X ; FAUX pour pas de grille sur l'axe des X (seulement si xprop est VRAI) VRAI pour la grille sur l'axe des Y; FAUX pour pas de grille sur l'axe des Y Titre(s) pour les titre(s) des srie(s)

884

4e Dimension - Langage

Description La commande PARAMETRES DU GRAPHE permet de paramtrer les chelles et les grilles d'un graphe plac dans un formulaire. Le graphe doit dj tre affich l'aide de la commande GRAPHE. PARAMETRES DU GRAPHE ne fait rien s'il s'agit d'un graphe de type secteurs. Les paramtres xmin, xmax, ymin et ymax fixent les valeurs minimales et maximales pour les axes des X ou Y. Si la valeur des deux paramtres correspondants au mme axe est nulle (0, ?00:00:00? ou !00/00/00! selon le type de donnes), les valeurs de graphe par dfaut seront utilises. Le paramtre xprop fixe l'axe des X comme proportionnel (sont concerns par cette option les graphes de type 4 et 6). Lorsque ce paramtre est Vrai, chaque point sera mis sur l'axe des X par rapport aux valeurs des points si elles sont de type numrique, heure ou date. Les paramtres grilleX et grilleY montrent ou cachent les grilles. Une grille pour l'axe des X sera affiche s'il s'agit d'un graphe en points ou en lignes proportionnel. Le(s) paramtre(s) titre spcifient les titres des lgendes. Exemple Reportez-vous l'exemple de la commande GRAPHE. Rfrence GRAPHE, GRAPHE SUR SELECTION.

4e Dimension - Langage

885

GRAPHE SUR SELECTION

Graphes version 6.0 (Modifie)

Note version 6 : A partir de la version 6 de 4e Dimension, les graphes sont raliss l'aide du plug-in 4D Chart, intgr 4e Dimension. Les commandes du thme Graphe de la version prcdente de 4D sont dsormais rediriges de manire transparente vers 4D Chart. Pour plus d'informations sur les commandes de 4D Chart, reportez-vous au manuel Langage de 4D Chart.
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

GRAPHE SUR SELECTION{(table)} ou : GRAPHE SUR SELECTION ({table; }numGraphe; axeX; axeZ{; axeZ2; ...; axeZN}) Paramtre table numGraphe axeX axeZ Type Table Numrique Champ Champ Description Table de la slection reprsenter graphiquement ou Table par dfaut si ce paramtre est omis Numro de type de graphe Valeurs sur l'axe des X Champ(s) reprsenter (jusqu' 8 champs)

Description GRAPHE SUR SELECTION accepte deux syntaxes. La premire syntaxe fait apparatre l'Assistant de cration de graphe, permettant l'utilisateur de slectionner les champs reprsenter graphiquement. Dans la seconde syntaxe, vous dsignez les champs reprsenter et l'Assistant de cration de graphe ne s'affiche pas. GRAPHE SUR SELECTION ne traite que les valeurs des champs d'une table. Seules les valeurs de la slection courante du process courant sont reprsentes. La premire syntaxe est quivalente la slection de la commande Graphes... dans le menu Etats, en mode Utilisation.

886

4e Dimension - Langage

L'cran suivant reprsente la premire page de l'assistant de cration de graphe, permettant l'utilisateur de choisir un type de graphe.

Pour plus d'informations sur l'emploi de cet assistant, reportez-vous au manuel Mode Utilisation. La seconde syntaxe de la commande reprsente graphiquement les champs spcifis de table. Le paramtre numGraphe dfinit le type de graphe utiliser. Vous devez passer un nombre entre 1 et 8. Les diffrents types de graphes disponibles sont reprsents dans l'exemple de la commande GRAPHE. Le paramtre axeX dfinit les valeurs qui seront utilises pour l'axe des X. Vous pouvez passer un champ de type Alpha, Entier, Entier long, Numrique ou Date. Le paramtre axeZ dfinit les valeurs reprsenter graphiquement. Vous pouvez passer un champ de type Entier, Entier long ou Numrique. Vous pouvez passer jusqu' huit champs dans axeZ, spars par deux points. Quelle que soit la syntaxe employe, GRAPHE SUR SELECTION cre une fentre 4D Chart dans laquelle vous travaillez avec les graphes que vous crez. Note : Vous pouvez galement crer des graphes avec 4D dans l'Editeur d'tats semiautomatiques, en demandant une impression vers un graphe. Pour plus d'informations sur ce point, reportez-vous au manuel Mode Utilisation de 4e Dimension.

4e Dimension - Langage

887

Exemples (1) L'exemple suivant illustre l'utilisation de la premire syntaxe de GRAPHE SUR SELECTION. La fentre de l'Assistant de cration de graphe s'affiche, permettant l'utilisateur de slectionner un type de graphe. La premire mthode permet l'utilisateur d'effectuer une recherche dans la table [Personnes], puis d'effectuer un tri ; ensuite, l'Assistant de cration de graphes est affich : CHERCHER ([Personnes]) Si(OK=1) TRIER ([Personnes]) Si(OK=1) GRAPHE SUR SELECTION([Personnes]) Fin de si Fin de si

(2) L'exemple suivant illustre l'utilisation de la seconde syntaxe de GRAPHE SUR SELECTION. Une recherche puis un tri sont d'abord effectus sur les enregistrements de la table [Personnes]. Les salaires des personnes sont alors reprsents graphiquement : CHERCHER ([Personnes]; [Personnes]Titre = "Directeur") TRIER ([Personnes]; [Personnes]Salaire; >) GRAPHE SUR SELECTION([Personnes]; 1; [Personnes]Noms; [Personnes]Salaire)

Rfrence GRAPHE.

888

4e Dimension - Langage

30 ________________________ Images

4e Dimension - Langage

889

890

4e Dimension - Langage

Introduction aux images

Images version 6.7 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Formats supports
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les tableaux suivants dcrivent les divers formats d'images supports par 4e Dimension sous MacOS et Windows, en fonction des oprations ralises : Copier et Coller MacOS Windows PICT Oui Oui EMF Oui encapsul en PicComment WMF Oui encapsul en PicComment BITMAP Oui converti en PICT Macintosh

Affichage MacOS Windows PICT Oui Oui QuickTime Oui Oui NT & WIN 9x + QT 4 WMF encapsul EMF encapsul Non Non Oui Oui

A propos des fichiers WMF (Windows MetaFile) Ces fichiers doivent tre des fichiers "positionnables", comportant un en-tte prcisant la dimension du dessin et sa rsolution. Si cet en-tte est absent, 4D ne pourra pas lire le dessin. Les fichiers WMF sont l'quivalent sous Windows des fichiers PICT, ils peuvent contenir des donnes vectorielles et bitmap correspondant aux primitives de bases de dessin de chacun des environnements. L'avantage de l'utilisation d'images WMF dans votre base de donnes est leur plus grande rapidit d'affichage sous Windows (nul besoin de conversion), ainsi que leur universalit. Toutes les applications Windows sont mme d'exporter ce type de fichiers. Attention toutefois, si vous utilisez ce type d'images dans votre base, vous ne pourrez pas les visualiser sous MacOS. A propos des fichiers EMF (Windows Enhanced Metafile) Ces fichiers sont une amlioration du format WMF. Les applications Windows doivent progressivement l'adopter. L'avantage de ces fichiers est qu'ils peuvent contenir des primitives de dessin plus labores que les fichiers WMF, comme par exemple les Beziers ou les transformations.

4e Dimension - Langage

891

Utiliser QuickTime d'Apple avec 4D


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4D s'appuie sur QuickTime d'Apple pour grer la compression et la conversion d'images dans vos bases de donnes. Compression Apple a ajout des "opcodes" aux spcifications PICT d'origine. Ainsi, les applications MacOS peuvent manipuler des images QuickTime sans modification. Quand l'application demande au systme de dessiner une image contenant des donnes encapsules avec QuickTime, l'opcode QuickTime est ignor si QuickTime n'est pas install ; si QuickTime est prsent, l'image est dcompresse et affiche. Cette technologie est transparente pour l'utilisateur et utilise une mmoire minimale, car une image d'un mga octets peut tre stocke dans une PICT de 40 kilo-octets, et n'a pas besoin d'tre dcompresse avant l'affichage. Sous Windows, 4D requiert que la version 4 minimum de QuickTime soit installe pour que vous puissiez utiliser la compression/dcompression d'images sur cette plate-forme. Note : Les commandes utilisant QuickTime mais faisant appel des fichiers disque (CHARGER ET COMPRESSER IMAGE et COMPRESSER FICHIER IMAGE) ne fonctionnent toutefois pas sous Windows, quelle que soit la version de QuickTime installe. Conversion Des commandes 4D telles que ECRIRE FICHIER IMAGE vous permettent de convertir et de sauvegarder sur disque divers types dimages dans diffrents formats. La plupart de ces commandes ncessitent la prsence de QuickTime. Sous Windows, 4D requiert que la version 4 minimum de QuickTime soit installe pour que vous puissiez convertir des images sur cette plate-forme. Code de conversion QuickTime 4 Voici la liste des codes de conversion fournis en standard par QuickTime 4. Chaque code est form imprativement de 4 caractres. A noter que cette liste peut varier en fonction des machines, QuickTime 4 permettant lajout de routines de conversion personnalises. Utilisez la commande LISTE TYPES IMAGES pour obtenir la liste des formats QuickTime disponibles sur une machine. Codes QuickTime 4 PICT PICS GIFf PNGf TIFF 8BPS SGI BMPf Noms QuickDraw PICT (MacOS) PICS GIF (Graphic Interchange Format) PNG (Portable Netword Graphic) TIFF (Tagged Image File) Photoshop (2.5 & 3.0) Silicon Graphics BMP (Bitmap)

892

4e Dimension - Langage

JPEG JPEG PNTG TPIC qdgx qtif FPix

JPEG (Joint Photographic Experts Group) JFIF MacPaint TGA (Targa) QuickDraw GX Picture (si QuickDraw GX install) QuickTime Image FlashPix

Erreurs de compression ou de conversion d'image Le code d'erreur -9955 est retourn par 4D quand vous essayez d'utiliser une commande de compression ou de conversion d'image alors que QuickTime n'est pas install dans votre systme. D'autres erreurs gnres par QuickTime peuvent tre aussi retournes. Vous pouvez intercepter ces erreurs en utilisant une mthode de gestion d'erreurs installe par la commande APPELER SUR ERREUR. Oprateurs sur les images
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension vous permet d'effectuer des oprations sur les images 4D, telles que la concatnation, la superposition, etc. Ce point est trait dans la section Oprateurs sur les images. Rfrence BLOB VERS IMAGE, CHARGER ET COMPRESSER IMAGE, COMPRESSER FICHIER IMAGE, COMPRESSER IMAGE, ECRIRE FICHIER IMAGE, ENREGISTRER IMAGE, IMAGE VERS BLOB, LIRE FICHIER IMAGE, LISTE TYPES IMAGES, PROPRIETES IMAGE, Taille image.

4e Dimension - Langage

893

COMPRESSER IMAGE

Images version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

COMPRESSER IMAGE (image; type; qualit) Paramtre image type qualit Type Image Alpha Numrique Description Image compresser Image compresse Type de compression (4 caractres) Qualit de compression (1...1000)

Description La commande COMPRESSER IMAGE compresse l'image contenue dans un champ ou une variable de type Image. Le paramtre type est une chane de quatre caractres indiquant le type de compresseur. Le paramtre qualit est un entier entre 1 et 1000 indiquant la qualit de l'image compresse. En gnral, rduire la qualit permet une meilleure compression de l'image. Attention : Le ratio de compression possible pour une qualit donne dpend de la taille de l'image et de l'image que vous voulez compresser. La compression de petites images peut ne pas produire de rduction de taille significative. Rfrence CHARGER ET COMPRESSER IMAGE, COMPRESSER FICHIER IMAGE, Introduction aux images.

894

4e Dimension - Langage

CHARGER ET COMPRESSER IMAGE

Images version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHARGER ET COMPRESSER IMAGE (document; type; qualit; image) Paramtre document type qualit image Type DocRef Alpha Numrique Image Description Numro de rfrence du document Type de compression Qualit de compression (1...1000) Image compresse

Description CHARGER ET COMPRESSER IMAGE compresse une image charge d'un document sur disque. Vous pouvez ouvrir un document PICT l'aide de la commande Ouvrir document et utiliser le numro de rfrence retourn par cette fonction pour charger et compresser la PICT qu'il contient. Cette commande charge l'image en mmoire, la compresse en utilisant le type et la qualit que vous spcifiez et la retourne dans image. L'image est charge en mmoire avant d'tre compresse. S'il n'y a pas assez de mmoire pour charger l'image, utilisez COMPRESSER FICHIER IMAGE avant d'appeler CHARGER ET COMPRESSER IMAGE. Le paramtre type est une chane de 4 caractres indiquant le type de compression. Si type est une chane vide, image est charge mais n'est pas compresse. Le paramtre qualit est un Entier entre 1 et 1000 indiquant la qualit de l'image compresse. En gnral, rduire la qualit permet une meilleure compression de l'image. Attention : Le ratio de compression possible pour une qualit donne dpend de la taille de l'image et de l'image que vous voulez compresser. La compression de petites images peut ne pas produire de rduction de taille significative.

4e Dimension - Langage

895

Exemple L'exemple suivant affiche une bote de dialogue d'ouverture de fichiers qui vous permet de slectionner un fichier PICT. L'image est charge en mmoire, compresse et stocke dans une variable de type Image, puis le fichier est referm. vRf:=Ouvrir document ("";"PICT") Si (OK=1) CHARGER ET COMPRESSER IMAGE(vRf;"jpeg";500;vImage) FERMER DOCUMENT(vRf) Fin de si

Rfrence COMPRESSER FICHIER IMAGE, COMPRESSER IMAGE, ENREGISTRER IMAGE, Introduction aux images.

896

4e Dimension - Langage

COMPRESSER FICHIER IMAGE

Images version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

COMPRESSER FICHIER IMAGE (document; type; qualit) Paramtre document type qualit Type DocRef Alpha Numrique Description Numro de rfrence du document Type de compression Qualit de compression (1...1000)

Description COMPRESSER FICHIER IMAGE compresse un document image sur disque. Utilisez cette commande pour compresser une image que vous savez ne pas pouvoir charger dans la mmoire disponible. Une fois compresse, elle peut tre charge en mmoire grce CHARGER ET COMPRESSER IMAGE. Le paramtre type est une chane de 4 caractres indiquant le type de compression. Le paramtre qualit est un entier entre 1 et 1000 indiquant la qualit de l'image compresse. En gnral, rduire la qualit permet une meilleure compression de l'image. Attention : Le ratio de compression possible pour une qualit donne dpend de la taille de l'image et de l'image que vous voulez compresser. La compression de petites images peut ne pas produire de rduction de taille significative. Exemple L'exemple suivant affiche une bote de dialogue d'ouverture de fichiers qui vous permet de slectionner un fichier PICT. Seuls les fichiers de type PICT seront affichs. L'image est compresse puis charge en mmoire et stocke dans une variable de type Image. Le fichier est ensuite ferm. vRf:=Ouvrir document ("";"PICT") Si (OK=1) COMPRESSER FICHIER IMAGE(vRef;"jpeg";500) CHARGER ET COMPRESSER IMAGE(vRf;"";500;Image) FERMER DOCUMENT(vRf) Fin de si

Rfrence CHARGER ET COMPRESSER IMAGE, COMPRESSER IMAGE, ENREGISTRER IMAGE.

4e Dimension - Langage

897

ENREGISTRER IMAGE

Images version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENREGISTRER IMAGE (document; image) Paramtre document image Type DocRef Image Description Numro de rfrence du document Image enregistrer

Description ENREGISTRER IMAGE enregistre image dans le document document, cr l'aide de la fonction Creer document. Exemple L'exemple suivant cre un document et y stocke une image : vRf:=Creer document("";"PICT") Si (OK=1) ENREGISTRER IMAGE(vRf;vPict) FERMER DOCUMENT(vRf) Fin de si

Rfrence CHARGER ET COMPRESSER IMAGE, COMPRESSER FICHIER IMAGE.

898

4e Dimension - Langage

IMAGE VERS GIF

Images version 6.7 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

IMAGE VERS GIF (imagePICT; blobGIF) Paramtre imagePICT blobGIF Type Image BLOB Description Champ ou variable image BLOB contenant limage de type GIF

Description La commande IMAGE VERS GIF permet de crer une image au format GIF partir dune image (de type PICT) stocke dans une variable ou un champ 4D. Vous passez dans le paramtre imagePICT une variable ou un champ 4D de type image, et dans le paramtre blobGIF, une variable ou un champ de type BLOB. Aprs lexcution de la commande, blobGIF contient limage au format GIF. Note : Le format GIF est un format dimage comportant au plus 256 couleurs. Si limage PICT dorigine en possde davantage, certaines couleurs seront perdues. La commande rduit le nombre de couleurs en fonction de la palette systme. Le GIF gnr est de type 87a (opaque) et normal (non entrelac). Limage incluse dans blobGIF pourra par la suite tre enregistre dans un fichier laide de la commande BLOB VERS DOCUMENT ou tre utilise en vue dune publication sur le Web. Si la conversion sest droule correctement, la variable systme OK prend la valeur 1. Sinon, elle prend la valeur 0. Exemple Vous souhaitez gnrer la vole une image GIF affichant un compteur de connexions. Dans la bibliothque dimages de la base, placez tous les chiffres sous forme dimages :

4e Dimension - Langage

899

Dans la Mthode base Sur connexion Web, vous pouvez crire : `Mthode base Sur connexion Web Si (Contexte Web) ... Sinon C_BLOB ($blob) Au cas ou ... : ($1="/4dcgi/counter") `Gnration du compteur GIF `Lorsque 4D dtecte cet URL lors de lenvoi de la page statique $blob:=gifcounter (nbHits) `Calcul de limage gif `La variable nbHits contient le nombre de connexions ENVOYER BLOB HTML ($blob;"image/gif") `Insertion de limage et envoi au navigateur ... Fin de cas Fin de si Voici la mthode gifcounter : `Mthode projet gifcounter C_ENTIER LONG($1) C_IMAGE($img) C_BLOB($0) Si ($1=0) $ndigits:=1 Sinon $ndigits:=1+Longueur(Chaine($1)) Fin de si Si ($ndigits<5) $ndigits:=5 Fin de si $div:=10^($ndigits-1) Boucle ($i;1;$ndigits) $ref:=Ent($1/$div)%10 LIRE IMAGE DANS BIBLIOTHEQUE($ref+1000;picture) $img:=$img+picture $div:=$div/10 Fin de boucle IMAGE VERS GIF($img;$0)

Dans la page envoye au navigateur, 4D affiche alors une image GIF du type suivant :

Variables et ensembles systme Si la conversion sest droule correctement, la variable systme OK prend la valeur 1. Sinon, elle prend la valeur 0.

900

4e Dimension - Langage

IMAGE VERS BLOB

Images version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

IMAGE VERS BLOB (image; blobImage; format) Paramtre image blobImage format Type Image BLOB Alpha (4) Description Champ ou variable image BLOB devant contenir limage convertie Format dimage (4 caractres)

Description La commande IMAGE VERS BLOB convertit une image stocke dans une variable ou un champ 4D dans un autre format, et place limage rsultante dans un BLOB. Vous passez dans le paramtre image une variable ou un champ 4D de type image et dans le paramtre blobImage la variable ou le champ BLOB devant contenir limage convertie. Vous passez dans le paramtre format une chane de 4 caractres indiquant le format de conversion souhait. Ce format peut tre : soit un code QuickTime (cf. description de la commande LISTE TYPES IMAGES, auquel cas QuickTime version 4 minimum devra tre install sur le poste, soit GIFf (format GIF) ou WBMP (Wireless Bitmap), ces deux codes ne ncessitant pas la prsence de QuickTime. Aprs lexcution de la commande, blobImage contient limage au format souhait. Si la conversion sest droule correctement, la variable systme OK prend la valeur 1. Si la conversion choue (absence de QuickTime 4 ou convertisseur non disponible), OK prend la valeur 0 et le BLOB est gnr vide (0 octet). Rfrence BLOB VERS IMAGE, ECRIRE FICHIER IMAGE, IMAGE VERS GIF, LISTE TYPES IMAGES.

4e Dimension - Langage

901

BLOB VERS IMAGE

Images version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

BLOB VERS IMAGE (blobImage; image) Paramtre blobImage image Type BLOB Image Description BLOB contenant une image Champ ou variable image 4D

Description La commande BLOB VERS IMAGE place dans un champ ou une variable image 4D une image stocke dans un BLOB, quel que soit son format initial (compatible QuickTime 4). Attention : Cette commande ncessite sous MacOS et Windows la prsence de QuickTime version 4 minimum. Si QuickTime 4 nest pas install, la commande ne fait rien. Le fonctionnement de cette commande est analogue celui de la commande LIRE FICHIER IMAGE ; elle sapplique simplement un BLOB et non un fichier. Elle permet dafficher tout moment des images stockes en format natif dans des BLOBs laide, par exemple, de la commande DOCUMENT VERS BLOB ou IMAGE VERS BLOB. Vous passez dans le paramtre blobImage le BLOB contenant limage. Limage peut tre de tout format compatible QuickTime (version 4 minimum). Vous pouvez obtenir la liste des formats disponibles laide de la commande LISTE TYPES IMAGES. Pour une description complte des codes de format standard QuickTime 4, reportez-vous la description de la commande LISTE TYPES IMAGES. Vous passez dans le paramtre image la variable ou le champ 4D de type image devant afficher limage. Note : Le format interne de limage est conserv par QuickTime au sein de la variable ou du champ 4D. Par consquent, il sera ncessaire de disposer de QuickTime pour afficher limage dans 4D. Aprs lexcution de la commande, image contient limage affichable dans 4D. Si la commande a t excute correctement, la variable systme OK prend la valeur 1. En cas dchec (absence de QuickTime 4, BLOB ne contenant pas dimage, format dimage inconnu...), OK prend la valeur 0 et le champ ou la variable image 4D est vide. Rfrence IMAGE VERS BLOB, LIRE FICHIER IMAGE, LISTE TYPES IMAGES.

902

4e Dimension - Langage

ECRIRE FICHIER IMAGE

Images version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRIRE FICHIER IMAGE (nomFichier; image{; format}) Paramtre nomFichier image format Type Alpha Image Alpha (4) Description Nom ou chemin daccs complet du fichier crire, ou chane vide Champ ou variable image crire Code QuickTime de format dexport dimage (4 caractres), Par dfaut = PICT

Description La commande ECRIRE FICHIER IMAGE vous permet de sauvegarder dans un fichier sur disque limage passe dans le paramtre image, au format dfini par format. Important : Cette commande utilise sous MacOS et Windows les routines de conversion de QuickTime (version 4 minimum recommande). Si QuickTime nest pas install, la commande cre par dfaut un fichier au format PICT. Vous pouvez passer dans nomFichier le chemin daccs complet du fichier crer, ou uniquement le nom du fichier auquel cas le fichier sera cr ct du fichier de structure de la base. Sous Windows, vous devez galement passer lextension du fichier crer. Si vous passez une chane vide ("") dans nomFichier, la bote de dialogue standard denregistrement de fichier apparat, permettant lutilisateur de dsigner le nom, lemplacement et le format du fichier crer. Passez dans image la variable ou le champ image contenant limage stocker sur le disque. Le paramtre optionnel format vous permet de dfinir le format dans lequel limage doit tre sauvegarde. Ce paramtre doit comporter 4 caractres, correspondant un code QuickTime. Vous pouvez obtenir la liste des formats disponibles laide de la commande LISTE TYPES IMAGES. Si vous ne passez pas le paramtre format ou si QuickTime nest pas install, le fichier image est cr au format PICT. Si lexcution de la commande est correcte, la variable systme Document contient le chemin daccs complet du fichier cr et la variable systme OK prend la valeur 1. En cas dchec, OK prend la valeur 0. Rfrence IMAGE VERS BLOB, Introduction aux images, LIRE FICHIER IMAGE, LISTE TYPES IMAGES.

4e Dimension - Langage

903

LIRE FICHIER IMAGE

Images version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE FICHIER IMAGE (nomFichier; image) Paramtre nomFichier image Type Alpha Image Description Nom ou chemin daccs complet du fichier lire, ou chane vide Champ ou variable recevant limage

Description La commande LIRE FICHIER IMAGE vous permet douvrir limage stocke dans le fichier disque dsign par nomFichier et de la placer dans le champ ou la variable 4D image. Important : Cette commande utilise sous MacOS et Windows les routines de conversion de QuickTime (version 4 minimum recommande). Si QuickTime nest pas install, la commande ne peut ouvrir que les fichiers au format PICT. Vous pouvez passer dans nomFichier le chemin daccs complet du fichier lire, ou uniquement le nom du fichier auquel cas il doit se trouver ct du fichier de structure de la base. Sous Windows, vous devez galement passer lextension du fichier. Si vous passez une chane vide ("") dans nomFichier, la bote de dialogue standard douverture de documents apparat, permettant lutilisateur de slectionner le fichier lire, ainsi que les formats disponibles (fournis par QuickTime 4). Vous pouvez obtenir la liste des formats disponibles laide de la commande LISTE TYPES IMAGES. Passez dans image la variable ou le champ image devant recevoir limage lue. Note : Le format interne de limage est conserv par QuickTime au sein de la variable ou du champ 4D. Par consquent, il sera ncessaire de disposer de QuickTime pour relire limage dans 4D. Si lexcution de la commande est correcte, la variable systme Document contient le chemin daccs complet du fichier ouvert et la variable systme OK prend la valeur 1. En cas dchec, OK prend la valeur 0. Rfrence BLOB VERS IMAGE, ECRIRE FICHIER IMAGE, Introduction aux images, LISTE TYPES IMAGES.

904

4e Dimension - Langage

LISTE TYPES IMAGES

Images version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LISTE TYPES IMAGES (tabFormats{; tabNoms}) Paramtre tabFormats tabNoms Type Tab Alpha (4) Tab Alpha Description Codes QuickTime des formats dimport/export disponibles Noms des formats

Description La commande LISTE TYPES IMAGES remplit le tableau tabFormats avec les codes QuickTime dimport/export dimages disponibles sur la machine o elle est excute. Le tableau tabNoms, optionnel, permet de rcuprer le nom de chaque format dimage. Les noms des formats sont plus explicites que leurs codes. Bien entendu, cette commande requiert que QuickTime (version 4 minimum) soit install sur la machine. Dans le cas contraire, tabFormats contient uniquement le format PICT. LISTE TYPES IMAGES peut tre utilise pour vrifier la prsence des formats dimages requis pour des bases. Cette fonction savre particulirement utile lorsquune base emploie des formats personnaliss, non installs par dfaut (possibilit offerte par QuickTime 4). Les informations recueillies dans le tableau tabNoms permettent en outre de construire et dafficher un pop up menu contenant les formats dexport dimages disponibles. Codes de conversion QuickTime 4 Voici la liste des codes de conversion fournis en standard par QuickTime 4. Chaque code est form imprativement de 4 caractres. A noter que cette liste peut varier en fonction des machines, QuickTime 4 permettant lajout de routines de conversion personnalises. Codes QuickTime 4 PICT PICS GIFf PNGf TIFF 8BPS .SGI BMPf JPEG JPEG PNTG TPIC qdgx qtif FPix Noms QuickDraw PICT (MacOS) PICS GIF (Graphic Interchange Format) PNG (Portable Netword Graphic) TIFF (Tagged Image File) Photoshop (2.5 et 3.0) Silicon Graphics BMP (Bitmap) JPEG (Joint Photographic Experts Group) JFIF MacPaint TGA (Targa) QuickDraw GX Picture (si QuickDraw GX install) QuickTime Image FlashPix 4e Dimension - Langage 905

Ces codes QuickTime dimport/export dimages sont utiliss en particulier par les commandes ECRIRE FICHIER IMAGE et LIRE FICHIER IMAGE. Rfrence BLOB VERS IMAGE, ECRIRE FICHIER IMAGE, IMAGE VERS BLOB, LIRE FICHIER IMAGE.

906

4e Dimension - Langage

Taille image

Images version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Taille image (image) Numrique Paramtre image Rsultat Type Image Numrique Description Image pour laquelle vous voulez connatre la taille en octets Taille en octets de l'image

Description Taille image retourne la taille de l'image image en octets. Rfrence PROPRIETES IMAGE.

4e Dimension - Langage

907

PROPRIETES IMAGE

Images version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

PROPRIETES IMAGE (image; largeur; hauteur{; hOffset{; vOffset{; mode}}}) Paramtre image largeur hauteur hOffset vOffset mode Type Image Numrique Numrique Numrique Numrique Numrique Description Image sur laquelle obtenir les informations Largeur de l'image exprime en pixels Hauteur de l'image exprime en pixels Offset horizontal lorsque l'image est affiche en arrire-plan Offset vertical lorsque l'image est affiche en arrire-plan Mode de transfert lorsque l'image est affiche en arrire-plan

Description La commande PROPRIETES IMAGE retourne des informations sur l'image que vous avez passe dans le paramtre image. Les paramtres largeur et hauteur reoivent la largeur et hauteur relles de l'image. Les paramtres hOffset, vOffset et mode reoivent la position et le mode de transfert de l'image lorsqu'elle est affiche en arrire-plan dans un formulaire. Rfrence Taille image.

908

4e Dimension - Langage

CREER IMAGETTE

Images version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CREER IMAGETTE (source; dest{; largeur{; hauteur{; mode{; profondeur}}}}) Paramtre source dest largeur hauteur mode profondeur Type Image Image Entier Entier Entier Entier Description Champ ou variable image 4D passer en imagette Imagette rsultante Largeur de limagette en pixels, Par dfaut = 48 Hauteur de limagette en pixels, Par dfaut = 48 Mode de cration de limagette Par dfaut = proportionnelle centre (6) Nombre de couleurs de limagette en bits/pixel Par dfaut = profondeur cran courante (0)

Description La commande CREER IMAGETTE retourne une imagette partir dune image source. Les imagettes sont gnralement utilises pour la prvisualisation dimages dans le cadre dapplications multimdia ou de sites Web. Note : Cette commande ne ncessite pas la prsence de QuickTime. Passez dans source la variable ou le champ image 4D contenant limage source rduire sous forme dimagette, et dans dest la variable ou le champ image 4D devant recevoir limagette rsultante. Les paramtres optionnels largeur et hauteur vous permettent de dfinir la taille en pixels de limagette que vous souhaitez obtenir. Si vous omettez ces paramtres, la taille par dfaut de limagette sera de 48X48 pixels. Le paramtre optionnel mode vous permet de dfinir le mode de cration de limagette, cest--dire la manire dont elle sera rduite. Vous pouvez utiliser lun des trois modes suivants, accessibles par lintermdiaire de constantes prdfinies disponibles dans le thme Formats daffichage des images : Constante Non tronque Proportionnelle Proportionnelle centre Type Entier long Entier long Entier long Valeur 2 5 6 (dfaut)

Note : Seules ces trois constantes peuvent tre utilises avec CREER IMAGETTE. Les autres constantes du thme Formats daffichage des images ne sappliquent pas cette commande. Si vous omettez le paramtre mode, le mode 6 (Proportionnelle centre) est appliqu par dfaut.

4e Dimension - Langage

909

Le rsultat des diffrents modes est illustr ci-dessous : Image source

Imagettes rsultantes (48x48) Non tronque = 2

Proportionnelle = 5

Proportionnelle centre = 6 (mode par dfaut)

Note : Avec les modes Proportionnelle et Proportionnelle centre, les espaces vides apparatront blancs dans les imagettes lorsque ces modes sont appliqus aux champs ou variables images dans les formulaires 4D, les espaces vides sont transparents. Le paramtre optionnel profondeur vous permet de dfinir sous MacOS le nombre de couleurs (cest--dire la profondeur dcran) conserver dans limage de destination. Vous devez passer dans ce paramtre un entier correspondant au nombre de bits par pixel : 1, 2, 4, 8, 16 ou 32. Passez 0 pour utiliser la profondeur cran courante (valeur par dfaut). Note : Sous Windows, le paramtre profondeur est ignor ; la commande utilise toujours la profondeur cran courante. 910 4e Dimension - Langage

LISTE IMAGES DANS BIBLIOTHEQUE

Images version 6.0.2

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LISTE IMAGES DANS BIBLIOTHEQUE (RefsImages; NomsImages) Paramtre RefsImages NomsImages Type Tableau num Tableau Alpha Description Numros de rfrence des images stockes dans la bibliothque d'images Noms des images stockes dans la bibliothque d'images

Description La commande LISTE IMAGES DANS BIBLIOTHEQUE retourne les numros de rfrence et le nom des images stockes dans la bibliothque dimages de la base de donnes. Aprs lappel, vous rcuprez les numros de rfrence des images dans le tableau RefsImages et leurs noms dans le tableau NomsImages. Les deux tableaux sont synchroniss : le nime lment de RefsImages est le numro de rfrence de l'image de la bibliothque dont le nom est retourn dans le nime lment de NomsImages. Le tableau RefsImages peut tre de type Numrique (Rel), Entier long ou Entier. En mode interprt, si le tableau nest pas dclar avant lappel LISTE IMAGES DANS BIBLIOTHEQUE, un tableau de type Numrique (Rel) est cr par dfaut. Le tableau NomsImages peut tre de type Alpha ou Texte. En mode interprt, si le tableau nest pas dclar avant lappel LISTE IMAGES DANS BIBLIOTHEQUE, un tableau de type Texte est cr par dfaut. La longueur maximale du nom dune image de la bibliothque est de 31 caractres. Si vous utilisez un tableau Alpha pour NomsImages, dclarez-le avec une taille assez grande pour que le nom retourn ne soit pas tronqu. Si la bibliothque dimages est vide, les deux tableaux retourns seront vides. Pour obtenir le nombre dimages contenues dans la bibliothque, il vous suffit de tester la taille dun des deux tableaux l'aide de la fonction Taille tableau. Exemples (1) Le code suivant retourne le contenu de la bibliothque d'images dans les tableaux telRefImage et taNomImage :

LISTE IMAGES DANS BIBLIOTHEQUE(telRefImage;taNomImage)

4e Dimension - Langage

911

(2) Lexemple suivant teste si la bibliothque dimages est vide ou non : LISTE IMAGES DANS BIBLIOTHEQUE(telRefImage;taNomImage) Si (Taille tableau(telRefImage)=0) ALERTE("La bibliothque dimages est vide.") Sinon ALERTE("La bibliothque dimages contient "+Chaine(Taille tableau(tlRefImage)) +" images.") Fin de si (3) L'exemple suivant exporte la bibliothque dimages vers un fichier stock sur disque :

LISTE IMAGES DANS BIBLIOTHEQUE($alRefImage;$asPicName) $vlNbImages:=Taille tableau($alRefImage) Si ($vlNbImages>0) REGLER SERIE(12;"") Si (OK=1) $vsTag:="4DV6PICTURELIBRARYEXPORT" ENVOYER VARIABLE($vsTag) ENVOYER VARIABLE($vlNbImages) gError:=0 Boucle($vlImage;1;$vlNbImages) $vlRefImage:=$alRefImage{$vlImage} $vsPicName:=$asPicName{$vlImage} LIRE IMAGE DANS BIBLIOTHEQUE(alRefImage{$vlImage};$vgImage) Si (OK=1) ENVOYER VARIABLE($vlRefImage) ENVOYER VARIABLE($vsPicName) ENVOYER VARIABLE($vgImage) Sinon $vlImage:=$vlNbImages+1 gError:=-108 Fin de si Fin de boucle REGLER SERIE(11) Si (gError#0) ALERTE("La bibliothque d'images n'a pas pu tre exporte, recommencez avec davantage de mmoire.") SUPPRIMER DOCUMENT (Document) Fin de si Fin de si Sinon ALERTE("La bibliothque d'images est vide.") Fin de si

Rfrence ECRIRE IMAGE DANS BIBLIOTHEQUE, LIRE IMAGE DANS BIBLIOTHEQUE, SUPPRIMER IMAGE DANS BIBLIOTHEQUE.

912

4e Dimension - Langage

LIRE IMAGE DANS BIBLIOTHEQUE

Images version 6.7 (Modifie)

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE IMAGE DANS BIBLIOTHEQUE (refImage | nomImage; image) Paramtre Type refImage | nomImage Num | Alpha image Description Numro de rfrence ou Nom d'une image de la bibliothque dimages Image de la bibliothque d'images

Variable image

Description La commande LIRE IMAGE DANS BIBLIOTHEQUE retourne dans image l'image de la bibliothque dont vous avez pass le numro de rfrence dans refImage ou le nom dans nomImage. Note pour les dveloppeurs de composants : Si vous souhaitez quun composant 4D utilise des images stockes dans la Bibliothque dimages, vous devez utiliser la commande LIRE IMAGE DANS BIBLIOTHEQUE et lui passer un nom dimage comme paramtre. En effet, lorsquun composant utilisant des images est install par 4D Insider, le programme peut renumroter automatiquement les nouvelles images si des images de mme numro de rfrence existent dj dans la base. S'il n'existe pas d'image de ce numro ou de ce nom dans la bibliothque d'images, LIRE IMAGE DANS BIBLIOTHEQUE ne modifie pas le paramtre image. Exemples (1) Lexemple suivant retourne dans la variable vgMonImage limage dont la rfrence est stocke dans la variable locale $vlRefImage :

LIRE IMAGE DANS BIBLIOTHEQUE($vlRefImage;vgMonImage)

(2) Lexemple suivant retourne dans la variable $DDcom_Prot_MonImage limage nomme "DDcom_Prot_Bouton1" stocke dans la Bibliothque dimages :

LIRE IMAGE DANS BIBLIOTHEQUE("DDcom_Prot_Bouton1"; $DDcom_Prot_MonImage)

(3) Reportez-vous au troisime exemple de la commande LISTE IMAGES DANS BIBLIOTHEQUE. Rfrence ECRIRE IMAGE DANS BIBLIOTHEQUE, LISTE IMAGES DANS BIBLIOTHEQUE, SUPPRIMER IMAGE DANS BIBLIOTHEQUE.

4e Dimension - Langage

913

Variables et ensembles systme La variable systme OK prend la valeur 1 si limage existe dans la bibliothque dimages. Sinon, elle prend la valeur zro. Gestion des erreurs S'il n'y a pas assez de mmoire pour retourner limage, l'erreur 108 est gnre. Vous pouvez intercepter cette erreur avec une mthode de gestion d'erreurs.

914

4e Dimension - Langage

ECRIRE IMAGE DANS BIBLIOTHEQUE

Images version 6.0.2

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRIRE IMAGE DANS BIBLIOTHEQUE (image; refImage; nomImage) Paramtre image refImage nomImage Type Image Numrique Alpha Description Nouvelle image Numro de rfrence de l'image dans la bibliothque d'images Nouveau nom de limage

Description La commande ECRIRE IMAGE DANS BIBLIOTHEQUE cre une nouvelle image ou remplace une image existante dans la bibliothque dimages. Avant lappel, vous passez : le numro de rfrence de limage dans refImage (compris entre 1 et 32767) limage elle-mme dans image. Le nom de limage dans nomImage (longueur maximale : 31 caractres). Sil existe dj dans la bibliothque une image possdant le mme numro de rfrence, son contenu est remplac et elle est renomme avec les valeurs que vous avez passes dans image et nomImage. Si aucune image ne possde le numro de rfrence que vous avez pass dans refImage, une nouvelle image est cre dans la bibliothque dimages. 4D Server : ECRIRE IMAGE DANS BIBLIOTHEQUE ne peut pas tre utilise dans une mthode excute sur le poste serveur (procdure stocke ou trigger). Si vous appelez ECRIRE IMAGE DANS BIBLIOTHEQUE sur le serveur, la commande ne fait rien, lappel est ignor. Attention : Les objets de structure (lments de listes hirarchiques, lignes de menu, etc.) peuvent se rfrer une image de la bibliothque. Soyez prudent lorsque vous modifiez par programmation une image de la bibliothque dimages. Note : Si vous passez une image vide dans image, ou une valeur ngative ou nulle dans refImage, la commande ne fait rien.

4e Dimension - Langage

915

Exemples (1) Quel que soit le contenu courant de la bibliothque dimages, lexemple suivant ajoute une nouvelle image dans la bibliothque en cherchant dabord un numro de rfrence dimage unique :

LISTE IMAGES DANS BIBLIOTHEQUE($alRefImage;$asNomImage) Repeter $vlRefImage:=1+Abs(Hasard) Jusque (Chercher dans tableau($alRefImage;$vlRefImage)<0) ECRIRE IMAGE DANS BIBLIOTHEQUE(vgImage;$vlRefImage;"Nouvelle Image")

(2) Lexemple suivant importe dans la bibliothque des images stockes dans un document sur disque, cr par le troisime exemple de la commande LISTE IMAGES DANS BIBLIOTHEQUE : REGLER SERIE(10;"") Si (OK=1) RECEVOIR VARIABLE($vsTag) Si ($vsTag="4DV6BIBLIOTHEQUEIMAGEEXPORT") RECEVOIR VARIABLE($vlNbPictures) Si ($vlNombreImages) Boucle($vlImage;1;$vlNombreImages) RECEVOIR VARIABLE($vlRefImage) Si (OK=1) RECEVOIR VARIABLE($vlNomImage) Fin de si Si (OK=1) RECEVOIR VARIABLE ($vgImage) Fin de si Si (OK=1) ECRIRE IMAGE DANS BIBLIOTHEQUE($vgImage;$vlRefImage; $vlNomImage) Sinon $vlImage:=$vlNombreImages+1 ALERTE("Ce fichier semble endommag.") Fin de si Fin de boucle Sinon ALERTE("Ce fichier semble endommag.") Fin de si Sinon ALERTE("Le fichier "+Document+" nest pas un export de la bibliothque dimages.") Fin de si REGLER SERIE(11) Fin de si

916

4e Dimension - Langage

Rfrence LIRE IMAGE DANS BIBLIOTHEQUE, LISTE IMAGES DANS BIBLIOTHEQUE, SUPPRIMER IMAGE DANS BIBLIOTHEQUE. Gestion des erreurs S'il n'y a pas assez de mmoire pour retourner limage, l'erreur 108 est gnre. Notez que des erreurs dE/S peuvent galement tre gnres (si par exemple le fichier de structure est verrouill). Vous pouvez intercepter ces erreurs avec une mthode de gestion d'erreurs.

4e Dimension - Langage

917

SUPPRIMER IMAGE DANS BIBLIOTHEQUE

Images version 6.7 (Modifie)

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER IMAGE DANS BIBLIOTHEQUE (refImage | nomImage) Paramtre Type refImage | nomImage Num | Alpha Description Numro de rfrence ou Nom d'une image de la bibliothque d'images

Description La commande SUPPRIMER IMAGE DANS BIBLIOTHEQUE supprime de la bibliothque dimages limage dont vous avez pass le numro de rfrence dans refImage ou le nom dans nomImage. Si ce numro de rfrence ou ce nom ne correspond aucune image, la commande ne fait rien. 4D Server : SUPPRIMER IMAGE DANS BIBLIOTHEQUE ne peut pas tre utilise dans une mthode excute sur le poste serveur (procdure stocke ou trigger). Si vous appelez SUPPRIMER IMAGE DANS BIBLIOTHEQUE sur le serveur, il ne se passe rien, lappel est ignor. Attention : Les objets de structure (lments de liste hirarchique, lignes de menu, etc.) peuvent se rfrer une image de la bibliothque. Soyez prudent lorsque vous supprimez par programmation une image de la bibliothque dimages. Exemples (1) Lexemple suivant supprime limage n4444 de la bibliothque dimages :

SUPPRIMER IMAGE DANS BIBLIOTHEQUE(4444)

(2) Lexemple suivant supprime de la bibliothque dimages celles dont le nom commence par le symbole dollar ($) : LISTE IMAGES DANS BIBLIOTHEQUE($alRefImage;$asNomImage) Boucle($vlImage;1;Taille tableau($alRefImage)) Si ($asNomImage{$vlImage}="$@") SUPPRIMER IMAGE DANS BIBLIOTHEQUE($alRefImage{$vlImage}) Fin de si Fin de boucle

Rfrence ECRIRE IMAGE DANS BIBLIOTHEQUE, LIRE IMAGE DANS BIBLIOTHEQUE, LISTE IMAGES DANS BIBLIOTHEQUE.

918

4e Dimension - Langage

31 ________________________ Import-Export

4e Dimension - Langage

919

920

4e Dimension - Langage

LECTURE ASCII

Import-Export version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LECTURE ASCII ({table; }document) Paramtre table document Type Table Alpha Description Table dans laquelle effectuer l'import ou Table par dfaut si ce paramtre est omis Document texte importer

Description La commande LECTURE ASCII lit les donnes de document (document texte Windows ou MacOS) et les crit dans la table table en crant de nouveaux enregistrements. L'opration d'import s'effectue par le formulaire entre courant. Les champs et les variables sont lus en fonction du plan o ils se trouvent dans le formulaire entre. Soyez donc attentif ce qui se trouve au premier ou au deuxime plan en matire d'objets (champs et variables) dans le formulaire. Le premier objet dans lequel des donnes sont importes doit tre l'arrire-plan du formulaire. Si le nombre de champs et de variables dans le formulaire ne correspond pas au nombre de champs importer, les champs supplmentaires sont ignors. Un formulaire entre utilis pour l'import ne peut contenir de boutons. Les objets de sous-formulaire sont ignors. Note : Un moyen de s'assurer que les donnes sont importes dans les bons objets est de slectionner l'objet dans lequel sera import le premier champ. Cet objet doit tre au premier plan. Pour l'import dans le deuxime champ, placer ce champ devant le premier et ainsi de suite, pour tous les champs et variables. Le champ qui se trouve au premier plan est donc celui dans lequel sont places les dernires donnes du document importer. L'vnement Sur validation est envoy la mthode du formulaire pour chaque enregistrement import. Utilisez cet vnement pour copier les donnes des variables vers les champs, si vous utilisez des variables dans le formulaire d'import. Le paramtre document peut contenir un chemin d'accs aux noms de volumes et de dossiers. Si vous passez une chane vide, la bote de dialogue standard d'ouverture de fichiers est affiche. Si l'utilisateur annule le dialogue, l'opration d'import est annule et la variable systme OK est mise 0.

4e Dimension - Langage

921

Un thermomtre de progression est affich pendant l'import. L'utilisateur peut annuler l'opration en cliquant sur le bouton Stop. Les enregistrements dj imports le resteront. Si l'import s'est correctement droul, la variable systme OK est mise 1. En cas d'erreur ou d'interruption de l'opration, la variable systme OK est mise 0. Vous pouvez cacher le thermomtre au moyen de la commande SUPPRIMER MESSAGES. L'opration d'import utilise la table ASCII de la plate-forme sur laquelle est effectu l'import, sauf si vous avez pralablement modifi cette table ASCII avec la commande UTILISER FILTRE. Il est donc possible d'effectuer des imports satisfaisants entre des platesformes dont les tables ASCII diffrent. Lors de l'utilisation de LECTURE ASCII, le dlimiteur de champs par dfaut est le caractre de tabulation (ASCII 9). Le dlimiteur d'enregistrements par dfaut est le retour chariot (ASCII 13). Vous pouvez modifier ces valeurs par dfaut en assignant de nouvelles valeurs aux variables systme FldDelimit et RecDelimit. L'utilisateur peut modifier ces valeurs par dfaut dans la bote de dialogue d'import du mode Utilisation. Comme les champs Texte peuvent contenir des Retours chariot, soyez prudent si vous utilisez le Retour chariot comme dlimiteur entre les champs importer. Exemple Cet exemple importe des donnes d'un document texte. Cette mthode commence par le choix du formulaire. Ici, vous changez les dlimiteurs, et vous faites l'import : FORMULAIRE ENTREE([Personnes]; "Import") FldDelimit:=27 ` caractre de dlimitation: Escape RecDelimit:=10 ` caractre de dlimitation: Retour la ligne LECTURE ASCII([Personnes];"Nouvelles Personnes") ` Import du document Nouvelles Personnes

Rfrence ECRITURE ASCII, LECTURE DIF, LECTURE SYLK, UTILISER FILTRE. Variables et ensembles systme OK prend la valeur 1 si l'import s'est correctement droul, sinon elle prend la valeur 0.

922

4e Dimension - Langage

ECRITURE ASCII

Import-Export version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRITURE ASCII ({table; }document) Paramtre table document Type Table Alpha Description Table depuis laquelle effectuer l'export ou Table par dfaut si ce paramtre est omis Document texte exporter

Description La commande ECRITURE ASCII crit dans document (document texte Windows ou MacOS) les donnes des enregistrements de la slection courante de la table du process courant. L'opration d'export s'effectue par le formulaire sortie courant. Les champs et les variables sont crits en fonction de l'ordre de saisie dans le formulaire sortie. C'est pourquoi vous devez veiller utiliser un formulaire sortie ne contenant que les champs ou objets saisissables que vous voulez exporter. Ne placez pas de boutons ou d'autres objets dans le formulaire sortie. Les objets de sous-formulaire sont ignors. L'vnement Sur chargement est envoy la mthode du formulaire pour chaque enregistrement export. Utilisez cet vnement pour dfinir les variables utilises dans le formulaire d'export. Le paramtre document peut crer un nouveau document ou dsigner un document existant. Si le document a le mme nom qu'un document existant, ce dernier est remplac. Le document peut contenir un chemin d'accs de volume ou de dossier. Si vous passez une chane vide, la bote de dialogue standard de sauvegarde de fichiers est affiche. Si l'utilisateur annule ce dialogue, l'opration d'export est annule et la variable systme OK est mise 0. Un thermomtre de progression est affich pendant l'export. L'utilisateur peut annuler l'opration en cliquant sur le bouton Stop. Si l'export s'est correctement droul, la variable systme OK est mise 1. En cas d'erreur ou d'interruption de l'opration, la variable systme OK est mise 0. Vous pouvez cacher le thermomtre au moyen de la commande SUPPRIMER MESSAGES.

4e Dimension - Langage

923

L'opration d'export utilise la table ASCII de la plate-forme de laquelle est effectu l'export, sauf si vous avez pralablement modifi cette table ASCII avec la commande UTILISER FILTRE. On peut ainsi raliser des exports satisfaisants entre des plates-formes dont les tables ASCII diffrent. Lors de l'utilisation de ECRITURE ASCII, le dlimiteur de champs par dfaut est le caractre de tabulation (ASCII 9). Le dlimiteur d'enregistrement est par dfaut le retour chariot (ASCII 13). Vous pouvez modifier ces valeurs en assignant de nouvelles valeurs aux deux variables systme FldDelimit et RecDelimit. L'utilisateur peut modifier ces valeurs par dfaut dans le dialogue d'export du mode Utilisation. Comme les champs Texte peuvent contenir des retours chariot, soyez prudent si vous utilisez le retour chariot comme dlimiteur entre les champs exporter. Exemple Cet exemple exporte des donnes vers un document texte. Cette mthode commence par le choix du formulaire sortie. Ici, vous modifiez les dlimiteurs et vous effectuez l'export : FORMULAIRE SORTIE([Personnes];"Export") FldDelimit:=27 ` caractre de dlimitation: Escape RecDelimit:=10 ` caractre de dlimitation: Retour la ligne ` Export vers le document "Nouvelles Personnes" ECRITURE ASCII([Personnes];"Nouvelles Personnes")

Rfrence ECRITURE DIF, ECRITURE SYLK, LECTURE ASCII, UTILISER FILTRE. Variables et ensembles Systme OK prend la valeur 1 si l'export s'est correctement droul, sinon elle prend la valeur 0.

924

4e Dimension - Langage

LECTURE SYLK

Import-Export version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LECTURE SYLK ({table; }document) Paramtre table document Type Table Alpha Description Table dans laquelle effectuer l'import ou Table par dfaut si ce paramtre est omis Document SYLK importer

Description La commande LECTURE SYLK lit les donnes de document (document SYLK Windows ou MacOS) et les crit dans la table table en crant de nouveaux enregistrements. L'opration d'import s'effectue par le formulaire entre courant. Les champs et les variables sont lus en fonction du plan o ils se trouvent dans le formulaire entre. Soyez donc attentif ce qui se trouve au premier ou au deuxime plan en matire d'objets (champs et variables) dans le formulaire. Le premier objet dans lequel des donnes sont importes doit tre l'arrire-plan du formulaire. Si le nombre de champs et de variables dans le formulaire ne correspond pas au nombre de champs importer, les champs supplmentaires sont ignors. Un formulaire entre utilis pour l'import ne peut contenir de boutons. Les objets de sous-formulaire sont ignors. Note : Un moyen de s'assurer que les donnes sont importes dans les bons objets est de slectionner l'objet dans lequel sera import le premier champ. Cet objet doit tre au premier plan. Pour l'import dans le deuxime champ, placer ce champ devant le premier et ainsi de suite, pour tous les champs et variables. Le champ qui se trouve au premier plan est donc celui dans lequel sont places les dernires donnes du document importer. L'vnement Sur validation est envoy la mthode du formulaire pour chaque enregistrement import. Utilisez cet vnement pour copier les donnes des variables vers les champs, si vous utilisez des variables dans le formulaire d'import. Le paramtre document peut contenir un chemin d'accs aux noms de volumes et de dossiers. Si vous passez une chane vide, la bote de dialogue standard d'ouverture de fichiers est affiche. Si l'utilisateur annule le dialogue, l'opration d'import est annule et la variable systme OK est mise 0.

4e Dimension - Langage

925

Un thermomtre de progression est affich pendant l'import. L'utilisateur peut annuler l'opration en cliquant sur le bouton Stop. Les enregistrements dj imports le resteront. Si l'import s'est correctement droul, la variable systme OK est mise 1. En cas d'erreur ou d'interruption de l'opration, la variable systme OK est mise 0. Vous pouvez cacher le thermomtre au moyen de la commande SUPPRIMER MESSAGES. L'opration d'import utilise la table ASCII de la plate-forme sur laquelle est effectue l'import, sauf si vous avez pralablement modifi cette table ASCII avec la commande UTILISER FILTRE. Il est donc possible d'effectuer des imports satisfaisants entre des platesformes dont les tables ASCII diffrent. Lors de l'utilisation de LECTURE SYLK, le dlimiteur de champs par dfaut est le caractre de tabulation (ASCII 9). Le dlimiteur d'enregistrements par dfaut est le retour chariot (ASCII 13). Vous pouvez modifier ces valeurs par dfaut en assignant de nouvelles valeurs aux variables systme FldDelimit et RecDelimit. L'utilisateur peut modifier ces valeurs par dfaut dans la bote de dialogue d'import du mode Utilisation. Comme les champs Texte peuvent contenir des Retours chariot, soyez prudent si vous utilisez le Retour chariot comme dlimiteur entre les champs importer. Exemple Cet exemple importe des donnes d'un document SYLK. Cette mthode commence par le choix du formulaire puis dclenche l'import:

FORMULAIRE ENTREE([Personnes]; "Import") LECTURE SYLK([Personnes];"Nouvelles Personnes") ` Import du document Nouvelles Personnes

Rfrence ECRITURE SYLK, LECTURE ASCII, LECTURE DIF, UTILISER FILTRE. Variables et ensembles Systme OK prend la valeur 1 si l'import s'est correctement droul, sinon elle prend la valeur 0.

926

4e Dimension - Langage

ECRITURE SYLK

Import-Export version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRITURE SYLK ({table; }document) Paramtre table document Type Table Alpha Description Table de laquelle effectuer l'export ou Table par dfaut si ce paramtres est omis Document SYLK exporter

Description La commande ECRITURE SYLK crit dans document (document SYLK Windows ou MacOS) les donnes des enregistrements de la slection courante de la table du process courant. L'opration d'export s'effectue par le formulaire sortie courant. Les champs et les variables sont crits en fonction de l'ordre de saisie dans le formulaire sortie. C'est pourquoi vous devez veiller utiliser un formulaire sortie ne contenant que les champs ou objets saisissables que vous voulez exporter. Ne placez pas de boutons ou autres objets sur le formulaire sortie. Les objets de sous-formulaire sont ignors. L'vnement Sur chargement est envoy la mthode du formulaire pour chaque enregistrement export. Utilisez cet vnement pour dfinir les variables utilises dans le formulaire d'export. Le paramtre document peut crer un nouveau document ou dsigner un document existant. Si le document a le mme nom qu'un document existant, ce dernier est remplac. Le document peut contenir un chemin d'accs de volume ou de dossier. Si vous passez une chane vide, la bote de dialogue standard de sauvegarde de fichiers est affiche. Si l'utilisateur annule ce dialogue, l'opration d'export est annule et la variable systme OK est mise 0. Un thermomtre de progression est affich pendant l'export. L'utilisateur peut annuler l'opration en cliquant sur le bouton Stop. Si l'export s'est correctement droul, la variable systme OK est mise 1. En cas d'erreur ou d'interruption de l'opration, la variable systme OK est mise 0. Vous pouvez cacher le thermomtre au moyen de la commande SUPPRIMER MESSAGES.

4e Dimension - Langage

927

L'opration d'export utilise la table ASCII de la plate-forme de laquelle est effectu l'export, sauf si vous avez pralablement modifi cette table ASCII avec la commande UTILISER FILTRE. On peut ainsi faire des exports satisfaisants entre des plates-formes dont les tables ASCII diffrent. Lors de l'utilisation de ECRITURE SYLK, le dlimiteur de champs par dfaut est le caractre de tabulation (ASCII 9). Le dlimiteur d'enregistrement est par dfaut le retour chariot (ASCII 13). Vous pouvez modifier ces valeurs en assignant de nouvelles valeurs aux deux variables systme FldDelimit et RecDelimit. L'utilisateur peut modifier ces valeurs par dfaut dans le dialogue d'export du mode Utilisation. Comme les champs Texte peuvent contenir des retours chariot, soyez prudent si vous utilisez le retour chariot comme dlimiteur entre les champs exporter. Exemple Cet exemple exporte des donnes vers un document SYLK. La mthode commence par le choix du formulaire sortie, puis l'export est dclench : FORMULAIRE SORTIE([Personnes];"Export") ` Export vers le document "Nouvelles Personnes" ECRITURE SYLK([Personnes];"Nouvelles Personnes")

Rfrence ECRITURE ASCII, ECRITURE DIF, LECTURE SYLK, UTILISER FILTRE. Variables et ensembles Systme OK prend la valeur 1 si l'export s'est correctement droul, sinon elle prend la valeur 0.

928

4e Dimension - Langage

LECTURE DIF

Import-Export version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LECTURE DIF ({table; }document) Paramtre table document Type Table Alpha Description Table dans laquelle effectuer l'import ou Table par dfaut si ce paramtre est omis Document DIF importer

Description La commande LECTURE DIF lit les donnes de document (document DIF Windows ou MacOS) et les crit dans la table table en crant de nouveaux enregistrements. L'opration d'import s'effectue par le formulaire entre courant. Les champs et les variables sont lus en fonction du plan o ils se trouvent dans le formulaire entre. Soyez donc attentif ce qui se trouve au premier ou au deuxime plan en matire d'objets (champs et variables) dans le formulaire. Le premier objet dans lequel des donnes sont importes doit tre l'arrire-plan du formulaire. Si le nombre de champs et de variables dans le formulaire ne correspond pas au nombre de champs importer, les champs supplmentaires sont ignors. Un formulaire entre utilis pour l'import ne peut contenir de boutons. Les objets de sous-formulaire sont ignors. Note : Un moyen de s'assurer que les donnes sont importes dans les bons objets est de slectionner l'objet dans lequel sera import le premier champ. Cet objet doit tre au premier plan. Pour l'import dans le deuxime champ, placer ce champ devant le premier et ainsi de suite, pour tous les champs et variables. Le champ qui se trouve au premier plan est donc celui dans lequel sont places les dernires donnes du document importer. L'vnement Sur validation est envoy la mthode du formulaire pour chaque enregistrement import. Utilisez cet vnement pour copier les donnes des variables vers les champs, si vous utilisez des variables dans le formulaire d'import. Le paramtre document peut contenir un chemin d'accs aux noms de volumes ou de dossiers. Si vous passez une chane vide, la bote de dialogue standard d'ouverture de fichiers est affiche. Si l'utilisateur annule le dialogue, l'opration d'import est annule et la variable systme OK est mise 0.

4e Dimension - Langage

929

Un thermomtre de progression est affich pendant l'import. L'utilisateur peut annuler l'opration en cliquant sur le bouton Stop. Les enregistrements dj imports le resteront. Si l'import s'est correctement droul, la variable systme OK est mise 1. En cas d'erreur ou d'interruption de l'opration, la variable systme OK est mise 0. Vous pouvez cacher le thermomtre au moyen de la commande SUPPRIMER MESSAGES. L'opration d'import utilise la table ASCII de la plate-forme de laquelle est effectu l'import, sauf si vous avez pralablement modifi cette table ASCII avec la commande UTILISER FILTRE. Il est donc possible d'effectuer des imports satisfaisants entre platesformes dont les tables ASCII diffrent. Lors de l'utilisation de LECTURE DIF, le dlimiteur de champs par dfaut est le caractre de tabulation (ASCII 9). Le dlimiteur d'enregistrements par dfaut est le retour chariot (ASCII 13). Vous pouvez modifier ces valeurs par dfaut en assignant de nouvelles valeurs aux variables systme FldDelimit et RecDelimit. L'utilisateur peut modifier ces valeurs par dfaut dans la bote de dialogue d'import du mode Utilisation. Comme les champs Texte peuvent contenir des Retours chariot, soyez prudent si vous utilisez le Retour chariot comme dlimiteur entre les champs importer. Exemple Cet exemple importe des donnes d'un document DIF. Cette mthode commence par le choix du formulaire, puis effectue l'import : FORMULAIRE ENTREE([Personnes]; "Import") ` Import du document Nouvelles Personnes LECTURE DIF([Personnes];"Nouvelles Personnes")

Rfrence ECRITURE DIF, LECTURE ASCII, LECTURE SYLK, UTILISER FILTRE. Variables et ensembles Systme OK prend la valeur 1 si l'import s'est correctement droul, sinon elle prend la valeur 0.

930

4e Dimension - Langage

ECRITURE DIF

Import-Export version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRITURE DIF ({table; }document) Paramtre table document Type Table Alpha Description Table de laquelle effectuer l'export ou Table par dfaut si ce paramtre est omis Document DIF exporter

Description La commande ECRITURE DIF crit les donnes des enregistrements de la slection courante de la table du process courant dans document (document DIF Windows ou MacOS). L'opration d'export s'effectue par le formulaire sortie courant. Les champs et les variables sont crits en fonction de l'ordre de saisie dans le formulaire sortie. C'est pourquoi vous devez veiller utiliser un formulaire sortie ne contenant que les champs ou objets saisissables que vous voulez exporter. Ne placez pas de boutons ou autres objets sur le formulaire sortie. Les objets de sous-formulaire sont ignors. L'vnement Sur chargement est envoy la mthode du formulaire pour chaque enregistrement export. Utilisez cet vnement pour dfinir les variables utilises dans le formulaire d'export. Le paramtre document peut crer un nouveau document ou dsigner un document existant. Si le document a le mme nom qu'un document existant, ce dernier est remplac. Le document peut contenir un chemin d'accs de volume ou de dossiers. Si vous passez une chane vide, la bote de dialogue standard de sauvegarde de documents s'affiche. Si l'utilisateur annule ce dialogue, l'opration d'export est annule et la variable systme OK est mise 0. Un thermomtre de progression est affich pendant l'export. L'utilisateur peut annuler l'opration en cliquant sur le bouton Stop. Si l'export s'est correctement droul, la variable systme OK est mise 1. En cas d'erreur ou d'interruption de l'opration, la variable systme OK est mise 0. Vous pouvez cacher le thermomtre au moyen de la commande SUPPRIMER MESSAGES.

4e Dimension - Langage

931

L'opration d'export utilise la table ASCII de la plate-forme de laquelle est effectu l'export, sauf si vous avez pralablement modifi cette table ASCII avec la commande UTILISER FILTRE. On peut ainsi faire des exports satisfaisants entre des plates-formes dont les tables ASCII diffrent. Lors de l'utilisation de ECRITURE DIF, le dlimiteur de champs par dfaut est le caractre de tabulation (ASCII 9). Le dlimiteur d'enregistrement est par dfaut le retour chariot (ASCII 13). Vous pouvez modifier ces valeurs en assignant de nouvelles valeurs aux deux variables systme FldDelimit et RecDelimit. L'utilisateur peut modifier ces valeurs par dfaut dans le dialogue d'export du mode Utilisation. Comme les champs Texte peuvent contenir des retours chariot, soyez prudent si vous utilisez le retour chariot comme dlimiteur entre les champs exporter. Exemple Cet exemple exporte des donnes vers un document DIF. Cette mthode commence par le choix du formulaire sortie, puis effectue l'export : FORMULAIRE SORTIE([Personnes];"Export") ` Export vers le document "Nouvelles Personnes" ECRITURE DIF([Personnes];"Nouvelles Personnes")

Rfrence ECRITURE ASCII, ECRITURE SYLK, LECTURE DIF, UTILISER FILTRE. Variables et ensembles Systme OK prend la valeur 1 si l'export s'est correctement droul, sinon elle prend la valeur 0.

932

4e Dimension - Langage

IMPORTER DONNEES

Import-Export version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

IMPORTER DONNEES (nomFichier{; projet{; *}}) Paramtre nomFichier projet Type Alpha BLOB Description Chemin daccs et nom du fichier importer Contenu du projet dimport Nouveau contenu du projet dimport (si le paramtre * a t pass) Affichage de la bote de dialogue dimport et mise jour du projet

Description La commande IMPORTER DONNEES permet dimporter des donnes depuis le fichier nomFichier. 4D peut importer des donnes au format Texte, Texte de longueur fixe, XML, SYLK, DIF, DBF (dBase), et 4e Dimension. Si vous passez une chane vide dans le nomFichier, IMPORTER DONNEES provoque laffichage dune bote de dialogue standard douverture de fichiers, permettant lutilisateur de slectionner le fichier dimport. Une fois la bote de dialogue valide, la variable systme Document contient le chemin daccs et le nom du fichier dimport. Si lutilisateur clique sur le bouton Annuler, lexcution est stoppe et la variable systme OK prend la valeur 0. Si vous ne passez pas le paramtre optionnel projet, la bote de dialogue de paramtrage dimport saffiche. Lutilisateur peut dfinir ses paramtres dimport ou charger un projet existant. Note : Un projet dimport contient tous les paramtres de limport, tels que les tables et champs darrive, les dlimiteurs, etc. Vous dfinissez ces paramtres dans la bote de dialogue dimport. Un projet peut tre sauvegard sur disque et charg. Pour plus dinformations sur cette bote de dialogue, reportez-vous au manuel Mode Utilisation. Si vous passez dans le paramtre projet un BLOB contenant un projet dimport valide, limport seffectue directement, sans intervention de lutilisateur. Dans ce cas, le projet doit avoir t pralablement dfini dans la bote de dialogue de paramtrage dimport, puis conserv. Pour cela, vous disposez de deux solutions : - le sauvegarder sur disque, puis le charger laide de la commande DOCUMENT VERS BLOB dans le champ ou la variable BLOB que vous passez dans le paramtre projet. - utiliser la commande IMPORTER DONNEES avec un paramtre projet vide et le paramtre optionnel *, puis stocker le paramtre projet dans un champ BLOB (cf. ci-dessous). Cette solution permet, dune part, de le conserver avec le fichier de donnes, et dautre part dviter la phase de chargement dans un BLOB depuis le disque. Note : Reportez-vous la commande EXPORTER DONNEES pour un exemple de dfinition de projet vide. 4e Dimension - Langage 933

Le paramtre optionnel *, sil est est spcifi, provoque laffichage de la bote de dialogue de paramtrage dimport avec les paramtrages dfinis dans le projet. Ce fonctionnement permet dutiliser un projet prdfini, tout en ayant la possibilit de modifier un ou plusieurs paramtres. En outre, le paramtre projet contient, aprs la fermeture de la bote de dialogue dimport, les paramtres du nouveau projet. Vous pouvez alors le stocker dans un champ BLOB, sur disque, etc. Si limport se droule correctement, la variable systme OK prend la valeur 1. Rfrence EXPORTER DONNEES, LECTURE ASCII, LECTURE DIF, LECTURE SYLK. Variables et ensembles systme Si l'utilisateur clique sur Annuler dans une des botes de dialogue (de slection de projet ou de paramtrage d'import), la variable systme OK prend la valeur 0. Si limport se droule correctement, la variable systme OK prend la valeur 1.

934

4e Dimension - Langage

EXPORTER DONNEES

Import-Export version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

EXPORTER DONNEES (nomFichier{; projet{; *}}) Paramtre nomFichier projet Type Alpha BLOB Description Chemin daccs et nom du fichier dexport Contenu du projet dexport Nouveau contenu du projet dexport (si le paramtre * a t pass) Affichage de la bote de dialogue dexport et mise jour du projet

Description La commande EXPORTER DONNEES permet dexporter des donnes dans le fichier nomFichier. 4D peut exporter des donnes au format Texte, Texte de longueur fixe, XML, SYLK, DIF, DBF (dBase), et 4e Dimension. Si vous passez une chane vide dans le nomFichier, EXPORTER DONNEES provoque laffichage dune bote de dialogue standard denregistrement de fichiers, permettant lutilisateur de dfinir le nom, le type et lemplacement du fichier dexport. Une fois la bote de dialogue valide, la variable systme Document contient le chemin daccs et le nom de ce fichier. Si lutilisateur clique sur le bouton Annuler, lexcution est stoppe et la variable systme OK prend la valeur 0. Si vous ne passez pas le paramtre optionnel projet, la bote de dialogue de paramtrage dexport saffiche alors. Lutilisateur peut dfinir ses paramtres dexport ou charger un projet dexport existant. Note : Un projet dexport contient tous les paramtres de lexport, tels que les tables et champs exports, les dlimiteurs, etc. Vous dfinissez ces paramtres dans la bote de dialogue dexport. Un projet peut tre sauvegard sur disque et charg. Pour plus dinformations sur cette bote de dialogue, reportez-vous au manuel Mode Utilisation. Si vous passez dans le paramtre projet un BLOB contenant un projet dexport valide, lexport seffectue directement, sans intervention de lutilisateur. Dans ce cas, le projet doit avoir t pralablement dfini dans la bote de dialogue de paramtrage dexport, puis conserv. Pour cela, vous disposez de deux solutions : - le sauvegarder sur disque, puis le charger laide de la commande DOCUMENT VERS BLOB dans le champ ou la variable BLOB que vous passez dans le paramtre projet. - utiliser la commande EXPORTER DONNEES avec un paramtre projet vide et le paramtre optionnel *, puis stocker le paramtre projet dans un champ BLOB (cf. ci-dessous). Cette solution permet, dune part, de le conserver avec le fichier de donnes, et dautre part dviter la phase de chargement dans un BLOB depuis le disque.

4e Dimension - Langage

935

Le paramtre optionnel *, sil est est spcifi, provoque laffichage de la bote de dialogue de paramtrage dexport avec les paramtrages dfinis dans le projet. Ce fonctionnement permet dutiliser un projet prdfini, tout en ayant la possibilit de modifier un ou plusieurs paramtres. En outre, le paramtre projet contient, aprs la fermeture de la bote de dialogue dexport, les paramtres du nouveau projet. Vous pouvez alors le stocker dans un champ BLOB, sur disque, etc. Si lexport se droule correctement, la variable systme OK prend la valeur 1. Exemple Cet exemple cre un projet vide et y stockera les paramtres dfinis par l'utilisateur dans la bote de dialogue dexport : C_BLOB($exportParams) FIXER TAILLE BLOB($exportParams;0) `Initialisation du BLOB ` Affichage de la bote de dialogue d'export EXPORTER DONNEES("DocExport.txt";$exportParams;*)

Rfrence ECRITURE ASCII, ECRITURE DIF, ECRITURE SYLK, IMPORTER DONNEES. Variables et ensembles systme Si l'utilisateur clique sur Annuler dans une des botes de dialogue (d'enregistrement de projet ou de paramtrage d'export), la variable systme OK prend la valeur 0. Si lexport se droule correctement, la variable systme OK prend la valeur 1.

936

4e Dimension - Langage

32 ________________________ Impressions

4e Dimension - Langage

937

938

4e Dimension - Langage

IMPRIMER ETIQUETTES

Impressions version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

IMPRIMER ETIQUETTES ({table}{; tiqFichier{; * | >}}) Paramtre table tiqFichier *|> Type Table Alpha *|> Description Table imprimer ou Table par dfaut si ce paramtre est omis Nom de fichier d'tiquettes sur disque * pour supprimer les botes de dialogue d'impression ou > pour ne pas rinitialiser les paramtres d'impression

Description IMPRIMER ETIQUETTES vous permet d'imprimer des tiquettes partir des donnes de la slection de table. Si vous ne spcifiez pas le paramtre tiqFichier, IMPRIMER ETIQUETTES imprime la slection courante de table sous forme d'tiquettes, en utilisant le formulaire sortie courant du process. Vous ne pouvez pas imprimer de sous-formulaires lorsque vous utilisez cette commande. Pour plus d'informations sur la cration d'tiquettes l'aide de formulaires, reportez-vous au manuel Mode Structure de 4e Dimension. Si vous spcifiez le paramtre tiqFichier, IMPRIMER ETIQUETTES vous permet d'imprimer un document d'tiquettes existant stock sur disque ou d'ouvrir l'Assistant de cration d'tiquettes (affich ci-dessous). Pour plus d'informations sur ce point, reportez-vous l'exemple plus bas.

4e Dimension - Langage

939

Par dfaut, IMPRIMER ETIQUETTES affiche les botes de dialogue d'impression. Si l'utilisateur annule une des deux botes de dialogue, l'excution de la commande est stoppe et l'tat n'est pas imprim. Vous pouvez supprimer leur affichage en utilisant soit le paramtre optionnel astrisque (*), soit le paramtre optionnel suprieur (>). Le paramtre * provoque une impression avec les paramtres d'impression courants (paramtres par dfaut ou dfinis par les commandes UTILISER PARAMETRES IMPRESSION et/ou FIXER OPTION IMPRESSION). Le paramtre > provoque en outre limpression sans rinitialisation des paramtres dimpression. Ce paramtre est utile lorsque vous souhaitez excuter successivement plusieurs appels IMPRIMER ETIQUETTES (par exemple l'intrieur dune boucle) tout en conservant des paramtres dimpression personnaliss pralablement dfinis. Il est noter que ces paramtres n'ont pas d'effet si l'assistant de cration d'tiquettes est utilis. Si l'assistant de cration d'tiquettes n'est pas utilis, la variable systme OK est mise 1 si toutes les tiquettes ont t imprimes ; sinon, elle prend la valeur 0 (zro) (par exemple si l'utilisateur a cliqu sur le bouton Annuler dans les botes de dialogue d'impression). Si vous spcifiez le paramtre tiqFichier, les tiquettes sont imprimes avec les paramtrages dfinis dans tiqFichier. Si tiqFichier est une chane vide (""), IMPRIMER ETIQUETTES affiche une bote de dialogue standard douverture de documents, permettant l'utilisateur de slectionner le fichier d'tiquettes utiliser. Si tiqFichier est le nom d'un fichier qui n'existe pas ou est invalide (si vous passez, par exemple, Caractere(1) dans tiqFichier), l'assistant de cration d'tiquettes s'affiche, permettant l'utilisateur de crer son propre format d'tiquettes. 4D Server : Cette commande peut tre excute sur 4D Server dans le cadre d'une procdure stocke. Dans ce contexte : Veillez ce quaucune bote de dialogue napparaisse sur le poste serveur (sauf besoin spcifique). Pour cela, il est ncessaire dappeler la commande avec le paramtre * ou >. La syntaxe faisant apparatre lditeur dtiquettes ne fonctionne pas avec 4D Server, dans ce cas, la variable systme OK prend la valeur 0. En cas de problme sur limprimante (plus de papier, imprimante dconnecte, etc.), aucun message d'erreur n'est gnr. Exemples (1) L'exemple suivant imprime des tiquettes l'aide du formulaire de sortie de la table. L'exemple s'appuie sur deux mthodes. La premire est une mthode projet qui dsigne le formulaire sortie utiliser puis imprime les tiquettes : TOUT SELECTIONNER([Adresses]) ` Slection de tous les enregistrements FORMULAIRE SORTIE ([Adresses]; "ImprimEtiq")` Slection du formulaire sortie IMPRIMER ETIQUETTES([Adresses]) ` Impression des tiquettes FORMULAIRE SORTIE ([Adresses];"Sortie") ` Rtablit le formulaire sortie par dfaut

940

4e Dimension - Langage

La seconde mthode est la mthode du formulaire "ImprimEtiq". Le formulaire contient une variable, nomme vEtiq, contenant les champs concatns. Si le second champ Adresse (Adr2) est vide, il est enlev par la mthode (notez que cette opration peut tre effectue automatiquement par l'assistant de cration d'tiquettes). La mthode formulaire construit l'tiquette pour chaque enregistrement : ` Mthode formulaire [Adresses];"Etiquette sortie" Au cas ou : (Evenement formulaire=Sur chargement) vEtiq:=[Adresses]Nom1+" "+[Adresses]Nom2+Caractere(13)+[Adresses]Adr1 +Caractere(13) Si ([Adresses]Adr2 # "") vEtiq:=vEtiq +[Adresses]Adr2+Caractere(13) Fin de si vEtiq:=vEtiq+[Adresses]Ville+", "+[Adresses]Dpartement+" "+[Adresses]Code Postal Fin de cas (2) L'exemple suivant permet l'utilisateur d'effectuer une recherche sur la table [Employs], et d'imprimer automatiquement les tiquettes Mes Etiquettes : CHERCHER ([Employs]) Si (OK=1) IMPRIMER ETIQUETTES ([Employs];"Mes Etiquettes";*) Fin de si

(3) L'exemple suivant permet l'utilisateur d'effectuer une recherche sur la table [Employs], puis de choisir les tiquettes qui doivent tre imprimes : CHERCHER ([Employs]) Si (OK=1) IMPRIMER ETIQUETTES ([Employs];"") Fin de si

(4) L'exemple suivant permet l'utilisateur d'effectuer une recherche sur la table [Employs], puis affiche l'assistant de cration d'tiquettes afin que l'utilisateur puisse concevoir, sauvegarder, charger et imprimer tout type d'tiquettes : CHERCHER ([Employs]) Si (OK=1) IMPRIMER ETIQUETTES ([Employs];Caractere(1)) Fin de si

Rfrence IMPRIMER SELECTION, QR ETAT.

4e Dimension - Langage

941

IMPRIMER SELECTION

Impressions version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

IMPRIMER SELECTION ({table}{; }{* | >}) Paramtre table *|> Type Table *|> Description Table laquelle appartient la slection imprimer ou Table par dfaut si ce paramtre est omis * pour supprimer les botes de dialogue d'impression ou > pour ne pas rinitialiser les paramtres d'impression

Description La commande IMPRIMER SELECTION imprime la slection courante de table. Les enregistrements sont imprims dans le formulaire sortie courant de la table du process en cours. IMPRIMER SELECTION a le mme effet que la commande Imprimer... du mode Utilisation. Si la slection courante est vide, IMPRIMER SELECTION ne fait rien. Par dfaut, IMPRIMER SELECTION affiche les botes de dialogue d'impression. Si l'utilisateur annule une des deux botes de dialogue, l'excution de la commande est stoppe et l'tat n'est pas imprim. Vous pouvez supprimer leur affichage en utilisant soit le paramtre optionnel astrisque (*), soit le paramtre optionnel suprieur (>). Le paramtre * provoque une impression avec les paramtres d'impression courants (paramtres par dfaut ou dfinis par les commandes UTILISER PARAMETRES IMPRESSION et/ou FIXER OPTION IMPRESSION). Le paramtre > provoque en outre limpression sans rinitialisation des paramtres dimpression. Ce paramtre est utile lorsque vous souhaitez excuter successivement plusieurs appels IMPRIMER SELECTION (par exemple l'intrieur dune boucle) tout en conservant des paramtres dimpression personnaliss pralablement dfinis. Pendant l'impression, la mthode du formulaire sortie et les mthodes objet du formulaire sont excutes en fonction des vnements slectionns dans les fentres des Proprits des formulaires et des objets, en mode Structure, ainsi que des vnements effectivement gnrs : Un vnement Sur entte est gnr juste avant que la zone d'en-tte soit imprime. Un vnement Sur impression corps est gnr juste avant que l'enregistrement soit imprim.

942

4e Dimension - Langage

Un vnement Sur impression sous total est gnr juste avant qu'une zone de rupture soit imprime. Un vnement Sur impression pied de page est gnr juste avant que la zone de pied de page soit imprime. Vous pouvez savoir si IMPRIMER SELECTION est sur le point d'imprimer le premier en-tte en testant Avant selection pendant un vnement Sur entte. Vous pouvez galement savoir si IMPRIMER SELECTION est sur le point d'imprimer le dernier pied de page, en testant Fin de selection pendant un vnement Sur impression pied de page. Pour plus d'informations, reportez-vous la description de ces commandes ainsi qu'aux commandes Evenement formulaire et Niveau. Si IMPRIMER SELECTION est appele au mme moment par deux process diffrents, l'impression dclenche par le second process attendra que le premier ait termin. Pour imprimer une slection trie avec des sous-totaux ou des ruptures l'aide de la commande IMPRIMER SELECTION, vous devez d'abord trier la slection. Puis vous devez inclure, dans chaque zone de rupture de l'tat, une variable associe une mthode objet assignant le sous-total la variable. Vous pouvez aussi utiliser des fonctions statistiques ou arithmtiques telles que Somme et Moyenne pour assigner des valeurs aux variables. Pour plus d'informations, reportez-vous la description des commandes Sous total, NIVEAUX DE RUPTURES et CUMULER SUR. Attention : N'utilisez pas la commande SAUT DE PAGE avec IMPRIMER SELECTION. SAUT DE PAGE est exclusivement rserve une utilisation combine avec la commande IMPRIMER LIGNE. Aprs un appel IMPRIMER SELECTION, la variable OK prend la valeur 1 si l'impression s'est droule correctement. Si l'impression a t interrompue (par exemple l'utilisateur a cliqu sur un bouton Annuler dans les botes de dialogue d'impression), la variable OK prend la valeur 0 (zro). 4D Server : Cette commande peut tre excute sur 4D Server dans le cadre d'une procdure stocke. Dans ce contexte : Veillez ce quaucune bote de dialogue napparaisse sur le poste serveur (sauf besoin spcifique). Pour cela, il est ncessaire dappeler la commande avec le paramtre * ou >. En cas de problme sur limprimante (plus de papier, imprimante dconnecte, etc.), aucun message d'erreur n'est gnr.

4e Dimension - Langage

943

Exemple L'exemple suivant slectionne la totalit des enregistrements de la table [Personnes]. La commande VISUALISER SELECTION est alors appele pour afficher les enregistrements et permettre l'utilisateur de slectionner ceux qu'il souhaite imprimer. Enfin, les enregistrements choisis sont rcuprs l'aide de la commande UTILISER ENSEMBLE et imprims par IMPRIMER SELECTION : TOUT SELECTIONNER([Personnes]) ` Slection de tous les enregistrements VISUALISER SELECTION ([Personnes]; *) ` Affichage des enregistrements ` Utiliser uniquement les enregistrements slectionns par l'utilisateur UTILISER ENSEMBLE ("UserSet") IMPRIMER SELECTION ([Personnes]) ` Imprimer les enregistrements slectionns

Rfrence CUMULER SUR, Niveau, NIVEAUX DE RUPTURES, Sous total, UTILISER PARAMETRES IMPRESSION.

944

4e Dimension - Langage

Page impression

Impressions version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Page impression Numrique Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Numrique Numro de la page en cours d'impression

Description Page impression retourne le numro de la page en cours d'impression. Cette fonction vous permet de numroter automatiquement les pages d'une impression en cours l'aide de IMPRIMER SELECTION ou du menu Impression dans le mode Utilisation. Exemple L'exemple suivant change la position des numros de page sur un tat pour que l'tat puisse tre reproduit au format recto-verso. Le formulaire pour l'tat comporte deux variables qui affichent les numros de page. Une variable dans le coin bas gauche (vNumGauche) imprime les numros de page pairs. Une autre variable dans le coin bas droite (vNumDroite) imprime les numros de page impairs. L'exemple teste si le numro de page est pair ou impair, puis utilise et efface les variables appropries : Au cas ou : (Evenement formulaire=Sur impression pied de page) Si ((Page impression % 2) = 0) ` Modulo vaut 0 pour un numro de page pair ` Fixer le numro de page gauche vNumGauche := Chaine (Page impression) vNumDroite := "" ` Effacer le numro de page droit Sinon ` Sinon, le numro de page est impair vNumGauche := "" ` Effacer le numro de page gauche vNumDroite := Chaine (Page impression) ` Fixer le numro de page droite Fin de si Fin de cas

Rfrence IMPRIMER SELECTION.

4e Dimension - Langage

945

NIVEAUX DE RUPTURES

Impressions version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

NIVEAUX DE RUPTURES (niveau{; sautPage}) Paramtre niveau sautPage Type Numrique Numrique Description Nombre de niveaux de rupture Niveau de saut de page

Description NIVEAUX DE RUPTURES spcifie le nombre de niveaux de rupture dans un tat cr l'aide de la commande IMPRIMER SELECTION. Attention : En mode compil, vous devez appeler NIVEAUX DE RUPTURES et CUMULER SUR avant la gnration de chaque tat dans lequel vous voulez utiliser des ruptures. Ces commandes activent le traitement des ruptures pour un tat. Pour plus d'informations, reportez-vous la description de la commande Sous total. Le paramtre niveau indique le dernier niveau de rupture pour lequel vous voulez utiliser des ruptures. Ce nombre doit tre infrieur ou gal aux niveaux de tris que vous aurez effectus avant l'impression. Si vous avez effectu un tri sur davantage de niveaux, ces niveaux seront imprims tris, mais ne comporteront pas de rupture. Chaque niveau de rupture gnr provoquera l'impression de zones de rupture et d'en-tte dans le formulaire. Il doit y avoir au moins autant de zones de rupture dans le formulaire que la valeur que vous avez passe dans niveau. S'il y a davantage de zones de rupture, elles seront ignores et ne seront pas imprimes. Le second paramtre (optionnel), sautPage, permet de provoquer un saut de page sur le niveau de rupture de votre choix. Exemple L'exemple suivant imprime un tat avec deux niveaux de rupture. La slection est trie sur quatre champs, mais la commande NIVEAUX DE RUPTURES ne spcifie que deux niveaux de rupture. Seul un champ est cumul l'aide de la commande CUMULER SUR : ` Trier sur quatre champs TRIER ([Emp]Service; >; [Emp]Titre; >; [Emp]Nom; >; Emp]Prnom; >) NIVEAUX DE RUPTURES (2) ` Fixer 2 niveaux de rupture (Service et Titre) CUMULER SUR ([Emp]Salaire) ` Cumuler sur les salaires FORMULAIRE SORTIE ([Emp];"ServiceRessHum") ` Slectionner le formulaire imprimer IMPRIMER SELECTION([Emp]) ` Imprimer l'tat

946

4e Dimension - Langage

CUMULER SUR

Impressions version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CUMULER SUR (objet{; objet2; ...; objetN}) Paramtre objet Type Champ | Var Description Champ ou variable de type numrique cumuler

Description CUMULER SUR dsigne les champ(s) ou variable(s) cumuler dans un tat cr l'aide de la commande IMPRIMER SELECTION. Attention : En mode compil, vous devez appeler NIVEAUX DE RUPTURES et CUMULER SUR avant la gnration de chaque tat dans lequel vous voulez utiliser des ruptures. Ces commandes activent le traitement des ruptures pour un tat. Pour plus d'informations, reportez-vous la description de la commande Sous total. Utilisez CUMULER SUR si vous souhaitez calculer des sous-totaux pour des champs ou variables numriques dans un tat. CUMULER SUR indique 4e Dimension qu'il faut stocker les sous-totaux pour chaque lment spcifi dans objet. Les sous-totaux sont cumuls pour chaque niveau de rupture spcifi par la commande NIVEAUX DE RUPTURES. Excutez CUMULER SUR avant d'imprimer un tat l'aide de IMPRIMER SELECTION. Utilisez la fonction Sous total dans la mthode formulaire ou une mthode objet pour retourner le sous-total d'un des objets spcifi dans objet. Exemples Reportez-vous l'exemple de la commande NIVEAUX DE RUPTURES. Rfrence IMPRIMER SELECTION, NIVEAUX DE RUPTURES, Sous total, TRIER.

4e Dimension - Langage

947

Sous total

Impressions version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Sous total (valeurs{; sautPage}) Numrique Paramtre valeurs sautPage Rsultat Type Champ Numrique Numrique Description Champ ou variable numrique dont vous voulez calculer le sous-total Niveau de rupture auquel effectuer un saut de page Sous-total de valeurs

Description Sous total retourne le sous-total de valeurs pour le niveau de rupture courant ou prcdent. Sous total ne fonctionne que dans le cadre d'une slection trie imprime par l'intermdiaire de la commande IMPRIMER SELECTION ou de la commande de menu Imprimer du mode Utilisation. Le paramtre valeurs doit tre de type numrique, entier ou entier long. Vous devez assigner le rsultat de la fonction Sous total une variable place dans la zone de rupture du formulaire. Attention : En vue d'une utilisation en mode compil, vous devez utiliser les commandes NIVEAUX DE RUPTURES et CUMULER SUR avant d'imprimer un tat sur lequel vous voulez traiter les niveaux de rupture et calculer des sous-totaux. Reportez-vous au paragraphe situ la fin de cette section. Sous total doit tre appele dans la mthode d'un formulaire ou d'un objet du formulaire. Avant de lancer une impression, 4e Dimension parcourt les mthodes formulaire et les mthodes objet et, si la fonction Sous total est prsente, le traitement des ruptures est dclench (en mode interprt uniquement). Le second paramtre (optionnel) de la fonction Sous total est utilis pour provoquer des sauts de page lors de l'impression. Si sautPage vaut 0, Sous total ne gnre aucun saut de page. Si sautPage vaut 1, Sous total gnre un saut de page pour chaque niveau de rupture 1. Si sautPage vaut 2, Sous total gnre un saut de page pour chaque niveau de rupture 1 et 2, etc. Si vous souhaitez avoir des sauts de page sur N niveaux de tri, vous devez trier la slection courante sur N+1 niveaux. Cela vous permet d'effectuer un tri sur un dernier champ, de manire ce qu'il ne cre pas de rupture indsirable. Si vous souhaitez que le dernier champ tri provoque une rupture, triez-le deux fois.

948

4e Dimension - Langage

Conseil : Si vous faites appel la fonction Sous total dans le formulaire sortie affich l'cran, 4e Dimension va afficher un message d'erreur. La fermeture du dialogue d'erreur va provoquer un rafrachissement de l'cran, donc de nouveau l'excution de la mthode qui fait appel Sous total, donc de nouveau un message d'erreur, etc. Pour sortir de ce cercle vicieux, appuyez sur les touche Alt + Maj (Windows) ou Option+Maj (Macintosh) et cliquez sur le bouton Arrter dans la fentre d'erreur : cela met provisoirement fin aux rafrachissements d'cran. Choisissez un autre formulaire de sortie pour viter que le problme ne se rpte. Passez en mode Structure pour isoler l'appel la fonction Sous total par un test (Evenement formulaire = Sur impression sous total) si vous avez l'intention d'utiliser le mme formulaire de sortie pour l'cran et l'imprimante. Exemple L'exemple suivant est la mthode objet d'une variable intitule vSalaire, place dans une zone de rupture d'un formulaire (R0, la zone situe au-dessus du marqueur R0). La variable prend la valeur du sous-total du champ Salaire pour ce niveau de rupture : Au cas ou : (Evenement formulaire = Sur impression sous total) vSalaire := Sous total ([Employs]Salaire) Fin de cas

Reportez-vous au chapitre "Les formulaires de sortie et les tats" du manuel Mode Structure pour plus d'informations sur la construction de formulaires avec des niveaux de ruptures. Traitement de niveaux de rupture dans les formulaires d'tat
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Le traitement des niveaux de rupture peut tre provoqu de deux manires differentes : soit en appelant la fonction Sous total, soit en appelant les commandes CUMULER SUR et NIVEAUX DE RUPTURES. Ces deux techniques permettent d'obtenir le mme rsultat mais ont chacune leurs avantages. Appel de la fonction Sous total (seulement en mode interpret ) Pour provoquer le traitement des niveaux de rupture avec la fonction Sous total, celle-ci doit apparatre dans la mthode formulaire ou dans la mthode d'un objet du formulaire. Avant d'imprimer l'tat, 4e Dimension cherche cette fonction dans toutes les mthodes du formulaire. S'il la trouve, 4e Dimension dclenche le traitement des niveaux de rupture. La fonction n'a pas besoin d'tre formellement appele. Elle peut trs bien se trouver dans la mthode d'un objet situ en-dessous la zone de pied de page (et n'est donc jamais imprim ni excut).

4e Dimension - Langage

949

Lorsque vous utilisez la fonction Sous total pour activer les ruptures, il est ncessaire de trier sur un niveau de plus que le nombre de niveaux de rupture que vous dsirez traiter : si vous voulez traiter deux niveaux de ruptures, il est ncessaire de trier sur trois niveaux. Appel des commandes CUMULER SUR et NIVEAUX DE RUPTURE Vous pouvez utiliser les commandes CUMULER SUR et NIVEAUX DE RUPTURES pour provoquer le traitement des niveaux de ruptures. Il faut pour cela que ces deux commandes soient appeles avant l'impression du formulaire. L'appel la fonction Sous total est encore ncessaire pour afficher les calculs de niveaux intermdiaires. L'utilisation de cette technique permet d'viter de trier sur un niveau de plus. Il est toutefois obligatoire de trier sur au moins le nombre de niveaux de ruptures dsir. Comparaisons des deux techniques Le principal avantage la technique utilisant Sous total est d'tre plus pratique, particulirement en mode Utilisation : il n'est pas ncessaire d'excuter une mthode avant d'imprimer un tat. Les tapes suivre pour imprimer un tat sont les suivantes : 1. Slectionner les enregistrements imprimer. 2. Trier les enregistrements, sur un niveau de plus que le nombre de niveaux de rupture. 3. Imprimer avec la commande Imprimer du menu Fichier. 4e Dimension inspecte toutes les mthodes du formulaire, rencontre la fonction Sous total, dclenche le traitement des niveaux de rupture et imprime l'tat. Cette technique comporte cependant deux inconvnients : la fonction Sous total n'a pas l'effet voulu en mode compil, il est ncessaire de trier sur un niveau de plus, ce qui prend du temps dans le cas de slections importantes. Il est recommand d'utiliser les commandes CUMULER SUR et NIVEAUX DE RUPTURES lorsque l'on a l'intention d'utiliser une mthode pour imprimer un tat. Les tapes suivre sont les suivantes : 1. Slectionner les enregistrements imprimer, 2. Trier les enregistrements sur autant de niveaux que de niveaux de ruptures, 3. Appeler les commandes CUMULER SUR et NIVEAUX DE RUPTURES, 4. Imprimer l'tat avec la commande IMPRIMER SELECTION. Vous devez appeler les commandes CUMULER SUR et NIVEAUX DE RUPTURES pour dclencher le traitement des niveaux de rupture en mode compil. Toutefois, seule la commande Sous total permet d'afficher des calculs de sous-totaux dans des formulaires. Rfrence CUMULER SUR, IMPRIMER SELECTION, Niveau, NIVEAUX DE RUPTURES.

950

4e Dimension - Langage

Niveau

Impressions version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Niveau Numrique Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Numrique Niveau de rupture ou d'en-tte courant

Description La fonction Niveau sert dterminer le niveau de rupture ou d'en-tte courant. Elle retourne le numro du niveau de rupture pendant les vnements Sur entte et Sur impression sous total. Le niveau 0 est le dernier niveau tre imprim et convient l'impression d'un total gnral. Niveau retourne 1 lorsque 4e Dimension imprime une rupture sur le premier champ tri, 2 lorsque 4e Dimension imprime une rupture sur le deuxime champ tri, et ainsi de suite. Exemple Cet exemple est une maquette de mthode formulaire. Il traite chaque vnement possible lorsqu'un tat est imprim dans un formulaire sortie. Niveau est appel lorsqu'un en-tte ou une rupture est imprim(e) : ` Mthode formulaire pour un formulaire sortie utilis pour un tat $vpFormTable:=Table du formulaire courant Au cas ou ` ... : (Evenement formulaire=Sur entte) ` La zone en-tte va tre imprime Au cas ou : (Avant selection($vpFormTable->)) ` Le code pour la premire rupture d'en-tte doit tre plac ici : (Niveau = 1) ` Le code pour la rupture d'en-tte niveau 1 doit tre plac ici : (Niveau = 2) ` Le code pour la rupture d'en-tte niveau 2 doit tre plac ici ` ... Fin de cas

4e Dimension - Langage

951

: (Evenement formulaire=Sur impression corps) ` Un enregistrement va tre imprim ` Le code pour chaque enregistrement doit tre plac ici : (Evenement formulaire=Sur impression sous total) ` Une rupture va tre imprime Au cas ou : (Niveau = 0) ` Le code pour la rupture 0 doit tre plac ici : (Niveau = 1) ` Le code pour la rupture 1 doit tre plac ici ` ... Fin de cas : (Evenement formulaire=Sur impression pied de page) Si (Fin de selection($vpFormTable->)) ` Le code pour le dernier pied de page doit tre plac ici Sinon ` Le code pour le pied de page doit tre plac ici Fin de si Fin de cas

Rfrence CUMULER SUR, Evenement formulaire, IMPRIMER SELECTION, NIVEAUX DE RUPTURES.

952

4e Dimension - Langage

Imprimer ligne

Impressions version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Imprimer ligne ({table; }formulaire{; zone1{; zone2}}){ Numrique } Paramtre table formulaire zone1 zone2 Rsultat Type Table Alpha Numrique Numrique Numrique Description Table imprimer, ou Table par dfaut si ce paramtre est omis Formulaire imprimer Marqueur dimpression, ou Zone de dpart (si zone2 est spcifi) Zone de fin (si zone1 est spcifi) Hauteur de la section imprime

Description La commande Imprimer ligne imprime simplement formulaire avec les valeurs courantes des champs et des variables de table. Cette commande est gnralement utilise pour imprimer des tats particulirement complexes ncessitant un contrle total du processus d'impression. Imprimer ligne ne gre pas les traitements d'enregistrements, ni les ruptures, sauts de pages, en-ttes ou pieds de pages. Vous devez vous-mme prendre en charge ces oprations. Imprimer ligne imprime uniquement des champs et des variables sous une forme fixe. Comme la commande Imprimer ligne ne gnre pas de saut de page aprs avoir imprim un formulaire, elle vous permet de combiner facilement diffrents formulaires sur la mme page. Ainsi, Imprimer ligne est idale pour effectuer des impressions complexes impliquant plusieurs tables et plusieurs formulaires. Pour "forcer" 4D effectuer un saut de page entre deux formulaires, utilisez la commande SAUT DE PAGE. Pour reporter sur la page suivante l'impression d'un formulaire dont la hauteur est suprieure la place disponible, appelez la commande NE PAS VALIDER avant la commande SAUT DE PAGE. Trois syntaxes peuvent tre utilises : Impression du corps d'un formulaire Syntaxe : hauteur:=Imprimer ligne (maTable;monFormulaire) Dans ce cas, Imprimer ligne imprime uniquement la zone de Corps du formulaire (zone situe entre les marqueurs En-tte et Corps).

4e Dimension - Langage

953

Impression de zone de formulaire Syntaxe : hauteur:=Imprimer ligne (maTable;monFormulaire;marqueur) Dans ce cas, la commande imprimera la section dsigne par marqueur. Passez dans le paramtre marqueur une des constantes du thme Zone de formulaire : Constante Type Valeur Entte formulaire Entier long 200 Entte formulaire1...10 Entier long 201...210 Corps formulaire Entier long 0 Rupture formulaire0...9 Entier long 300...309 Pied de page formulaire Entier long 100 Impression de section Syntaxe : hauteur:=Imprimer ligne (maTable;monFormulaire;zoneDbut;zoneFin) Dans ce cas, la commande imprimera la section comprise entre les paramtres zoneDbut et zoneFin. Les valeurs saisies doivent tre exprimes en pixels. La valeur retourne par Imprimer ligne indique la hauteur de la zone dimpression. Cette valeur sera automatiquement prise en compte par la commande Lire hauteur imprimee. Les botes de dialogue standard d'impression n'apparaissent pas lorsque vous utilisez la commande Imprimer ligne. L'tat gnr ne tient pas compte des paramtres d'impression dfinis en mode Structure pour le formulaire. Il y a deux manires de dfinir les paramtres d'impression avant d'effectuer une srie d'appels Imprimer ligne : Vous appelez PARAMETRES IMPRESSION. Dans ce cas, vous laissez l'utilisateur dfinir ses paramtres dans les botes de dialogue d'impression. Vous appelez UTILISER PARAMETRES IMPRESSION. Dans ce cas, les paramtres sont dfinis par programmation. Imprimer ligne construit chaque page imprimer en mmoire. La page n'est imprime que lorsqu'elle est entirement remplie ou lorsque vous appelez SAUT DE PAGE. Pour vous assurer que la dernire page d'une impression excute par l'intermdiaire Imprimer ligne soit effectivement imprime, vous devez conclure par un appel la commande SAUT DE PAGE. Sinon, la dernire page, si elle n'est pas pleine, reste en mmoire et n'est pas imprime. Les sous-formulaires et les zones externes ne sont pas imprims avec Imprimer ligne. Attention : Imprimer ligne n'imprime pas les sous-formulaires ni les objets externes. Si vous voulez imprimer uniquement un formulaire comportant de tels objets, utilisez plutt IMPRIMER ENREGISTREMENT.

954

4e Dimension - Langage

Imprimer ligne ne gnre qu'un vnement Sur impression corps pour la mthode formulaire. 4D Server : Cette commande peut tre excute sur 4D Server dans le cadre d'une procdure stocke. Dans ce contexte : Veillez ce quaucune bote de dialogue napparaisse sur le poste serveur (sauf besoin spcifique). En cas de problme sur limprimante (plus de papier, imprimante dconnecte, etc.), aucun message d'erreur n'est gnr. Exemples (1) L'exemple suivant effectue la mme chose que ce que ferait la commande IMPRIMER SELECTION. Cependant, l'tat utilise deux formulaires diffrents suivant le type d'enregistrement (chque mis ou dpt) : CHERCHER([Oprations]) ` Permettre l'utilisateur de slectionner les enregistrements Si (OK=1) TRIER([Oprations]) ` Permettre l'utilisateur de trier les enregistrements Si (OK=1) ` Afficher les botes de dialogue d'impression PARAMETRES IMPRESSION([Oprations]) Si (OK=1) Boucle ($i; 1; Enregistrements trouves([Oprations])) Si ([Oprations]Type = "Chque") ` Si c'est un chque ` Utiliser un formulaire de chque Imprimer ligne([Oprations]; "SortieChque") Sinon ` Sinon c'est un dpt donc ` Utiliser un formulaire de dpt... Imprimer ligne ([Oprations]; "SortieDpt") Fin de si ENREGISTREMENT SUIVANT([Oprations]) Fin de boucle SAUT DE PAGE `S'assurer que la dernire page est imprime Fin de si Fin de si Fin de si

(2) Reportez-vous l'exemple de la commande FIXER TAQUET IMPRESSION. Rfrence NE PAS VALIDER, PARAMETRES IMPRESSION, SAUT DE PAGE, UTILISER PARAMETRES IMPRESSION.

4e Dimension - Langage

955

SAUT DE PAGE

Impressions version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAUT DE PAGE {(* | >)} Paramtre *|> ou Type Description * Annule l'impression lance par Imprimer ligne > Rend l'impression prioritaire Description La commande SAUT DE PAGE dclenche l'impression des donnes envoyes l'imprimante et provoque un saut de page. SAUT DE PAGE s'utilise conjointement avec Imprimer ligne (dans le cadre de l'vnement formulaire Sur impression corps) pour forcer des sauts de page et imprimer la dernire page cre en mmoire. N'appelez pas SAUT DE PAGE avec la commande IMPRIMER SELECTION : dans ce cas, il est prfrable d'utiliser les routines Sous total ou NIVEAUX DE RUPTURES avec leur paramtre optionnel pour gnrer des sauts de pages. Les paramtres * et > sont optionnels. Le paramtre * vous permet d'annuler une impression lance avec la commande Imprimer ligne. L'excution de cette instruction stoppe immdiatement l'impression en cours. Note : Sous Windows, ce mcanisme peut tre perturb par les proprits de "spouling" du serveur d'impression. Si l'imprimante est paramtre de manire lancer les impressions directement, l'annulation ne sera pas effective. Pour que l'instruction SAUT DE PAGE(*) fonctionne correctement, il est prfrable d'affecter la proprit "Commencer l'impression une fois la dernire page spoule" l'imprimante. Le paramtre > modifie le fonctionnement de la commande SAUT DE PAGE. Cette syntaxe provoque deux effets : Elle reporte l'impression jusqu' ce que l'instruction SAUT DE PAGE sans paramtre soit de nouveau excute. Elle rend l'impression prioritaire. Aucune autre impression ne pourra s'intercaler tant que celle en cours ne sera pas termine. Cette seconde option est particulirement intressante lorsqu'elle est utilise dans le cadre d'impressions en files d'attente. Le paramtre > garantit que l'impression sera ralise partir d'un seul fichier. Cela permet de rduire le temps d'impression.

956

4e Dimension - Langage

Exemples (1) Reportez-vous l'exemple de la commande Imprimer ligne. (2) Reportez-vous l'exemple de la commande FIXER TAQUET IMPRESSION. Rfrence Imprimer ligne, NE PAS VALIDER.

4e Dimension - Langage

957

IMPRIMER ENREGISTREMENT

Impressions version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

IMPRIMER ENREGISTREMENT ({table}{; }{* | >}) Paramtre table *|> Type Table *|> Description Table de laquelle imprimer l'enregistrement courant ou Table par dfaut si ce paramtre est omis * pour supprimer les botes de dialogue d'impression ou > pour ne pas rinitialiser les paramtres d'impression

Description Cette commande provoque l'impression de l'enregistrement courant de table, sans modifier la slection courante. Le formulaire sortie courant est utilis pour l'impression. Sil ny a pas denregistrement courant dans table, IMPRIMER ENREGISTREMENT ne fait rien. IMPRIMER ENREGISTREMENT permet d'imprimer des sous-formulaires et des objets externes, ce qui n'est pas possible avec la commande Imprimer ligne. Note : Si l'enregistrement a subi des modifications qui n'ont pas encore t sauvegardes sur disque, la commande imprime les valeurs les plus rcentes, et non celles stockes sur le disque. Par dfaut, IMPRIMER ENREGISTREMENT affiche les botes de dialogue d'impression. Si l'utilisateur annule une des deux botes de dialogue, l'excution de la commande est stoppe. Vous pouvez supprimer leur affichage en utilisant soit le paramtre optionnel astrisque (*), soit le paramtre optionnel suprieur (>). Le paramtre * provoque une impression avec les paramtres dimpression courants (paramtres par dfaut ou dfinis par les commandes UTILISER PARAMETRES IMPRESSION et/ou FIXER OPTION IMPRESSION). Le paramtre > provoque en outre limpression sans rinitialisation des paramtres dimpression. Ce paramtre est utile lorsque vous souhaitez excuter successivement plusieurs appels IMPRIMER ENREGISTREMENT (par exemple l'intrieur dune boucle) tout en conservant des paramtres dimpression personnaliss pralablement dfinis. 4D Server : Cette commande peut tre excute sur 4D Server dans le cadre d'une procdure stocke. Dans ce contexte : Veillez ce quaucune bote de dialogue napparaisse sur le poste serveur (sauf besoin spcifique). Pour cela, il est ncessaire dappeler la commande avec le paramtre * ou >. En cas de problme sur limprimante (plus de papier, imprimante dconnecte, etc.), aucun message d'erreur n'est gnr.

958

4e Dimension - Langage

Exemples (1) L'exemple suivant imprime l'enregistrement courant de la table [Factures]. Cette mthode est celle d'un bouton Imprimer plac dans le formulaire entre. Lorsque l'utilisateur clique sur ce bouton, l'enregistrement est imprim dans un formulaire spcialement cr dans ce but. `Slection du formulaire pour l'impression FORMULAIRE SORTIE([Factures];"ImpressionEnregistrement") `Imprimer les factures (sans dialogues d'impression) IMPRIMER ENREGISTREMENT([Factures];*) `Restauration du formulaire sortie courant FORMULAIRE SORTIE([Factures];"FormListe")

(2) L'exemple suivant imprime le mme enregistrement courant dans deux formulaires diffrents. Cette mthode est celle d'un bouton Imprimer plac dans un formulaire entre. Vous souhaitez dfinir des paramtres dimpression personnaliss et les utiliser pour les deux formulaires. PARAMETRES IMPRESSION `L'utilisateur dfinit ses paramtres d'impression Si (OK=1) `Utiliser un premier formulaire d'impression FORMULAIRE SORTIE([Employs];"Dtaill") IMPRIMER ENREGISTREMENT([Employs];>) `Imprimer en utilisant les paramtres dfinis par l'utilisateur `Utiliser un second formulaire d'impression FORMULAIRE SORTIE([Employs];"Simplifi") IMPRIMER ENREGISTREMENT([Employs];>) `Imprimer en utilisant les paramtres dfinis par l'utilisateur FORMULAIRE SORTIE([Employs];"Sortie") `Rtablir le formulaire sortie par dfaut Fin de si

Rfrence Imprimer ligne.

4e Dimension - Langage

959

LISTE IMPRIMANTES

Impressions version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LISTE IMPRIMANTES (tabNoms{; tabEmplacements{; tabModles}}) Paramtre tabNoms tabEmplacements tabModles Type Tableau Texte Tableau Texte Tableau Texte Description Noms des imprimantes Emplacements des imprimantes Modles des imprimantes

Description Note : Cette commande ne fonctionne pas sous MacOS 9 ni Windows 98/ME. La commande LISTE IMPRIMANTES remplit le ou les tableau(x) pass(s) en paramtre(s) avec les noms ainsi que, facultativement, les emplacements et les modles des imprimantes disponibles pour le poste. Note : Si les imprimantes sont gres via un serveur dimpression (spouleur), le chemin daccs complet (sous Windows) ou le nom du spouleur (sous MacOS) est retourn. Passez dans le paramtre tabNoms le nom dun tableau texte. Aprs lexcution de la commande, ce tableau contiendra la liste des noms dimprimantes disponibles. Si vous passez les tableaux optionnels tabEmplacements et tabModles, vous rcuprez pour chaque imprimante son emplacement rseau (ou son port local) et son modle. Note : Les paramtres tabEmplacements et tabModles peuvent tre utiliss sous Windows uniquement. Utilisez les commandes FIXER IMPRIMANTE COURANTE et Lire imprimante courante pour modifier ou connatre limprimante slectionne dans 4D. Sous Windows, le nom dune imprimante peut tre modifi manuellement au niveau du systme dexploitation. En revanche, son emplacement et son modle sont lis ses caractristiques physiques. Vous pouvez donc utiliser les valeurs des tableaux optionnels pour vrifier les caractristiques de limprimante slectionne typiquement, vous pouvez vrifier que tous les clients utilisent la mme imprimante. Sous MacOS, cette vrification peut seffectuer sur le nom de limprimante (nom du serveur dimpression), qui est le mme pour chaque poste connect. Rfrence FIXER IMPRIMANTE COURANTE, Lire imprimante courante. Variables et ensembles systme La variable systme OK prend la valeur 1 si la commande a t excute correctement, sinon elle prend la valeur 0 et les tableaux sont retourns vides.

960

4e Dimension - Langage

FIXER IMPRIMANTE COURANTE

Impressions version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER IMPRIMANTE COURANTE (nomImpr) Paramtre nomImpr Description Note : Cette commande ne fonctionne pas sous MacOS 9. La commande FIXER IMPRIMANTE COURANTE permet de dsigner limprimante utiliser pour les impressions avec lapplication 4D courante. Passez dans le paramtre nomImpr le nom de limprimante slectionner. Pour obtenir la liste des imprimantes disponibles, utilisez au pralable la commande LISTE IMPRIMANTES. Si vous passez une chane vide dans nomImpr, limprimante courante dfinie dans le systme sera utilise. La commande FIXER IMPRIMANTE COURANTE doit tre appele avant FIXER OPTION IMPRESSION afin que les options disponibles correspondent l'imprimante slectionne. En revanche, FIXER IMPRIMANTE COURANTE doit tre appele aprs UTILISER PARAMETRES IMPRESSION (le cas chant), sinon le paramtrage d'imprimante n'est pas conserv. Cette commande peut tre utilise avec les commandes IMPRIMER SELECTION, IMPRIMER ETIQUETTES, IMPRIMER ENREGISTREMENT, Imprimer ligne, QR ETAT et sapplique toutes les impressions de 4e Dimension, y compris en mode Structure. Les commandes d'impression doivent imprativement tre appeles avec le paramtre > (le cas chant) afin que le paramtrage dfini soit conserv. Rfrence Lire imprimante courante, LISTE IMPRIMANTES. Variables et ensembles systme Si la slection dimprimante est correctement effectue, la variable systme OK prend la valeur 1. Dans le cas contraire (par exemple limprimante dsigne est introuvable), la variable systme OK prend la valeur 0 et limprimante courante est inchange. Type Chane Description Nom de limprimante utiliser

4e Dimension - Langage

961

Lire imprimante courante

Impressions version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire imprimante courante Chane Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Description Note : Cette commande ne fonctionne pas sous MacOS 9. La commande Lire imprimante courante retourne le nom de limprimante courante dfinie dans lapplication 4D. Par dfaut au lancement de 4D, limprimante courante est limprimante dfinie dans le systme. Si limprimante courante est gre via un serveur dimpression (spouleur), le chemin daccs complet (sous Windows) ou le nom du spouleur (sous MacOS) est retourn. Pour obtenir la liste des imprimantes disponibles ainsi que des informations complmentaires, utilisez la commande LISTE IMPRIMANTES. Pour modifier limprimante courante, utilisez la commande FIXER IMPRIMANTE COURANTE. Rfrence FIXER IMPRIMANTE COURANTE, LISTE IMPRIMANTES. Variables et ensembles systme Si aucune imprimante nest installe, la variable systme OK prend la valeur 0. Sinon, OK prend la valeur 1. Chane Nom de limprimante courante

962

4e Dimension - Langage

UTILISER PARAMETRES IMPRESSION

Impressions version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

UTILISER PARAMETRES IMPRESSION ({table; }formulaire) Paramtre table formulaire Type Table Alpha Description Table laquelle appartient le formulaire ou Table par dfaut si ce paramtre est omis Formulaire utiliser pour dfinir les paramtres d'impression

Description UTILISER PARAMETRES IMPRESSION spcifie qu'une impression doit utiliser les paramtres mmoriss avec formulaire. Les paramtres d'impression sont stocks avec le formulaire au moment o il est sauvegard en mode Structure. Dans les trois cas suivants : un appel IMPRIMER SELECTION auquel vous passez le paramtre optionnel *, un appel IMPRIMER ENREGISTREMENT auquel vous passez le paramtre optionnel *, une srie d'appels Imprimer ligne non prcde d'un appel PARAMETRES IMPRESSION, ... les botes de dialogue d'impression ne sont pas affiches et l'impression est effectue avec les paramtres par dfaut. Appeler UTILISER PARAMETRES IMPRESSION vous permet dans ce cas de ne pas afficher les botes de dialogue d'impression ET d'utiliser des paramtres d'impression qui ne sont pas ceux par dfaut. Exemple Plusieurs formulaires (vides) sont crs pour une table nomme [Dessins]. Le format de page du formulaire PS100 est fix 100%, Le format de page du formulaire PS90 est fix 90%, etc. La mthode projet suivante vous permet d'imprimer la slection d'une table diffrentes chelles sans devoir chaque fois spcifier manuellement l'chelle dans les botes de dialogue d'impression (qui ne sont d'ailleurs pas affiches) : ` Mthode projet IMPRESSION ECHELLE AUTO ` IMPRESSION ECHELLE AUTO ( Pointeur ; Chaine {; Entier long } ) ` IMPRESSION ECHELLE AUTO ( ->[Table]; "Form Sortie" {; Echelle } ) Si (Nombre de parametres>=3) UTILISER PARAMETRES IMPRESSION([Dessins];"PS"+Chaine($3)) Si (Nombre de parametres>=2) FORMULAIRE SORTIE($1->;$2) Fin de si Fin de si

4e Dimension - Langage

963

Si (Nombre de parametres>=1) IMPRIMER SELECTION($1->;*) Sinon IMPRIMER SELECTION(*) Fin de si Une fois que cette mthode projet est crite, vous pouvez l'appeler ainsi : ` Recherche des factures courantes CHERCHER ([Factures];[Factures]Pay=Faux) ` Impression d'un tat rduit 90% IMPRESSION ECHELLE AUTO (->[Factures];"Etat Rsum";90) ` Impression d'un tat rduit 50% IMPRESSION ECHELLE AUTO (->[Factures];"Etat dtaill";50) Rfrence FIXER OPTION IMPRESSION, IMPRIMER ENREGISTREMENT, Imprimer ligne, IMPRIMER SELECTION.

964

4e Dimension - Langage

PARAMETRES IMPRESSION

Impressions version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

PARAMETRES IMPRESSION Paramtre Type Description Cette commande ne requiert pas de paramtre Description PARAMETRES IMPRESSION affiche les botes de dialogue d'impression. La bote de dialogue de paramtrage de l'impression s'affiche en premier lieu, suivie de celle d'impression proprement dite. Vous devez appeler PARAMETRES IMPRESSION avant une srie de commandes Imprimer ligne. La bote de dialogue d'impression comporte l'option Imprimer l'cran permettant l'utilisateur de visualiser son impression l'cran. Vous pouvez prslectionner ou dslectionner cette option par un appel pralable la commande IMPRESSION ECRAN. Exemple Reportez-vous l'exemple de la commande Imprimer ligne. Variables et ensembles systme Si l'utilisateur clique sur les boutons OK dans les deux botes de dialogue, la variable systme OK prend la valeur 1. Sinon, elle prend la valeur 0. Rfrence IMPRESSION ECRAN, Imprimer ligne, SAUT DE PAGE.

4e Dimension - Langage

965

FIXER OPTION IMPRESSION

Impressions version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER OPTION IMPRESSION (option; valeur1{; valeur2}) Paramtre option valeur1 valeur2 Type Entier long Entier long | Alpha Entier long Description Numro doption Valeur 1 de loption Valeur 2 de loption

Description La commande FIXER OPTION IMPRESSION permet de modifier par programmation la valeur dune option dimpression. Chaque option dfinie laide de cette commande est applique dans toute la base et durant toute la session tant quaucune autre commande modifiant les paramtres dimpression (UTILISER PARAMETRES IMPRESSION, IMPRIMER SELECTION sans le paramtre >, etc.) nest appele. Le paramtre option vous permet de dsigner loption modifier. Vous pouvez passer une valeur ou une des constantes prdfinies du thme Options dimpression. Passez dans les paramtres valeur1 et (facultativement) valeur2 la ou les nouvelle(s) valeur(s) de loption spcifie. Le nombre et la nature des valeurs passer dpend du type doption spcifie. Le tableau suivant liste les options et leurs valeurs possibles : valeur1 valeur2 option (constante) 1 (Option papier) Nom Hauteur Largeur 2 (Option orientation) 1=Portrait, 2=Paysage 3 (Option chelle) Nombre (%) 4 (Option nombre copies) Nombre 5 (Option alimentation) Windows uniquement : Indice (numro) 8 (Option couleur) Windows uniquement : 1=N/B, 2=Couleur 9 (Option destination) 1=Imprimante, 2=Fichier (PC)/PS (Mac), Chemin accs 3=PDF (Mac), Chemin accs 5=Ecran (Mac) 11 (Option recto verso) Windows uniquement : 0=Recto (dfaut) 1=Recto-verso Reliure : 0=Gauche (dfaut), 1=Haut 12 (Option nom document Nom du document imprimer imprimer 13 (Option format 0=mode PDF, 1=mode impression Mac Postscript

966

4e Dimension - Langage

Option papier (1) : la liste de tous les noms de papiers disponibles peut tre obtenue via la commande VALEURS OPTION IMPRESSION. Vous pouvez passer soit le nom du papier dans valeur1 (et dans ce cas omettre valeur2), soit la hauteur du papier dans valeur1 et sa largeur dans valeur2. La largeur et la hauteur doivent tre exprimes en pixels cran. Option orientation (2) : vous pouvez passer soit 1 (Portrait), soit 2 (Paysage) dans valeur1. Option chelle (3) : passez un pourcentage dans valeur1. Attention, certaines imprimantes ne permettent pas de modifier lchelle. Si vous passez une valeur invalide, la proprit est remise 100% au moment de l'impression. Option nombre copies (4) : passez le nombre de copies imprimer dans valeur1. Option alimentation (5) : passez un numro correspondant lindice, dans le tableau des bacs retourn par la commande VALEURS OPTION IMPRESSION, du bac papier utiliser. Note : Cette option est utilisable sous Windows uniquement. Option couleur (8) : passez dans valeur1 un code indiquant le mode de prise en charge de la couleur : 1=Noir et blanc (monochrome), 2=Couleur. Note : Cette option est utilisable sous Windows uniquement. Option destination (9) : passez dans valeur1 un code indiquant le type de destination de limpression : 1=Imprimante, 2=Fichier (PC)/PS (Mac), 3=Fichier PDF (MacOS uniquement), 5=Ecran (option du pilote MacOS X). Si valeur1 est diffrent de 1 ou de 5, passez dans valeur2 un chemin daccs pour le document rsultant. Ce chemin sera utilis jusqu ce quun autre chemin soit spcifi. Si un fichier du mme nom existe dj lemplacement de destination, il est remplac. Sous Windows uniquement : si vous passez une chane vide dans valeur2 ou omettez ce paramtre, une bote de dialogue denregistrement de fichier apparat au moment de limpression. Option recto-verso (11) : vous pouvez passer soit 0 (Recto ou standard), soit 1 (Rectoverso) dans valeur1. Si valeur1 vaut 1, vous pouvez dfinir la reliure appliquer laide de valeur2 : 0=Reliure gauche (valeur par dfaut), 1=Reliure en haut. Note : Cette option est utilisable sous Windows uniquement. Option nom document imprimer (12) : passez dans valeur1 le nom du document dimpression devant apparatre dans la liste des documents du serveur dimpression. Pour utiliser ou rtablir le fonctionnement standard (utilisation du nom de la mthode dans le cas dune mthode, nom de la table pour un enregistrement, etc.), passez une chane vide dans valeur1. Attention : le nom dfini par cette instruction sera utilis pour tous les documents dimpression de la session tant quun nouveau nom ou une chane vide ne sera pas pass(e). Option format impression Mac (13) : passez 0 pour fixer limpression en mode PDF (valeur par dfaut) et 1 pour forcer limpression en mode Postscript dans valeur1. Cette option modifie galement le mode dimpression des plug-ins 4D Write, 4D View et 4D Draw. En revanche, elle na pas deffet sous Windows. Note : Sous MacOS X, les impressions sont effectues par dfaut en mode PDF. Or, le pilote dimpression PDF ne prend pas en charge les images PICT encapsulant des informations Postscript ces images sont gnres notamment par des logiciels de dessin vectoriel. Pour rsoudre ce problme, cette option permet de modifier le mode dimpression sous MacOS X pour la session courante. Attention, l'impression en mode Postscript peut entraner des effets de bords indsirables.

4e Dimension - Langage

967

Une fois fixe laide de cette commande, une option dimpression sera conserve durant toute la session pour lapplication 4D entire. Elle sera utilise par les commandes IMPRIMER SELECTION, IMPRIMER ETIQUETTES, IMPRIMER ENREGISTREMENT, Imprimer ligne, QR ETAT et par toutes les impressions de 4e Dimension, y compris en mode Structure. Notes : Il est impratif dutiliser le paramtre optionnel > avec les commandes IMPRIMER SELECTION, IMPRIMER ETIQUETTES, IMPRIMER ENREGISTREMENT et SAUT DE PAGE afin de ne pas rinitialiser les options dimpression dfinies laide de la commande FIXER OPTION IMPRESSION. La commande FIXER OPTION IMPRESSION fonctionne avec les imprimantes PostScript uniquement. Rfrence FIXER IMPRIMANTE COURANTE, LIRE OPTION IMPRESSION, VALEURS OPTION IMPRESSION. Variables et ensembles systme La variable systme OK prend la valeur 1 si la commande a t excute correctement, sinon elle prend la valeur 0. Gestion des erreurs Si la valeur passe pour une option est invalide ou si elle n'est pas disponible sur l'imprimante, la commande retourne une erreur (que vous pouvez intercepter laide dune mthode de gestion derreur installe par la commande APPELER SUR ERREUR) et la valeur courante de loption est inchange. Constantes Thme Options d'impression.

968

4e Dimension - Langage

LIRE OPTION IMPRESSION

Impressions version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE OPTION IMPRESSION (option; valeur1{; valeur2}) Paramtre option valeur1 valeur2 Type Entier long Entier long | Chane Entier long Description Numro doption Valeur 1 de loption Valeur 2 de loption

Description La commande LIRE OPTION IMPRESSION retourne la ou les valeur(s) courante(s) dune option dimpression. Le paramtre option vous permet de dsigner loption lire. Vous pouvez passer une valeur ou une des constantes prdfinies suivantes, places dans le thme Options dimpression : Constante Type Valeur Option papier Entier long 1 Option orientation Entier long 2 Option chelle Entier long 3 Option nombre copies Entier long 4 Option alimentation Entier long 5 Option couleur Entier long 8 Option destination Entier long 9 Option recto verso Entier long 11 Option nom document imprimer Entier long 12 Option format impression Mac Entier long 13 La commande retourne dans les paramtres valeur1 et (facultativement) valeur2 la ou les valeur(s) courante(s) de loption spcifie. Pour plus dinformations sur les options et les valeurs possibles, reportez-vous la description de la commande FIXER OPTION IMPRESSION. A noter les spcificits suivantes de la commande LIRE OPTION IMPRESSION : option = 1 (Option papier) : retourne le nom du papier courant dans valeur1 si valeur2 est omis. Si valeur2 est pass, la commande retourne respectivement la hauteur et la largeur du papier dans valeur1 et valeur2. Utilisez la commande VALEURS OPTION IMPRESSION pour connatre le nom, la hauteur et la largeur de tous les formats de papier proposs par limprimante. option = 2 (Option orientation) : retourne 1 (Portrait) ou 2 (Paysage). Si une option dorientation diffrente est utilise, valeur1 prend la valeur 0. option = 5 (Option alimentation) : retourne dans valeur1 lindice, dans le tableau des bacs retourn par la commande VALEURS OPTION IMPRESSION, du bac papier utilis (valeur2 doit tre omis). Note : Cette option est utilisable sous Windows uniquement. option = 8 (Option couleur) : retourne dans valeur1 un code indiquant le mode de prise en charge de la couleur : 1=Noir et blanc (monochrome), 2=Couleur. Note : Cette option est utilisable sous Windows uniquement. 4e Dimension - Langage 969

option = 9 (Option destination) : si la valeur courante nest pas dans la liste prdfinie, valeur1 contient -1 et la variable systme OK vaut 1. Si une erreur se produit, valeur1 et la variable systme OK valent 0. Si valeur1 contient une valeur prdfinie diffrente de 1 ou de 5, valeur2 contient le chemin daccs du fichier imprim. option = 11 (Option recto verso) : retourne 0 (Standard ou Recto, valeur par dfaut) ou 1 (Recto-verso) dans valeur1. Si valeur1 vaut 1, valeur2 peut retourner une des valeurs suivantes : 0=Reliure gauche (par dfaut), 1=Reliure en haut. Note : Cette option est utilisable sous Windows uniquement. option = 12 (Option nom document imprimer) : retourne dans valeur1 le nom du document dimpression courant, sil a t dfini au pralable. Sinon, une chane vide est retourne. Note : La commande LIRE OPTION IMPRESSION fonctionne avec les imprimantes PostScript uniquement. Rfrence FIXER OPTION IMPRESSION, VALEURS OPTION IMPRESSION. Variables et ensembles systme La variable systme OK prend la valeur 1 si la commande a t excute correctement, sinon elle prend la valeur 0. Constantes Thme Options dimpression.

970

4e Dimension - Langage

VALEURS OPTION IMPRESSION

Impressions version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

VALEURS OPTION IMPRESSION (option; tabNoms{; tabInfo1{; tabInfo2}}) Paramtre option tabNoms tabInfo1 tabInfo2 Type Entier long Tableau Texte Tableau Entier long Tableau Entier long Description Numro doption Noms des valeurs Valeurs 1 de loption Valeurs 2 de loption

Description La commande VALEURS OPTION IMPRESSION retourne dans le tableau tabNoms la liste des noms de valeurs disponibles pour loption dimpression dfinie. Facultativement, vous pouvez rcuprer des informations sur chaque valeur dans les tableaux tabInfo1 et tabInfo2. Le paramtre option vous permet de dsigner loption lire. Vous devez passer une des constantes du thme Options dimpression suivantes (options pouvant retourner des listes de noms de valeurs) : Constante Type Valeur Option papier Entier long 1 Option alimentation Entier long 5 Aprs excution de la commande, le tableau tabNoms ainsi que, le cas chant, les tableaux tabInfo1 et tabInfo2 seront remplis par la commande avec les noms et informations des valeurs disponibles. Si vous passez la valeur 1 (Option papier) dans le paramtre option, la commande retournera les informations suivantes : dans le tableau tabNoms, les noms des formats de papiers disponibles ; dans le tableau tabInfo1, les hauteurs de chaque format de papier ; dans le tableau tabInfo2, les largeurs de chaque format de papier. Note : Pour que vous puissiez obtenir ces informations, le pilote dimprimante doit avoir accs un fichier de description PostScript (PPD) valide de limprimante. Pour utiliser un format de papier spcifique laide de la commande FIXER OPTION IMPRESSION, vous pouvez passer soit une des valeurs du tableau tabNoms, soit les valeurs correspondantes des tableaux tabInfo1 et tabInfo2. Si vous passez la valeur 5 (Option alimentation) dans le paramtre option, la commande retourne dans le tableau tabNoms les noms des diffrents bacs disponibles et leur numro Windows interne dans tabInfo1 (tabInfo2 reste vide).

4e Dimension - Langage

971

Lordre des valeurs dans les tableaux est dfini par le pilote dimpression. Pour dsigner un bac laide de la commande FIXER OPTION IMPRESSION, vous devez passer lindice de llment souhait dans tableau tabNoms ou tabInfo1. Note : Cette option est utilisable sous Windows uniquement. Pour plus dinformations sur les diffrentes options dimpression, reportez-vous la description des commandes FIXER OPTION IMPRESSION et LIRE OPTION IMPRESSION. Toutes les informations retournes par ces commandes sont fournies par le systme dexploitation. Reportez-vous la documentation de votre systme pour plus de dtails sur certaines options. Note : La commande VALEURS OPTION IMPRESSION fonctionne avec les imprimantes PostScript uniquement. Rfrence FIXER OPTION IMPRESSION, LIRE OPTION IMPRESSION. Constantes Thme Options dimpression.

972

4e Dimension - Langage

IMPRESSION ECRAN

Impressions version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

IMPRESSION ECRAN (cran) Paramtre cran Type Boolen Description Impression l'cran (Vrai) ou non (Faux)

Description La commande IMPRESSION ECRAN vous permet de slectionner ou de dslectionner l'option A l'cran dans la bote de dialogue standard d'impression. Si vous passez Vrai dans cran, l'option " l'cran" sera coche. Si vous passez Faux, elle ne sera pas coche. Ce paramtrage est local au process et n'affecte pas les autres process ou utilisateurs. Exemples L'exemple suivant slectionne l'option A l'cran pour afficher le rsultat d'une recherche de clients l'cran, puis la dslectionne. CHERCHER([Clients]) Si (OK=1) IMPRESSION ECRAN (Vrai) IMPRIMER SELECTION ([Clients] ; *) IMPRESSION ECRAN (Faux) Fin de si

Rfrence IMPRIMER ENREGISTREMENT, IMPRIMER SELECTION, PARAMETRES IMPRESSION.

4e Dimension - Langage

973

LIRE MARGE IMPRESSION

Impressions version 6.8.1

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE MARGE IMPRESSION (gauche; haut; droite; bas) Paramtre gauche haut droite bas Type Numrique Numrique Numrique Numrique Description Marge gauche Marge suprieure Marge droite Marge infrieure

Description La commande LIRE MARGE IMPRESSION retourne les valeurs courantes des diffrentes marges dfinies lors de lutilisation de la commande Imprimer ligne. Les valeurs sont retournes en pixels par rapport au bord du papier. Il est possible dobtenir la taille du papier laide de la fonction LIRE ZONE IMPRESSION, et ainsi de calculer la zone imprimable. Gestion des marges dimpression Par dfaut, dans 4e Dimension le calcul des impressions est effectu sur la base des marges imprimante. Lavantage de ce systme est que les formulaires sadaptent automatiquement aux nouvelles imprimantes (puisque positionns dans la partie imprimable). En revanche, dans le cas des formulaires pr-imprims, il ntait pas possible de positionner prcisment les lments imprimer car un changement dimprimante pouvait modifier les marges imprimante. A compter de la version 6.8.1 de 4e Dimension, il est possible de baser limpression des formulaires effectue laide des commandes Imprimer ligne, IMPRIMER ENREGISTREMENT et IMPRIMER SELECTION sur une marge fixe et identique sur chaque imprimante : la marge papier, cest--dire les limites physiques de la feuille. Pour cela, il suffit dutiliser les commandes LIRE MARGE IMPRESSION, FIXER MARGE IMPRESSION et LIRE ZONE IMPRESSION.

974

4e Dimension - Langage

Terminologie des impressions Marge papier : la marge papier correspond aux limites physiques de la feuille. Marge imprimante : la marge imprimante est la marge au-dela de laquelle limprimante est incapable dimprimer (pour des raisons physiques : galets dimpression, fin de course de la tte dimpression...). Elle varie dune imprimante lautre et dun format lautre. Marge morte : cest la zone situe entre la marge papier et la marge imprimante.

Rfrence FIXER MARGE IMPRESSION, IMPRIMER LIGNE, LIRE ZONE IMPRESSION.

4e Dimension - Langage

975

FIXER MARGE IMPRESSION

Impressions version 6.8.1

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER MARGE IMPRESSION (gauche; haut; droite; bas) Paramtre gauche haut droite bas Type Numrique Numrique Numrique Numrique Description Marge gauche Marge suprieure Marge droite Marge infrieure

Description La commande FIXER MARGE IMPRESSION permet de fixer les valeurs des diffrentes marges dimpression lors de lutilisation de la commande Imprimer ligne. Vous pouvez passer dans les paramtres gauche, haut, droite et bas une des valeurs suivantes : 0 = utiliser les marges papier -1 = utiliser les marges imprimante valeur > 0 = marge en pixels (rappelons qu1 pixel en 72 dpi reprsente approximativement 0,4 mm) Les valeurs des paramtres droite et bas sont relatives la droite et au bas du papier. Par dfaut, 4e Dimension base ses impressions sur les marges imprimante. Une fois la commande FIXER MARGE IMPRESSION excute, les paramtres modifis seront conservs dans le mme process pour toute la session. Note : Pour plus d'informations sur la gestion des marges d'impression dans 4D, reportezvous la description de la commande LIRE MARGE IMPRESSION. Exemples (1) Lexemple suivant permet dobtenir la taille de la marge morte : FIXER MARGE IMPRESSION (-1;-1;-1;-1) `Fixe la marge imprimante LIRE MARGE IMPRESSION($g;$h;$d;$b) `$g, $h, $d et $b correspondent aux marges mortes de la feuille (2) Lexemple suivant permet dobtenir la taille du papier : FIXER MARGE IMPRESSION (0;0;0;0) `Fixe la marge papier LIRE ZONE IMPRESSION($hauteur;$largeur) `Pour du A4 : $hauteur=842 ; $largeur=595 pixels Rfrence IMPRIMER LIGNE, Lire hauteur imprimee, LIRE MARGE IMPRESSION.

976

4e Dimension - Langage

Lire taquet impression

Impressions version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire taquet impression (numTaquet) Numrique Paramtre numTaquet Rsultat Type Numrique Numrique Description Numro de taquet Position du taquet

Description La commande Lire taquet impression permet de rcuprer la position courante dun taquet lors dune impression. Les coordonnes sont retournes en pixels (1 pixel = 1/72 pouce). Cette commande peut tre appele dans deux contextes : lors de lvnement formulaire Sur entte, dans le cadre de lutilisation des commandes IMPRIMER SELECTION et IMPRIMER ENREGISTREMENT. lors de lvnement formulaire Sur impression corps, dans le cadre de lutilisation de la commande Imprimer ligne. Passez dans le paramtre Constante Entte formulaire Entte formulaire1...10 Corps formulaire Rupture formulaire0...9 Pied de page formulaire numTaquet une des constantes du thme Zone de formulaire : Type Valeur Entier long 200 Entier long 201...210 Entier long 0 Entier long 300...309 Entier long 100

Exemple Reportez-vous lexemple de la commande FIXER TAQUET IMPRESSION. Rfrence DEPLACER OBJET, FIXER TAQUET IMPRESSION.

4e Dimension - Langage

977

FIXER TAQUET IMPRESSION

Impressions version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER TAQUET IMPRESSION (numTaquet; position{; *}) Paramtre numTaquet position * suivants Description La commande FIXER TAQUET IMPRESSION permet de dfinir la position dun taquet au moment de limpression. Combine aux commandes Lire taquet impression, DEPLACER OBJET ou Imprimer ligne, cette commande permet dajuster la taille des zones dimpression. FIXER TAQUET IMPRESSION peut tre appele dans deux contextes : lors de lvnement formulaire Sur entte, dans le cadre de lutilisation des commandes IMPRIMER SELECTION et IMPRIMER ENREGISTREMENT. lors de lvnement formulaire Sur impression corps, dans le cadre de lutilisation de la commande Imprimer ligne. Ce fonctionnement facilite limpression dtats personnaliss (voir exemple). Leffet de la commande est limit limpression, aucune modification napparat lcran. Les modifications apportes aux formulaires ne sont pas sauvegardes. Passez dans le paramtre Constante Entte formulaire Entte formulaire1...10 Corps formulaire Rupture formulaire0...9 Pied de page formulaire numTaquet une des constantes du thme Zone de formulaire : Type Valeur Entier long 200 Entier long 201...210 Entier long 0 Entier long 300...309 Entier long 100 Type Numrique Numrique * Description Numro de taquet Nouvelle position du taquet Si pass = dplacer les marqueurs suivants Si omis = ne pas dplacer les marqueurs

Passez dans position la nouvelle position souhaite du taquet, exprime en pixels. Si vous passez le paramtre optionnel *, tous les marqueurs situs au-dessous du marqueur dsign par numTaquet seront dplacs du mme nombre de pixels et dans la mme direction que lui lors de lexcution de la commande. Attention : dans ce cas, les objets ventuellement prsents dans les zones situes au-dessous du marqueur sont galement dplacs.

978

4e Dimension - Langage

Lorsque le paramtre * est utilis, il est donc possible de positionner le marqueur numTaquet au-del de la position initiale des marqueurs qui le suivent ces derniers tant dplacs simultanment.

Notes : Cette commande modifie la position des taquets existants uniquement. Elle ne permet pas dajouter des taquets. Si vous dsignez un taquet qui nexiste pas dans le formulaire, la commande ne fait rien. Le fonctionnement des taquets dimpression en mode Structure est conserv : un taquet ne peut pas aller plus haut que celui qui le prcde ni plus bas que celui qui le suit (lorsque le paramtre * nest pas utilis). Exemple Cet exemple complet permet de gnrer limpression dun tat sur trois colonnes, la hauteur de chaque ligne tant calcule la vole en fonction du contenu des champs. Le formulaire de sortie utilis pour limpression est le suivant :

Lvnement formulaire Sur impression corps a t slectionn pour le formulaire (rappelons que la commande Imprimer ligne ne gnre que cet vnement, quelle que soit la zone imprime).

4e Dimension - Langage

979

Pour chaque enregistrement, la hauteur de la ligne doit tre adapte en fonction du contenu de la colonne Acteurs ou Rsum (colonne ayant le plus de contenu). Voici le rsultat souhait :

980

4e Dimension - Langage

La mthode projet dimpression est la suivante : C_ENTIER LONG(vLhauteur_imp;$vLhauteur;vLhauteur_imprimee) C_ALPHA(31;vSimpr_zone) UTILISER PARAMETRES IMPRESSION([Film];"Print_List3") LIRE ZONE IMPRESSION(vLhauteur_imp) vLhauteur_imprimee:=0 TOUT SELECTIONNER([Film]) vSimpr_zone:="Entete" `Impression de la zone den-tte $vLhauteur:=Imprimer ligne([Film];"Print_List3";Entte formulaire ) $vLhauteur:=21 `Hauteur fixe vLhauteur_imprimee:=vLhauteur_imprimee+$vLhauteur Tant que (Non(Fin de selection([Film]))) vSimpr_zone:="Corps" `Impression de la zone de corps $vLhauteur:=Imprimer ligne([Film];"Print_List3";Corps formulaire ) `Le calcul du corps est effectu dans la mthode formulaire vLhauteur_imprimee:=vLhauteur_imprimee+$vLhauteur Si (OK=0) `NE PAS VALIDER a t excute dans la mthode formulaire SAUT DE PAGE vLhauteur_imprimee:=0 vSimpr_zone:="Entete" `Rimpression de la zone den-tte $vLhauteur:=Imprimer ligne([Film];"Print_List3";Entte formulaire ) $vLhauteur:=21 vLhauteur_imprimee:=vLhauteur_imprimee+$vLhauteur vSimpr_zone:="Corps" $vLhauteur:=Imprimer ligne([Film];"Print_List3";Corps formulaire ) vLhauteur_imprimee:=vLhauteur_imprimee+$vLhauteur Fin de si ENREGISTREMENT SUIVANT([Film]) Fin tant que SAUT DE PAGE `Assurons-nous que la dernire page est imprime La mthode du formulaire Print_List3 est la suivante : C_ENTIER LONG($g;$h;$d;$b;$larg_fix;$haut_prc;$g1;$h1;$d1;$b1) C_ENTIER LONG($pos_finale;$i) C_ENTIER LONG($position_c;$position_e;$hauteur_a_imprimer;$hauteur_restante) Au cas ou : (vSimpr_zone="Corps") `Impression du corps en cours LIRE RECT OBJET([Film]Acteurs;$g;$h;$d;$b) $larg_fix:=$d-$g `Calcul de la taille du champ texte Acteurs $haut_prc:=$b-$h TAILLE OBJET OPTIMALE([Film]Acteurs;$larg;$haut;$larg_fix) `Taille optimale du champ en fonction du contenu $deplacement:=$haut-$haut_prc

4e Dimension - Langage

981

LIRE RECT OBJET([Film]Rsum;$g1;$h1;$d1;$b1) $larg_fix1:=$d1-$g1 `Calcul de la taille du champ texte Rsum $haut_prc1:=$b1-$h1 TAILLE OBJET OPTIMALE([Film]Rsum;$larg1;$haut1;$larg_fix1) `Taille optimale du champ en fonction du contenu $deplacement1:=$haut1-$haut_prc1 Si ($deplacement1>$deplacement) `On dtermine le champ le plus haut $deplacement:=$deplacement1 Fin de si Si ($deplacement>0) $position:=Lire taquet impression(Corps formulaire ) $pos_finale:=$position+$deplacement `On dplace le taquet Corps et ceux qui le suivent FIXER TAQUET IMPRESSION(Corps formulaire ;$pos_finale;*) `Redimensionnement des zones de texte DEPLACER OBJET([Film]Acteurs;$g;$h;$d;$haut+$h;*) DEPLACER OBJET([Film]Rsum;$g1;$h1;$d1;$haut1+$h1;*) `Redimensionnement des lignes de sparation LIRE RECT OBJET(*;"LigneH1";$g;$h;$d;$b) DEPLACER OBJET(*;"LigneH1";$g;$pos_finale-1;$d;$pos_finale;*) Boucle ($i;1;4;1) LIRE RECT OBJET(*;"LigneV"+Chaine($i);$g;$h;$d;$b) DEPLACER OBJET(*;"LigneV"+Chaine($i);$g;$h;$d;$pos_finale;*) Fin de boucle Fin de si `Calcul de la place disponible $position_c:=Lire taquet impression(Corps formulaire ) $position_e:=Lire taquet impression(Entte formulaire ) $hauteur_a_imprimer:=$position_c-$position_e $hauteur_restante:=hauteur_impression-vLhauteur_imprimee Si ($hauteur_restante<$hauteur_a_imprimer) `Hauteur insuffisante NE PAS VALIDER `Passer la ligne sur la page suivante Fin de si Fin de cas Rfrence DEPLACER OBJET, IMPRIMER ENREGISTREMENT, Imprimer ligne, IMPRIMER SELECTION, LIRE RECT OBJET, Lire taquet impression, SAUT DE PAGE, TAILLE OBJET OPTIMALE.

982

4e Dimension - Langage

LIRE ZONE IMPRESSION

Impressions version 6.8.1

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE ZONE IMPRESSION (hauteur{; largeur}) Paramtre hauteur largeur Type Numrique Numrique Description Hauteur de la zone dimpression Largeur de la zone dimpression

Description La commande LIRE ZONE IMPRESSION retourne dans les paramtres hauteur et largeur la taille en pixels de la zone dimpression. Cette taille dpend des paramtres dimpression courants, de lorientation du papier, etc. Les tailles retournes ne varient pas dune page lautre (aprs un saut de page par exemple). Associe la commande Lire hauteur imprimee, cette commande est utile pour connatre le nombre de pixels disponibles pour limpression, ou pour centrer un objet dans la page. Pour connatre la taille totale de la page, vous pouvez : soit ajouter aux valeurs retournes par cette commande les marges fournies par la commande LIRE MARGE IMPRESSION. soit utiliser la syntaxe suivante : FIXER MARGE IMPRESSION(-1;-1;-1;-1) ` Fixer la marge imprimante LIRE ZONE IMPRESSION(hPapier;lPapier) ` Taille du papier Note : Pour plus d'informations sur la gestion des marges d'impression dans 4D, reportezvous la description de la commande LIRE MARGE IMPRESSION. Rfrence IMPRIMER LIGNE, LIRE MARGE IMPRESSION.

4e Dimension - Langage

983

Lire hauteur imprimee

Impressions version 6.8.1

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire hauteur imprimee Numrique Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Numrique Position du marqueur

Description La commande Lire hauteur imprimee retourne la hauteur globale (en pixels) de la section imprime par la commande Imprimer ligne. La valeur retourne sera comprise entre 0 (le bord suprieur de la page) et la hauteur globale retourne par la commande LIRE ZONE IMPRESSION (la taille maximum de la zone dimpression). Si vous imprimez une nouvelle section via la commande Imprimer ligne, la hauteur de cette section est ajoute cette valeur. Si la zone dimpression disponible est insuffisante pour contenir cette section, une nouvelle page est gnre et la valeur retourne est 0. Les marges dimpression gauche et droite ninfluent pas sur la valeur retourne, la diffrence des marges infrieure et suprieure (dfinies ventuellement via la commande FIXER MARGE IMPRESSION). Rfrence FIXER MARGE IMPRESSION, IMPRIMER LIGNE, LIRE ZONE IMPRESSION.

984

4e Dimension - Langage

33 ________________________ Interface utilisateur

4e Dimension - Langage

985

986

4e Dimension - Langage

BEEP

Interface utilisateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

BEEP Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande BEEP provoque l'mission d'un bip sonore. Votre PC ou votre Macintosh peut mettre un autre son qu'un bip en fonction du son slectionn dans le tableau de bord de contrle du son. ATTENTION : N'appelez pas la commande BEEP partir d'un process de connexion Web car le bip sonore se produira sur le poste serveur Web 4e Dimension et non sur le poste du browser Web. Exemple Dans l'exemple suivant, un bip est mis et une alerte affiche lorsqu'aucun enregistrement n'est trouv par une recherche : CHERCHER([Clients];[Clients]Nom=$vsNomAChercher) Si (Enregistrements trouves([Clients])=0) BEEP ALERTE("Il n'y a aucun client de ce nom.") Fin de si

Rfrence JOUER SON.

4e Dimension - Langage

987

JOUER SON

Interface utilisateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

JOUER SON (nomObjet{; canal}) Paramtre nomObjet Type Alpha Description Nom de son Windows : extension de fichier .WAV, .MID ou .AVI Toute plate-forme : ressource MacOS 'snd' ou chane vide pour stopper un son asynchrone Si pass : canal de sortie et excution asynchrone Si omis : excution synchrone

canal

Numrique

Description Sous Windows, la commande JOUER SON permet de jouer des fichiers Windows de sons (fichiers .WAV), MIDI (fichiers .MID) ou vido (fichiers .AVI). Vous passez le chemin d'accs complet du fichier que vous voulez jouer dans nomObjet. Note : Vous ne pouvez pas jouer des fichiers ou objets multimdia en mode asynchrone. Pour cela, utilisez les services OLE. Sous MacOS (ou sous Windows dans certaines conditions, cf. paragraphe ci-dessous), JOUER SON joue la ressource son nomObjet. Le paramtre canal spcifie le canal de sortie de synthtiseur Macintosh. Si le canal n'est pas spcifi, le canal est utilis pour des sons digitaliss simples et est synchrone. Synchrone signifie que tous les traitements s'arrtent jusqu' ce que le son soit entirement jou. Si canal est gal 0, le canal est utilis pour des sons digitaliss simples et est asynchrone. Asynchrone signifie que le traitement ne s'arrte pas et que le son est jou en tche de fond. Pour stopper un son synchrone, il faut excuter l'instruction suivante :

JOUER SON ("";0)

988

4e Dimension - Langage

Si votre base fonctionne la fois sur Macintosh et sur PC, vous pouvez jouer des sons Macintosh sous Windows. Pour cela : Sous MacOS, l'aide d'un diteur de ressources tel que ResEdit ou Resorcerer, copiez les ressources 'snd ' ncessaires dans la "resource fork" du fichier de structure de la base. Transportez la base de Macintosh Windows l'aide de 4D Transporter. Note importante : La version Windows de 4e Dimension ne joue pas les sons Macintosh compresss l'aide de MACE. Si votre ressource 'snd' Macintosh ne se joue pas sous Windows, dterminez si le son est conforme aux conditions suivantes : Champ de ressource snd Version NbSynth SynthResID SynthInitOptions NbSoundCommand FirstCommand Valeur (en hexadcimal) 0x0001 0x0001 0x0005 0x000000A0 0x0001 0x8051

Vous pouvez vrifier les valeurs internes d'une ressource 'snd ' l'aide de Resorcerer. Exemples (1) L'exemple suivant montre comment jouer un fichier vido de votre choix sous Windows : $DocRf := Ouvrir document ( ""; "AVI") Si (OK=1) FERMER DOCUMENT($DocRf) JOUER SON (Document) Fin de si

(2) L'exemple suivant se trouve dans une mthode de dmarrage. Ce son est jou lors de l'ouverture de la base sous MacOS :

JOUER SON ("Bienvenue") ` Jouer le son de bienvenue

Rfrence BEEP.

4e Dimension - Langage

989

Lire interface

Interface utilisateur version 6.7 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire interface Numrique Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Numrique Interface de plate-forme en cours d'utilisation

Description La fonction Lire interface retourne une valeur numrique indiquant l'interface de plateforme utilise pour afficher les formulaires. Cette fonction peut retourner une des constantes prdfinies suivantes, places dans le thme Interfaces de plate-forme : Constante Plate forme automatique Mac OS 7 Windows 3.11, NT 3.51 Windows 9x Mac OS 9 Thme Mac Type Entier Entier Entier Entier Entier Entier long long long long long long Valeur -1 0 1 2 3 4

Vous pouvez modifier l'interface de plate-forme l'aide de la commande FIXER INTERFACE ou en utilisant la bote de dialogue des Prfrences en mode Structure. Rfrence FIXER INTERFACE.

990

4e Dimension - Langage

FIXER INTERFACE

Interface utilisateur version 6.7 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER INTERFACE (interface) Paramtre interface Type Numrique Description Nouvelle interface de plate-forme : -1 Plate-forme automatique 0 Mac OS 7 1 Windows 3.11, NT 3.51 2 Windows 9x 3 Mac OS 9 4 Thme Mac

Description La commande FIXER INTERFACE dfinit l'interface de plate-forme utilise pour afficher les formulaires. Vous passez dans le paramtre interface une des constantes prdfinies suivantes : Constante Plate forme automatique Mac OS 7 Windows 3.11, NT 3.51 Windows 9x Mac OS 9 Thme Mac Type Entier Entier Entier Entier Entier Entier long long long long long long Valeur -1 0 1 2 3 4

Note : La constante Thme Mac permet dutiliser linterface dfinie dans le Gestionnaire dapparence. Ce gestionnaire nexiste que sous MacOS. Lorsquune base dfinie en Thme Mac est affiche sous Windows, linterface Windows 9x est applique. Si la valeur que vous passez ne modifie pas l'interface de plate-forme courante, la commande ne fait rien. Note : L'interface de plate-forme peut galement tre modifie dans la bote de dialogue des Prfrences en mode Structure.

4e Dimension - Langage

991

Exemple Avec 4D Server, vous voulez que les postes 4D Client Macintosh et Windows utilisent simultanment des interfaces de plate-formes diffrentes. Pour cela, vous pouvez appeler la commande FIXER INTERFACE dans la Mthode base Sur ouverture : ` Partons de l'hypothse que les prfrences des utilisateurs sont stockes dans une table [Prfrences] ` Cherchons l'enregistrement correspondant l'utilisateur courant CHERCHER([Prfrences];[Prfrences]Utilisateur=Utilisateur courant) Si (Enregistrements trouves([Prfrences])=0) ` S'il n'est pas trouv, utilisons les prfrences par dfaut CHERCHER([Prfrences];[Prfrences]Utilisateur="Par dfaut") Fin de si ` Fixons l'interface de plate-forme en fonction des prfrences de l'utilisateur FIXER INTERFACE ([Prfrences]Interface plate-forme)

Rfrence Lire interface.

992

4e Dimension - Langage

FIXER TITRES TABLES

Interface utilisateur version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER TITRES TABLES (titresTables; numTables) Paramtre titresTables numTables Type Tableau Alpha Tableau Num Description Noms des tables tels qu'ils doivent apparatre Numros des tables

Description FIXER TITRES TABLES vous permet de masquer, renommer et rordonner les tables de votre base lorsqu'elles apparaissent dans les diteurs standard de 4e Dimension, comme l'diteur de recherches, en mode Utilisation ou Menus crs. Cette commande vous permet galement de modifier les libells des tables apparaissant dans vos formulaires, si vous avez utilis des libells dynamiques. Pour plus d'informations sur l'insertion de libells de tables et de champs dynamiques dans les formulaires, reportezvous au manuel Mode Structure. Les tableaux titresTables et numTables doivent tre synchroniss. Dans le tableau titresTables, vous passez les noms des tables tels que vous voulez qu'ils apparaissent. Les tables s'afficheront dans l'ordre dfini par ces tableaux. Dans chaque lment du tableau numTables, passez le numro de la table qui correspond au nom, nouveau ou ancien, de la table, et ce dans le mme numro d'lment que dans le tableau titresTables. Si vous voulez masquer une table, ne la mettez pas dans les tableaux. Note : Les libells modifis doivent respecter les rgles d'criture des objets de langage. Ils ne doivent notamment pas contenir de caractres interdits tels que +?-/ (pour plus d'informations, reportez-vous la section Nommer les objets du langage 4D). Vous avez, par exemple, une base comprenant les tables A, B et C, cres dans cet ordre. Vous voulez que ces tables apparaissent sous les noms X, Y et Z. De plus, vous ne voulez pas faire apparatre la table B. Enfin, vous voulez que les tables soient dans l'ordre Z et X. Pour cela, vous passez dans le paramtre titresTables un tableau deux lments, Z et X, et vous passez dans le paramtre numTables un tableau deux lments, 3 et 1. FIXER TITRES TABLES ne modifie pas la structure de votre base. Cette commande n'affecte que l'utilisation ultrieure des diteurs standard de 4e Dimension et des formulaires comportant des libells dynamiques. L'aire de validit de la commande FIXER TITRES TABLES est la session. L'avantage, en Client/Serveur, est que plusieurs postes 4D Client peuvent voir simultanment votre structure d'une manire diffrente. Vous pouvez appeler FIXER TITRES TABLES autant de fois que vous voulez.

4e Dimension - Langage

993

La commande FIXER TITRES TABLES est utile dans les cas suivants : Traduction dynamique de votre base. Affichage des tables dans l'ordre et avec les noms que vous voulez, indpendamment de leur dfinition. Affichage des tables d'une faon qui dpend de l'identit ou des privilges d'un utilisateur. ATTENTION : FIXER TITRES TABLES n'annule pas l'effet de la proprit Invisible d'une table. Si vous avez dfini une table en tant qu'invisible au niveau de la structure, elle n'apparatra pas, mme si elle est spcifie dans FIXER TITRES TABLES. Exemple Vous dveloppez une application 4D destine au march international. Vous avez donc besoin de prendre en compte les ncessits de traduction et de localisation. Pour les diteurs standard de 4e Dimension qui apparaissent en mode Utilisation ou Menus crs et vos formulaires utilisant des libells dynamiques, vous pouvez traiter cette question en utilisant une table [Traductions] et quelques mthodes pour crer et utiliser les traductions pour chaque langue que vous voulez. Dans votre base, vous crez la table suivante :

Ensuite, crez la mthode projet traduire_TABLES_ET_CHAMPS ci-dessous. Cette mthode analyse la structure de votre base dans la table [Traductions] et cre les enregistrements correspondant la langue passe comme paramtre. ` mthode projet traduire_TABLES_ET_CHAMPS ` traduire_TABLES_ET_CHAMPS ( Alpha ) ` traduire_TABLES_ET_CHAMPS ( Langue ) C_ALPHA(31;$1) C_ENTIER LONG($vlTable;$vlChamp) Boucle ($vlTable;1;Nombre de tables) ` Passer sur chaque table ` Vrifier s'il existe une traduction du nom de la table pour la langue spcifie CHERCHER([Traductions];[Traductions]NomActuel=Nom de la table($vlTable);*) CHERCHER([Traductions]; & ;[Traductions]Langue=$1)

994

4e Dimension - Langage

Si (Enregistrements trouves([Traductions])=0) ` Sinon, crer l'enregistrement CREER ENREGISTREMENT([Traductions]) [Traductions]NomActuel:=Nom de la table($vlTable) [Traductions]Langue:=$1 ` Le nom de la table traduit a besoin d'tre saisi STOCKER ENREGISTREMENT([Traductions]) Fin de si Boucle ($vlChamp;1;Nombre de champs($vlTable)) ` Vrifier s'il existe une traduction pour le nom du champ dans la langue spcifie CHERCHER([Traductions];[Traductions]NomActuel=Nom du champ($vlTable; $vlChamp);*) CHERCHER([Traductions]; & ;[Traductions]Langue=$1) Si (Enregistrements trouves([Traductions])=0) ` Sinon, crer l'enregistrement CREER ENREGISTREMENT([Traductions]) [Traductions]NomActuel:=Nom du champ($vlTable;$vlChamp) [Traductions]Langue:=$1 ` Le nom du champ traduit a besoin d'tre saisi STOCKER ENREGISTREMENT([Traductions]) Fin de si Fin de boucle Fin de boucle Si maintenant vous excutez la ligne suivante, vous pouvez crer autant d'enregistrements qu'il vous faut pour la traduction espagnole de vos tables et champs : traduire_TABLES_ET_CHAMPS ("Espagnol") Une fois que cette ligne de code est appele, vous pouvez saisir une traduction dans le champ [Traductions]NomTraduit pour chacun des nouveaux enregistrements. Enfin, chaque fois que vous voulez afficher en espagnol les diteurs standard de 4D ou les formulaires avec libells dynamiques, vous excutez la ligne suivante : TABLES_ET_CHAMPS_LOCALISES ("Espagnol") La mthode projet TABLES_ET_CHAMPS_LOCALISES est la suivante : ` Mthode objet TABLES_ET_CHAMPS_LOCALISES ` TABLES_ET_CHAMPS_LOCALISES ( Alpha ) ` TABLES_ET_CHAMPS_LOCALISES ( Langue ) C_ALPHA(63;$1) C_ENTIER LONG($vlTable;$vlNumTable;$vlChamp;$vlNumChamp)

4e Dimension - Langage

995

$vlNumTable:=Nombre de tables ` Obtenir le nombre de tables dans la base ` Initialiser les tableaux pour FIXER TITRES TABLES TABLEAU ALPHA(31;$asNomTable;$vlNumTable) TABLEAU ENTIER($aiNumroTable;$vlNumTable) Boucle ($vlTable;1;$vlNumTable) ` Passer sur chaque table $asNomTable{$vlTable}:=Nom de la table($vlTable) ` Obtenir le nom de la table $aiNumroTable{$vlTable}:=$vlTable ` Stocker le numro de la table ` Chercher la traduction CHERCHER([Traductions];[Traductions]NomActuel=$asNomTable{$vlTable};*) CHERCHER([Traductions]; & ;[Traductions]Langue=$1) Si (Enregistrements dans table([Traductions])>0) ` Si disponible, utiliser le nom localis de la table $asNomTable{$vlTable}:=[Traductions]NomTraduit Fin de si ` Obtenir le nombre de champs dans la table $vlNumChamp:=Nombre de champs($vlTable) ` Initialiser les tableaux pour FIXER TITRES CHAMPS TABLEAU ALPHA(31;$asNomChamp;$vlNumChamp) TABLEAU ENTIER($asNumChamp;$vlNumChamp) Boucle ($vlChamp;1;$vlNumChamp) ` Pour chaque champ ` Obtenir le nom du champ $asNomChamp{$vlChamp}:=Nom du champ($vlTable;$vlChamp) $asNumChamp{$vlChamp}:=$vlChamp ` Stocker le numro du champ CHERCHER([Traductions];[Traductions]NomActuel=$asNomChamp{$vlChamp};*) ` Chercher la traduction CHERCHER([Traductions]; & ;[Traductions]Langue=$1) Si (Enregistrements dans table([Traductions])>0) ` Si disponible, utiliser le nom traduit $asNomChamp{$vlChamp}:=[Traductions]NomTraduit Fin de si Fin de boucle TRIER TABLEAU($asNomChamp;$asNumChamp;>) FIXER TITRES CHAMPS(Table($vlTable)->;$asNomChamp;$asNumChamp) Fin de boucle TRIER TABLEAU($asNomTable;$aiNumroTable;>) FIXER TITRES TABLES($asNomTable;$aiNumroTable)

Notez que de nouvelles traductions peuvent tre effectues dans la base sans modification de code ni recompilation. Rfrence FIXER TITRES CHAMPS, Nom de la table, Nombre de tables.

996

4e Dimension - Langage

LIRE TITRES TABLES

Interface utilisateur version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE TITRES TABLES (titresTables; numTables) Paramtre titresTables numTables Type Tableau Texte Tableau Entier long Description Noms courants des tables Numros des tables

Description La commande LIRE TITRES TABLES remplit les tableaux titresTables et numTables avec les noms et les numros des tables de la base dfinis dans la fentre de Structure ou via la commande FIXER TITRES TABLES. Le contenu des deux tableaux est synchronis. Si la commande FIXER TITRES TABLES a t appele lors de la session, LIRE TITRES TABLES retourne uniquement les noms modifis et les numros des tables ayant t dfinies via cette commande. Sinon, LIRE TITRES TABLES retourne le nom dfini dans la fentre de Structure de toutes les tables de la base. Dans les deux cas, la commande ne retourne pas les tables dclares invisibles. Rfrence FIXER TITRES TABLES, LIRE TITRES CHAMPS.

4e Dimension - Langage

997

FIXER TITRES CHAMPS

Interface utilisateur version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER TITRES CHAMPS (table | sous-table; titresChamps; numChamps) Paramtre table | sous-table titresChamps numChamps Type Table | Sous-table Tableau Alpha Tableau Num Description Table ou sous-table pour laquelle vous voulez redfinir les titres des champs Nouveaux titres des champs Numros des champs

Description FIXER TITRES CHAMPS vous permet de masquer, renommer et rordonner les champs d'une table ou d'une sous-table de votre base lorsqu'ils apparaissent dans les diteurs standard de 4e Dimension, tel que l'diteur de recherches, en mode Utilisation ou Menus crs. Cette commande vous permet galement de modifier les libells des champs apparaissant dans vos formulaires, si vous avez utilis des libells dynamiques. Pour plus d'informations sur l'insertion de libells de tables et de champs dynamiques dans les formulaires, reportezvous au manuel Mode Structure. Les tableaux titresChamps et numChamps doivent tre synchroniss. Dans le tableau titresChamps, vous passez les noms des champs tels que vous voulez qu'ils apparaissent. Les champs s'afficheront dans l'ordre dfini par ces tableaux. Dans chaque lment du tableau numChamps, vous passez le numro de la table qui correspond au nom, nouveau ou ancien, du champ, et ce dans le mme numro d'lment que dans le tableau titresChamps. Si vous voulez masquer un champ, il suffit de ne pas le passer dans les tableaux. Note : Les libells modifis doivent respecter les rgles d'criture des objets de langage. Ils ne doivent notamment pas contenir de caractres interdits tels que +?-/ (pour plus d'informations, reportez-vous la section Nommer les objets du langage 4D). Vous avez, par exemple, une table comprenant les champs F, G et H, crs dans cet ordre. Vous voulez que ces champs apparaissent comme M, N et O. De plus, vous ne voulez pas faire apparatre le champ N. Enfin, vous voulez que les tables soient dans l'ordre O et M. Pour cela, vous passez dans le paramtre titresChamps un tableau contenant deux lments, O et M, et vous passez dans le paramtre numChamps un tableau contenant deux lments, 3 et 1. FIXER TITRES CHAMPS ne modifie pas la structure de votre base. Elle n'affecte que l'affichage ultrieur des diteurs standard de 4e Dimension et des formulaires comportant des libells dynamiques. Le temps de validit de la commande FIXER TITRES CHAMPS est la session. L'avantage, en Client/Serveur, est que plusieurs stations 4D Client peuvent voir simultanment votre structure d'une manire diffrente. Vous pouvez appeler FIXER TITRES CHAMPS autant de fois que vous voulez.

998

4e Dimension - Langage

La commande FIXER TITRES CHAMPS est utile dans les cas suivants : Traduction dynamique de votre base. Affichage des champs dans l'ordre et avec les noms que vous voulez, indpendamment de leurs dfinitions. Affichage des champs suivant l'identit ou les privilges d'un utilisateur. ATTENTION : FIXER TITRES CHAMPS n'annule pas l'effet de la proprit Invisible d'un champ. Si vous avez dfini un champ en tant qu'invisible au niveau de la structure, il n'apparatra pas mme s'il est spcifi dans FIXER TITRES CHAMPS. FIXER TITRES CHAMPS doit imprativement tre accompagne d'un appel la commande FIXER TITRES TABLES, mme si vous ne souhaitez pas modifier le titre de la table. Si vous excutez FIXER TITRES CHAMPS seule, 4D ne fait rien. Exemple Reportez-vous l'exemple de la commande FIXER TITRES TABLES. Rfrence FIXER TITRES TABLES, Nom du champ, Nombre de champs.

4e Dimension - Langage

999

LIRE TITRES CHAMPS

Interface utilisateur version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE TITRES CHAMPS (table; titresChamps; numChamps) Paramtre table titresChamps numChamps Type Table Tableau Texte Tableau Entier long Description Table dont vous souhaitez connatre les noms des champs Noms courants des champs Numros des champs

Description La commande LIRE TITRES CHAMPS remplit les tableaux titresChamps et numChamps avec les noms et les numros des champs de la table dsigne. Le contenu des deux tableaux est synchronis. Si la commande FIXER TITRES CHAMPS a t appele au cours de la session, LIRE TITRES CHAMPS retourne uniquement les noms modifis et les numros des champs ayant t dfinis via cette commande. Sinon, LIRE TITRES CHAMPS retourne le nom dfini dans la fentre de Structure de tous les champs de la base. Dans les deux cas, la commande ne retourne pas les champs dclars invisibles. Rfrence FIXER TITRES CHAMPS, LIRE TITRES TABLES.

1000 4e Dimension - Langage

Majuscule enfoncee

Interface utilisateur version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Majuscule enfoncee Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Etat de la touche Majuscule

Description Majuscule enfoncee retourne Vrai si la touche Majuscule est enfonce. Exemple La mthode objet du bouton bUnBouton effectue des actions diffrentes en fonction de la ou des touche(s) de modification enfonce(s) au moment du clic : ` Mthode objet bUnBouton Au cas ou ` Diverses autres combinaisons de touches peuvent tre testes ici ` ... : (Majuscule enfoncee & Windows Ctrl enfoncee) ` Les touches Maj et Ctrl Windows (ou Commande MacOS) sont enfonces FAIRE ACTION1 ` ... : (Majuscule enfoncee) ` Seule Majuscule est enfonce FAIRE ACTION2 ` ... : (Windows Ctrl enfoncee) ` Seule Ctrl Windows (ou Commande MacOS) est enfonce FAIRE ACTION3 ` ... ` D'autres touches peuvent tre testes individuellement ici ` ... Fin de cas Rfrence Macintosh commande enfoncee, Macintosh control enfoncee, Macintosh option enfoncee, Verrouillage majuscule enfoncee, Windows Alt enfoncee, Windows Ctrl enfoncee.

4e Dimension - Langage 1001

Verrouillage majuscule enfoncee

Interface utilisateur version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Verrouillage majuscule enfoncee Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Etat de la touche Verrouillage Majuscule

Description Verrouillage majuscule enfoncee retourne Vrai si la touche Verrouillage Majuscule est enfonce. Exemple Reportez-vous l'exemple de la commande Majuscule enfoncee. Rfrence Macintosh commande enfoncee, Macintosh control enfoncee, Macintosh option enfoncee, Majuscule enfoncee, Windows Alt enfoncee, Windows Ctrl enfoncee.

1002 4e Dimension - Langage

Windows Ctrl enfoncee

Interface utilisateur version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Windows Ctrl enfoncee Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Etat de la touche Ctrl Windows ou Etat de la touche Commande Macintosh

Description Windows Ctrl enfoncee retourne Vrai si la touche Ctrl Windows est enfonce. Note : Lorsqu'elle est appele sous MacOS, Windows Ctrl enfoncee retourne Vrai si la touche Macintosh Commande est enfonce. Exemple Reportez-vous l'exemple de la commande Majuscule enfoncee. Rfrence Macintosh commande enfoncee, Macintosh option enfoncee, Majuscule enfoncee, Verrouillage majuscule enfoncee, Windows Alt enfoncee, Windows Ctrl enfoncee.

4e Dimension - Langage 1003

Windows Alt enfoncee

Interface utilisateur version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Windows Alt enfoncee Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Etat de la touche Windows Alt ou Etat de la touche Macintosh Option

Description Windows Alt enfoncee retourne Vrai si la touche Alt Windows est enfonce. Note : Lorsqu'elle est appele sous MacOS, Windows Alt enfoncee retourne Vrai si la touche Macintosh Option est enfonce. Exemple Reportez-vous l'exemple de la commande Majuscule enfoncee. Rfrence Macintosh commande enfoncee, Macintosh control enfoncee, Macintosh option enfoncee, Majuscule enfoncee, Verrouillage majuscule enfoncee, Windows Ctrl enfoncee.

1004 4e Dimension - Langage

Macintosh commande enfoncee

Interface utilisateur version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Macintosh commande enfoncee Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Etat de la touche Commande Macintosh ou Etat de la touche Ctrl Windows

Description Macintosh commande enfoncee retourne Vrai si la touche Commande Macintosh est enfonce. Note : Lorsqu'elle est appele sous Windows, la fonction Macintosh commande enfoncee retourne Vrai si la touche Ctrl Windows est enfonce. Exemple Reportez-vous l'exemple de la commande Majuscule enfoncee. Rfrence Macintosh control enfoncee, Macintosh option enfoncee, Majuscule enfoncee, Verrouillage majuscule enfoncee, Windows Alt enfoncee, Windows Ctrl enfoncee.

4e Dimension - Langage 1005

Macintosh option enfoncee

Interface utilisateur version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Macintosh option enfoncee Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Etat de la touche Option Macintosh ou Etat de la touche Alt Windows

Description Macintosh option enfoncee retourne Vrai si la touche Option Macintosh est enfonce. Note : Lorsqu'elle est appele sous Windows, la fonction Macintosh option enfoncee retourne Vrai si la touche Alt Windows est enfonce. Exemple Reportez-vous l'exemple de la commande Majuscule enfoncee. Rfrence Macintosh commande enfoncee, Macintosh control enfoncee, Majuscule enfoncee, Verrouillage majuscule enfoncee, Windows Alt enfoncee, Windows Ctrl enfoncee.

1006 4e Dimension - Langage

Macintosh control enfoncee

Interface utilisateur version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Macintosh control enfoncee Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Etat de la touche Control du Macintosh

Description Macintosh control enfoncee retourne Vrai si la touche Control du Macintosh est enfonce. Note : Lorsqu'elle est appele sous Windows, la fonction Macintosh control enfoncee retourne toujours Faux. Cette touche Macintosh n'a pas d'quivalent sous Windows. Exemple Reportez-vous l'exemple de la commande Majuscule enfoncee. Rfrence Macintosh commande enfoncee, Macintosh option enfoncee, Majuscule enfoncee, Verrouillage majuscule enfoncee, Windows Alt enfoncee, Windows Ctrl enfoncee.

4e Dimension - Langage 1007

POSITION SOURIS

Interface utilisateur version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

POSITION SOURIS (sourisX; sourisY; boutonSouris{; *}) Paramtre sourisX sourisY boutonSouris Type Numrique Numrique Numrique Description Coordonne horizontale de la souris Coordonne verticale de la souris Etat du bouton de la souris : 0 = Bouton relch 1 = Bouton enfonc 2 = Bouton droit enfonc 3 = Les deux boutons enfoncs Si spcifi, utiliser le systme de coordonnes globales Si omis, utiliser le systme de coordonnes

* locales

Description La commande POSITION SOURIS retourne l'tat courant de la souris. Les coordonnes horizontale et verticale sont retournes dans les paramtres sourisX et sourisY. Si vous passez le paramtre *, ces coordonnes sont exprimes par rapport l'cran. Si vous ne passez pas le paramtre *, vous exprimez ces coordonnes par rapport la fentre de premier plan du process courant. Le paramtre boutonSouris retourne l'tat du ou des bouton(s) de la souris, comme dcrit ci-dessus dans le tableau des paramtres. Note : Les valeurs 2 et 3 peuvent tre retournes sous MacOS X compter de la version 10.2.5 uniquement. Exemple Reportez-vous l'exemple de la commande Pop up menu. Rfrence APPELER SUR EVENEMENT, Macintosh commande enfoncee, Macintosh control enfoncee, Macintosh option enfoncee, Majuscule enfoncee, Verrouillage majuscule enfoncee, Windows Alt enfoncee, Windows Ctrl enfoncee.

1008 4e Dimension - Langage

Pop up menu

Interface utilisateur version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Pop up menu (contenu{; parDfaut{; coordX; coordY}}) Paramtre contenu parDfaut coordX coordY Rsultat Type Texte Numrique Numrique Numrique Numrique

Numrique

Description Dfinition du texte du menu Numro de l'lment slectionn par dfaut Coordonne X du coin suprieur gauche Coordonne Y du coin suprieur gauche Numro de l'lment de menu slectionn

Description La commande Pop up menu fait apparatre un pop up l'emplacement courant du curseur de la souris ou l'emplacement dfini par les paramtres facultatifs coordX et coordY. Selon les rgles standard d'interface utilisateur, cette commande doit gnralement tre appele en rponse un clic souris, et lorsque le bouton reste enfonc un certain laps de temps. Vous dfinissez les lments du pop up menu l'aide du paramtre contenu, de la manire suivante : Chaque lment est spar des autres par un point-virgule (;), "Elment1;Elment2;Elment3". Pour inactiver un lment, placez une parenthse ouvrante "(" dans son libell. Pour dfinir une ligne de sparation, passez la valeur "(-" en tant que libell. Pour dfinir le style de caractres d'un lment, placez dans son libell le symbole infrieur "<" suivi d'une lettre. Voici les diffrents codes : <B <I <U <O <S Gras Italique Soulign Contours (MacOS seulement) Relief (MacOS seulement)

Pour associer une coche un lment, insrez dans son libell un point d'exclamation "!" suivi du caractre que vous voulez utiliser comme coche. Sous MacOS, le caractre est affich ; sous Windows, une coche standard est affiche (quel que soit le caractre pass).

4e Dimension - Langage 1009

Pour associer une icne un lment, insrez dans son libell un accent circonflexe "^" suivi d'un caractre dont le code ASCII moins 48 plus 256 (ou plus 208) reprsente un numro de ressource d'icne MacOS. Pour ajouter un raccourci clavier un lment, insrez dans son libell une barre oblique "/" suivie du caractre de raccourci. Notez que cette dernire option est uniquement informative (aucun raccourci clavier n'active le pop up menu), cependant vous pouvez indiquer un raccourci clavier si l'lment du pop up menu dispose d'une commande quivalente dans la barre de menus principale de votre application. Le paramtre optionnel parDfaut vous permet de dfinir l'lment du pop up menu slectionn par dfaut lorsque celui-ci apparat. Passez une valeur situe entre 1 et le nombre d'lments du menu. Si vous ne passez pas ce paramtre, le premier lment du menu sera slectionn par dfaut. Si vous passez galement les paramtres coordX et coordY (cf. ci-dessous), ce paramtre est ignor. Les paramtres facultatifs coordX et coordY permettent de dsigner lemplacement du pop up menu afficher. Passez respectivement dans coordX et coordY les coordonnes horizontale et verticale du coin suprieur gauche du menu. Ces coordonnes doivent tre exprimes en pixels dans le systme de coordonnes local au formulaire courant. Ces deux paramtres doivent tre passs ensemble ; si un seul est pass, il est ignor. Si vous utilisez les paramtres coordX et coordY, le paramtre parDfaut est ignor. Dans ce cas en effet, la souris ne se trouve pas ncessairement au niveau du pop up menu. Ces paramtres sont utiles notamment pour la gestion des boutons 3D avec pop up menu associ. Lorsqu'un lment du pop up menu est slectionn, la commande retourne son numro, autrement elle retourne zro. Note : Utilisez les pop up menus avec un nombre "raisonnable" d'lments. Si, par exemple, vous voulez afficher plus de 50 lments, envisagez plutt d'employer une zone de dfilement dans un formulaire. Exemple La mthode projet MON RACCOURCI fait apparatre un pop up menu de navigation : ` Mthode projet MON RACCOURCI POSITION SOURIS($vlMouseX;$vlMouseY;$vlBouton) Si (Macintosh control enfoncee | ($vlBouton=2)) $vtItems:="A propos de cette base...<I;(-;!-Autres options;(-" Boucle ($vlTable;1;Nombre de tables) $vtItems:=$vtItems+";"+Nom de la table($vlTable) Fin de boucle $vlChoixUtilisateur:=Pop up menu($vtItems)

1010 4e Dimension - Langage

Au cas ou : ($vlChoixUtilisateur=1) ` Afficher les informations : ($vlChoixUtilisateur=2) ` Afficher les options Sinon Si ($vlChoixUtilisateur>0) ` Aller la table dont le numro est $vlChoixUtilisateur-4 Fin de si Fin de cas Fin de si Cette mthode projet peut tre appele d'une des manires suivantes : depuis la mthode d'un objet ragissant un clic souris, et n'attendant pas que le bouton soit relch (par exemple un bouton invisible), depuis un process qui pie les vnements et communique avec les autres process, depuis une mthode de gestion d'vnements installe par la commande APPELER SUR EVENEMENT. Dans les deux derniers cas, il n'est pas ncessaire que le clic se produise dans un objet de formulaire. C'est l'un des avantages de la commande Pop up menu. Gnralement, les pop up menus sont affichs par l'intermdiaire d'objets de formulaire. Avec Pop up menu, vous pouvez faire apparatre un pop up menu n'importe o. Le pop up menu s'affiche sous Windows lorsque l'utilisateur appuie sur le bouton droit de la souris, et sous MacOS lorsqu'il utilise la combinaison Control+clic. Notez cependant que la mthode ci-dessus ne teste pas le clic souris, c'est la mthode appelante qui en est charge. Voici le pop up menu tel qu'il s'affiche sous Windows ( gauche) et sous MacOS ( droite). Notez la coche standard de la version Windows :

Rfrence POSITION SOURIS.

4e Dimension - Langage 1011

GENERER FRAPPE CLAVIER

Interface utilisateur version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

GENERER FRAPPE CLAVIER (code{; modifiers{; process}}) Paramtre code modifiers process Type Numrique Numrique Numrique Description Code ASCII d'un caractre ou code de touche de fonction Etat des touches Modifier Numro de rfrence du process de destination ou File d'attente des vnements de l'application si ce paramtre est omis ou est gal 0

Description La commande GENERER FRAPPE CLAVIER simule la frappe d'une touche sur le clavier. Elle produit les mmes effets que lorsque l'utilisateur tape rellement un caractre au clavier. Vous passez le code ASCII du caractre dans le paramtre code. Si vous n'utilisez pas le paramtre modifiers, aucun "modifier" (Majuscule, Option, etc...) n'est simul. Si vous utilisez le paramtre modifiers, vous devez passer une constante ou une combinaison de constantes du thme Evnements (Modifiers). Par exemple, pour simuler la touche Majuscule, passez la valeur Masque touche majuscule. Si vous passez le paramtre process, la frappe clavier est envoye au process dont le numro de rfrence est spcifi. Si vous passez 0 (zro) dans ce paramtre ou si vous l'omettez, la frappe clavier est envoye au niveau de l'application et le gestionnaire de 4D l'affectera au process appropri. Exemple Reportez-vous l'exemple de la fonction Chercher process. Rfrence GENERER CLIC, GENERER EVENEMENT.

1012 4e Dimension - Langage

GENERER CLIC

Interface utilisateur version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

GENERER CLIC (sourisX; sourisY{; process}{; *}) Paramtre sourisX sourisY process * Type Numrique Numrique Numrique Description Coordonne horizontale Coordonne verticale Numro de rfrence du process de destination ou File d'attente des vnements de l'application si ce paramtre est omis ou si vous passez 0 Si spcifi, utiliser le systme de coordonnes globales Si omis, utiliser le systme de coordonnes locales

Description La commande GENERER CLIC simule un clic souris. Elle produit les mmes effets que lorsque l'utilisateur clique rellement avec le bouton de la souris. Vous passez les coordonnes horizontale et verticale du clic dans sourisX et sourisY. Si vous passez le paramtre *, vous exprimez ces coordonnes par rapport l'cran. Si vous omettez le paramtre *, vous exprimez ces coordonnes par rapport la fentre de premier plan du process dont le numro est pass dans process. Si vous passez le paramtre process, le clic est envoy au process dont vous avez pass le numro. Si vous passez 0 (zro) ou si vous omettez ce paramtre, le clic est envoy au niveau de l'application et le gestionnaire de 4D l'affectera au process appropri. Rfrence GENERER EVENEMENT, GENERER FRAPPE CLAVIER.

4e Dimension - Langage 1013

GENERER EVENEMENT

Interface utilisateur version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

GENERER EVENEMENT (quoi; message; quand; sourisX; sourisY; modifiers{; process}) Paramtre quoi message quand sourisX sourisY modifiers process Type Numrique Numrique Numrique Numrique Numrique Numrique Numrique Description Type d'vnement Message de l'vnement Moment de l'vnement exprim en ticks Coordonne horizontale de la souris Coordonne verticale de la souris Etat des touches Modifier Numro de rfrence du process de destination ou File d'attente des vnements de l'application si ce paramtre est omis ou si vous passez 0

Description La commande GENERER EVENEMENT simule un vnement (clavier ou souris). Elle produit les mmes effets que lorsque l'utilisateur agit rellement par l'intermdiaire du clavier ou de la souris. Vous devez passer une des constantes prdfinies suivantes dans le paramtre quoi : Constante Bouton souris enfonc Bouton souris relch Touche enfonce Touche relche Rptition touche Type Entier Entier Entier Entier Entier long long long long long Valeur 1 2 3 4 5

Si l'vnement est li la souris, passez 0 (zro) dans le paramtre message. Si l'vnement est li au clavier, passez dans message le code ASCII du caractre simul. Gnralement, vous passez la valeur retourne par la fonction Nombre de ticks dans quand. Si l'vnement est li la souris, passez les coordonnes horizontale et verticale du clic dans sourisX et sourisY.

1014 4e Dimension - Langage

Dans le paramtre modifiers, vous devez passer une constante ou une combinaison de constantes du thme Evnements (Modifiers). Par exemple, pour simuler la touche Majuscule, passez la valeur Bit touche majuscule. Si vous passez le paramtre process, l'vnement est envoy au process dont vous avez pass le numro. Si vous passez 0 (zro) ou si vous omettez ce paramtre, l'vnement est envoy au niveau de l'application et le gestionnaire de 4D l'affectera au process appropri. Rfrence GENERER CLIC, GENERER FRAPPE CLAVIER.

4e Dimension - Langage 1015

DEFILER LIGNES

Interface utilisateur version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DEFILER LIGNES ({*; }objet{; position}{; *}) Paramtre * objet position * Type * Objet de formulaire Entier long * Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est une table Nom dobjet (si * est spcifi) ou Table (si * est omis) Position denregistrement dans la slection Afficher la ligne en premire position aprs dfilement

Description La commande DEFILER LIGNES permet de faire dfiler les lignes dun sous-formulaire ou dun formulaire liste affich via la commande MODIFIER SELECTION ou VISUALISER SELECTION de manire afficher le premier enregistrement slectionn ou un enregistrement spcifique. Si vous passez le premier paramtre optionnel *, vous indiquez que le paramtre objet est le nom dun objet de type sous-formulaire (dans ce cas, passez une chane dans objet). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une table (table du formulaire liste ou du sous-formulaire). Si vous ne passez pas le paramtre position, la commande provoque le dfilement vertical des lignes de la liste de manire ce que le premier enregistrement slectionn (surlign) dans la liste soit visible. Si aucun enregistrement nest slectionn, la commande ne fait rien. Si au moins un enregistrement slectionn est visible, la commande ne fait rien. Le paramtre position permet dindiquer le numro dun enregistrement parmi la slection courante, cest--dire sa position ; si vous passez ce paramtre, la commande provoque le dfilement vertical des lignes de la liste de manire ce que lenregistrement dsign soit visible (quil soit surlign ou non). Si lenregistrement est dj visible, la commande ne fait rien. Si vous passez le second paramtre optionnel *, la ligne rendue visible par la commande (si la liste a effectivement dfil) sera place en premire position de la liste. Note : La commande MARQUER ENREGISTREMENTS comporte un paramtre * facultatif permettant de dlguer la gestion du dfilement la commande DEFILER LIGNES. Rfrence MARQUER ENREGISTREMENTS.

1016 4e Dimension - Langage

TEXTE SELECTIONNE

Interface utilisateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TEXTE SELECTIONNE (zone; dbutSl; finSl) Paramtre zone dbutSl finSl Type Champ | Variable Numrique Numrique Description Champ ou variable saisissable Position du dbut de la slection de texte Position de la fin de la slection de texte

Description La commande TEXTE SELECTIONNE vous permet de dterminer prcisment le texte actuellement slectionn. Attention : Bien que vous deviez passer TEXTE SELECTIONNE un nom de variable ou de champ saisissable, cette commande ne retourne une position de slection significative que lorsqu'elle est applique la zone en cours de modification. Note : Cette commande ne peut pas tre utilise avec des champs situs dans le formulaire en mode liste d'un sous-formulaire. Le texte peut tre slectionn par l'utilisateur ou par SELECTIONNER TEXTE. Le paramtre dbutSl retourne la position du premier caractre slectionn. Le paramtre finSl retourne la position du dernier caractre slectionn plus un. Si les valeurs dbutSl et finSl retournes sont identiques, l'utilisateur n'a pas slectionn de texte et le point d'insertion est plac devant le caractre spcifi par dbutSl. Exemples (1) L'exemple suivant rcupre le texte slectionn dans le champ [Produits]Notes :

TEXTE SELECTIONNE ([Produits]Notes;vPremier;vDernier) Si (vPremier<vDernier) ALERTE("Le texte slectionn est : "+Sous chaine([Produits]Notes;vPremier; vDernier-vPremier)) Fin de si

(2) Reportez-vous l'exemple de la commande FILTRER FRAPPE CLAVIER. Rfrence FILTRER FRAPPE CLAVIER, Frappe clavier, SELECTIONNER TEXTE.

4e Dimension - Langage 1017

SELECTIONNER TEXTE

Interface utilisateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SELECTIONNER TEXTE (zone; dbutSl; finSl) Paramtre zone dbutSl finSl Type Champ | Variable Numrique Numrique Description Champ ou variable saisissable Nouvelle position de dbut de slection de texte Nouvelle position de fin de slection de texte

Description La commande SELECTIONNER TEXTE slectionne une partie du texte dans zone. Si zone n'est pas l'objet en cours de modification, elle rcupre le focus. Note : Cette commande ne peut pas tre utilise avec des champs situs dans le formulaire en mode liste d'un sous-formulaire. Le paramtre dbutSl reprsente la position du premier caractre slectionner, et le paramtre finSl reprsente la position du dernier caractre slectionner plus un. Si dbutSl et finSl sont identiques, le point d'insertion est plac devant le caractre spcifi par dbutSl et aucun caractre n'est slectionn. Si finSl est suprieur au nombre de caractres prsents dans la zone, tous les caractres compris entre dbutSl et la fin du texte sont slectionns. Exemples (1) L'exemple suivant slectionne tous les caractres dans le champ saisissable [Produits]Notes :

SELECTIONNER TEXTE([Produits]Notes;1;Longueur([Produits]Notes)+1)

(2) L'exemple suivant place le point d'insertion au dbut du champ [Produits]Notes :

SELECTIONNER TEXTE([Produits]Notes;1;1)

(3) L'exemple suivant place le point d'insertion la fin du champ [Produits]Notes :

$vLen:=Longueur([Produits]Notes)+1 SELECTIONNER TEXTE([Produits]Notes;$vLen;$vLen)

(4) Reportez-vous l'exemple de la commande FILTRER ENTREE CLAVIER.

1018 4e Dimension - Langage

CHANGER POINTEUR SOURIS

Interface utilisateur version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER POINTEUR SOURIS {(curseur)} Paramtre curseur Type Numrique Description Numro de ressource MacOS de curseur

Description La commande CHANGER POINTEUR SOURIS remplace le pointeur (graphique) de la souris par celui qui est stock dans la ressource type MacOS 'CURS' dont vous avez pass le numro d'ID dans le paramtre curseur. Si vous ne passez pas ce paramtre, le pointeur de la souris (re)devient la flche standard. Utilisez la commande LISTE RESSOURCES pour rcuprer la liste des curseurs disponibles. Rfrence LISTE RESSOURCES.

4e Dimension - Langage 1019

Objet focus

Interface utilisateur version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Objet focus Pointeur Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Pointeur Pointeur vers l'objet ayant le focus

Description Objet focus retourne un pointeur vers lobjet ayant le focus dans le formulaire courant. Si aucun objet na le focus, la commande retourne Nil. Vous pouvez utiliser Objet focus pour effectuer une action dans un formulaire sans savoir quel objet est actuellement slectionn. N'oubliez pas auparavant de tester si l'objet est du type voulu, l'aide de la fonction Type. Note : Lorsquelle est utilise avec un objet de type List box, la fonction Objet focus retourne un pointeur vers la colonne (le tableau) de la list box ayant le focus. Cette commande ne peut pas tre utilise sur les champs dans les sous-formulaires. Note : Cette commande n'a de sens qu'en cours de saisie. Son utilisation hors de ce contexte gnre des messages d'erreur. Exemple L'exemple suivant est une mthode objet pour un bouton. Cette mthode passe les donnes de l'objet courant en majuscules. L'objet doit tre de type Texte ou Alpha (type 0 ou 24) :

$pointeur := Objet focus ` Obtenir le pointeur vers le dernier objet Si ((Type ($pointeur->) = Est un champ alpha) | (Type($pointeur->) = Est une variable chane)) ` S'il s'agit d'un objet de type Texte ou Alpha $pointeur-> := Majusc ($pointeur->) ` Mettre les donnes en majuscules Fin de si

1020 4e Dimension - Langage

REDESSINER

Interface utilisateur version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

REDESSINER (objet) Paramtre objet Type Objet Description Sous-table de laquelle redessiner le sous-formulaire ou Table de laquelle redessiner le sous-formulaire ou Champ duquel redessiner la zone ou Variable de laquelle redessiner la zone ou Formulaire 4D mettre jour sur les browsers Web

Description Lorsque vous modifiez par programmation le contenu d'un champ ou d'un sous-champ affich dans un sous-formulaire, vous devez excuter la commande REDESSINER pour vous assurer que le formulaire est correctement mis jour. Note Serveur Web : Lorsqu'elle est associe l'vnement formulaire Sur minuteur, la commande REDESSINER permet de provoquer la mise jour d'un formulaire 4D affich par un browser Web. Pour plus d'informations sur ce point, reportez-vous la description de la commande FIXER MINUTEUR. Rfrence FIXER MINUTEUR.

4e Dimension - Langage 1021

INVERSER FOND

Interface utilisateur version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

INVERSER FOND ({*; }textVar | textChp) Paramtre * textVar | textChp Type * Description Si spcifi, on passe le nom de l'objet (chane) Si omis, on passe un champ ou une variable Variable ou champ de type texte dont le fond doit tre invers

Variable | Champ

Description INVERSER FOND permet d'inverser textVar ou textChp dans un formulaire. La porte de cette commande est le formulaire en cours d'utilisation. Si vous passez le paramtre optionnel *, vous indiquez que le second paramtre dsigne le nom d'un objet (une chane). Si vous ne passez pas *, le paramtre dsigne un champ ou une variable. Dans ce cas, vous passez la rfrence du champ ou de la variable texte. Vous pouvez utiliser INVERSER FOND lors d'un affichage l'cran ou lors d'une impression sur une imprimante matricielle. Une imprimante postscript ne permet pas d'inverser le fond. Vous ne pouvez pas non plus inverser de variable dans un formulaire sortie. Evitez d'utiliser INVERSER FOND avec une variable saisissable : la saisie de caractres effacera partiellement seulement l'inversion. Exemple L'exemple suivant est la mthode objet d'une variable dans un formulaire entre. La mthode teste la valeur d'un champ. Si elle est ngative, la variable est inverse dans le formulaire : vMontant := [Comptes]Montant ` Assignation de la valeur du champ la variable Si (vMontant < 0) ` Si le montant est ngatif INVERSER FOND (vMontant) ` Inverser le fond de la variable Fin de si

Note : Cette commande, cre l'origine pour les interfaces en noir et blanc, est dsormais rarement utilise. Pour signaler ou mettre en avant un champ ou une variable dont la valeur est par exemple incorrecte, un systme de couleurs est gnralement utilis. Rfrence CHOIX COULEUR, FIXER COULEURS RVB.

1022 4e Dimension - Langage

34 ________________________ Interruptions

4e Dimension - Langage 1023

1024 4e Dimension - Langage

APPELER SUR EVENEMENT

Interruptions version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

APPELER SUR EVENEMENT (mthodeEvn{; nomProcess}) Paramtre mthodeEvn nomProcess Type Alpha Alpha Description Mthode d'vnement appeler ou Chane vide pour arrter l'interception des vnements Nom de process

Description APPELER SUR EVENEMENT installe la mthode dont le nom est pass dans mthodeEvn comme mthode de gestion des vnements. Conseil : Cette commande ncessite un niveau de connaissances avanc en programmation. Gnralement, vous n'avez pas besoin d'appeler APPELER SUR EVENEMENT pour traiter les vnements. Lorsque vous utilisez des formulaires, 4e Dimension gre pour vous les vnements et les retourne aux formulaires et objets appropris. Astuce : La version 6 a introduit de nouvelles commandes telles que POSITION SOURIS, Majuscule enfoncee, etc., pour rcuprer des informations sur les vnements. Ces commandes, dans une certaine mesure, peuvent tre appeles depuis les mthodes objet pour traiter les informations dont vous avez besoin. Elles peuvent ainsi vous pargner l'criture d'un algorithme bas sur une structure du type APPELER SUR EVENEMENT. La porte de cette commande est la session de travail. Par dfaut, la mthode est excute dans un process local spar. Vous ne pouvez avoir qu'une mthode de gestion d'vnement la fois. Pour dsinstaller une mthode de gestion d'vnement, appelez de nouveau APPELER SUR EVENEMENT et passez une chane vide dans mthodeEvn. Comme la mthode de gestion d'vnement tourne dans process spar, mthodeEvn est toujours active, mme si aucune mthode 4e Dimension n'est en cours d'excution. Aprs l'installation, 4e Dimension appelle la mthode mthodeEvn ds qu'un vnement survient. Un vnement peut tre un clic souris ou la frappe d'une touche.

4e Dimension - Langage 1025

Le paramtre optionnel nomProcess permet de donner un nom au process cr par APPELER SUR EVENEMENT. Si nomProcess commence par le symbole dollar ($), nomProcess est un process local, ce dont vous aurez gnralement besoin. Si vous ne passez pas le paramtre nomProcess, 4D cre par dfaut un process local nomm $Gestionnaire d'vnement. ATTENTION : Soyez prudent lors de l'criture d'une mthode de gestion d'vnement. N'appelez pas de commande gnrant un vnement, sinon vous risquez de ne plus pouvoir sortir de la mthode. La combinaison de touches Ctrl+Maj+Retour Arrire (sous Windows) ou Commande+Option+Maj+Control+Retour Arrire (sous MacOS) convertit le process d'vnement en un process normal, ce qui signifie que la mthode ne reoit plus systmatiquement tous les vnements qui surviennent. Cette combinaison vous permet de sortir d'une mthode de gestion d'vnement devenue incontrlable. Dans la mthode de gestion d'vnement, vous pouvez lire les variables systme suivantes : MouseDown, KeyCode, Modifiers, MouseX, MouseY et MouseProc. Notez que ces variables sont des variables process. Leur porte est donc le process de gestion d'vnements. Copiez-les dans des variables interprocess si vous souhaitez que leurs valeurs soient disponibles dans un autre process. La variable systme MouseDown contient 1 s'il y a eu un clic souris, 0 sinon. La variable systme KeyCode contient le code ASCII du caractre tap au clavier, ou le code d'une touche de fonction. Rfrez-vous la section Codes ASCII qui liste les codes ASCII utiliss par 4D, ainsi qu' la section Codes des touches de fonction. 4D fournit des constantes prdfinies pour les principaux codes ASCII et touches de fonctions. Vous pouvez les visualiser l'aide la fentre de l'Explorateur, dans les thmes correspondants. La variable systme Modifiers permet de savoir si les touches suivantes taient enfonces lorsqu'un vnement s'est produit : Plate-forme Windows Macintosh Modifiers Maj, Verrouillage des majuscules, Alt, Ctrl, Bouton droit de la souris Maj, Verrouillage des majuscules, Option, Contrle, Commande

Notes - la touche Windows Alt est l'quivalent de la touche Macintosh Option. - la touche Windows Ctrl est l'quivalent de la touche Macintosh Commande. - La touche Macintosh Control n'a pas d'quivalent sous Windows. Cependant, un clic bouton droit de la souris sous Windows est l'quivalent de Control+clic sur Macintosh.

1026 4e Dimension - Langage

Isolment, les touches "modifiers" ne gnrent pas d'vnement. Une autre touche ou le bouton de la souris doit galement tre enfonc(e). La variable Modifiers est une variable de type Entier long (4 octets), qui doit tre considre comme un tableau de 32 bits. 4D fournit des constantes prdfinies exprimant la position ou le masque des bits pour tester le bit correspondant chaque touche de modification. Lorsque, par exemple, vous voulez dtecter si la touche Majuscule a t enfonce pour l'vnement, vous pouvez crire : Si (Modifiers ?? Bit touche majuscule) ` Si la touche Majuscule tait enfonce ou : Si ((Modifiers & Masque touche majuscule)#0) ` Si la touche Majuscule tait enfonce Note : Sous Windows, la valeur 128 est ajoute la variable Modifiers si le bouton (gauche) de la souris est relch au moment de l'vnement. Les variables systmes MouseX et MouseY contiennent les coordonnes horizontale et verticale du clic souris, exprimes dans le systme de coordonnes locales de la fentre dans laquelle le clic s'est produit. L'angle suprieur gauche de la fentre reprsente les coordonnes 0,0. Ces variables n'ont de signification que lorsqu'un clic souris a lieu. La variable systme MouseProc contient le numro de rfrence du process dans lequel le clic souris s'est produit. Note : Les variables systme MouseDown, KeyCode, Modifiers, MouseX, MouseY et MouseProc ne contiennent des valeurs significatives que dans une mthode de gestion d'vnement installe par APPELER SUR EVENEMENT. Exemple L'exemple suivant annule l'impression si l'utilisateur appuie sur les touches Ctrl+. (Commande+.). En premier lieu, la mthode de gestion des vnements est installe. Ensuite, un message s'affiche, indiquant que l'impression a t annule. Si la variable interprocess <>vbOnStoppe est gale Vrai dans la mthode de gestion d'vnement, une bote de dialogue d'alerte s'affiche pour indiquer l'utilisateur le nombre d'enregistrements qui viennent de s'imprimer. Enfin, la mthode de gestion d'vnement est dsinstalle : UTILISER PARAMETRES IMPRESSION Si (OK =1) <>vbOnStoppe:=Faux APPELER SUR EVENEMENT("GESTION EVENEMENTS") TOUT SELECTIONNER([Personnes]) MESSAGE("Pour interrompre l'impression, appuyez sur Ctrl+point.") $NbEnregistrements:=Enregistrements trouves([Personnes])

4e Dimension - Langage 1027

Boucle ($Enrg;1;$NbEnregistrements) Si (<>vbOnStoppe) ALERTE("L'impression a t annule l'enregistrement "+Chaine($Enrg)+ " sur "+Chaine($NbEnregistrements)) $Enrg:=$NbEnregistrements+1 Sinon IMPRIMER LIGNE([Personnes];"Etat") Fin de si Fin de boucle SAUT DE PAGE ` Dsinstallation de la mthode d'appel sur vnement APPELER SUR EVENEMENT("") Fin de si

La mthode de gestion d'vnement teste si la combinaison de touches Ctrl+. (Commande+.) a t employe et met la variable interprocess <>vbOnStoppe Vrai : ` Mthode projet GESTION EVENEMENTS Si ((Modifiers ?? Bit touche commande) & ( KeyCode = Point)) CONFIRMER("Voulez-vous vraiment annuler l'impression ?") Si (OK=1) <>vbOnStoppe:=Vrai ` N'oubliez pas cet appel sinon 4D traitera aussi cet vnement FILTRER EVENEMENT Fin de si Fin de si Notez que APPELER SUR EVENEMENT est utilis dans cet exemple car un tat spcial est imprim l'aide des commandes PARAMETRES IMPRESSION, IMPRIMER LIGNES et SAUT DE PAGE dans une structure de type Boucle..Fin de boucle. Lorsque vous imprimez un tat l'aide la commande IMPRIMER SELECTION, vous n'avez pas besoin de grer les vnements permettant l'utilisateur d'interrompre l'impression, IMPRIMER SELECTION le fait pour vous. Rfrence FILTRER EVENEMENT, Majuscule enfoncee, POSITION SOURIS.

1028 4e Dimension - Langage

Methode appelee sur evenement

Interruptions version 6.8.1

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Methode appelee sur evenement Alpha Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Alpha Nom de la mthode dappel sur evenement

Description La commande Methode appelee sur evenement retourne le nom de la mthode installe par la commande APPELER SUR EVENEMENT. Si aucune mthode dappel sur vnement na t installe, une chane vide ("") est retourne. Rfrence APPELER SUR EVENEMENT.

4e Dimension - Langage 1029

FILTRER EVENEMENT

Interruptions version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FILTRER EVENEMENT Paramtre Type Description Cette commande ne requiert pas de paramtre Description FILTRER EVENEMENT doit tre appele l'intrieur d'une mthode de gestion d'vnements installe par APPELER SUR EVENEMENT. Lorsqu'une mthode de gestion d'vnements appelle la commande FILTRER EVENEMENT, l'vnement courant n'est pas pass 4e Dimension. Cette commande vous permet d'effacer l'vnement courant (i.e. clic, frappe clavier) de la squence d'vnements, de manire ce que 4D n'effectue pas de traitement sur l'vnement que vous provoquez dans la mthode de gestion d'vnements. ATTENTION : Evitez de crer une mthode de gestion d'vnement appelant uniquement FILTRER EVENEMENT car TOUS les vnements vont tre ignors par 4D. Si vous vous retrouvez dans un tel cas, vous pouvez sortir de la mthode en tapant Ctrl+Maj+Retour Arrire (sous Windows) ou Commande+Option+Maj+Contrle+Retour Arrire (sous MacOS). Dans ce cas, le process de gestion d'vnement est converti en process normal n'interceptant plus aucun vnement. Cas particulier : La commande FILTRER EVENEMENT peut galement tre utilise au sein dune mthode de formulaire sortie standard, lorsque le formulaire est affich par l'intermdiaire des commandes VISUALISER SELECTION ou MODIFIER SELECTION. Dans ce cas prcis, la commande FILTRER EVENEMENT permet de filtrer les double-clics sur les enregistrements (et ainsi, excuter d'autres actions que l'ouverture des enregistrements en mode page). Pour cela, placez dans la mthode du formulaire sortie les lignes suivantes : Si(Evenement formulaire=Sur double clic souris) FILTRER EVENEMENT ... `Traiter le double-clic Fin de si Exemple Rfrez-vous l'exemple d'APPELER SUR EVENEMENT. Rfrence APPELER SUR EVENEMENT.

1030 4e Dimension - Langage

APPELER SUR ERREUR

Interruptions version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

APPELER SUR ERREUR (mthodErreur) Paramtre mthodErreur Type Alpha Description Mthode de gestion d'erreur appeler ou Chane vide pour dsinstaller la mthode

Description APPELER SUR ERREUR installe la mthode projet dont le nom est pass dans mthodErreur comme mthode d'interception des erreurs aussi appele mthode de gestion des erreurs. La porte de cette commande est le process courant. Il ne peut y avoir qu'une seule mthode de gestion des erreurs par process, mais il peut exister diffrentes mthodes de gestions d'erreurs pour plusieurs process. Pour dsinstaller une mthode de gestion des erreurs, appelez de nouveau APPELER SUR ERREUR et passez une chane vide dans mthodErreur. Aprs l'installation, 4e Dimension appelle cette mthode lorsqu'une erreur se produit. Vous pouvez identifier les erreurs en lisant la variable systme Error, qui contient le code de l'erreur. Les codes d'erreurs retourns par 4e Dimension sont traits dans les sections Codes d'erreurs. Reportez-vous par exemple la section Erreurs de syntaxe ou Erreurs de la base de donnes. La variable Error n'est dfinie qu' l'intrieur de la mthode de gestion des erreurs ; si vous souhaitez que le code soit accessible dans la mthode ayant provoqu l'erreur, copiez la variable Error dans votre propre variable process. La mthode de gestion des erreurs doit gnralement traiter les erreurs de manire approprie ou afficher un message d'erreur l'utilisateur. Les erreurs peuvent tre gnres par : Le moteur de base de donnes de 4e Dimension ; par exemple, lorsque la sauvegarde d'un enregistrement provoquerait la duplication d'une cl d'index unique. L'environnement de 4e Dimension ; par exemple, lorsque vous n'avez pas assez de mmoire pour remplir un tableau. Le systme d'exploitation sur lequel la base est lance ; par exemple, disque plein ou erreurs d'entre/sortie.

4e Dimension - Langage 1031

La commande STOP peut tre utilise pour stopper le traitement. Si vous n'appelez pas STOP dans la mthode installe, 4e Dimension retourne la mthode interrompue et reprend son excution. Utilisez la commande STOP lorsque l'excution ne peut se poursuivre. Si une erreur se produit dans la mthode de gestion d'erreurs elle-mme, 4e Dimension reprend le contrle de la gestion des erreurs. En consquence, assurez-vous que la mthode de gestion des erreurs installe ne puisse pas elle-mme gnrer d'erreur. Aussi, vous ne pouvez pas utiliser la commande APPELER SUR ERREUR dans une mthode de gestion des erreurs. APPELER SUR ERREUR est gnralement place dans la mthode base d'ouverture d'une base en menus crs, afin de grer les erreurs pour cette application. APPELER SUR ERREUR peut galement tre place au dbut d'une mthode pour grer les erreurs spcifiques cette mthode. Lorsqu'une mthode APPELER SUR ERREUR est installe, il n'est plus possible de tracer l'excution des mthodes l'aide de la combinaison Alt+clic (sous Windows) ou Option+clic (sous MacOS). En effet, cette combinaison gnre un code d'erreur (code 1006) qui active immdiatement la mthode d'appel sur erreur. Cependant, vous pouvez tester ce code d'erreur et appeler la commande TRACE si ncessaire. Exemples (1) La mthode projet suivante tente de crer un document dont le nom est reu en paramtre et retourne 0 (zro) ou un code d'erreur si le document n'a pas pu tre cr : ` Mthode projet Crer doc ` Crer doc ( Chane ; Pointeur ) -> Entier long ` Crer doc ( NomDoc ; ->DocRef ) -> Code d'erreur rsultant

gError:=0 APPELER SUR ERREUR("IO TRAITEMENT ERREURS") $2->:=Creer document($1) APPELER SUR ERREUR("") $0:=gError

La mthode projet IO TRAITEMENT ERREURS est la suivante : ` Mthode projet IO TRAITEMENT ERREURS gError:=Error ` Simple copie du code d'erreur dans la variable process gError

1032 4e Dimension - Langage

Notez l'utilisation de la variable process gError pour rcuprer le code d'erreur dans la mthode en train de s'excuter. Une fois que ces mthodes sont prsentes dans votre base, vous pouvez crire par exemple : ` ... C_HEURE(vhDocRef) $vlErrCode:=Crer doc($vsDocumentNom;->vhDocRef) Si ($vlErrCode=0) `... FERMER DOCUMENT($vlErrCode) Sinon ALERTE ("Le document n'a pas pu tre cr, erreur d'E/S "+Chane($vlErrCode)) Fin de si (2) Reportez-vous l'exemple de la section Tableaux et mmoire. (3) Alors que vous implmentez un ensemble complexe d'oprations, vous pouvez terminer avec de multiples sous-routines qui ncessitent diffrentes mthodes de gestion des erreurs. Comme ne pouvez avoir qu'une seule mthode la fois de gestion des erreurs par process, vous devez soit reprer la mthode courante chaque fois que vous appelez APPELER SUR ERREUR, soit utiliser une variable tableau process (ici tabErrorMethod) pour empiler les mthodes de gestion d'erreur ainsi qu'une mthode projet (ici APPEL SUR ERR) pour les installer et les dsinstaller. Le tableau doit tre initialis au tout dbut de l'excution du process : ` N'oubliez pas d'initialiser le tableau au dbut ` de la mthode de gestion du process TABLEAU ALPHA(63;tabErrorMethod;0) Voici la mthode personnalise APPEL SUR ERR : ` Mthode projet APPEL SUR ERR ` APPEL SUR ERR { ( Chane ) } ` APPEL SUR ERR { ( Nom de la mthode ) } C_ALPHA(63;$1;$ErrorMethod) C_ENTIER LONG($vlElem) Si (Nombre de parametres>0) $ErrorMethod:=$1 Sinon $ErrorMethod:="" Fin de si

4e Dimension - Langage 1033

Si ($ErrorMethod#"") C_ENTIER LONG(gError) gError:=0 $vlElem:=1+Taille tableau(tabErrorMethod) INSERER LIGNES(tabErrorMethod;$vlElem) tabErrorMethod{$vlElem}:=$1 APPELER SUR ERREUR($1) Sinon APPELER SUR ERREUR("") $vlElem:=Taille tableau(tabErrorMethod) Si ($vlElem>0) SUPPRIMER LIGNES(tabErrorMethod;$vlElem) Si ($vlElem>1) APPELER SUR ERREUR(tabErrorMethod{$vlElem-1}) Fin de si Fin de si Fin de si

Vous pouvez alors l'appeler de la manire suivante : gError:=0 APPEL SUR ERR("ERREURS ES") ` Installe la mthode de gestion d'erreurs ERREURS ES ` ... APPEL SUR ERR("TOUTES ERREURS") ` Installe la mthode de gestion d'erreurs TOUTES ERREURS ` ... APPEL SUR ERR ` Dsinstalle la mthode de gestion d'erreurs TOUTES ERREURS et ` rinstalle ERREURS ES ` ... APPEL SUR ERR ` Dsinstalle la mthode de gestion d'erreurs ERREURS ES ` ... (4) La mthode de gestion d'erreurs suivante ignore les interruptions de l'utilisateur : ` Mthode projet MONTRER ERREURS SEULEMENT Si (Error#1006) ALERTE ("L'erreur "+Chaine(Error)+" s'est produite.") Fin de si Rfrence STOP.

1034 4e Dimension - Langage

Methode appelee sur erreur

Interruptions version 6.8.1

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Methode appelee sur erreur Alpha Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Alpha Nom de la mthode dappel sur erreur

Description La commande Methode appelee sur erreur retourne le nom de la mthode installe par la commande APPELER SUR ERREUR pour le process courant. Si aucune mthode dappel sur erreur na t installe, une chane vide ("") est retourne. Exemple Cette commande est particulirement utile dans le cadre des composants, car elle permet de changer temporairement puis de rtablir les mthodes dinterception derreurs :

$methCourante:=Methode appelee sur erreur APPELER SUR ERREUR("NouvelleMthode") ` Si le document ne peut tre ouvert, une erreur est gnre $ref:=Ouvrir document("MonDocument") ` Rinstallation de la mthode prcdente APPELER SUR ERREUR($methCourante)

Rfrence APPELER SUR ERREUR.

4e Dimension - Langage 1035

STOP

Interruptions version 5

Note : Vous aurez rarement besoin de cette commande.


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

STOP Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande STOP est destine tre utilise dans une mthode projet de gestion d'erreurs installe par la commande APPELER SUR ERREUR. Si vous n'avez pas install de mthode projet de gestion d'erreurs, lorsqu'une erreur se produit (par exemple une erreur de la base de donnes), 4D affiche sa bote de dialogue d'erreur standard et interrompt l'excution de votre code : Si le code en cours d'excution est une mthode objet ou formulaire (ou une mthode projet appele depuis une mthode formulaire ou objet), 4D "rend la main" au formulaire actuellement affich. Si le code en cours d'excution est une mthode appele depuis un menu, 4D "rend la main" la barre de menus ou au formulaire actuellement affich. Si le code en cours d'excution est la mthode de gestion d'un process, le process est tu. Si le code en cours d'excution est une mthode appele directement ou indirectement par une opration d'import ou d'export, cette dernire est stoppe. Il en va de mme pour les recherches squentielles et les tris. Etc... Si vous dcidez de traiter les erreurs l'aide d'une mthode projet d'interception d'erreurs, 4D n'affiche plus sa bote de dialogue d'erreur standard et n'interrompt plus l'excution de votre code. Au lieu de cela, 4D appelle votre mthode projet d'interception d'erreurs puis poursuit l'excution de la ligne de code suivant celle ayant provoqu l'erreur. Vous pouvez traiter certaines erreurs par programmation (par exemple pendant un import, si vous interceptez une erreur de la base de donne signalant une valeur duplique, vous pouvez ignorer l'erreur et poursuivre l'opration). Il existe galement des erreurs que vous ne pouvez pas traiter ou des erreurs que vous ne devez pas "ignorer". Dans ces cas, vous devez stopper l'excution de la mthode comme le fait 4D ; pour cela, appelez la commande STOP depuis la mthode projet d'interception d'erreurs.

1036 4e Dimension - Langage

Un peu d'histoire... Bien que la commande STOP soit destine une utilisation au sein d'une mthode projet d'interception d'erreurs, des membres de la communaut 4D ont commenc l'utiliser dans d'autres mthodes projet pour interrompre leur excution. Le fait que cela fonctionne n'est qu'un "effet secondaire". Nous vous recommandons de n'utiliser cette commande que dans des mthodes projet d'interception d'erreurs. Rfrence APPELER SUR ERREUR.

4e Dimension - Langage 1037

1038 4e Dimension - Langage

35 ________________________ Langage

4e Dimension - Langage 1039

1040 4e Dimension - Langage

Nombre de parametres

Langage version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nombre de parametres Numrique Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Numrique Nombre de paramtres effectivement passs

Description Nombre de parametres retourne le nombre de paramtres passs une mthode projet. ATTENTION : Nombre de parametres n'a d'intrt que dans une mthode projet appele par une autre mthode (projet ou non). Si la mthode projet qui appelle Nombre de parametres est associe une commande de menu, la fonction retourne 0. Exemples (1) Les mthodes projet de 4e Dimension acceptent que des paramtres soient optionnels, partir de la droite. Par exemple, la mthode maMthode(a;b;c;d) peut accepter les syntaxes suivantes : maMthode ( a ; b ; c ; d ) ` Tous les paramtres sont passs maMthode ( a ; b ; c ) ` Le dernier paramtre n'est pas pass maMthode ( a ; b ) ` Les deux derniers paramtres ne sont pas passs maMthode ( a ) ` Seul le premier paramtre est pass maMthode ` Aucun paramtre n'est pass Si vous utilisez Nombre de parametres dans maMthode, vous pouvez dtecter le nombre de paramtres passs et effectuer des oprations diffrentes selon ce nombre. L'exemple suivant affiche un texte et peut soit l'insrer dans une zone de 4D Write, soit l'crire dans un document sur disque : ` Mthode AJOUTER TEXTE ` AJOUTER TEXTE ( Texte { ; Entier long { ; Heure } } ) ` AJOUTER TEXTE ( Texte { ; zone 4D Write { ; RfDoc } } ) C_TEXTE ($1) C_HEURE ($2) C_ENTIER LONG ($3) MESSAGE ($1)

4e Dimension - Langage 1041

Si (Nombre de parametres>=3) ENVOYER PAQUET ($3;$1) Sinon Si (Nombre de parametres>=2) wr_INSERER TEXTE ($2;$1) Fin de si Fin de si

Vous pouvez ensuite appeler cette mthode de ces trois faons diffrentes : AJOUTER TEXTE (vtTexte) ` Afficher seulement le message texte ` Afficher le message texte et ajouter le texte $wrZone AJOUTER TEXTE (vtTexte;$wrZone) ` Afficher le message texte et l'crire dans $vhRfDoc AJOUTER TEXTE (vtTexte;0;$vhRfDoc) (2) Les mthodes projet de 4e Dimension acceptent un nombre variable de paramtres du mme type partir de la droite. Pour dclarer ces paramtres, vous devez utiliser des directives de compilation auxquelles vous passez ${N} en tant que variable, o N spcifie le premier des paramtres. A l'aide de Nombre de parametres, vous pouvez rfrencer ces paramtres dans une boucle avec la syntaxe d'indirection de paramtre. L'exemple suivant est une fonction qui retourne la valeur maximale reue en tant que paramtre : ` Mthode projet Max de ` Max de ( Rel { ; Rel2... ; RelN } ) -> Rel ` Max de ( Valeur { ; Valeur2... ; ValeurN } ) -> Valeur maximale C_REEL ($0;${1}) ` Tous les paramtres et le rsultat de la fonction sont de type REEL $0:=${1} Boucle ($vlParam;2;Nombre de parametres) Si (${$vlParam}>$0) $0:=${$vlParam} Fin de si Fin de boucle

Vous pouvez alors appeler cette mthode d'une des deux manires suivantes : vrRsultat:=Max de (Enregistrements dans ensemble("Opration A"); Enregistrements dans ensemble("Opration B")) ou : vrRsultat:=Max de (r1;r2;r3;r4;r5;r6) Rfrence Commandes du thme Compilateur, C_ALPHA, C_BLOB, C_BOOLEEN, C_DATE, C_ENTIER, C_ENTIER LONG, C_GRAPHE, C_HEURE, C_IMAGE, C_POINTEUR, C_REEL, C_TEXTE.

1042 4e Dimension - Langage

Type

Langage version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Type (champVar) Numrique Paramtre champVar Rsultat Type Champ | Variable Numrique Description Champ ou variable tester Numro du type de donnes

Description Type retourne une valeur numrique qui indique le type du champ ou de la variable que vous avez pass(e) dans le paramtre champVar. 4e Dimension fournit les constantes prdfinies suivantes : Constante Est un champ alpha Est une variable chane Est un texte Est un numrique Est un entier Est un entier long Est une date Est une heure Est un boolen Est une image Est une sous-table Est un BLOB Est une variable indfinie Est un pointeur Est un tableau chane Est un tableau texte Est un tableau numrique Est un tableau entier Est un tableau entier long Est un tableau date Est un tableau boolen Est un tableau image Est un tableau pointeur Est un tableau 2D Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long long long long long long long long long Valeur 0 24 2 1 8 9 4 11 6 3 7 30 5 23 21 18 14 15 16 17 22 19 20 13

4e Dimension - Langage 1043

Note de compatibilit : Dans les versions prcdentes de 4D, la fonction Type, lorsqu'elle tait applique une variable de type Graphe dclare l'aide de la commande C_GRAPHE, retournait 3 (Est une image). A compter de la version 6 de 4D, Type retourne 9 (Est un entier long) lorsqu'elle est applique une variable de type Graphe. Vous pouvez appliquer la fonction Type aux champs, variables interprocess, variables process, variables locales et des pointeurs dpoints qui rfrent ces types d'objets. Note version 6 : A partir de la version 6 de 4D, vous pouvez appliquer Type aux paramtres ($1,$2..., ${...}) d'une mthode projet ou au rsultat d'une fonction ($0). Exemples (1) Rfrez-vous l'exemple de la commande AJOUTER A PRESSE PAPIERS. (2) Rfrez-vous l'exemple de la commande PROPRIETES GLISSER DEPOSER. (3) La mthode projet suivante efface une partie ou la totalit des champs de l'enregistrement courant de la table vers laquelle pointe le pointeur pass en paramtre, et ce, sans supprimer l'enregistrement ou changer d'enregistrement courant : ` Mthode projet VIDER ENREGISTREMENT ` VIDER ENREGISTREMENT ( Pointeur {; Entier long } ) ` VIDER ENREGISTREMENT ( -> [Table] { ; Type des valeurs } ) C_POINTEUR ($1) C_ENTIER LONG ($2;$vlTypeVal) Si (Nombre de parametres>=2) $vlTypeVal:=$2 Sinon $vlTypeVal:=0xFFFFFFFF Fin de si Boucle ($vlChamp;1;Nombre de champs($1)) $vpChamp:=Champ(Table($1);$vlChamp) $vlTypeChamp:=Type($vpChamp->) Si ( $vlTypeVal ?? $vlTypeChamp ) Au cas ou : (($vlTypeChamp=Est un champ alpha)|($vlTypeChamp=Est un texte)) $vpChamp->:="" : (($vlTypeChamp=Est un numrique)|($vlTypeChamp=Est un entier)| ($vlTypeChamp=Est un entier long)) $vpChamp->:=0 : ($vlTypeChamp=Est une date) $vpChamp->:=!00/00/00!

1044 4e Dimension - Langage

: ($vlTypeChamp=Est une heure) $vpChamp->:=?00:00:00? : ($vlTypeChamp=Est un boolen) $vpChamp->:=Faux : ($vlTypeChamp=Est une image) C_IMAGE($vgImageVide) $vpChamp->:=$vgImageVide : ($vlTypeChamp=Est une sous-table) Repeter TOUS LES SOUS ENREGISTREMENTS($vpChamp->) SUPPRIMER SOUS ENREGISTREMENT($vpChamp->) Jusque(Sous enregistrements trouves($vpChamp->)=0) : ($vlTypeChamp=Is BLOB) FIXER TAILLE BLOB($vpChamp->;0) Fin de cas Fin de si Fin de boucle Une fois cette mthode projet implmente dans votre base, vous pouvez crire : ` Effacer la totalit du contenu de l'enregistrement courant de la ` table [Choses faire] VIDER ENREGISTREMENT (->[Choses faire]) ` Effacer les champs de type Texte, BLOB et Image de l'enregistrement courant de la ` table [Choses faire] VIDER ENREGISTREMENT (->[Choses faire]; 0 ?+ Est un texte ?+ Est un BLOB ? + Est une image ) ` Effacer la totalit de l'enregistrement courant de la table [Choses faire] sauf les ` champs Alpha VIDER ENREGISTREMENT (->[Choses faire]; -1 ?- Est un champ alpha ) Rfrence Est une variable, Indefinie.

4e Dimension - Langage 1045

Self

Langage version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Self Pointeur Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Pointeur Pointeur vers l'objet du formulaire dont la mthode est en cours d'excution (le cas chant), sinon Nil (->[]) si hors contexte

Description Self retourne un pointeur vers l'objet du formulaire dont la mthode objet est en cours d'excution. La fonction Self est utilise pour rfrencer une variable dans sa propre mthode objet. Elle ne retourne un pointeur valide que si elle est appele dans une mthode objet ; elle ne peut donc pas tre utilise dans une mthode projet, mme appele par une mthode objet. Si Self est appele en-dehors de ce contexte, elle retourne un pointeur Nil (->[]). Conseil : Self est trs utile lorsque plusieurs objets d'un formulaire doivent effectuer la mme action, opre sur eux-mmes. Exemple Rfrez-vous l'exemple de la commande RESOUDRE POINTEUR. Rfrence RESOUDRE POINTEUR.

1046 4e Dimension - Langage

RESOUDRE POINTEUR

Langage version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

RESOUDRE POINTEUR (pointeur; nomVar; numTable; numChamp) Paramtre pointeur nomVar numTable numChamp Type Pointeur Alpha Numrique Numrique Description Pointeur duquel rcuprer l'objet rfrenc Nom de la variable rfrence ou chane vide Numro de la table ou de l'lment de tableau rfrenc(e) ou 0 ou -1 Numro du champ rfrenc ou 0

Description RESOUDRE POINTEUR rcupre l'information de l'objet rfrenc par pointeur et la retourne dans les paramtres nomVar, numTable et numChamp. Selon la nature de l'objet rfrenc par le pointeur, RESOUDRE POINTEUR retourne les valeurs suivantes : Objet rfrenc Aucun (pointeur NIL) Variable Tableau Elment de tableau Table Champ nomVar "" (chane vide) Nom de la variable Nom du tableau Nom du tableau "" (chane vide) "" (chane vide) Paramtres numTable 0 -1 -1 numro de l'lment numro de la table numro de la table numChamp 0 0 0 0 0 numro du champ

Note : Si la valeur que vous passez dans le paramtre pointeur n'est pas de type pointeur, une erreur de syntaxe est gnre. Exemples (1) Dans un formulaire, vous crez un groupe de 100 variables saisissables qui s'appellent v1, v2... v100. Pour cela, vous procdez de la manire suivante : Vous crez une variable saisissable que vous appelez v. Vous dfinissez les proprits de l'objet suivant vos besoins. Vous associez la mthode suivante l'objet : FaireQuelqueChose (Self) ` FaireQuelqueChose est une mthode projet de la base Vous pouvez alors soit dupliquer la variable autant de fois que ncessaire, soit utiliser la fonctionnalit Tableau sur la grille de l'diteur de formulaires. Dans la mthode FaireQuelqueChose, si vous voulez connatre l'indice de la variable pour laquelle la mthode est appele, vous crivez le code suivant :

RESOUDRE POINTEUR($1;$vaNomVar;$vlNumTable;$vlNumChamp) $vlVarNum:=Num(Sous chaine($vaNomVar;2)) 4e Dimension - Langage 1047

En suivant ces tapes, vous avez crit une fois seulement les mthodes objet pour les 100 variables : vous n'avez pas eu besoin d'crire FaireQuelqueChose(1), FaireQuelqueChose(2)..., FaireQuelqueChose(100)). (2) Pour des raisons de dbogage, vous voulez vrifier si le deuxime paramtre ($2) d'une mthode est un pointeur vers une table. Le dbut de votre mthode peut tre crit ainsi : ` ... Si (Dbogage) RESOUDRE POINTEUR($2;$vaNomVar;$vlNumTable;$vlNumChamp) Si (Non(($vlNumTable>0)&($vlNumChamp=0)&($vlNomVar=""))) ` ATTENTION : Le pointeur n'est pas une rfrence une table TRACE Fin de si Fin de si ` ...

(3) Reportez-vous l'exemple de la commande PROPRIETES GLISSER DEPOSER Rfrence Champ, Est une variable, Nil, Pointeur vers, PROPRIETES GLISSER DEPOSER, Table.

1048 4e Dimension - Langage

Nil

Langage version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nil (unPointeur) Boolen Paramtre unPointeur Rsultat Type Pointeur Boolen Description Pointeur tester VRAI = Pointeur Nil (->[]) FAUX = Pointeur valide vers un objet existant

Description Nil retourne Vrai si le pointeur que vous passez dans unPointeur est Nil (->[]). Elle retourne Faux dans tous les autres cas (pointeur vers un champ, une table ou une variable). A compter de la version 6 de 4e Dimension, vous pouvez utiliser la commande RESOUDRE POINTEUR qui vous indique le type de l'objet rfrenc, quel qu'il soit (pointeurs Nil compris). Rfrence Est une variable, RESOUDRE POINTEUR.

4e Dimension - Langage 1049

Est une variable

Langage version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Est une variable (unPointeur) Boolen Paramtre unPointeur Rsultat Type Pointeur Boolen Description Pointeur tester VRAI = Pointeur pointe vers une variable FAUX = Pointeur ne pointe pas vers une variable

Description La fonction Est une variable retourne Vrai si le pointeur pass dans le paramtre unPointeur rfrence une variable dfinie. Elle retourne Faux dans tous les autres cas (pointeur vers un champ ou table, pointeur Nil, etc.). A partir de la version 6, vous pouvez utiliser la commande RESOUDRE POINTEUR qui vous indique la nature de l'objet rfrenc, quel qu'il soit (pointeurs Nil compris). Rfrence Nil, RESOUDRE POINTEUR.

1050 4e Dimension - Langage

Pointeur vers

Langage version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Pointeur vers (nomVar) Pointeur Paramtre nomVar Rsultat Type Alpha Pointeur Description Nom d'une variable process Pointeur vers une variable process

Description Pointeur vers retourne un pointeur vers la variable dont le nom est pass dans nomVar. Pour rcuprer un pointeur vers un champ, utilisez la fonction Champ. Pour rcuprer un pointeur vers une table, utilisez la fonction Table. Note : Vous devez passer Prsentation des commandes XML un nom de variable uniquement. Il n'est pas possible d'utiliser des expressions, telles que, par exemple, $tTabNom+"{3}". Exemple Dans un formulaire, vous construisez une grille de 5 X 10 variables saisissables dont les noms sont v1, v2... v50. Pour initialiser toutes ces variables, vous pouvez crire : ` ... Boucle ($vlVar;1;50) $vpVar:=Pointeur vers("v"+Chaine($vlVar)) $vpVar->:="" Fin de boucle

Rfrence Champ, Table.

4e Dimension - Langage 1051

EXECUTER

Langage version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

EXECUTER (instruction) Paramtre instruction Type Alpha Description Code excuter

Description EXECUTER excute instruction comme une ligne de code. Cette chane d'instructions doit comporter une seule ligne. Si instruction est une chane vide, EXECUTER ne fait rien. Le principe est que si instruction peut tre excute comme une mthode d'une seule ligne, alors elle s'excutera correctement. La commande EXECUTER doit tre utilise avec prcautions, car elle ralentit la vitesse d'excution. Dans une base compile, le code d'instruction n'est pas compil. Cela signifie que l'instruction sera bien excute, mais ne sera pas vrifie par le compilateur au moment de la compilation. L'instruction peut contenir les lments suivants : un appel une mthode projet, un appel une commande 4D, une assignation. La formule peut utiliser des variables process et interprocess. En revanche, instruction ne doit pas contenir d'instructions de contrle de flux (Si, Tant que...) car le code doit "tenir" sur une seule ligne . Exemples Reportez-vous l'exemple de la commande Nom commande. Rfrence Nom commande.

1052 4e Dimension - Langage

Nom commande

Langage version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nom commande (commande) Alpha Paramtre commande Rsultat Type Numrique Alpha Description Numro de la commande Nom (traduit) de la commande

Description La fonction Nom commande retourne le nom (universel) de la commande dont le numro a t pass dans commande. 4e Dimension comporte un systme unique en son genre de traduction dynamique des mots-cls, constantes et noms de commandes que vous utilisez dans vos mthodes. Si, par exemple, vous crivez dans la version anglaise de 4D : DEFAULT TABLE ([MyTable]) ALL RECORDS ([MyTable]) Le mme code, si vous l'ouvrez avec la version franaise de 4D, sera automatiquement traduit : TABLE PAR DEFAUT ([MyTable]) TOUT SELECTIONNER ([MyTable]) Cependant, 4e Dimension comporte aussi une autre fonctionnalit unique, la commande EXECUTER, qui vous permet de construire la vole et d'excuter des parties de code mme lorsque la base de donnes est compile. Si nous rcrivons le code prcdent avec des commandes EXECUTE, en anglais, il prendra l'apparence suivante : EXECUTE ( "DEFAULT TABLE([MyTable])") EXECUTE ( "ALL RECORDS([MyTable])") Le mme code, ouvert avec la version franaise de 4D, sera automatiquement traduit : EXECUTER ( "DEFAULT TABLE([MyTable])") EXECUTER ( "ALL RECORDS([MyTable])") 4D traduit automatiquement la commande EXECUTE (anglais) en EXECUTER (franais) mais ne peut pas traduire les instructions passes la commande.

4e Dimension - Langage 1053

Si vous utilisez la commande EXECUTER dans votre application et si vous souhaitez liminer les problmes de traduction lis ce type d'instructions, utilisez Nom commande pour rendre vos instructions indpendantes des localisations. L'exemple prcdent devient alors :

EXECUTE (Command name (46)+"([MyTable])") EXECUTE (Command name (47)+"([MyTable])")

La version franaise se lira :


EXECUTER (Nom commande (46)+"([MyTable])") EXECUTER (Nom commande (47)+"([MyTable])")

Note : Pour connatre le numro de chaque commande, reportez-vous la section Syntaxe des commandes (liste alphabtique). Exemples (1) Pour toutes les tables de votre base de donnes, vous avez cr un formulaire appel "FORMULAIRE ENTREE" que vous utilisez pour la saisie dans chaque table. Vous voulez ajouter une mthode projet gnrique qui va dsigner ce formulaire comme tant le formulaire entre pour la table dont vous passez le nom ou le pointeur. Vous pouvez crire : ` mthode projet FORMULAIRE ENTREE STANDARD ` FORMULAIRE ENTREE STANDARD ( Pointeur {; Chane }) ` FORMULAIRE ENTREE STANDARD ( ->Table {; NomTable }) C_POINTEUR ($1) C_ALPHA (31;$2)

Si (Nombre de parametres>=2) EXECUTER (Nom commande (55)+"(["+$2+"];"FORMULAIRE ENTREE")") Sinon Si (Nombre de parametres>=1) FORMULAIRE ENTREE ($1->;"FORMULAIRE ENTREE") Fin de si Fin de si

Une fois que cette mthode a t ajoute dans votre base, vous pouvez crire : FORMULAIRE ENTREE STANDARD (->[Employs]) FORMULAIRE ENTREE STANDARD ("Employs") Note : Gnralement, il est prfrable d'utiliser des pointeurs pour crire des routines gnriques. Tout d'abord, le code sera excut compil si la base est compile. Deuximement, 4D Insider rcuprera les rfrences des objets vers lesquels vous passez les pointeurs. Troisimement, dans l'exemple ci-dessus, votre code cessera de fonctionner si vous renommez la table. Cependant, dans certains cas, l'utilisation de la commande EXECUTER peut tre la rponse vos besoins.

1054 4e Dimension - Langage

(2) Dans un formulaire, vous voulez afficher une liste droulante contenant les commandes standard de gnration d'tats. Dans la mthode objet de cette liste droulante, vous crivez : Au cas ou : (Evenement formulaire =Sur Chargement) TABLEAU TEXTE (asCommand;4) asCommand{1}:=Nom commande (1) ` Somme asCommand{2}:=Nom commande (2) ` Moyenne asCommand{3}:=Nom commande (3) ` Min asCommand{4}:=Nom commande (4) ` Max ` ... Fin de cas

Dans une version anglaise de 4D, la liste droulante contiendra : Sum, Average, Min et Max. Dans une version franaise de 4D, la liste droulante contiendra : Somme, Moyenne, Min et Max. Rfrence EXECUTER, Syntaxe des commandes (liste alphabtique).

4e Dimension - Langage 1055

Nom methode courante

Langage version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nom methode courante Alpha Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Alpha Nom de la mthode dappel

Description La commande Nom methode courante retourne le nom de la mthode dans laquelle elle est appele. Cette commande est utile dans le cadre du dbogage de mthodes gnriques. En fonction du type de mthode dappel, la chane retourne peut prendre lune des formes suivantes : Mthode dappel Chane retourne Mthode base NomMthode Trigger Trigger sur [NomTable] Mthode projet NomMthode Mthode formulaire [NomTable]NomFormulaire Mthode objet [NomTable]NomFormulaire.NomObjet Cette commande ne doit pas tre appele depuis une formule 4D. Note : Pour que cette commande fonctionne en mode compil, il est ncessaire que la base ait t compile avec l'option Contrle d'excution (situe dans les Prfrences de l'application) active. Pour dsactiver localement le contrle d'excution dans une mthode (ou une partie de mthode), vous pouvez utiliser les commentaires spciaux suivants : `%R- pour dsactiver le contrle d'excution `%R+ pour activer le contrle d'excution `%R* pour restituer l'tat initial du contrle d'excution (dfini dans les Prfrences).

1056 4e Dimension - Langage

TRACE

Langage version 6.8 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TRACE Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande TRACE est utilise, lors du dveloppement des bases, pour tracer des mthodes, c'est--dire contrler leur excution pas pas. La commande TRACE affiche le Dbogueur de 4e Dimension dans le process courant. La fentre du dbogueur apparat ds que la commande est appele, avant l'excution de la ligne de code suivante, et reste affiche pour l'excution de chaque ligne de code. Vous pouvez galement appeler manuellement le dbogueur en utilisant la combinaison Alt+Maj+clic droit sous Windows ou Control+Option+Commande+clic sous MacOS pendant l'excution du code. Dans les bases compiles, cette commande est ignore. 4D Server : Si vous appelez TRACE depuis une mthode projet excute en tant que Procdure stocke, la fentre du dbogueur apparatra sur le poste serveur. Conseil : N'appelez pas TRACE lorsque vous utilisez un formulaire pour lequel les vnements Sur activation et Sur dsactivation ont t slectionns. En effet, chaque fois que la fentre du dbogueur apparatra, les vnements formulaire seront activs et cela crera une boucle sans fin entre les vnements et le dbogueur. De mme, si vous appelez la commande TRACE depuis une mthode formulaire ou objet excute pendant la mise jour du formulaire l'cran, vous devrez galement faire face un problme de rptition sans fin de la squence mises jour du formulaire/apparitions de la fentre du dbogueur. Si vous vous retrouvez dans une telle situation, pour en sortir, utilisez la combinaison Maj+clic sur le bouton Reprendre excution du dbogueur. Tous les appels ultrieurs TRACE dans le process seront ignors.

4e Dimension - Langage 1057

Exemple Dans le code suivant, la variable process CREER_LANG doit tre gale US ou FR. Si ce n'est pas le cas, la mthode projet DEBUG est appele : ` ... Au cas ou : (CREER_LANG="US") vsBHCmdNom:=[Commandes]CM US Nom : (CREER_LANG="FR") vsBHCmdNom:=[Commandes]CM FR Nom Sinon DEBUG ("Valeur de CREER_LANG incorrecte") Fin de cas La mthode projet DEBUG est liste ci-dessous : ` Mthode projet DEBUG ` DEBUG (Texte) ` DEBUG (Informations supplmentaires de dbogage) C_TEXTE ($1) Si (vbDebugOn) ` Variable interprocess dfinie dans la mthode base Sur ouverture Si (Application compilee) Si (Nombre de parametres>=1) ALERTE ($1+Caractere(13)+"Appelez le concepteur au 05 05 05 05") Fin de si Sinon TRACE Fin de si Fin de si

Rfrence PAS DE TRACE.

1058 4e Dimension - Langage

PAS DE TRACE

Langage version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

PAS DE TRACE Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande PAS DE TRACE est utilise en phase de dveloppement d'une base de donnes, pour contrler l'excution des mthodes. PAS DE TRACE dsactive le dbogueur appel par la commande TRACE, par une erreur ou par l'utilisateur. Utiliser PAS DE TRACE quivaut cliquer sur le bouton Pas de trace dans la fentre de dboguage. Dans les bases compiles, cette commande est ignore. Rfrence TRACE.

4e Dimension - Langage 1059

1060 4e Dimension - Langage

36 ________________________ Liens

4e Dimension - Langage 1061

1062 4e Dimension - Langage

Prsentation des liens

Liens version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les commandes de ce thme, en particulier CHARGER SUR LIEN et LIEN RETOUR, tablissent et grent les relations entre les tables, la fois pour les liens automatiques et les liens manuels. Consultez le manuel Mode Structure de 4e Dimension pour la cration des liens entre les tables avant d'utiliser ces commandes. Exploiter par programmation les liens automatiques entre les tables
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Deux tables peuvent tre relies par un lien automatique. En gnral, quand un lien automatique est cr, les enregistrements lis sont chargs et slectionns dans la table lie. Un grand nombre d'oprations exploitent cette relation. En particulier, citons les oprations suivantes : Saisie de donnes, Liste des enregistrements l'cran dans un formulaire de sortie, Etats, Oprations sur une slection d'enregistrements comme les recherches, les tris et les formules. Pour amliorer les performances, quand 4D active les liens automatiques, seul un enregistrement devient l'enregistrement courant pour la table. Pour chacune des oprations numres ci-dessus, l'enregistrement li est charg selon les principes suivants : Si un lien slectionne un seul enregistrement de la table lie, cet enregistrement est charg du disque. Si un lien slectionne plusieurs enregistrements de la table lie, une nouvelle slection d'enregistrements est cre pour cette table, et le premier enregistrement de cette slection est charg du disque. Par exemple, dans la structure affiche ci-dessous, si un enregistrement pour la table [Personnes] est charg et affich pour une saisie de donns, l'enregistrement li dans la [Socits] est slectionn et charg. De la mme faon, si un enregistrement pour la table [Socits] est charg et affich pour de la saisie de donnes, les enregistrements lis de la table [Personnes] sont slectionns.

4e Dimension - Langage 1063

Dans le type de schma prsent ci-dessus, la table [Personnes] est appele Table N et la table [Socits] est appele Table 1. Pour vous souvenir de la diffrence, pensez plusieurs personnes travaillent dans une socit ou une socit emploie N personnes. De mme, le champ Socit de la table [Personnes] est appel Champ N, et le champ Nom de la table [Socits] est appel Champ 1. Il n'est pas toujours possible que le champ li soit unique. Par exemple, le champ [Socits]Nom peut contenir des noms de socits identiques. Ce cas de non-unicit est facilement contournable : il suffit de crer un lien vers un autre champ de la table lie qui, lui, sera toujours unique. Ce champ pourrait tre par exemple un numro d'identification de la socit. Les commandes listes ci-dessous utilisent les liens automatiques pour charger les enregistrements lis lors de leur excution. Toutes ces commandes activent les liens automatiques "de N vers 1" existants. En revanche, seules les commandes signales explicitement par un Oui activent les liens automatiques "de 1 vers N". Commande AJOUTER ENREGISTREMENT AJOUTER SOUS ENREGISTREMENT APPLIQUER A SELECTION VISUALISER SELECTION ECRITURE DIF ECRITURE SYLK ECRITURE ASCII EXPORTER DONNEES MODIFIER ENREGISTREMENT MODIFIER SOUS ENREGISTREMENT MODIFIER SELECTION TRIER TRIER PAR FORMULE CHERCHER PAR FORMULE CHERCHER DANS SELECTION CHERCHER IMPRIMER ETIQUETTES IMPRIMER SELECTION QR ETAT SELECTION VERS TABLEAU SELECTION LIMITEE VERS TABLEAU Lien 1 vers N Oui Non Non Non Non Non Non Non Oui Non Oui (en saisie de donnes) Non Non Oui Oui Oui Non Oui Non Non Non

1064 4e Dimension - Langage

Activer par programmation les liens entre les tables


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Que les liens soient automatiques ne signifie pas que les enregistrements lis ou les enregistrements pour une table seront slectionns simplement parce qu'une commande charge un enregistrement. Aprs avoir excut une commande chargeant un enregistrement, dans certains cas vous devez explicitement appeler le ou les enregistrement(s) li(s) avec CHARGER SUR LIEN ou LIEN RETOUR si vous avez besoin d'accder aux donnes lies. Certaines des commandes listes ci-dessus (par exemple les commandes de recherche) chargent l'enregistrement courant une fois leur tche termine. Dans ce cas, l'enregistrement charg n'appelle pas automatiquement le ou les enregistrement(s) li(s). L aussi, vous devez explicitement slectionner le ou les enregistrement(s) li(s) avec CHARGER SUR LIEN ou LIEN RETOUR si vous avez besoin d'accder aux donnes lies. Rfrence ANCIEN LIEN RETOUR, CHARGER ANCIEN, CHARGER SUR LIEN, CREER SUR LIEN, FIXER LIEN CHAMP, FIXER LIENS AUTOMATIQUES, JOINTURE, LIEN RETOUR, LIRE LIEN CHAMP, LIRE LIENS AUTOMATIQUES, SELECTION RETOUR, STOCKER ANCIEN, STOCKER SUR LIEN.

4e Dimension - Langage 1065

FIXER LIENS AUTOMATIQUES

Liens version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER LIENS AUTOMATIQUES (aller{; retour}) Paramtre aller retour Type Boolen Boolen Description Statut de tous les liens de N vers 1 Statut de tous les liens de 1 vers N

Description La commande FIXER LIENS AUTOMATIQUES transforme tous les liens manuels en liens automatiques pour toute la base dans le process courant. Cette modification est temporaire et peut tout moment tre remise en cause par un nouvel appel FIXER LIENS AUTOMATIQUES. Si aller est Vrai, tous les liens N vers 1 deviennent automatiques. Si aller est Faux, tous les liens N vers 1 deviennent manuels. Si retour est Vrai, tous les liens 1 vers N deviennent automatiques. Si retour est Faux, tous les liens 1 vers N deviennent manuels. Les liens dfinis comme automatiques en mode Structure ne sont pas affects par cette commande. Si tous les liens sont dfinis comme manuels en mode Structure, cette commande vous permet de les rendre automatiques avant d'excuter des oprations ncessitant qu'ils soient automatiques (par exemple, des recherches et tri relationnels). Aprs l'excution de l'opration, le lien peut redevenir manuel. Exemple L'exemple suivant rend tous les liens N vers 1 automatiques et rtablit en manuel tous les liens 1 vers N qui taient prcdemment modifis :

FIXER LIENS AUTOMATIQUES (Vrai; Faux)

Rfrence FIXER LIEN CHAMP, LIRE LIENS AUTOMATIQUES, Prsentation des liens, SELECTION LIMITEE VERS TABLEAU, SELECTION VERS TABLEAU.

1066 4e Dimension - Langage

LIRE LIENS AUTOMATIQUES

Liens version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE LIENS AUTOMATIQUES (aller; retour) Paramtre aller retour Type Boolen Boolen Description Statut de tous les liens de N vers 1 Statut de tous les liens de 1 vers N

Description La commande LIRE LIENS AUTOMATIQUES permet de savoir si le statut automatique/manuel de tous les liens manuels N vers 1 et 1 vers N de la base a t modifi dans le process courant. aller : ce paramtre retourne Vrai si un appel antrieur de la commande FIXER LIENS AUTOMATIQUES a rendu automatiques tous les liens manuels N vers 1 par exemple FIXER LIENS AUTOMATIQUES(Vrai;Faux). Ce paramtre retourne Faux si la commande FIXER LIENS AUTOMATIQUES na pas t appele ou si sa prcdente excution na pas modifi les liens manuels N vers 1 par exemple FIXER LIENS AUTOMATIQUES(Faux;Faux). retour : ce paramtre retourne Vrai si lappel prcdent de la commande FIXER LIENS AUTOMATIQUES a rendu automatiques tous les liens manuels 1 vers N par exemple FIXER LIENS AUTOMATIQUES(Vrai;Vrai). Ce paramtre retourne Faux si la commande FIXER LIENS AUTOMATIQUES na pas t appele ou si sa prcdente excution na pas modifi les liens manuels 1 vers N par exemple FIXER LIENS AUTOMATIQUES(Vrai;Faux). Exemple Reportez-vous l'exemple de la commande LIRE LIEN CHAMP. Rfrence FIXER LIENS AUTOMATIQUES, LIRE LIEN CHAMP.

4e Dimension - Langage 1067

FIXER LIEN CHAMP

Liens version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER LIEN CHAMP (tableN | champN; aller; retour) Paramtre tableN | champN aller retour Type Table | Champ Entier long Entier long Description Table de dpart des liens ou Champ de dpart du lien Statut du lien aller partant du champ ou des liens aller partant de la table Statut du lien retour partant du champ ou des liens retour partant de la table

Description La commande FIXER LIEN CHAMP permet de dfinir sparment le statut automatique/manuel de chaque lien de la base, quel que soit son statut initial dfini en mode Structure dans la fentre de paramtrage des liens. Passez dans le premier paramtre un nom de table ou de champ : si vous passez un nom de champ (champN), la commande sappliquera uniquement au lien partant du champ N dsign. si vous passez un nom de table (tableN), la commande sappliquera tous les liens partant de la table N dsigne. si aucun lien ne part du champ champN ou de la table tableN, les paramtres aller et retour retournent 0, lerreur de syntaxe n16 (Ce champ ne possde pas de lien) est gnre et la variable systme OK prend la valeur 0. Passez dans les paramtres aller et retour des valeurs indiquant la modification du statut automatique/manuel appliquer respectivement au(x) lien(s) de type N vers 1 cest-dire au(x) lien(s) aller et au(x) lien(s) de type 1 vers N cest--dire au(x) lien(s) retour dsign(s). Vous pouvez utiliser les constantes du thme Liens : Ne pas changer (0) = ne pas modifier le statut courant du ou des lien(s). Configuration Structure (1) = utiliser le paramtrage dfini pour le(s) lien(s) dans la fentre de Structure de lapplication. Manuel (2) = rendre manuel(s) le(s) lien(s) pour le process courant. Automatique (3) = rendre automatique(s) le(s) lien(s) pour le process courant. Note : Les modifications effectues laide de cette commande sappliquent au process courant uniquement. Le paramtrage des liens dfini laide des options de la fentre Inspecteur nest pas modifi.

1068 4e Dimension - Langage

Exemple Cette commande simplifie la gestion des liens avec lditeur dtats rapides. Dans les versions prcdentes de 4e Dimension, pour utiliser les liens automatiques autres que ceux dfinis en mode Structure, il tait ncessaire de passer tous les liens en automatique. Dsormais, le code suivant permet de nutiliser que les liens dfinis : FIXER LIENS AUTOMATIQUES(Faux;Faux) `Initialisation des liens `Seuls les liens suivants seront utiliss FIXER LIEN CHAMP([Facture]ID_Client;Automatique;Automatique) FIXER LIEN CHAMP([Ligne_Facture]ID_Facture;Automatique;Automatique) QR ETAT([Facture];Caractere(1);Vrai;Vrai;Vrai)

Rfrence FIXER LIENS AUTOMATIQUES, LIRE LIEN CHAMP, LIRE LIENS AUTOMATIQUES.

4e Dimension - Langage 1069

LIRE LIEN CHAMP

Liens version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE LIEN CHAMP (champN; aller; retour{; *}) Paramtre champN aller retour * Type Champ Entier long Entier long * Description Champ de dpart du lien Statut du lien aller Statut du lien retour Si pass : aller et retour retournent le statut courant effectif du lien (valeurs 2 ou 3 uniquement) Si omis (dfaut) : aller et retour peuvent retourner la valeur 1 si le lien na pas t modifi par programmation

Description La commande LIRE LIEN CHAMP permet de connatre le statut automatique/manuel du lien partant du champN pour le process courant. Tous les liens peuvent tre consults, y compris les liens dclars automatiques dans la fentre de Structure. Passez dans champN le nom du champ de la table N do part le lien dont vous souhaitez connatre le statut. Si aucun lien ne part du champ champN, les paramtres aller et retour retournent 0, une erreur est gnre et la variable systme OK prend la valeur 0 (cf. cidessous). Aprs lexcution de la commande, la variable aller contient une valeur indiquant si le lien aller spcifi est dfini comme automatique : 0 = il ny a pas de lien partant de champN. Lerreur de syntaxe n16 (Ce champ ne possde pas de lien) est gnre et la variable systme OK prend la valeur 0. 1 = le statut automatique/manuel du lien aller spcifi est celui dfini par loption Lien aller auto dans les proprits du lien en mode Structure (il na pas t modifi par programmation). 2 = le lien N vers 1 est manuel pour le process. 3 = le lien N vers 1 est automatique pour le process. Aprs lexcution de la commande, la variable retour contient une valeur indiquant si le lien retour spcifi est dfini comme automatique : 0 = il ny a pas de lien partant de champN. Lerreur de syntaxe n16 (Ce champ ne possde pas de lien) est gnre et la variable systme OK prend la valeur 0. 1 = le statut automatique/manuel du lien retour spcifi est celui dfini par loption Lien retour auto dans les proprits du lien en mode Structure (il na pas t modifi par programmation). 2 = le lien 1 vers N est manuel pour le process. 3 = le lien 1 vers N est automatique pour le process.

1070 4e Dimension - Langage

Vous pouvez comparer les valeurs reues du thme Liens : Constante Type Pas de lien Entier long Configuration Structure Entier long Manuel Entier long Automatique Entier long

dans les paramtres aller et retour aux constantes Valeur 0 1 2 3

Le paramtre facultatif * permet de forcer la lecture du statut courant du lien, mme sil na pas t modifi par programmation. Autrement dit, lorsque vous passez le paramtre *, seules les valeurs 2 ou 3 peuvent tre retournes dans les paramtres aller et retour. Exemple Soit la structure suivante :

Les proprits du lien reliant le champ [Employs]Socit au champ [Socits]Nom sont les suivantes :

4e Dimension - Langage 1071

Le code ci-dessous illustre les diffrentes possibilits offertes par les commandes LIRE LIEN CHAMP, LIRE LIENS AUTOMATIQUES, FIXER LIEN CHAMP et FIXER LIEN AUTOMATIQUE ainsi que leurs effets :

LIRE LIENS AUTOMATIQUES(liens_Appel;liens_Retour) `retourne Faux, Faux LIRE LIEN CHAMP([Employs]Socit;aller;retour) `retourne 1,1 LIRE LIEN CHAMP([Employs]Socit;aller;retour;*) `retourne 3,2 FIXER LIEN CHAMP ([Employs]Socit;2;0) `passe le lien N vers 1 en manuel

LIRE LIEN CHAMP([Employs]Socit;aller;retour) `retourne 2,1 LIRE LIEN CHAMP([Employs]Socit;aller;retour;*) `retourne 2, 2 FIXER LIEN CHAMP ([Employs]Socit;1;0) `rtablit les paramtres dfinis en `structure pour le lien N vers 1

LIRE LIEN CHAMP([Employs]Socit;aller;retour) `retourne 1,1 LIRE LIEN CHAMP([Employs]Socit;aller;retour;*) `retourne 3,2 FIXER LIENS AUTOMATIQUES(Vrai;Vrai) `passe tous les liens de toutes les tables en `automatique

LIRE LIENS AUTOMATIQUES(liens_Appel;liens_Retour) `retourne Vrai, Vrai LIRE LIEN CHAMP([Employs]Socit;aller;retour) `retourne 1,1 LIRE LIEN CHAMP([Employs]Socit;aller;retour;*) `retourne 3,3

Rfrence FIXER LIEN CHAMP, FIXER LIENS AUTOMATIQUES, LIRE LIENS AUTOMATIQUES.

1072 4e Dimension - Langage

CHARGER SUR LIEN

Liens version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHARGER SUR LIEN (tableN | champN{; discriminant}) Paramtre tableN | champN discriminant Type Table | Champ Champ Description Table pour laquelle dfinir tous les liens automatiques ou Champ avec lien manuel partant vers la table 1 Champ discriminant de la table 1

Description CHARGER SUR LIEN accepte deux syntaxes. La premire syntaxe de la commande, CHARGER SUR LIEN(tableN), active tous les liens aller automatiques (de N vers 1) pour la table tableN dans le process courant. Cela signifie que pour chaque champ de la tableN d'o part un lien aller automatique, la commande slectionnera l'enregistrement li dans chaque table lie. Cela peut donc modifier l'enregistrement courant dans la (les) table(s) lie(s) du process courant. La seconde syntaxe, CHARGER SUR LIEN(champN{;discriminant}), recherche l'enregistrement li au champ champN. Il n'est pas ncessaire que le lien soit automatique. S'il existe, CHARGER SUR LIEN charge en mmoire l'enregistrement li, et en fait l'enregistrement et la slection courants de la table laquelle il appartient. Le paramtre optionnel discriminant ne peut tre spcifi que si champN est de type Alpha. Le champ discriminant doit tre un champ de la table lie. Il peut tre de type Alpha, Numrique, Date, Heure ou Boolen. Autrement dit, il ne peut tre du type Texte, Image, BLOB ou Sous-table. Si champN est spcifi et si plus d'un enregistrement est trouv dans la table lie, CHARGER SUR LIEN affiche une liste des enregistrements qui correspondent la valeur de champN, permettant l'utilisateur de slectionner un enregistrement. Dans cette liste, la colonne de gauche affiche les valeurs des champs lis, la colonne de droite affiche les valeurs de discriminant. Gnralement, plusieurs enregistrements sont trouvs lorsque champN se termine par le caractre Joker (@). S'il n'y en a qu'un seul, la liste de slection n'apparat pas.

4e Dimension - Langage 1073

Dans l'cran ci-dessous, un enregistrement est en train d'tre saisi et une liste de slection s'affiche au premier plan.

La commande suivante a fait apparatre la liste de slection :

CHARGER SUR LIEN ([Personnes]Socit; [Socits]Rgion)

L'utilisateur a saisi SARL@ pour visualiser la liste de toutes les socits dont le nom commence par SARL, ainsi que leur rgion. Spcifier un champ dans discriminant est la mme opration que celle qui consiste dfinir un champ discriminant dans la bote de dialogue de dfinition des proprits d'un lien en mode Structure. Pour plus d'informations sur la dfinition d'un champ discriminant, reportez-vous au manuel Mode Structure de 4e Dimension. CHARGER SUR LIEN fonctionne avec les liens vers des sous-tables, mais il doit y avoir un lien vers la table parente et vers le champ li de la sous-table pour que la relation fonctionne correctement. Lorsque vous utilisez une relation vers un sous-enregistrement, vous devez dans un premier temps appeler CHARGER SUR LIEN pour charger en mmoire l'enregistrement li, puis appeler une seconde fois CHARGER SUR LIEN pour la sous-table.

1074 4e Dimension - Langage

Exemple Dans l'exemple suivant, la table [Factures] est relie la table [Clients] par deux liens manuels. Un lien part du champ [Factures]AuNomDe et va vers le champ [Clients]Numro, l'autre lien va de [Factures]ExpdierA [Clients]Numro.

Voici le formulaire de la table [Factures] affichant les informations "AuNomDe" et "ExpdierA".

Comme les deux liens pointent vers la mme table, [Clients], l'information qu'ils rcuprent doit tre affiche dans des variables. Si le formulaire contenait les champs de [Clients], seules les valeurs issues du second lien seraient affiches.

4e Dimension - Langage 1075

Les deux mthodes suivantes sont les mthodes objet des champs [Factures]ExpdierA et [Factures]AuNomDe. Voici la mthode objet du champ [Factures]AuNomDe :

CHARGER SUR LIEN ([Factures]AuNomDe; [Clients]Adresse) vAdress1 := [Clients]Adresse vVille1 := [Clients]Ville vPays1 := [Clients]Pays vCode1 := [Clients]CP

Voici la mthode objet du champ [Factures]ExpdierA :

CHARGER SUR LIEN ([Factures]ExpdierA; [Clients]Adresse) vAdress2 := [Clients]Adresse vVille2 := [Clients]Ville vPays2 := [Clients]Pays vCode2 := [Clients]CP

Rfrence CHARGER ANCIEN, LIEN RETOUR.

1076 4e Dimension - Langage

LIEN RETOUR

Liens version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIEN RETOUR (table1 | champ1) Paramtre table1 | champ1 Type Table | Champ Description Table pour laquelle tablir tous les liens de 1 vers N ou Champ 1

Description LIEN RETOUR a deux syntaxes. La premire syntaxe, LIEN RETOUR (table1), tablit tous les liens 1 vers N pour table1. Elle modifie la slection courante pour chaque table qui a un lien 1 vers N vers table1. Les slections courantes dans les tables N dpendent de la valeur courante de chaque champ li dans la table 1. Chaque fois que cette commande est excute, les slections courantes des tables N sont modifies. La seconde syntaxe, LIEN RETOUR (champ1), tablit le lien 1 vers N pour champ1. Elle modifie la slection courante pour chaque table qui a un lien avec champ1. En consquence, les enregistrements lis deviennent la slection courante de la table N. Note : Si la slection courante de la table 1 est vide au moment de l'excution de Prsentation des commandes XML, la commande ne fait rien. Exemple Dans l'exemple suivant, trois tables sont relies par des liens automatiques. Les deux tables [People] et [Parts] ont un lien N vers 1 vers la table [Companies].

4e Dimension - Langage 1077

Voici le formulaire pour la table [Companies] qui affiche les enregistrements lis venant des tables [People] et [Parts].

Lorsque le formulaire pour People et Parts s'affiche, les enregistrements lis pour les tables [People] et [Parts] sont chargs et deviennent les slections courantes de ces tables. En revanche, les enregistrements lis ne sont pas chargs si un enregistrement de la table [Companies] est slectionn par programmation. Dans ce cas, il faut utiliser la commande LIEN RETOUR.

1078 4e Dimension - Langage

Par exemple, la mthode suivante effectue une boucle sur chaque enregistrement de la table [Companies]. Pour chaque socit, une alerte apparat. Cette alerte affiche le nombre de personnes dans la socit (le nombre d'enregistrements lis dans la table [People]) ainsi que le nombre de Parts que la socit distribue (le nombre d'enregistrements dans la table [Parts] qui sont lis). Notez que nous avons besoin d'appeler la commande LIEN RETOUR bien que les liens soient automatiques : ` Slectionner tous les enregistrements dans la table TOUT SELECTIONNER ([Companies]) ` Trier les enregistrements dans l'ordre alphabtique TRIER ([Companies]; [Companies]Nom) ` Boucler une fois par enregistrement Boucle ($i; 1; Enregistrements dans table ([Companies])) LIEN RETOUR ([Companies]Nom) ` Slectionner les enregistrements lis ALERTE ("Socit : " + [Companies]Nom + Caractere (13) + "personnes dans la socit : " + Chaine(Enregistrements trouves ([People])) + Caractere(13) +"Nombre de Produits qu'ils distribuent : " + Chaine (Enregistrements trouves ([Parts]))) ENREGISTREMENT SUIVANT ([Companies]) ` Aller l'enregistrement suivant Fin de boucle

Rfrence ANCIEN LIEN RETOUR, CHARGER SUR LIEN.

4e Dimension - Langage 1079

CREER SUR LIEN

Liens version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CREER SUR LIEN (champ) Paramtre champ Type Champ Description Champ N (champ d'o part le lien)

Description CREER SUR LIEN a deux effets. S'il n'existe pas d'enregistrement li champ (c'est--dire si la valeur courante de champ n'est prsente dans le champ correspondant d'aucun enregistrement de la table lie), CREER SUR LIEN cre un nouvel enregistrement li. Si vous souhaitez conserver dans cet enregistrement la valeur de champ ayant provoqu sa cration, assignez-la au champ correspondant. Utilisez ensuite la commande STOCKER SUR LIEN pour sauvegarder le nouvel enregistrement. Si un enregistrement li existe dj, la commande CREER SUR LIEN a alors exactement le mme effet que CHARGER SUR LIEN : elle charge en mmoire l'enregistrement li. Rfrence STOCKER SUR LIEN.

1080 4e Dimension - Langage

STOCKER SUR LIEN

Liens version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

STOCKER SUR LIEN (champ) Paramtre champ Type Champ Description Champ N

Description STOCKER SUR LIEN sauvegarde l'enregistrement li champ. Vous pouvez excuter une commande STOCKER SUR LIEN pour mettre jour un enregistrement cr par CREER SUR LIEN, ou bien lorsque vous voulez sauvegarder des modifications apportes un enregistrement charg par CHARGER SUR LIEN. STOCKER SUR LIEN ne s'applique pas aux sous-tables car la sauvegarde d'un enregistrement parent entrane automatiquement la sauvegarde des sous-enregistrements. STOCKER SUR LIEN ne sauvegardera pas un enregistrement verrouill. Lorsque vous appelez cette commande, vous devez tout d'abord vous assurer que l'enregistrement n'est pas verrouill. S'il est verrouill, la commande est ignore, l'enregistrement n'est pas sauvegard et aucune erreur ne vous est retourne. Rfrence CHARGER SUR LIEN, CREER SUR LIEN, Enregistrement verrouille, Prsentation des triggers.

4e Dimension - Langage 1081

CHARGER ANCIEN

Liens version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHARGER ANCIEN (champ) Paramtre champ Type Champ Description Champ N

Description CHARGER ANCIEN fonctionne de la mme manire que CHARGER SUR LIEN, la diffrence prs que CHARGER ANCIEN utilise la valeur prcdente de champ pour tablir la relation. Note : CHARGER ANCIEN utilise l'ancienne valeur du champ N telle qu'elle est retourne par la fonction Ancien. Reportez-vous la description de cette fonction pour plus d'informations. CHARGER ANCIEN charge l'enregistrement prcdemment li l'enregistrement courant. Les champs de cet enregistrement sont alors saisissables. Si vous voulez modifier cet ancien enregistrement li et le sauvegarder, vous devez appeler la commande STOCKER ANCIEN. Notez que pour un enregistrement venant d'tre cr, il n'y pas d'ancien enregistrement li. Rfrence Ancien, ANCIEN LIEN RETOUR, CHARGER SUR LIEN, STOCKER ANCIEN.

1082 4e Dimension - Langage

STOCKER ANCIEN

Liens version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

STOCKER ANCIEN (champ) Paramtre champ Type Champ Description Champ N

Description STOCKER ANCIEN fonctionne de la mme manire que STOCKER SUR LIEN, la diffrence prs que STOCKER ANCIEN utilise l'ancien lien vers le champ pour sauvegarder l'ancien enregistrement li. Avant d'utiliser STOCKER ANCIEN, vous devez charger l'enregistrement avec CHARGER ANCIEN. Utilisez STOCKER ANCIEN lorsque vous voulez sauvegarder des modifications apportes un enregistrement charg avec CHARGER ANCIEN. STOCKER ANCIEN ne sauvegardera pas un enregistrement verrouill. Lorsque vous appelez cette commande, assurez-vous tout d'abord que l'enregistrement n'est pas verrouill. S'il est verrouill, la commande est ignore, l'enregistrement n'est pas sauvegard et aucune erreur ne vous est retourne. Rfrence CHARGER ANCIEN, Enregistrement verrouille, Prsentation des triggers.

4e Dimension - Langage 1083

ANCIEN LIEN RETOUR

Liens version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ANCIEN LIEN RETOUR (champ) Paramtre champ Type Champ Description Champ recevant un lien

Description ANCIEN LIEN RETOUR fonctionne comme la commande LIEN RETOUR, la diffrence prs que ANCIEN LIEN RETOUR utilise l'ancienne valeur du champ pour tablir le lien. Note : ANCIEN LIEN RETOUR utilise l'ancienne valeur du champ N, telle qu'elle est retourne par la fonction Ancien. Reportez-vous la description de cette fonction pour plus d'informations. ANCIEN LIEN RETOUR modifie la slection de la table lie. La commande slectionne le premier enregistrement de la slection courante et en fait l'enregistrement courant. Rfrence CHARGER ANCIEN, LIEN RETOUR.

1084 4e Dimension - Langage

JOINTURE

Liens version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

JOINTURE (tableN; table1) Paramtre tableN table1 Type Table Table Description Nom de la table N (d'o part le lien) Nom de la table 1 (o arrive le lien)

Description La commande JOINTURE cre une nouvelle slection d'enregistrements dans table1 partir de la slection d'enregistrements de la tableN qui lui est lie. Cette commande ne peut tre utilise que s'il existe un lien de N vers 1. JOINTURE peut oprer au travers de plusieurs niveaux de liens. Il peut y avoir plusieurs tables lies entre la table N et la table 1. Les liens peuvent tre manuels ou automatiques. Exemples Nous souhaitons trouver tous les clients dont les factures arrivent chance aujourd'hui. (1) L'exemple suivant propose une mthode pour crer une slection dans la table [Clients] partir d'une slection d'enregistrements de la table [Factures] : ENSEMBLE VIDE([Clients];"Paiement Du") CHERCHER([Factures]; [Factures]PaiementDu=Date du jour) Tant que (Non(Fin de selection([Factures]))) CHARGER SUR LIEN([Factures]ClientID) ADJOINDRE ELEMENT([Clients];"Paiement Du") ENREGISTREMENT SUIVANT([Factures]) Fin tant que (2) L'exemple suivant parvient au mme rsultat que le prcdent :

CHERCHER([Factures];[Factures]PaiementDu = Date du jour) JOINTURE([Factures];[Clients])

Rfrence CHARGER SUR LIEN, CHERCHER, Prsentation des ensembles, SELECTION RETOUR.

4e Dimension - Langage 1085

SELECTION RETOUR

Liens version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SELECTION RETOUR (champ) Paramtre champ Type Champ Description Champ de la table N (d'o part le lien)

Description La commande SELECTION RETOUR cre une slection d'enregistrements dans la table N, base sur la slection courante de la table 1. Note : SELECTION RETOUR modifie l'enregistrement courant de la table 1. Exemple Prenons l'exemple d'une base de donnes comportant une table [Factures] dont le champ [Factures]IDClient est li au champ [Clients]NoID de la table [Clients]. L'exemple suivant slectionne toutes les factures adresses aux clients dont le crdit est suprieur ou gal 5710 Euros : ` Slectionner les clients CHERCHER ([Clients];[Clients]Credit>=5710) `Trouver toutes les factures lies chacun de ces clients SELECTION RETOUR ([Factures]NoID) Rfrence CHARGER SUR LIEN, CHERCHER, JOINTURE.

1086 4e Dimension - Langage

37 ________________________ List Box

4e Dimension - Langage 1087

1088 4e Dimension - Langage

Gestion programme des objets de type List box

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les commandes de ce thme sont ddies la gestion programme des objets de formulaire de type List box. Les list box peuvent tre compars aux Zones de dfilement groupes. De fait, une list box propose toutes les fonctions d'un ensemble de zones de dfilement groupes, notamment la possibilit de reprsenter des donnes sous forme de colonnes et de lignes slectionnables. Les list box proposent en outre de nombreuses fonctions supplmentaires telles que la possibilit de saisir des valeurs, trier les colonnes, dfinir des couleurs alternes, etc.

Un objet de type List box est entirement paramtrable dans lditeur de formulaires de 4e Dimension et peut galement tre contrl par programmation. Pour plus dinformations sur la cration et le paramtrage des objets de type List box dans l'diteur de formulaires ainsi que leur utilisation, reportez-vous au manuel Mode Structure de la documentation de 4e Dimension. La programmation des objets de type List box seffectue sur le mme principe que les autres objets de formulaire en liste de 4e Dimension. Elle doit cependant tenir compte de principes spcifiques, dcrits dans cette section

4e Dimension - Langage 1089

Principes de cration et de gestion des valeurs


________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Un objet List box peut contenir une ou plusieurs colonnes. Chaque colonne est associe un tableau 4e Dimension une dimension ; tous les types de tableaux peuvent tre utiliss, lexception des tableaux de pointeurs. Le format daffichage de chaque colonne peut tre dfini dans lditeur de formulaires ou via la commande CHOIX FORMATAGE. En mode programm, les valeurs des colonnes (saisie et affichage) sont gres laide des commandes de haut niveau du thme List box (telles que INSERER LIGNE LISTBOX ou SUPPRIMER LIGNE LISTBOX) ainsi que des commandes de manipulation des tableaux. Par exemple, pour initialiser le contenu dune colonne de List box, vous pouvez utiliser linstruction suivante : TABLEAU TEXTE(NomColonne; taille) Vous pouvez galement utiliser une numration : ENUMERATION VERS TABLEAU("NomEnum"; NomColonne) Note : Lorsquun objet List box contient plusieurs colonnes, chaque tableau associ doit avoir la mme taille (le mme nombre dlments) que les autres, sinon seul le nombre dlments correspondant au plus petit tableau sera affich. Objet, colonne et en-tte
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Un objet List box est compos de trois types dlments distincts : lobjet dans son ensemble, les colonnes, les en-ttes des colonnes. Dans lditeur de formulaires, ces lments peuvent tre slectionns sparment. Chacun deux dispose de son propre nom dobjet et nom de variable et peut donc tre adress sparment.

1090 4e Dimension - Langage

Par dfaut, les colonnes sont nommes Colonne1 n et les en-ttes Entte1 n dans le formulaire, indpendamment des objets List box eux-mmes. A noter que, par dfaut, le mme nom est utilis pour les objets et leurs variables associes. Chaque type dlment dispose de caractristiques propres et de caractristiques partages avec les autres lments. Par exemple, la police de caractres peut tre assigne globalement lobjet List box ou sparment aux colonnes et aux en-ttes. A linverse, les proprits de saisie ne sont dfinissables que pour les colonnes. Ces principes sappliquent aux commandes du thme Proprits des objets pouvant tre utilises avec les list box : en fonction de sa nature, chaque commande sera utilisable avec la list box, les colonnes et/ou les en-ttes des colonnes. Pour dsigner le type dlment sur lequel vous souhaitez agir, il suffit de passer le nom ou la variable qui lui est associ(e). Le tableau suivant prcise la porte de chaque commande du thme Proprits des objets utilisable avec les objets de type list box : Commandes Proprits des objets Objet Colonne En-tte de colonne DEPLACER OBJET X LIRE RECT OBJET X CHOIX FILTRE SAISIE X CHOIX FORMATAGE X CHOIX SAISISSABLE X CHOIX ENUMERATION X TITRE BOUTON X CHOIX COULEUR X X FIXER COULEURS RVB X X CHANGER JEU DE CARACTERES X X X CHANGER TAILLE X X X CHANGER STYLE X X X FIXER ALIGNEMENT X X X Lire alignement X X X CHOIX VISIBLE X X X TAILLE OBJET OPTIMALE X X X Note : Toutes les commandes du thme List Box sappliquent lobjet List box seulement, lexception de FIXER LARGEUR COLONNE LISTBOX (objet, colonne et en-tte) et Lire largeur colonne listbox (colonne ou en-tte uniquement). List box et Langage
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Mthodes objet Il est possible dassocier une mthode lobjet List box dans son ensemble et/ou chaque colonne de la list box. Les mthodes objet sont appeles dans lordre suivant : 1. Mthode objet de la colonne 2. Mthode objet de la list box La mthode objet de la colonne reoit les vnements se produisant dans son en-tte. CHOIX VISIBLE et en-ttes Lorsque la commande CHOIX VISIBLE est utilise avec un en-tte de list box, elle agit sur tous les en-ttes de lobjet List box, quel que soit len-tte spcifi par la commande. Par exemple, linstruction CHOIX VISIBLE(*;"entte3";Faux) masquera tous les en-ttes de lobjet List box auquel appartient len-tte 3 (et non uniquement cet en-tte). 4e Dimension - Langage 1091

Self et Sur clic La fonction Self (thme Langage) peut tre utilise dans la mthode objet dune list box ou d'une colonne de list box. En cas d'vnement formulaire Sur clic, elle retourne un pointeur vers la variable de colonne ou la variable den-tte en fonction de lemplacement du clic. Objet focus La fonction Objet focus (thme Interface utilisateur) retourne un pointeur vers la colonne de la list box ayant le focus, cest--dire vers un tableau. Le mcanisme des pointeurs de 4e Dimension permet alors de connatre le numro de llment de tableau modifi. Par exemple, en supposant que lutilisateur a modifi la 5e ligne de la colonne col2 : $Colonne:=Objet focus ` $Colonne contient un pointeur vers col2 $Ligne:= $Colonne-> `$Ligne vaut 5 EDITER ELEMENT La commande EDITER ELEMENT (thme Gestion de la saisie) permet de passer en mode dition une cellule dun objet list box. Evnements formulaire Des vnements formulaire spcifiques sont destins la gestion programme des list box, concernant notamment le glisser-dposer et le tri. Pour plus dinformations, reportez-vous la description de la commande Evenement formulaire. Gestion des tris
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Par dfaut, la list box gre automatiquement les tris standard des colonnes en cas de clic sur len-tte. Un tri standard est un tri alphanumrique des valeurs de la colonne, alternativement croissant / dcroissant lors de clics multiples. Toutes les colonnes sont toujours automatiquement synchronises. Il est possible dinterdire le tri utilisateur standard en dslectionnant la proprit Triable pour la list box. Le dveloppeur peut mettre en place une gestion personnalise des tris l'aide de la commande TRIER COLONNES LISTBOX et/ou en combinant les vnements formulaire Sur clic entte et Sur aprs tri (cf. commande Evnement formulaire) et les commandes 4D de gestion des tableaux. Note : La proprit Triable concerne uniquement le tri utilisateur standard, la commande TRIER COLONNES LISTBOX ne tient pas compte de cette proprit. En outre, la valeur de la variable associe len-tte dune colonne permet de grer une information supplmentaire : le tri courant de la colonne (lecture) et laffichage de la flche de tri. si la variable vaut 0, la colonne nest pas trie et la flche de tri nest pas affiche ;

1092 4e Dimension - Langage

si la variable vaut 1, la colonne est trie par ordre croissant et la flche de tri croissant est affiche ; si la variable vaut 2, la colonne est trie par ordre dcroissant et la flche de tri dcroissant est affiche. Il est possible de fixer la valeur de la variable (par exemple Header2:=2) afin de forcer laffichage de la flche de tri. Le tri de la colonne lui-mme nest dans ce cas pas modifi, il appartient au dveloppeur de le grer. Gestion des slections
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La commande SELECTIONNER LIGNE LISTBOX permet de slectionner par programmation une ou plusieurs lignes de list box. En outre, la variable associe lobjet List box peut tre utilise pour lire, fixer ou stocker les slections de lignes dans lobjet. Cette variable correspond un tableau de boolens automatiquement cr et maintenu par 4e Dimension. La taille de ce tableau est dtermine par celle de la list box : il contient le mme nombre dlments que le plus petit tableau associ aux colonnes. Chaque lment de ce tableau contient Vrai si la ligne correspondante est slectionne et Faux sinon. 4e Dimension met jour le contenu de ce tableau en fonction des actions utilisateur. A linverse, vous pouvez modifier la valeur des lments de ce tableau afin de modifier la slection dans la list box. En revanche, vous ne pouvez ni insrer ni supprimer de ligne dans ce tableau ; il nest pas possible non plus de le retyper. Note : La commande Compter dans tableau est utile dans ce cas pour connatre le nombre de lignes slectionnes. Par exemple, cette mthode permet dinverser la slection de la premire ligne de la list box : ` tBListBox est le nom de la variable de la List box Si (tBListBox{1} = Vrai) tBListBox{1}:= Faux Sinon tBListBox{1}:= Vrai Fin de si

4e Dimension - Langage 1093

INSERER COLONNE LISTBOX

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

INSERER COLONNE LISTBOX ({*; }objet; positionCol; nomCol; variableCol; nomEntte; variableEntte) Paramtre * objet positionCol nomCol variableCol nomEntte variableEntte Type Objet de formulaire Numrique Chane Tableau Chane Var Entier Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Emplacement de la colonne insrer Nom dobjet de la colonne Nom de la variable de la colonne Nom dobjet de len-tte de la colonne Variable den-tte de la colonne

Description La commande INSERER COLONNE LISTBOX insre une colonne dans la list box dsigne par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. La nouvelle colonne est insre juste avant la colonne dsigne par le paramtre positionCol. Si le paramtre positionCol est suprieur au nombre total de colonnes, la colonne est ajoute aprs la dernire colonne. Passez dans les paramtres nomCol et variableCol le nom dobjet et la variable de la colonne insre. Le nom de la variable correspond au nom du tableau dont le contenu sera affich dans la colonne. Passez dans les paramtres nomEntte et variableEntte le nom dobjet et la variable de lentte de la colonne insre. Note : Les noms dobjets doivent tre uniques dans un formulaire. Vous devez veiller ce que les noms passs dans les paramtres nomCol et nomEntte ne soient pas dj utiliss. Sinon, la colonne nest pas cre et une erreur est gnre.

1094 4e Dimension - Langage

Exemple Nous souhaitons ajouter une colonne la fin de la list box : C_ENTIER LONG(NomVarHeader;$Der;$NbEnr) TOUT SELECTIONNER([Table 1]) $NbEnr:=Enregistrements dans table([Table 1]) TABLEAU IMAGE(tabImage;$NbEnr)

$Der:=Lire nombre colonnes listbox(*;"ListBox1")+1 INSERER COLONNE LISTBOX(*;"ListBox1";$Der;"ColumnPicture";tabImage; "HeaderPicture";NomVarHeader)

Rfrence SUPPRIMER COLONNE LISTBOX.

4e Dimension - Langage 1095

SUPPRIMER COLONNE LISTBOX

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER COLONNE LISTBOX ({*; }objet; positionCol{; nombre}) Paramtre * objet positionCol nombre Type Objet de formulaire Numrique Numrique Description Si spcifi, objet est un nom d'objet (chane) Si omis, objet est une variable Nom d'objet (si * est spcifi) ou Variable (si * est omis) Numro courant de la colonne supprimer Nombre de colonnes supprimer

Description La commande SUPPRIMER COLONNE LISTBOX supprime une ou plusieurs colonne(s) (visibles ou non) dans la list box dsigne par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. Si vous ne passez pas le paramtre facultatif nombre, la commande supprime simplement la colonne dsigne par le paramtre positionCol. Sinon, le paramtre nombre indique le nombre de colonnes supprimer vers la droite partir de la colonne positionCol (celle-ci incluse). Si le paramtre positionCol est suprieur au nombre de colonnes de la list box, la commande ne fait rien. Rfrence INSERER COLONNE LISTBOX, Lire nombre colonnes listbox.

1096 4e Dimension - Langage

Lire nombre colonnes listbox

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire nombre colonnes listbox ({*; }objet) Entier long Paramtre * objet Rsultat Type Objet de formulaire Entier long Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Nombre de colonnes

Description La commande Lire nombre colonnes listbox retourne le nombre total de colonnes (visibles ou non) prsentes dans la list box dsigne par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. Rfrence SUPPRIMER COLONNE LISTBOX.

4e Dimension - Langage 1097

TRIER COLONNES LISTBOX

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TRIER COLONNES LISTBOX ({*; }objet; numCol; sensDuTri{; numCol2; sensDuTri2; ...; numColN; sensDuTriN}) Paramtre * objet numCol sensDuTri Type Objet de formulaire Entier long > ou < Description Si spcifi, objet est un nom d'objet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Numro(s) de colonne(s) de tri > pour effectuer un tri croissant ou < pour effectuer un tri dcroissant

Description La commande TRIER COLONNES LISTBOX permet de trier (rordonner) toutes les lignes de la list box dsigne par les paramtres objet et * sur la base des valeurs dune ou plusieurs colonne(s). Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. Passez dans numCol le numro de la colonne dont les valeurs seront utilises comme critre de tri. Vous pouvez utiliser tout type de donnes, lexception des colonnes contenant des images et des pointeurs. Passez dans sensDuTri le symbole > ou < indiquant lordre du tri : croissant ou dcroissant. Si sensDuTri est gal au symbole suprieur (>), lordre du tri est croissant. Si sensDuTri est gal au symbole infrieur (<), lordre du tri est dcroissant. Vous pouvez dfinir des tris multi-niveaux : pour cela, passez autant de paires numCol;sensDuTri que ncessaire. Le niveau de tri est dfini par la position du paramtre lors de lappel. Conformment au principe de fonctionnement des list box, les colonnes sont synchronises, ce qui signifie que le tri dune colonne est automatiquement rpercut sur toutes les colonnes de lobjet.

1098 4e Dimension - Langage

FIXER LARGEUR COLONNE LISTBOX

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER LARGEUR COLONNE LISTBOX ({*; }objet; largeur) Paramtre * objet largeur Type Objet de formulaire Entier Description Si spcifi, objet est un nom d'objet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Largeur de colonne (en pixels)

Description La commande FIXER LARGEUR COLONNE LISTBOX permet de modifier par programmation la largeur dune ou de toutes les colonne(s) de lobjet (list box, colonne ou en-tte) dsign par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. Passez dans le paramtre largeur la nouvelle largeur (en pixels) de lobjet. Si objet dsigne lobjet list box, toutes les colonnes de la list box sont redimensionnes. Si objet dsigne une colonne ou un en-tte de colonne, seule la colonne dsigne est redimensionne. Rfrence Lire largeur colonne listbox.

4e Dimension - Langage 1099

Lire largeur colonne listbox

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire largeur colonne listbox ({*; }objet) Entier Paramtre * objet Rsultat Type Objet de formulaire Entier Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Largeur de colonne en pixels

Description La commande Lire largeur colonne listbox retourne la largeur (en pixels) de la colonne dsigne par les paramtres objet et *. Vous pouvez passer indiffremment une colonne ou un en-tte de colonne de list box dans le paramtre objet. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. Rfrence FIXER LARGEUR COLONNE LISTBOX.

1100 4e Dimension - Langage

NUMERO COLONNE LISTBOX DEPLACEE

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

NUMERO COLONNE LISTBOX DEPLACEE ({*; }objet; ancPosition; nouvPosition) Paramtre * objet ancPosition nouvPosition Type Objet de formulaire Numrique Numrique Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Ancienne position de la colonne dplace Nouvelle position de la colonne dplace

Description La commande NUMERO COLONNE LISTBOX DEPLACEE retourne dans les paramtres ancPosition et nouvPosition des numros indiquant respectivement la prcdente position et la nouvelle position de la colonne dplace dans la list box dsigne par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. Cette commande doit tre utilise en combinaison avec lvnement formulaire Sur dplacement colonne (cf. commande Evenement formulaire). Note : Cette commande tient compte des colonnes invisibles. Rfrence Evenement formulaire, NUMERO LIGNE LISTBOX DEPLACEE.

4e Dimension - Langage 1101

SELECTIONNER LIGNE LISTBOX

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SELECTIONNER LIGNE LISTBOX ({*; }objet; positionLigne{; action}) Paramtre * objet positionLigne action Type Objet de formulaire Entier long Entier long Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Numro de la ligne slectionner Action de slection

Description La commande SELECTIONNER LIGNE LISTBOX provoque la slection de la ligne de numro positionLigne dans lobjet list box dsign par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. Le paramtre action, sil est pass, permet de dfinir laction de slection effectuer lorsquune slection de lignes existe dj dans la list box. Vous pouvez passer une valeur ou lune des constantes suivantes, places dans le thme List box : Remplacer slection listbox (0) : la ligne slectionne devient la nouvelle slection et remplace la slection existante. La commande produit le mme effet quun clic de lutilisateur sur une ligne de la list box. Cette action est effectue par dfaut (lorsque le paramtre action nest pas pass). Ajouter slection listbox (1) : la ligne slectionne est ajoute la slection existante. Si la ligne dsigne appartient dj la slection existante, la commande ne fait rien. Supprimer de slection listbox (2) : la ligne slectionne est supprime de la slection existante. Si la ligne dsigne nappartient pas la slection existante, la commande ne fait rien. Rfrence INSERER LIGNE LISTBOX, SUPPRIMER LIGNE LISTBOX.

1102 4e Dimension - Langage

INSERER LIGNE LISTBOX

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

INSERER LIGNE LISTBOX ({*; }objet; positionLigne) Paramtre * objet positionLigne Type Objet de formulaire Entier long Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Emplacement de la ligne insrer

Description La commande INSERER LIGNE LISTBOX insre une nouvelle ligne dans lobjet list box dsign par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. La ligne est insre lemplacement dfini par le paramtre positionLigne. Une nouvelle ligne est automatiquement ajoute cet emplacement dans tous les tableaux composant la list box, quel que soit leur type, y compris dans les tableaux (colonnes) masqus. Si le paramtre positionLigne est suprieur au nombre de lignes des tableaux de la list box, la ligne est ajoute la fin de chaque tableau. Rfrence SUPPRIMER LIGNE LISTBOX.

4e Dimension - Langage 1103

SUPPRIMER LIGNE LISTBOX

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER LIGNE LISTBOX ({*; }objet; positionLigne) Paramtre * objet positionLigne Type Objet de formulaire Entier long Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Numro de la ligne supprimer

Description La commande SUPPRIMER LIGNE LISTBOX supprime la ligne numro positionLigne (visible ou non) de la list box dsigne par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. La ligne positionLigne est supprime automatiquement de tous les tableaux composant la list box. Notez quaprs lexcution de la commande, il ny a plus dlment slectionn dans la list box. Si le paramtre positionLigne est suprieur au nombre de lignes des tableaux de la list box, la commande ne fait rien. Rfrence INSERER LIGNE LISTBOX, Lire nombre lignes listbox.

1104 4e Dimension - Langage

Lire nombre lignes listbox

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire nombre lignes listbox ({*; }objet) Entier long Paramtre * objet Rsultat Type Objet de formulaire Entier long Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Nombre de lignes

Description La commande Lire nombre lignes listbox retourne le nombre de lignes prsentes dans la list box dsigne par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. Note : Si les tableaux associs aux colonnes dun objet List box n'ont pas tous la mme taille, seul le nombre dlments correspondant au plus petit tableau apparat dans la list box et est retourn par cette commande. Rfrence INSERER LIGNE LISTBOX, SUPPRIMER LIGNE LISTBOX.

4e Dimension - Langage 1105

FIXER HAUTEUR LIGNES LISTBOX

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER HAUTEUR LIGNES LISTBOX (*; objet; hauteur) Paramtre * objet hauteur Type Objet de formulaire Entier Description Si spcifi, objet est un nom d'objet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Hauteur de ligne (en pixels)

Description La commande FIXER HAUTEUR LIGNES LISTBOX permet de modifier par programmation la hauteur des lignes de lobjet list box dsign par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. Rfrence Lire hauteur lignes listbox.

1106 4e Dimension - Langage

Lire hauteur lignes listbox

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire hauteur lignes listbox ({*; }objet) Entier Paramtre * objet Rsultat Type Objet de formulaire Entier Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Hauteur de ligne en pixels

Description La commande Lire hauteur lignes listbox retourne la hauteur courante (en pixels) des lignes de lobjet list box dsign par les paramtres objet et *. La valeur retourne correspond la hauteur d'une seule ligne. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. Rfrence FIXER HAUTEUR LIGNES LISTBOX.

4e Dimension - Langage 1107

NUMERO LIGNE LISTBOX DEPLACEE

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

NUMERO LIGNE LISTBOX DEPLACEE ({*; }objet; ancPosition; nouvPosition) Paramtre * objet ancPosition nouvPosition Type Objet de formulaire Numrique Numrique Description Si spcifi, objet est un nom d'objet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Prcdente position de la ligne dplace Nouvelle position de la ligne dplace

Description La commande NUMERO LIGNE LISTBOX DEPLACEE retourne dans les paramtres ancPosition et nouvPosition des numros indiquant respectivement la prcdente position et la nouvelle position de la ligne dplace dans la list box dsigne par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. Cette commande doit tre utilise en combinaison avec lvnement formulaire Sur dplacement ligne (cf. commande Evenement formulaire). Rfrence Evenement formulaire, NUMERO COLONNE LISTBOX DEPLACEE.

1108 4e Dimension - Langage

LIRE TABLEAUX LISTBOX

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE TABLEAUX LISTBOX ({*; }objet; tabNomsCols; tabNomsEnttes; tabVarCols; tabVarEnttes; tabVisibles; tabStyles) Paramtre * objet tabNomsCols tabNomsEnttes tabVarCols tabVarEnttes tabVisibles tabStyles Type Objet de formulaire Tab alpha Tab alpha Tab pointeur Tab pointeur Tab boolen Tab pointeur Description Si spcifi, objet est un nom d'objet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Noms dobjet des colonnes Noms dobjet des en-ttes Pointeurs vers les variables des colonnes Pointeurs vers les variables des en-ttes Visibilit de chaque colonne Pointeurs vers les tableaux de styles et de couleurs

Description La commande LIRE TABLEAUX LISTBOX retourne un ensemble de tableaux synchroniss fournissant diverses informations sur chaque colonne (visible ou non) de la list box dsigne par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. A lissue de lexcution de la commande : le tableau tabNomsCols contient la liste des noms dobjet de chaque colonne de la list box. le tableau tabNomsEnttes contient la liste des noms dobjet de chaque en-tte de colonne de la list box. le tableau tabVarCols contient des pointeurs vers les variables (cest--dire les tableaux) associes chaque colonne de la list box. le tableau tabVarEnttes contient des pointeurs vers les variables associes chaque entte de colonne de la list box. le tableau tabVisibles contient une valeur boolenne pour chaque colonne, indiquant si la colonne est visible (valeur Vrai) ou masque (valeur Faux) dans la list box.

4e Dimension - Langage 1109

le tableau tabStyles contient trois pointeurs vers les trois tableaux permettant dappliquer individuellement un style, une couleur de police et une couleur de fond personnalises chaque ligne de la list box. Ces tableaux sont associs la list box dans la Liste des proprits en mode Structure. Si un tableau nest pas spcifi pour la list box, llment correspondant de tabStyles contient un pointeur Nil. Rfrence Lire information listbox.

1110 4e Dimension - Langage

Lire information listbox

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire information listbox ({*; }objet; info) Entier long Paramtre * objet info Rsultat Type Objet de formulaire Entier long Entier long Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Type dinformation lire Valeur courante

Description La commande Lire information listbox permet de rcuprer diffrentes informations concernant la taille et la visibilit des en-ttes et des barres de dfilement de lobjet list box dsign par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. Passez dans le paramtre info un code correspondant linformation que vous souhaitez obtenir. Vous pouvez passer une valeur ou lune des constantes suivantes, places dans le thme List box : Constante Type Valeur Valeur(s) retourne(s) Affichage entte listbox Entier long 0 0=masqu, 1=affich Hauteur entte listbox Entier long 1 Hauteur en pixels Affichage barre df hor listbox Entier long 2 0=masque, 1=affiche Hauteur barre df hor listbox Entier long 3 Hauteur en pixels Affichage barre df ver listbox Entier long 4 0=masque, 1=affiche Largeur barre df ver listbox Entier long 5 Largeur en pixels Ces informations sont utiles pour calculer la taille de la zone de list box affiche dans le formulaire. Rfrence MONTRER BARRES DEFILEMENT LISTBOX, MONTRER GRILLE LISTBOX.

4e Dimension - Langage 1111

MONTRER GRILLE LISTBOX

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

MONTRER GRILLE LISTBOX ({*; }objet; horizontal; vertical) Paramtre * objet horizontal vertical Type Objet de formulaire Boolen Boolen Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Vrai=montrer, Faux=cacher Vrai=montrer, Faux=cacher

Description La commande MONTRER GRILLE LISTBOX permet dafficher ou de masquer les traits horizontaux et/ou verticaux composant la grille de lobjet list box dsign par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. Passez dans les paramtres horizontal et vertical des valeurs boolennes indiquant si les traits correspondants doivent tre affichs (Vrai) ou cachs (Faux). Par dfaut, la grille est affiche. Rfrence FIXER COULEUR GRILLE LISTBOX, Lire information listbox.

1112 4e Dimension - Langage

FIXER COULEUR GRILLE LISTBOX

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER COULEUR GRILLE LISTBOX ({*; }objet; couleur; horizontal; vertical) Paramtre * objet couleur horizontal vertical Type Objet de formulaire Numrique Boolen Boolen Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Valeur de couleur RVB Utiliser la couleur pour les traits horizontaux Utiliser la couleur pour les traits verticaux

Description La commande FIXER COULEUR GRILLE LISTBOX permet de modifier la couleur de la grille de lobjet list box dsign par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. Passez dans le paramtre couleur une valeur de couleur RVB. Pour plus dinformations sur les couleurs RVB, reportez-vous la description de la commande FIXER COULEURS RVB. Les paramtres horizontal et vertical vous permettent de spcifier les traits auxquels la couleur doit tre applique : si vous passez Vrai dans horizontal, la couleur sera applique aux traits horizontaux de la grille. Si vous passez Faux, leur couleur ne sera pas modifie. si vous passez Vrai dans vertical, la couleur sera applique aux traits verticaux de la grille. Si vous passez Faux, leur couleur ne sera pas modifie. Rfrence FIXER COULEURS RVB, MONTRER GRILLE LISTBOX.

4e Dimension - Langage 1113

MONTRER BARRES DEFILEMENT LISTBOX

List Box version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

MONTRER BARRES DEFILEMENT LISTBOX ({*; }objet; horizontal; vertical) Paramtre * objet horizontal vertical Type Objet de formulaire Boolen Boolen Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est une variable Nom dobjet (si * est spcifi) ou Variable (si * est omis) Vrai=montrer, Faux=cacher Vrai=montrer, Faux=cacher

Description La commande MONTRER BARRES DEFILEMENT LISTBOX permet dafficher ou de masquer les barres de dfilement horizontale et/ou verticale dans lobjet list box dsign par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable. Pour plus d'informations sur les noms dobjets, reportez-vous la section Proprits des objets. Passez dans les paramtres horizontal et vertical des valeurs boolennes indiquant si les barres de dfilement correspondantes doivent tre affiches (Vrai) ou caches (Faux). Par dfaut, les barres de dfilement sont affiches. Rfrence Lire information listbox, MONTRER GRILLE LISTBOX.

1114 4e Dimension - Langage

38 ________________________ Listes hirarchiques

4e Dimension - Langage 1115

1116 4e Dimension - Langage

Charger liste

Listes hirarchiques version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Charger liste (nomListe) RfList Paramtre nomListe Rsultat Type Alpha RfListe Description Nom de liste cre dans l'diteur d'numrations Numro de rfrence de la liste nouvellement cre

Description La commande Charger liste cre une liste hirarchique dont le contenu est copi depuis la liste nomListe cre en mode Structure, dans l'diteur d'numrations. La fonction retourne le numro de rfrence de la liste nouvellement cre. Pour savoir si la liste a correctement t charge, utilisez la fonction Liste existante avec le numro de rfrence retourn par Prsentation des commandes XML. Notez que la nouvelle liste est une copie de la liste dfinie en mode Structure. Par consquent, toute modification apporte cette nouvelle liste n'affectera pas la liste dfinie en mode Structure. De mme, toute modification ultrieure de l'numration n'affecte pas la liste que vous venez de crer. Si vous modifiez la liste nouvellement cre et voulez enregistrer ces modifications, utilisez la commande STOCKER LISTE. Si vous n'avez plus besoin de la liste, n'oubliez pas d'appeler SUPPRIMER LISTE pour la supprimer. Sinon, elle reste en mmoire jusqu' la fin de la session de travail ou jusqu' ce que le process dans lequel la liste a t cre soit dtruit. Astuce : Si vous associez une liste un objet de formulaire (liste hirarchique, onglet ou menu hirarchique) l'aide du menu Enumration dans la fentre des proprits d'objet, il est inutile d'appeler Charger liste ou SUPPRIMER LISTE dans la mthode de l'objet. 4e Dimension charge et efface la liste automatiquement pour vous.

4e Dimension - Langage 1117

Exemple Imaginons que vous crez une base pour le march international. Vous voulez pouvoir changer la langue utilise. Dans un formulaire, vous prsentez une liste hirarchique listeHL qui propose les langues disponibles. En mode Structure, vous avez prpar des listes diffrentes, par exemple Options US pour la version anglaise, Options FR pour la version franaise, Options ES pour la version espagnole, etc. De plus, vous maintenez la variable interprocess <>gaLangueCourante dans laquelle vous stockez un code de langue sur 2 caractres, par exemple US pour la version anglaise, FR pour la version franaise, ES pour la version espagnole, etc. Pour vous assurer que la liste correcte sera charge en utilisant la langue choisie, vous pouvez crire : ` Mthode objet de la liste hirarchique listeHL Au cas ou : (Evenement formulaire = Sur chargement) C_ENTIER LONG (listeHL) listeHL:=Charger liste("Options"+<>gaLangueCourante) : (Evenement formulaire = Sur libration) SUPPRIMER LISTE(listeHL;*) Fin de cas

Rfrence STOCKER LISTE, SUPPRIMER LISTE.

1118 4e Dimension - Langage

STOCKER LISTE

Listes hirarchiques version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

STOCKER LISTE (liste; nomListe) Paramtre liste nomListe Type RfListe Alpha Description Numro de rfrence de liste Nom de la liste tel qu'il doit apparatre dans l'diteur d'numrations en mode Structure

Description La commande STOCKER LISTE sauvegarde la liste dont vous avez pass le numro de rfrence dans liste, sous le nom que vous avez pass dans nomListe. La liste est stocke en tant qu'numration dans l'diteur d'numrations du mode Structure. Si une numration de mme nom existe dj, son contenu est remplac. Rfrence Charger liste.

4e Dimension - Langage 1119

Nouvelle liste

Listes hirarchiques version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nouvelle liste RfListe Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat RefList Numro de rfrence de liste

Description La commande Nouvelle liste cre une nouvelle liste hirarchique vide en mmoire et retourne son numro de rfrence unique. ATTENTION : Les listes hirarchiques rsident en mmoire. Une fois que vous en avez termin avec une liste hirarchique, il est important que vous l'effaciez l'aide de la commande SUPPRIMER LISTE. Ainsi, vous librez la mmoire occupe par la liste hirarchique dont vous n'avez plus besoin. D'autres commandes vous permettent de crer des listes hirarchiques : Copier liste cre une nouvelle liste en dupliquant une liste existante. Charger liste cre une nouvelle liste en chargeant une numration cre (manuellement ou par programmation) dans l'diteur d'numrations du mode Structure. BLOB vers liste cre une nouvelle liste partir du contenu d'un BLOB dans lequel une liste avait t pralablement stocke. Une fois que vous avez cr une liste hirarchique l'aide de la commande Nouvelle liste, vous pouvez : Ajouter des lments la liste l'aide des commandes AJOUTER A LISTE et INSERER ELEMENT. Supprimer des lments de cette liste l'aide de la commande SUPPRIMER ELEMENT. Exemple Reportez-vous l'exemple de la commande AJOUTER A LISTE. Rfrence AJOUTER A LISTE, BLOB vers liste, Charger liste, Copier liste, INSERER ELEMENT, SUPPRIMER ELEMENT, SUPPRIMER LISTE.

1120 4e Dimension - Langage

Copier liste

Listes hirarchiques version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Copier liste (liste) RfListe Paramtre liste Rsultat Type RfListe RfListe Description Numro de rfrence de la liste copier Numro de rfrence de la nouvelle liste

Description La commande Copier liste duplique la liste dont vous passez le numro de rfrence dans le paramtre liste et retourne le numro de rfrence de la nouvelle liste. Le contenu de la liste copie est entirement dupliqu. Une fois que vous en avez termin avec la copie de la liste, appelez la commande SUPPRIMER LISTE pour l'effacer. Rfrence Charger liste, Nouvelle liste, SUPPRIMER LISTE.

4e Dimension - Langage 1121

SUPPRIMER LISTE

Listes hirarchiques version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER LISTE (liste{; *}) Paramtre liste * Type RfListe Description Numro de rfrence de liste Si spcifi, effacer les sous-listes de la mmoire (s'il existe des sous-listes) Si omis, ne pas effacer les sous-listes

Description La commande SUPPRIMER LISTE efface de la mmoire la liste hirarchique dont vous avez pass le numro de rfrence dans le paramtre liste. Gnralement, vous devez passer le paramtre optionnel *, afin que les sous-listes et les sous-lments (s'il y en a) rattachs la liste soient galement effacs. Il n'est pas ncessaire de supprimer une liste associe un objet de formulaire via la fentre de Proprits des objets : 4D charge et efface la liste automatiquement. Sinon, chaque fois que vous chargez, copiez, extrayez d'un BLOB ou crez une liste par programmation, appelez la commande SUPPRIMER LISTE lorsque vous n'en avez plus besoin. Si vous voulez supprimer une sous-liste rattache un lment ( tout niveau) d'une autre liste affiche dans un formulaire, procdez de la manire suivante : 1. Appelez INFORMATION ELEMENT avec l'lment parent pour obtenir le numro de rfrence de la sous-liste. 2. Appelez CHANGER ELEMENT avec l'lment parent pour dissocier la sous-liste de l'lment de liste avant de l'effacer. 3. Appelez SUPPRIMER LISTE pour effacer la sous-liste dont vous avez obtenu le numro de rfrence l'aide de INFORMATION ELEMENT. 4. Appelez REDESSINER LISTE pour la liste affiche dans le formulaire, de manire ce que ses lments et ses sous-listes soient recalculs.

1122 4e Dimension - Langage

Exemples (1) Vous disposez, dans votre application, d'une routine de "nettoyage" charge d'effacer tous les objets et donnes dont vous n'avez plus besoin lorsque, par exemple, une fentre ou un formulaire est referm(e). A un endroit de cette routine, vous supprimez une liste hirarchique qui peut avoir dj t supprime, suivant les actions de l'utilisateur dans le formulaire. Vous utilisez la fonction Liste existante pour effacer la liste uniquement si c'est ncessaire : ` Extrait de la sous-routine de nettoyage Si (Liste existante(hlList)) SUPPRIMER LISTE(hlList;*) Fin de si

(2) Reportez-vous l'exemple de la fonction Charger liste. (3) Reportez-vous l'exemple de la fonction BLOB vers liste. Rfrence BLOB vers liste, Charger liste, Nouvelle liste.

4e Dimension - Langage 1123

Nombre elements

Listes hirarchiques version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nombre elements (liste{; *}) Entier long Paramtre liste * Type RfListe * Description Numro de rfrence de liste Si omis (dfaut) : Retourner les lments visibles (dploys) dans la ou les liste(s) Si spcifi : Retourner tous les lments Nombre d'lments visibles (dploys) si * omis ou Nombre total dlments si * pass

Rsultat

Entier long

Description La fonction Nombre elements retourne soit le nombre d'lments visibles soit le nombre total d'lments dans la liste dont vous avez pass le numro de rfrence dans liste. Le choix du type d'information retourner est effectu l'aide du paramtre *. Lorsque ce paramtre est pass, la commande retourne le nombre total dlments prsents dans la liste, quel que soit son tat courant dploy/contract. Lorsque ce paramtre est omis, la commande retourne le nombre d'lments qui sont visibles, en fonction de l'tat dploy/contract actuel de la liste et de ses sous-listes. Cette fonction doit tre applique une liste affiche dans un formulaire. Exemples Voici la liste hList affiche en mode Utilisation :

$vlNbItems:=Nombre elements(hList) ` ce stade, $vlNbItems vaut 8 $vlNbTItems:=Nombre elements(hList;*) `$vlNbTItems vaut galement 8

1124 4e Dimension - Langage

$vlNbItems:=Nombre elements(hList) ` ce stade, $vlNbItems vaut 2 $vlNbTItems:=Nombre elements(hList;*) `$vlNbTItems vaut toujours 8

$vlNbItems:=Nombre elements(hList) `$vlNbItems vaut 5 $vlNbTItems:=Nombre elements(hList;*) `$vlNbTItems vaut toujours 8

Rfrence Elements selectionnes, Position element liste.

4e Dimension - Langage 1125

Liste existante

Listes hirarchiques version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Liste existante (liste) Boolen Paramtre liste Rsultat Type RfListe Boolen Description Rfrence de la liste tester Vrai si liste est une liste hirarchique Faux si liste n'est pas une liste hirarchique

Description La fonction Liste existante retourne VRAI si la valeur passe dans le paramtre liste est une rfrence valide une liste hirarchique. Dans les autres cas, elle retourne FAUX. Exemples (1) Reportez-vous l'exemple de la commande SUPPRIMER LISTE. (2) Reportez-vous aux exemples de la commande PROPRIETES GLISSER DEPOSER. Rfrence PROPRIETES GLISSER DEPOSER.

1126 4e Dimension - Langage

REDESSINER LISTE

Listes hirarchiques version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

REDESSINER LISTE (liste) Paramtre liste Type RfListe Description Numro de rfrence de liste

Description La commande REDESSINER LISTE recalcule les positions de tous les lments et sous-listes (s'il y en a) de la liste dont vous avez pass le numro de rfrence dans le paramtre liste. Vous DEVEZ appeler cette commande au moins une fois pour une liste affiche dans un formulaire lorsque vous modifiez un ou plusieurs lments de la liste ou d'une de ses souslistes. Attention Vous devez passer la vritable instance de la variable liste et non une expression ou autre variable. Si par exemple vous disposez d'une liste hList dans un formulaire : ` Recalculer la liste aprs que des modifications aient eu lieu REDESSINER LISTE (hList) ` BON ` ... $vlList:=hList ` ... ` Recalculer la liste aprs que des modifications aient eu lieu REDESSINER LISTE ($vlList) ` MAUVAIS ` ...

4e Dimension - Langage 1127

CHANGER PROPRIETES LISTE

Listes hirarchiques version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER PROPRIETES LISTE (liste; apparence{; icne{; hauteurLigne{; doubleClic{; multiSlection{; modifiable}}}}}) Paramtre liste apparence icne hauteurLigne doubleClic multiSlection modifiable Type RefListe Numrique Numrique Numrique Entier long Entier long Entier long Description Numro de rfrence de la liste Style graphique de la liste 1 = Liste hirarchique la Macintosh 2 = Liste hirarchique la Windows Rfrence de ressource MacOS cicn ou 0 = icne par dfaut de la plate-forme Hauteur minimale de la ligne (pixels) Dploiement/contraction sur double-clic 0 = autoriser, 1= empcher Slections multiples 0 = interdire (dfaut), 1 = autoriser Enumration modifiable 0 = oui (dfaut), 1 = non

Description La commande CHANGER PROPRIETES LISTE dfinit l'apparence et le fonctionnement de la liste hirarchique dont la rfrence est passe dans le paramtre liste. Vous pouvez passer dans le paramtre apparence une des constantes prdfinies suivantes, fournies par 4e Dimension dans le thme Listes hirarchiques : Constante A la Macintosh A la Windows Type Entier long Entier long Valeur 1 2

Avec l'apparence Windows, la liste contient des lignes pointilles qui connectent les lments et les sous-lements. Une icne "+" signale un lement dont la sous-liste est contracte, une icne "" signale un lment dont la sous-liste est dploye. Les lments sans sous-lments n'ont pas d'icne.

1128 4e Dimension - Langage

Voici la liste hirarchique par dfaut la Windows :

Avec l'apparence Macintosh, la liste s'affiche sans lignes pointilles. Une icne en forme de triangle pointant vers la droite signale un lment dont la sous-liste est contracte, une icne en forme de triangle pointant vers le bas signale un lment dont la sous-liste est dploye. Les lments sans sous-lments n'ont pas d'icne. Voici la liste hirarchique par dfaut la Macintosh :

Si vous affichez une liste hirarchique sans appeler CHANGER PROPRIETES LISTE ou passez 0 dans le paramtre apparence, la liste s'affiche avec l'apparence par dfaut, en fonction de la plate-forme slectionne en mode Structure dans l'diteur de formulaires. Le paramtre icne indique l'icne affiche pour chaque lment. La valeur passe dans icne dfinit l'icne pour les sous-listes contractes et la valeur icne+1 dfinit l'icne pour les sous-listes dployes.

4e Dimension - Langage 1129

Si, par exemple, vous passez 15000 dans icne, l'icne couleur 'cicn' ID=15000 sera affiche pour chaque sous-liste contracte et l'icne couleur 'cicn' ID=15001 sera affiche pour chaque sous-liste dploye. Dans ce cas, il est important de disposer effectivement de ces deux ressources d'icne couleur 'cicn' dans le fichier de structure de votre base. Si aucune icne couleur n'est prsente, les lments correspondants sont affichs sans icne ( noter que c'est un moyen d'afficher une liste sans icnes). Attention : Lorsque vous crez des ressources d'icne couleur 'cicn', utilisez des numros de rfrence (ID) de ressource suprieurs ou gaux 15000. Les numros de rfrence de ressource infrieurs 15000 sont rservs 4e Dimension. Les numros de rfrence par dfaut des ressources d'lments de liste sous MacOS et Windows sont exprims par les constantes prdfinies de 4e Dimension suivantes : Constante Rf icne Macintosh Rf icne Windows Type Entier long Entier long Valeur 860 138

4e Dimension fournit les ressources 'cicn' suivantes : Numro d'ID Description 860 Sous-liste contracte la Macintosh 861 Sous-liste dploye la Macintosh 138 Sous-liste contracte la Windows 139 Sous-liste dploye la Windows Si vous n'utilisez pas le paramtre icne ou passez 0, les lments sont affichs avec les icnes par dfaut pour l'apparence choisie. Les ressources d'icne couleur peuvent avoir des tailles diffrentes. Vous pouvez crer, par exemple, des icnes couleur 16x16 ou 32x32. Si vous ne passez pas le paramtre hauteurLigne, la hauteur de ligne d'une liste hirarchique sera dtermine par la police et la taille de police utilises pour l'objet. Si vous utilisez des icnes couleurs qui sont trop grandes ou trop larges, elles seront dformes et/ou tronques par les lignes pointilles (si l'apparence est Windows) ainsi que par le texte des lments environnants. Ajustez en consquence les tailles des icnes couleurs, les polices et les tailles de police. Vous pouvez galement passer dans le paramtre hauteurLigne la hauteur minimale des lignes de la liste hirarchique. Si la valeur que vous passez est suprieure la hauteur des lignes dfinie par la police et la taille de police, elle sera utilise pour fixer la hauteur des lignes.

1130 4e Dimension - Langage

Note : CHANGER PROPRIETES LISTE affecte l'apparence de la liste, c'est--dire les symboles de dploiement/contraction des lments et les liens entre les lments. Si vous voulez personnaliser l'icne de chaque lment d'une liste hirarchique, utilisez la commande CHANGER PROPRIETES ELEMENT. Le paramtre facultatif doubleClic permet dempcher que le double-clic sur un lment de la liste ne provoque le dploiement ou la contraction de sa sous-liste. Par dfaut, une sous-liste est dploye ou contracte en cas de double-clic sur llment parent. Certains types dinterfaces peuvent toutefois ncessiter une dsactivation de ce mcanisme. Pour cela, passez 1 dans le paramtre doubleClic. A noter que seul le double-clic sera dsactiv. Les sous-listes pourront toujours tre dployes ou contractes par un clic sur licne de dploiement. Si vous passez 0 ou omettez ce paramtre, le fonctionnement par dfaut est appliqu. Le paramtre facultatif multiSlection permet dindiquer si la liste doit accepter les slections multiples. Par dfaut, il nest pas possible de slectionner simultanment plusieurs lments dune liste hirarchique. Si vous souhaitez que cette fonction soit disponible pour la liste, passez la valeur 1 dans le paramtre multiSlection. Dans ce cas, les slections multiples peuvent tre effectues : - manuellement, laide des combinaisons de touches Maj+clic pour une slection continue ou Ctrl+clic (Windows) / Commande+clic (MacOS) pour une slection discontinue, - par programmation, laide des commandes SELECTIONNER ELEMENTS PAR POSITION et SELECTIONNER ELEMENTS PAR REFERENCE. Si vous passez 0 ou omettez le paramtre multiSlection, le fonctionnement par dfaut est appliqu. Le paramtre facultatif modifiable permet dindiquer si la liste sera modifiable par lutilisateur lorsquelle sera affiche sous forme dnumration associe un champ ou une variable en saisie. Lorsque lnumration est modifiable, un bouton Modifier est insr dans la fentre dnumration et lutilisateur peut ajouter, supprimer et trier les valeurs via un diteur spcifique. Si vous passez 0 ou omettez le paramtre modifiable, lnumration sera modifiable par lutilisateur ; si vous passez 1, elle ne sera pas modifiable.

4e Dimension - Langage 1131

Exemples La liste hirarchique suivante a t dfinie dans l'diteur d'numrations en mode Structure :

Dans un formulaire, l'objet liste hirarchique hlVilles rutilise cette liste avec cette mthode objet : Au cas ou : (Evenement formulaire=Sur chargement) hlVilles:=Charger liste("Villes") CHANGER PROPRIETES LISTE(hlVilles;vlApparence;vlIcon) : (Evenement formulaire=Sur libration) SUPPRIMER LISTE(hlVilles;*) Fin de cas

De plus, le fichier de structure de la base a t modifi afin de contenir les ressources d'icnes 'cicn' suivantes :

1132 4e Dimension - Langage

(1) Avec la ligne suivante :

CHANGER PROPRIETES LISTE(hlVilles;A la Macintosh;Rf icne Macintosh)

La liste hirarchique s'affiche ainsi :

(2) Avec la ligne suivante :

CHANGER PROPRIETES LISTE(hlVilles;A la Windows;Rf icne Windows)

La liste hirarchique s'affiche ainsi :

(3) Avec la ligne suivante :

CHANGER PROPRIETES LISTE(hlVilles;A la Windows;20000)

4e Dimension - Langage 1133

La liste hirarchique s'affiche ainsi :

(4) Avec la ligne suivante :

CHANGER PROPRIETES LISTE(hlVilles;A la Macintosh;20010)

La liste hirarchique s'affiche ainsi :

Les ressources d'icne couleur 'cicn' prsentes ci-dessous sont ensuite ajoutes au fichier de structure de la base :

1134 4e Dimension - Langage

(5) Avec la ligne suivante :

CHANGER PROPRIETES LISTE(hlVilles;A la Windows;20020;32)

La liste hirarchique s'affiche ainsi :

Rfrence CHANGER PROPRIETES ELEMENT, LIRE PROPRIETES ELEMENT, LIRE PROPRIETES LISTE.

4e Dimension - Langage 1135

LIRE PROPRIETES LISTE

Listes hirarchiques version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE PROPRIETES LISTE (liste; apparence{; icne{; hauteurLigne{; doubleClic{; multiSlection{; modifiable}}}}}) Paramtre liste apparence icne hauteurLigne doubleClic multiSlection modifiable Type RefListe Numrique Numrique Numrique Entier long Entier long Entier long Description Numro de rfrence de la liste Style graphique de la liste 1 = Liste hirarchique la Macintosh 2 = Liste hirarchique la Windows Rfrence de ressource MacOS cicn Hauteur minimale de la ligne (pixels) Dploiement/contraction sur double-clic 0 = autoris, 1= empch Slections multiples : 0 = interdites, 1 = autorises Enumration modifiable : 0 = oui, 1 = non

Description La commande LIRE PROPRIETES LISTE retourne des informations sur la liste hirarchique dont vous avez pass le numro de rfrence dans le paramtre liste. Le paramtre apparence retourne le style graphique de la liste. Le paramtre icne retourne les icnes utilises pour symboliser l'tat dploy/contract d'une sous-liste. Le paramtre hauteurLigne retourne la hauteur de ligne minimale. Si le paramtre doubleClic vaut 1, le dploiement ou la contraction des sous-listes en cas de double-clic sur llment parent est dsactiv(e). Si doubleClic vaut 0, ce fonctionnement est actif (valeur par dfaut). Si le paramtre multiSlection vaut 0, la slection multiple dlments (manuelle ou par programmation) nest pas possible dans la liste. Sil vaut 1, la slection multiple est permise. Si le paramtre modifiable vaut 0, la liste est modifiable lorsquelle est affiche sous forme dnumration en mode Utilisation. Sil vaut 1, la liste nest pas modifiable. Ces proprits peuvent tre dfinies l'aide de la commande CHANGER PROPRIETES LISTE et/ou dans l'diteur d'numrations en mode Structure, si la liste a t cre dans cet diteur ou sauvegarde avec la commande STOCKER LISTE. Pour une description complte de ces proprits d'apparence et de comportement, reportez-vous la commande CHANGER PROPRIETES LISTE.

1136 4e Dimension - Langage

Exemple Voici une liste nomme hList, telle qu'elle apparat en mode Utilisation :

Voici la mthode objet d'un bouton : ` Mthode objet du bouton bMacOuWin LIRE PROPRIETES LISTE(hList;$vlApparence;$vlIcon;$vlLH;$vlClic;$vlSelect;$vlModif) Si ($vlApparence=A la Macintosh) $vlApparence:=A la Windows $vlIcon:=Rf icne Windows $vlModif:=1 Sinon $vlApparence:=A la Macintosh $vlIcon:=Rf icne Macintosh $vlModif:=1 Fin de si CHANGER PROPRIETES LISTE(hList;$vlApparence;$vlIcon;$vlLH;$vlClic;$vlSelect; $vlModif) REDESSINER LISTE(hList) Cette mthode permet d'afficher la liste ainsi :

Rfrence CHANGER PROPRIETES LISTE.

4e Dimension - Langage 1137

TRIER LISTE

Listes hirarchiques version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TRIER LISTE (liste{; > ou <}) Paramtre liste > ou < Type RfListe Description Numro de rfrence de liste Ordre de tri : > pour trier la liste dans l'ordre croissant ou < pour trier la liste dans l'ordre dcroissant

Description La commande TRIER LISTE effectue un tri sur la liste dont vous avez pass le numro de rfrence dans le paramtre liste. Pour effectuer un tri dans l'ordre croissant, passez > comme deuxime paramtre. Pour effectuer un tri dans l'ordre dcroissant, passez < comme deuxime paramtre. Si vous omettez ce paramtre, TRIER LISTE effectue par dfaut un tri croissant. TRIER LISTE trie tous les niveaux de la liste : les lments de la liste, puis les sous-lments de chaque sous-liste, puis des sous-listes suivantes, etc., sont tris. C'est pourquoi gnralement vous utiliserez la commande TRIER LISTE avec une liste affiche dans un formulaire. Le tri d'une sous-liste a moins d'intrt car son ordre sera modifi ds qu'un appel une liste se produira un niveau suprieur. TRIER LISTE ne modifie pas l'tat courant dploy/contract de la liste et de ses ventuelles sous-listes, ni l'lment slectionn. Cependant, comme l'lment slectionn peut tre dplac la suite du tri, Elements selectionnes peut retourner une position diffrente avant et aprs le tri. Exemple Voici la liste nomme hList, affiche ici en mode Utilisation :

1138 4e Dimension - Langage

Aprs l'excution du code suivant :

` Trier la liste et ses sous-listes dans l'ordre croissant TRIER LISTE(hList;>) REDESSINER LISTE(hList) `Appeler REDESSINER LISTE sinon elle ne sera pas mise jour

... la liste apparat ainsi :

Aprs l'excution du code suivant :

` Trier la liste et ses sous-listes dans l'ordre dcroissant TRIER LISTE(hList;<) REDESSINER LISTE(hList) ` Appeler REDESSINER LISTE sinon elle ne sera pas mise jour

... la liste apparat ainsi :

Rfrence Elements selectionnes.

4e Dimension - Langage 1139

AJOUTER A LISTE

Listes hirarchiques version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

AJOUTER A LISTE (liste; texteElment; numElment{; sous_Liste{; dploye}}) Paramtre liste texteElment numElment sous_Liste dploye Type RfListe Alpha Entier long RfListe Boolen Description Numro de rfrence de liste Libell du nouvel lment (255 caractres maximum) Numro de rfrence unique du nouvel lment Sous-liste optionnelle rattacher au nouvel lment Indique si la sous-liste doit tre dploye ou non

Description La commande AJOUTER A LISTE ajoute un nouvel lment la liste hirarchique dont vous avez pass le numro de rfrence dans le paramtre liste. Vous passez le libell de l'lment dans le paramtre texteElment. Vous pouvez passer une expression de type Alpha ou Texte de 255 caractres maximum. Si vous passez un libell plus long, il sera tronqu. Vous passez le numro de rfrence unique de l'lment dans le paramtre numElment. Mme si nous qualifions ce numro de rfrence d'lment comme unique, vous pouvez en ralit passer la valeur que vous voulez. Reportez-vous ci-dessous au paragraphe "Exploiter les numros de rfrence des lments". Si vous souhaitez galement que l'lment comporte des sous-lments, passez un numro de rfrence de liste valide dans le paramtre sous_Liste. Pour que cette sous-liste s'affiche dploye ou contracte, passez respectivement VRAI ou FAUX dans le paramtre dploye. La rfrence de la liste que vous passez dans sous_Liste doit tre une liste existante. Celle-ci peut tre vide, ne contenir qu'un niveau, ou contenir elle-mme des sous-listes. Si vous ne voulez pas rattacher de sous-liste au nouvel lment, omettez le paramtre ou passez 0. Si vous passez le paramtre sous_Liste et ne passez pas le paramtre dploye, la sous-liste apparat par dfaut contracte.

1140 4e Dimension - Langage

Conseils Pour insrer un nouvel lment dans une liste, utilisez INSERER ELEMENT. Pour modifier le libell d'un lment existant ou sa sous-liste, ainsi que son tat dploy/contract, utilisez CHANGER ELEMENT. Pour changer l'apparence de l'lment ajout, utilisez CHANGER PROPRIETES ELEMENT. Attention : Si vous ajoutez un lment une liste affiche dans un formulaire ou une liste rattache un lment ( travers un ou plusieurs niveaux) dont la liste est affiche dans un formulaire, vous devez appeler REDESSINER LISTE pour que 4D recalcule la liste et l'affiche en fonction de vos modifications. La rgle est simple : quel que soit le niveau de la liste sur lequel vous agissez, appliquez REDESSINER LISTE la liste principale, c'est--dire la liste refrence par l'objet dans le formulaire. Exploiter les numros de rfrence des lments Chaque lment d'une liste hirarchique dispose d'un numro de rfrence de type Entier long. Cette valeur est destine uniquement votre propre usage : 4D ne fait que la maintenir. Voici quelques astuces quant l'utilisation de ce numro : (1) Vous n'avez pas besoin d'identifier chaque lment de faon unique (niveau dbutant). Premier exemple : vous construisez par programmation un systme d'onglets, par exemple, un carnet d'adresses. Comme le systme vous retournera le numro de l'onglet slectionn, vous n'aurez probablement pas besoin de davantage d'informations. Dans ce cas, ne vous proccupez pas des numros de rfrence des lments : passez 0 dans le paramtre numElment. Notez que pour un systme de carnet d'adresses, vous pouvez prdfinir une liste A, B,..., Z en mode Structure. Vous pouvez galement la crer par programmation afin d'liminer les lettres pour lesquelles il n'y a pas d'enregistrement. Deuxime exemple : en travaillant avec une base, vous construisez progressivement une liste de mots-cls. Vous pouvez sauvegarder la liste la fin de chaque session, en utilisant les commandes STOCKER LISTE ou LISTE VERS BLOB, et la recharger au dbut de chaque session, l'aide des commandes Charger liste ou BLOB vers liste. Vous pouvez afficher cette liste dans une palette flottante ; lorsque l'utilisateur clique sur un mot-cl de la liste, l'lment choisi est insr dans la zone saisissable slectionne du process de premier plan. Vous pouvez galement utiliser le glisser-dposer. En tout tat de cause, l'important est que vous ne traitez que l'lment slectionn (par clic ou glisser-dposer), car les commandes Elements selectionns (en cas de clic) et PROPRIETES GLISSER DEPOSER vous retournent la position de l'lment que vous devez traiter. En utilisant cette valeur de position, vous obtenez le libell de l'lment grce la commande INFORMATION ELEMENT. Ici aussi, vous n'avez pas besoin d'identifier de faon unique chaque lment ; vous pouvez passer 0 dans le paramtre numElment.

4e Dimension - Langage 1141

(2) Vous avez besoin d'identifier partiellement les lments de la liste (niveau intermdiaire). Vous utilisez le numro de rfrence de l'lment pour stocker l'information ncessaire lorsque vous devez agir sur un lment ; ce point est dtaill dans l'exemple fourni plus bas. Dans cet exemple, nous utilisons les numros de rfrence des lments pour stocker des numros d'enregistrements. Cependant, nous devons pouvoir tablir une distinction entre les lments qui correspondent aux enregistrements [Dpartements] et ceux qui correspondent aux enregistrements [Employs]. Reportez-vous l'exemple prsent plus bas. (3) Vous avez besoin d'identifier les lments de la liste de faon unique (niveau avanc). Vous programmez une gestion labore de listes hirarchiques, dans laquelle vous devez absolument pouvoir identifier chaque lment de manire unique tous les niveaux de la liste. Un moyen simple d'implmenter ce fonctionnement est de maintenir un compteur personnel. Supposons que vous crez une liste hlList l'aide de la commande Nouvelle liste. A ce stade, vous initialisez un compteur vlhCounter 0. A chaque fois que vous appelez AJOUTER A LISTE ou INSERER ELEMENT, vous incrmentez ce compteur (vlhCounter:=vlhCounter+1), et vous passez le compteur comme numro de rfrence de l'lment. L'astuce consiste ne pas dcrmenter le compteur lorsque vous dtruisez des lments le compteur ne peut qu'augmenter. En procdant ainsi, vous garantissez l'unicit des numros de rfrence des lments. Puisque ces numros sont des valeurs de type Entier long, vous pouvez ajouter ou insrer plus de deux milliards d'lments dans une liste qui a t rinitialise... (si vous manipulez d'aussi grandes quantits d'lments, cela signifie gnralement que vous devriez utiliser une table plutt qu'une liste.) Note : Si vous exploitez les Oprateurs sur les bits, vous pouvez galement utiliser les numros de rfrence des lments pour stocker des informations qui peuvent tre loges dans un Entier long, c'est--dire 2 Entiers, des valeurs de 4 octets ou encore 32 Boolens. Quand avez-vous besoin de numros de rfrence uniques ? Dans la plupart des cas, lorsque vous utilisez des listes hirarchiques pour des besoins d'interface utilisateur, pour lesquels seul l'lment slectionn (par un clic ou par glisserdposer) est important, vous n'avez pas besoin d'utiliser les numros de rfrence des lments. Les commandes Elements selectionnes et INFORMATION ELEMENT vous fournissent toutes les informations ncessaires la gestion de l'lment slectionn. De plus, des commandes telles que INSERER ELEMENT ou SUPPRIMER ELEMENT vous permettent de manipuler la liste de manire "relative" l'lment slectionn.

1142 4e Dimension - Langage

En pratique, vous devez vous proccuper des numros de rfrence d'lments lorsque vous voulez accder directement par programmation n'importe quel lment de la liste, et pas ncessairement l'lment couramment slectionn. Exemple Voici une vue partielle de la structure d'une base :

Les tables [Dpartements] et [Employs] contiennent les enregistrements suivants :

Vous voulez utiliser une liste hirarchique, appele hlList, qui affiche les dpartements, et pour chaque dpartement, une sous-liste contenant les employs travaillant dans ce dpartement.

4e Dimension - Langage 1143

La mthode objet de hlList est la suivante: ` Mthode objet Liste hirarchique hlList Au cas ou : (Evenement formulaire=Sur chargement) C_ENTIER LONG(hlList;$hSousListe;$vlDpartement;$vlEmploy) ` Crer une nouvelle liste hirarchique vide hlList:=Nouvelle liste ` Slectionner tous les enregistrements de la table [Dpartements] TOUT SELECTIONNER([Dpartements]) ` Pour chaque Dpartement Boucle ($vlDepartement;1;Enregistrements trouves([Dpartements])) ` Slectionner les employs de ce dpartement LIEN RETOUR([Dpartements]Nom) ` Combien sont-ils? $vlNbEmploys:=Enregistrements trouves([Employs]) ` Y-at-il au moins un employ dans ce dpartement? Si ($vlNbEmploys>0) ` Crer une sous-liste pour l'lment Dpartement $hSousListe:=Nouvelle liste ` Pour chaque Employ Boucle ($vlEmploy;1;Enregistrements trouves([Employs])) ` Ajouter l'lment Employ la sous-liste ` Noter que le numro de l'enregistrement [Employs] ` est pass comme numro de rfrence de l'lment AJOUTER A LISTE($hSousListe;[Employs]NomFamille+", " +[Employs]Prnom;Numero enregistrement([Employs])) ` Aller l'enregistrement [Employs] suivant ENREGISTREMENT SUIVANT([Employs]) Fin de boucle Sinon ` Pas d'Employ, pas de sous-liste pour l'lment Dpartement $hSousListe:=0 Fin de si ` ` ` ` ` ` Ajouter l'lment Dpartement la liste principale Notez que le numro de l'enregistrement [Dpartements] est pass comme numro de rfrence de l'lment. Le bit #31 du numro de rfrence de l'lment est forc 1. Ainsi nous pourrons faire la distinction entre les lments Dpartement et Employs (cf. note ci-dessous)

1144 4e Dimension - Langage

AJOUTER A LISTE(hlList;[Dpartements]Nom;0x80000000 | Numero enregistrement([Dpartements]); $hSousListe;$hSousListe#0) ` Passer l'lment Dpartement en gras pour renforcer la hirarchie ` de la liste CHANGER PROPRIETES ELEMENT(hlList;0;Faux;Gras;0) ` Aller au dpartement suivant ENREGISTREMENT SUIVANT([Dpartements]) Fin de boucle ` Trier toute la liste en ordre croissant TRIER LISTE(hlList;>) ` Afficher la liste en style Windows et forcer la hauteur de ligne minimale ` 14 Pts CHANGER PROPRIETES LISTE(hlList;A la Windows;Rf icne Windows;14) : (Evenement formulaire=Sur libration) ` La liste n'est plus utile. N'oubliez pas de l'effacer ! SUPPRIMER LISTE(hlList;*) : (Evenement formulaire=Sur double clic) ` Il y a eu un double-clic ` Obtenir la position de l'lment slectionn $vllmentPos:=Elements selectionnes(hlList) ` A toutes fins utiles, vrifier la position Si ($vllmentPos # 0) ` Obtenir l'information de l'lment de la liste INFORMATION ELEMENT(hlList;$vllmentPos;$vllmentRef; $vslmentText;$vllmentSousListe; $vblmentDploy) ` Cet lment est-il l'lment d'un Dpartement? Si ($vllmentRef ?? 31) ` Si oui, c'est un double-clic sur un lment Dpartement ALERTE("Vous avez double-cliqu sur l'lment Dpartement " +Caractere(34)+$vslmentText+Caractere(34)+".") Sinon ` Sinon, c'est un double-clic sur un lment Employ. Avec le numro ` de rfrence de l'lment parent, trouver l'enregistrement ` [Dpartements] ALLER A ENREGISTREMENT([Dpartements];Element parent(hlList; $vllmentRef)?-31)

4e Dimension - Langage 1145

` Signaler o l'Employ travaille et de qui il dpend ALERTE("Vous avez double-cliqu sur l'lment Employ "+Caractere(34)+ $vslmentText+Caractere(34)+" qui travaille dans le Dpartement "+Caractere(34)+[Dpartements]Nom+ Caractere(34)+ " dont le responsable est "+Caractere(34)+ [Dpartements]Responsable+Caractere(34)+".") Fin de si Fin de si Fin de cas ` ` ` ` ` Note : 4D peut stocker jusqu' 16 millions d'enregistrements par table (exactement 16 777 215). Cette valeur est 2^24 moins 1. Le numro d'enregistrement tient sur 24 bits. Dans notre exemple, nous utilisons le bit #31 de l'octet suprieur inutilis pour diffrencier les lments des Employs des Dpartements.

Dans cet exemple, il y a une seule raison d'tablir une distinction entre les lments Dpartements et les lments Employs : 1. Nous stockons les numros d'enregistrements dans les numros de rfrence des lments. En consquence, nous avons toutes les chances de rencontrer des lments Dpartements dont les numros de rfrence sont les mmes que ceux des lments Employs. 2. Nous utilisons la commande Element parent pour rcuprer le parent de l'lment slectionn. Si nous cliquons sur un lment Employs dont le numro d'enregistrement associ est 10, et s'il existe aussi un lment Dpartements qui a le numro 10, l'lment Dpartements sera trouv en premier par Element parent quand cette fonction passera la liste en revue pour reprer l'lment avec le numro de rfrence que nous passons. La commande retournera le parent de l'lment Dpartements et non celui de l'lment Employs. C'est pourquoi nous avons choisi des numros de rfrence d'lments uniques, non pas pour des questions de principe, mais parce que nous devions diffrencier les lments de Dpartements et d'Employs.

1146 4e Dimension - Langage

Dans les modes Utilisation et Menus crs, la liste apparatra ainsi :

Note : Cet exemple est utile dans le cadre de la gestion de l'interface utilisateur, si vous manipulez un nombre limit d'enregistrements. Souvenez-vous que les listes sont conserves en mmoire ; donc, ne construisez pas d'interfaces utilisateur exploitant des listes hirarchiques comportant des milliers d'lments. Rfrence CHANGER ELEMENT, CHANGER PROPRIETES ELEMENT, INSERER ELEMENT.

4e Dimension - Langage 1147

INSERER ELEMENT

Listes hirarchiques version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

INSERER ELEMENT (liste; avantElment | *; texteElment; numElment{; sous_Liste{; dploy}}) Paramtre liste avantElment | * texteElment numElment sous_Liste dploy Type RfListe Num | * Alpha Entier long RefList Boolen Description Numro de rfrence de liste Numro de rfrence d'lment ou * pour l'lment de la liste actuellement slectionn Libell du nouvel lment (255 caractres maxi) Numro de rfrence unique du nouvel lment Sous-liste optionnelle rattache au nouvel lment Indique si la sous-liste doit tre dploye ou non

Description La commande INSERER ELEMENT insre un nouvel lment dans la liste dont le numro de rfrence est pass dans liste. Si vous passez * comme deuxime paramtre, le nouvel lment est insr avant l'lment actuellement slectionn dans la liste. Dans ce cas, le nouvel lment devient l'lment actuellement slectionn. Sinon, si vous souhaitez insrer le nouvel lment avant un lment spcifique, passez le numro de rfrence de cet lment comme deuxime paramtre. Dans ce cas, le nouvel lment insr n'est pas automatiquement slectionn. Si le numro que vous passez ne correspond aucun lment de la liste, la commande ne fait rien. Vous passez le texte et le numro de rfrence du nouvel lment dans les paramtres texteElment et numElment. Exemple L'exemple suivant insre un lment (associ aucune sous-liste) juste devant l'lment actuellement slectionn dans la liste hList:

vlUniqueRef:=vlUniqueRef+1 INSERER ELEMENT(hList;*;"Nouvel lment";vlUniqueRef) REDESSINER LISTE(hList)

Rfrence AJOUTER A LISTE.

1148 4e Dimension - Langage

CHANGER PROPRIETES ELEMENT

Listes hirarchiques version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER PROPRIETES ELEMENT (liste; rfElment | *; saisissable; styles; icne{; couleur}) Paramtre liste rfElment | * saisissable styles icne couleur Type RfListe Entier long | * Boolen Numrique Numrique Entier long Description Numro de rfrence de liste Numro de rfrence d'lment ou 0 pour le dernier lment ajout la liste ou * pour llment courant de la liste Vrai = Saisissable, Faux = Non-saisissable Style de police pour l'lment Numro de ressource MacOS 'cicn' ou 65536 + numro de ressource MacOS 'PICT' ou 131072 + numro de rfrence d'image Valeur de couleur RVB ou -1 = rtablir couleur originale

Description La commande CHANGER PROPRIETES ELEMENT modifie l'lment dsign par le paramtre rfElment de la liste dont vous avez pass le numro de rfrence dans liste. Vous pouvez passer un numro de rfrence dans rfElment. Si ce numro ne correspond aucun lment de la liste, la commande ne fait rien. Vous pouvez galement passer 0 dans rfElment afin de demander la modification du dernier lment ajout la liste ( l'aide de AJOUTER A LISTE). Vous pouvez enfin passer * dans rfElment : dans ce cas, la commande sappliquera llment courant de la liste. Si plusieurs lments sont slectionns manuellement, llment courant est celui qui a t slectionn en dernier. Si aucun lment nest slectionn, la commande ne fait rien. Si vous travaillez avec les numros de rfrence des lments, assurez-vous d'utiliser des numros uniques, sinon vous ne pourrez pas diffrencier les lments. Pour plus d'informations sur ce point, reportez-vous la description de la commande AJOUTER A LISTE. Note : Pour changer le libell d'un lment ou de ses sous-listes, utilisez la commande CHANGER ELEMENT.

4e Dimension - Langage 1149

Si vous souhaitez que l'lment soit saisissable, passez Vrai dans le paramtre saisissable, sinon passez Faux. Important : Pour qu'un lment soit saisissable, il doit appartenir une liste elle-mme saisissable. Pour dclarer une liste saisissable, utilisez la commande CHOIX SAISISSABLE. La commande CHANGER PROPRIETES ELEMENT vous permet de dclarer un lment individuel saisissable ou non. La modification de la proprit saisissable au niveau de la liste ne change pas la proprit saisissable individuelle de chaque lment. Un lment ne peut tre saisissable que si la liste et l'lment le sont. Vous pouvez dfinir le style de l'lment dans le paramtre styles. Vous passez une ou une combinaison des constantes prdfinies suivantes (thme Styles de caractres) : Constante Normal Gras Italique Soulign Relief Ombr Condens Etendu Type Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long Valeur 0 1 2 4 8 16 32 64

Note : Sous Windows, seuls les styles Standard ou une combinaison de Gras, Italique et Soulign sont disponibles. En outre, les styles Condens et Ombr ne sont plus pris en charge et sont conservs pour des raisons de compatibilit uniquement. Si vous souhaitez associer une icne l'lment, passez une des valeurs numriques suivantes dans le paramtre icne : N, o N est le numro d'une ressource MacOS 'cicn' Utiliser ressource PICT+N, o N est le numro d'une ressource MacOS 'PICT'. Utiliser rf image+N, o N est le numro de rfrence d'une image stocke dans la bibliothque d'images de 4D, en mode Structure. Si vous ne souhaitez pas associer d'image l'lment, passez 0 (zro) dans icne. Note : Utiliser ressource PICT et Utiliser rf image sont des constantes prdfinies places dans le thme Listes hirarchiques. Le paramtre couleur (facultatif) permet de modifier la couleur du texte de llment. La couleur doit tre dfinie sous forme de couleur RVB, cest--dire un entier long de 4 octets au format 0x00RRVVBB. Pour plus dinformations sur ce format, reportez-vous la description de la commande FIXER COULEURS RVB. Passez -1 dans le paramtre couleur pour rtablir la couleur dorigine de llment.

1150 4e Dimension - Langage

Exemples (1) Reportez-vous l'exemple de la commande AJOUTER A LISTE. (2) Lexemple suivant passe le texte de llment courant de liste en gras et en rouge vif :

CHANGER PROPRIETES ELEMENT(liste;*;Vrai;Gras;0;0x00FF0000) REDESSINER LISTE(liste)

Rfrence CHANGER ELEMENT, LIRE PROPRIETES ELEMENT.

4e Dimension - Langage 1151

LIRE PROPRIETES ELEMENT

Listes hirarchiques version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE PROPRIETES ELEMENT (liste; rfElment | *; saisissable{; styles{; icne{; couleur}}}) Paramtre liste rfElment | * saisissable styles icne couleur Type RfListe Entier long | * Boolen Numrique Numrique Entier long Description Numro de rfrence de liste Numro de rfrence d'lment ou 0 pour le dernier lment ajout la liste ou * pour llment courant de la liste Vrai = Saisissable, Faux = Non-saisissable Style de police de l'lment Numro de ressource MacOS 'cicn' ou 65536 + numro de ressource MacOS 'PICT' ou 131072 + numro de rfrence d'image Valeur de couleur RVB

Description La commande LIRE PROPRIETES ELEMENT retourne les proprits de l'lment dsign par le paramtre rfElment de la liste dont vous avez pass le numro de rfrence dans liste. Vous pouvez passer dans rfElment un numro de rfrence, la valeur 0 afin de dsigner le dernier lment ajout la liste ou encore * afin de dsigner llment courant de la liste. Si plusieurs lments sont slectionns, llment courant est celui qui a t slectionn en dernier. Si vous passez * et qu'aucun lment nest slectionn ou si le numro de rfrence d'lment ne correspond aucun lment de la liste, la commande laisse les paramtres inchangs. Si vous travaillez avec les numros de rfrence des lments, assurez-vous d'utiliser des numros uniques, sinon vous ne pourrez pas diffrencier les lments. Pour plus d'informations sur ce point, reportez-vous la description de la commande AJOUTER A LISTE. Aprs l'appel : saisissable retourne Vrai si l'lment est saisissable. styles retourne le style de caractres de l'lment. icne retourne l'icne ou l'image associe l'lment, et 0 s'il n'y en a pas. couleur retourne la couleur du texte de llment dsign.

1152 4e Dimension - Langage

Pour plus d'informations sur ces proprits, reportez-vous la description de la commande CHANGER PROPRIETES ELEMENT. Rfrence CHANGER ELEMENT, CHANGER PROPRIETES ELEMENT, INFORMATION ELEMENT.

4e Dimension - Langage 1153

Position element liste

Listes hirarchiques version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Position element liste (liste; rfElment) Numrique Paramtre liste rfElment Rsultat Type RfListe Entier long Numrique Description Numro de rfrence de liste Numro de rfrence d'lment Position de l'lment parmi la ou les liste(s) dploye(s)

Description La commande Position element liste retourne la position de l'lment dont vous avez pass le numro de rfrence dans rfElment parmi la liste dont vous avez pass le numro de rfrence dans liste. La position est exprime relativement l'lment suprieur de la liste, en tenant compte de l'tat dploy/contract de la liste et de ses sous-listes. Le rsultat est donc compris entre 1 et la valeur retourne par Nombre elements. Si l'lment n'est pas visible car il est inclus dans une liste contracte, Position element liste dploie la liste correspondante de manire ce que l'lment devienne visible. Si l'lment n'existe pas, Position element liste retourne 0. Rfrence Nombre elements, SELECTIONNER ELEMENT PAR REFERENCE.

1154 4e Dimension - Langage

Element parent

Listes hirarchiques version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Element parent (liste; rfElment | *) Entier long Paramtre liste rfElment | * Rsultat Type RfListe Entier long | * Entier long Description Numro de rfrence de liste Numro de rfrence d'lment ou * pour l'lment courant de la liste Numro de rfrence de l'lment parent ou 0 s'il n'y en a pas

Description La commande Element parent retourne le numro de rfrence de l'lment parent. Vous passez un numro de rfrence de liste dans liste et le numro de rfrence d'un lment de cette liste ou * dans rfElment. Si vous passez *, la commande sapplique llment courant de la liste. Si plusieurs lments sont slectionns, llment courant est celui qui a t slectionn en dernier. En retour, si un lment correspondant existe bien dans la liste et si cet lment se trouve bien dans une sous-liste (et a donc un lment parent), vous rcuprez le numro de rfrence de l'lment parent. S'il n'existe pas d'lment numro rfElment, ou si vous avez pass * et quaucun lment nest slectionn, ou si cet lment n'a pas d'lment parent, Element parent retourne 0 (zro). Si vous travaillez avec les numros de rfrence des lments, assurez-vous d'utiliser des numros uniques, sinon vous ne pourrez pas diffrencier les lments. Pour plus d'informations sur ce point, reportez-vous la description de la commande AJOUTER A LISTE.

4e Dimension - Langage 1155

Exemples Voici une liste hList affiche en mode Utilisation :

Voici les numros de rfrence des lments de cette liste : Elment a a-1 a-2 b b-1 b-2 b-3 Numro 100 101 102 200 201 202 203

Avec le code ci-dessous, si l'lment b-3 est slectionn, la variable $vlParentElmRef prend la valeur 200, c'est--dire le numro de rfrence de l'lment b : $vlElmPos:=Elements selectionnes(hList) INFORMATION ELEMENT(hList;$vlElmPos;$vlElmRef;$vsItemText) $vlParentElmRef:=Element parent(hList;$vlElmRef) ` $vlParentElmRef vaut 200

Si l'lment a-1 tait slectionn, la variable $vlParentElmRef prendrait la valeur 100, c'est--dire le numro de rfrence de l'lment a. Si l'lment a ou b tait slectionn, la variable $vlParentElmRef prendrait la valeur 0 car ces lments n'ont pas d'lment parent. Rfrence CHANGER ELEMENT, INFORMATION ELEMENT, Position element liste, SELECTIONNER ELEMENTS PAR REFERENCE.

1156 4e Dimension - Langage

SUPPRIMER ELEMENT

Listes hirarchiques version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER ELEMENT (liste; lmentRef | *{; *}) Paramtre liste lmentRef | * * Type RfListe Entier long | * Description Numro de rfrence de liste Numro de rfrence d'lment ou * pour l'lment de la liste actuellement slectionn Si spcifi, effacer les sous-listes de la mmoire (le cas chant) Si omis, ne pas effacer les sous-listes

Description La commande SUPPRIMER ELEMENT supprime un lment de la liste dont le numro de rfrence est pass dans le paramtre liste. Si vous passez * comme second paramtre, vous supprimez l'lment actuellement slectionn de la liste. Sinon, vous spcifiez le numro de rfrence de l'lment supprimer. Si le numro ne correspond aucun lment de la liste, la commande ne fait rien. Si vous travaillez avec les numros de rfrence des lments, veillez construire une liste dans laquelle les lments ont des numros de rfrence uniques, sinon vous ne pourrez les diffrencier. Pour plus d'informations sur ce point, reportez-vous la description de la commande AJOUTER A LISTE. Quel que soit l'lment que vous supprimez, vous pouvez passer un troisime paramtre optionnel, *, pour indiquer 4D de supprimer automatiquement de la mmoire la sousliste rattache l'lment, s'il en existe. Si vous ne passez pas ce paramtre, il est prfrable de rcuprer au pralable le numro de rfrence de la sous-liste (ventuelle) rattache l'lment, de manire pouvoir si besoin est supprimer cette sous-liste l'aide de la commande SUPPRIMER LISTE.

4e Dimension - Langage 1157

Exemple L'exemple suivant supprime l'lment slectionn de la liste hList. Si une sous-liste est rattache l'lment, elle est supprime (ainsi que toute sous-sous-liste) :

SUPPRIMER ELEMENT(hList;*;*) ` N'oubliez pas d'appeler REDESSINER LISTE sinon la liste n'est pas mise jour REDESSINER LISTE(hList)

Rfrence INFORMATION ELEMENT, SUPPRIMER LISTE.

1158 4e Dimension - Langage

INFORMATION ELEMENT

Listes hirarchiques version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

INFORMATION ELEMENT (liste; positionElm | *; numElm; textElm{; sous_Liste{; dploy}}) Paramtre liste positionElm | * numElm textElm sous_Liste dploy Type RfListe Numrique | * Entier long Alpha RfListe Boolen Description Numro de rfrence de liste Position de l'lment dans la ou les liste(s) dploye(s) ou * pour llment courant de la liste Numro de rfrence de l'lment Libell de l'lment Numro de rfrence de sous-liste (s'il y en a) Si une sous-liste est rattache l'lment : Vrai = la sous-liste est dploye Faux = la sous-liste est contracte

Description La commande INFORMATION ELEMENT retourne des informations sur l'lment dsign par le paramtre positionElm de la liste dont vous avez pass le numro de rfrence dans liste. La position doit tre exprime relativement l'tat dploy/contract de la liste et de ses sous-listes. Vous devez passer une valeur de position comprise entre 1 et la valeur retourne par Nombre elements. Si vous passez une valeur situe hors de cet intervalle, INFORMATION ELEMENT retourne des valeurs vides (0, "", etc.). Si vous passez * dans positionElm, la commande sapplique llment courant de la liste. Si plusieurs lments sont slectionns manuellement, llment courant est celui qui a t slectionn en dernier. Si aucun lment nest slectionn, la commande retourne des valeurs vides. Aprs l'appel, vous rcuprez : Le numro de rfrence de l'lment dans numElm. Le libell de l'lment dans textElm. Si vous passez les paramtres optionnels sous_Liste et dploy : sous_Liste contient le numro de rfrence de la sous-liste rattache l'lment. Si l'lment n'a pas de sous-liste associe, sous_Liste retourne zro. Si l'lment comporte une sous-liste, dploy retourne Vrai si la sous-liste est dploye, et Faux sinon.

4e Dimension - Langage 1159

Exemples (1) En partant de l'hypothse que hList est une liste dont les lments ont des numros de rfrence uniques, le code suivant inverse automatiquement l'tat dploy/contract de la sous-liste, si elle existe, rattache l'lment slectionn : C_BOOLEEN($vbDploy) C_ENTIER LONG($hSousListe;$vlElemRef) C_ALPHA(31;$vsElemText) `La dclaration de ces variables est ncessaire si vous souhaitez compiler la mthode $vlElemPos:=Elements selectionnes(hList) Si ($vlElemPos>0) INFORMATION ELEMENT(hList;$vlElemPos;$vlElemRef;$vsElemText;$hSousListe; $vbDploy) Si (Liste existante($hSousListe)) CHANGER ELEMENT(hList;$vlElemRef;$vsElemText;$hSousListe; Non($vbDploy)) REDESSINER LISTE(hList) Fin de si Fin de si

(2) Reportez-vous l'exemple de la commande AJOUTER A LISTE. Rfrence CHANGER ELEMENT, CHANGER PROPRIETES ELEMENT, Element parent, Elements selectionnes, LIRE PROPRIETES ELEMENT, Position element liste.

1160 4e Dimension - Langage

CHANGER ELEMENT

Listes hirarchiques version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER ELEMENT (liste; rfElment | *; textElment; nouvelRf{; sous-liste; dploye}) Paramtre liste rfElment | * textElment nouvelRf sous_Liste dploye Type RfListe Entier long | * Alpha Entier long RfListe Boolen Description Numro de rfrence de liste Numro de rfrence d'lment ou 0 pour le dernier lment ajout la liste ou * pour llment courant de la liste Nouveau libell d'lment Nouveau numro de rfrence d'lment Nouvelle sous-liste rattache l'lment ou 0 = pas de sous-liste (dtacher sous-liste courante) ou -1 = pas de changement Indique si la sous-liste doit tre dploye/contracte

Description La commande CHANGER ELEMENT modifie l'lment dsign par le paramtre rfElment de la liste dont vous avez pass le numro de rfrence dans liste. Vous pouvez passer un numro de rfrence dans rfElment. Si ce numro ne correspond aucun lment de la liste, la commande ne fait rien. Vous pouvez galement passer 0 dans rfElment afin de dsigner le dernier lment ajout la liste ( l'aide de AJOUTER A LISTE). Vous pouvez enfin passer * dans rfElment : dans ce cas, la commande sappliquera llment courant de la liste. Si plusieurs lments sont slectionns manuellement, llment courant est celui qui a t slectionn en dernier. Si aucun lment nest slectionn, la commande ne fait rien. Si vous travaillez avec les numros de rfrence des lments, assurez-vous d'utiliser des numros uniques, sinon vous ne pourrez pas diffrencier les lments. Pour plus d'informations sur ce point, reportez-vous la description de la commande AJOUTER A LISTE. Vous pouvez passer le nouveau libell de l'lment dans le paramtre textElment. Si vous souhaitez changer le numro de rfrence de l'lment, passez la nouvelle valeur dans le paramtre nouvelRf, sinon passez la mme valeur que dans rfElment.

4e Dimension - Langage 1161

Si vous voulez associer une sous-liste l'lment, passez le numro de rfrence de la sousliste dans le paramtre sous_Liste. Dans ce cas, vous devez galement spcifier si la nouvelle sous-liste devra apparatre dploye ou contracte en passant respectivement Vrai ou Faux dans le paramtre dploye. Si vous voulez dissocier de l'lment une sous-liste qui lui est actuellement rattache, passez 0 (zro) dans sous_Liste. Dans ce cas, il est conseill d'avoir pralablement obtenu le numro de rfrence de cette liste l'aide de la commande INFORMATION ELEMENT, afin de pouvoir effacer la sous-liste avec la commande SUPPRIMER LISTE si vous n'en avez plus besoin. Si vous ne souhaitez pas modifier les proprits de sous-liste de l'lment, passez -1 dans le paramtre sous_Liste. Exemples (1) Nous supposons que hList est une liste dont les lments ont des numros de rfrence uniques. La mthode objet suivante d'un bouton ajoute une sous-liste l'lment actuellement slectionn dans la liste hList : $vlItemPos:=Elements selectionnes(hList) Si ($vlItemPos>0) INFORMATION ELEMENT(hList;$vlItemPos;$vlItemRef;$vsItemText;$hSouslist; $vbExpanded) $vbNouvSousList:=Non(Liste existante($hSouslist)) Si ($vbNouvSousList) $hSouslist:=Nouvelle liste Fin de si vlUniqueRef:=vlUniqueRef+1 AJOUTER A LISTE($hSousList;"Nouvel lment";vlUniqueRef) Si ($vbNouvSousList) CHANGER ELEMENT(hList;$vlItemRef;$vsItemText;$vlItemRef;$hSouslist;Vrai) Fin de si SELECTIONNER ELEMENTS PAR REFERENCE(hList;vlUniqueRef) REDESSINER LISTE(hList) Fin de si

(2) Reportez-vous l'exemple de la commande INFORMATION ELEMENT. (3) Reportez-vous l'exemple de la commande AJOUTER A LISTE. Rfrence CHANGER PROPRIETES ELEMENT, INFORMATION ELEMENT, LIRE PROPRIETES ELEMENT.

1162 4e Dimension - Langage

Elements selectionnes

Listes hirarchiques version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Elements selectionnes (liste{; tabElments}{; *}) Entier long Paramtre liste tabElments Type RfListe Tab Entier long Description Numro de rfrence de liste Si * omis : Tableau des positions des lments slectionns parmi la ou les liste(s) dploye(s) Si * pass : Tableau des rfrences des lments slectionns parmi la ou les liste(s) dploye(s) Si omis : Position(s) dlment(s) Si pass : Rfrence(s) dlment(s) Si * omis : Position de l'lment slectionn parmi la ou les liste(s) dploye(s) Si * pass : Rfrence de l'lment slectionn

* Rsultat

* Entier long

Description La fonction Elements selectionnes retourne la position ou la rfrence de l'lment slectionn dans la liste dont vous avez pass le numro de rfrence dans le paramtre liste. En cas de slection multiple, la fonction peut galement retourner dans le tableau tabElments la position ou la rfrence de chaque lment slectionn. Cette fonction doit tre applique une liste affiche dans un formulaire afin de dtecter le ou les lment(s) slectionn(s) par l'utilisateur. Le paramtre * permet dindiquer si vous souhaitez travailler avec des positions courantes dlments (dans ce cas, ce paramtre doit tre omis) ou des rfrences absolues dlments (dans ce cas, il doit tre pass). Vous pouvez passer dans le paramtre tabElments un tableau dentiers longs. Si ncessaire, le tableau sera cr et redimensionn par la commande. A lissue de lexcution de la commande, tabElments contiendra : la position de chaque lment slectionn parmi la ou les liste(s) dploye(s) si le paramtre * est omis. la rfrence absolue de chaque lment slectionn si le paramtre * est pass. Le tableau est retourn vide si aucun lment nest slectionn.

4e Dimension - Langage 1163

Note : En cas de slection multiple, la commande retourne la position ou la rfrence de llment courant de liste. Llment courant est le dernier lment sur lequel lutilisateur a cliqu (slection manuelle) ou llment dsign par la commande SELECTIONNER ELEMENTS PAR POSITION ou SELECTIONNER ELEMENTS PAR REFERENCE (slection par programmation). Si la liste comporte des sous-listes, appliquez la fonction la liste principale (celle qui est associe au formulaire), et non une de ses sous-listes. Les positions sont exprimes relativement l'lment suprieur de la liste principale, en tenant compte de l'tat courant dploy/contract de la liste et de ses sous-listes. Dans tous les cas, si aucun lment n'est slectionn, la fonction retourne 0. Exemple Voici la liste hList telle qu'elle apparat en mode Utilisation :

$vlItemPos:=Elements selectionnes(hList) ` ce stade, $vlItemPos vaut 2

$vlItemPos:=Elements selectionnes(hList) ` ce stade, $vlItemPos vaut 4 $vlItemRef:=Elements selectionnes(hList;*) ` $vlItemRef vaut 200 (par exemple)

1164 4e Dimension - Langage

$vlItemPos:=Elements selectionnes(hList) ` ce stade, $vlItemPos vaut 8 $vlItemRef:=Elements selectionnes(hList;*) ` $vlItemRef vaut 203 (par exemple)

$vlItemPos:=Elements selectionnes(hList;$tabPos) ` ce stade, $vlItemPos vaut 3 ` $tabPos{1} vaut 3, $tabPos{2} vaut 4 et $tabPos{3} vaut 5

$vlItemRef:=Elements selectionnes(hList;$tabRefs;*) ` $vlItemRef vaut 203 (par exemple) ` $tabRefs{1} vaut 101, $tabRefs{2} vaut 203 (par exemple)

Rfrence SELECTIONNER ELEMENTS PAR POSITION, SELECTIONNER ELEMENTS PAR REFERENCE.

4e Dimension - Langage 1165

SELECTIONNER ELEMENTS PAR POSITION

Listes hirarchiques version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SELECTIONNER ELEMENTS PAR POSITION (liste; positionElm{; tabPositions}) Paramtre liste positionElm tabPositions Type RfListe Numrique Tab numrique Description Numro de rfrence de liste Position de l'lment dans la ou les liste(s) dploye(s) Tableau de positions dans la ou les liste(s) dploye(s)

Description La commande SELECTIONNER ELEMENTS PAR POSITION slectionne le ou les lment(s) dont vous avez pass la position dans positionElm et, facultativement, dans tabPositions, l'intrieur de la liste dont vous avez pass le numro de rfrence dans liste. La position des lments est toujours exprime en tenant compte de l'tat dploy/contract de la liste et de ses sous-listes. Passez des positions comprises entre 1 et la valeur retourne par Nombre elements. Si vous passez une valeur situe en-dehors de cet intervalle, aucun lment n'est slectionn. Si vous ne passez pas le paramtre tabPositions, le paramtre positionElm reprsente la position de l'lment slectionner. Le paramtre facultatif tabPositions permet de slectionner simultanment plusieurs lments au sein de la liste. Vous devez passer dans tabPositions un tableau dont chaque ligne indique la position dun lment slectionner. Lorsque vous passez ce paramtre, llment dsign par le paramtre positionElm dsigne parmi la slection rsultante le nouvel lment courant de la liste. Il peut appartenir ou non lensemble dlments dfinis par le tableau. Llment courant est notamment celui qui passe en mode dition si la commande EDITER ELEMENT est utilise. Note : Pour que plusieurs lments puissent tre slectionns simultanment dans une liste hirarchique (manuellement ou par programmation), la proprit multiSlection doit avoir t active pour cette liste. Cette proprit est dfinie via la commande CHANGER PROPRIETES LISTE.

1166 4e Dimension - Langage

Exemples Soit une liste hirarchique nomme hList affiche en mode Utilisation :

(1) Aprs l'excution des lignes de code suivantes :

SELECTIONNER ELEMENTS PAR POSITION(hList;Nombre elements(hList)) REDESSINER LISTE(hList) ` impratif sinon la liste ne sera pas mise jour

... le dernier lment visible est slectionn :

(2) Aprs l'excution des lignes de code suivantes : CHANGER PROPRIETES LISTE(hList;0;0;18;0;1) `Il est impratif de passer 1 en dernier paramtre pour autoriser les multi-slections TABLEAU ENTIER LONG($tab;3) $tab{1}:=2 $tab{2}:=3 $tab{3}:=5 SELECTIONNER ELEMENTS PAR POSITION(hList;3;$tab) `Le 3e lment est dsign comme lment courant REDESSINER LISTE(hList)

4e Dimension - Langage 1167

... les 2e, 3e et 5e lments de la liste hirarchique sont slectionns :

Rfrence Elements selectionnes, SELECTIONNER ELEMENTS PAR REFERENCE.

1168 4e Dimension - Langage

SELECTIONNER ELEMENTS PAR REFERENCE

Listes hirarchiques version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SELECTIONNER ELEMENTS PAR REFERENCE (liste; rfElment{; tabRfs}) Paramtre liste rfElment tabRfs Type RfListe Entier long Tab entier long Description Numro de rfrence de liste Numro de rfrence d'lment Tableau de numros de rfrence dlments

Description La commande SELECTIONNER ELEMENTS PAR REFERENCE slectionne le ou les lment(s) dont vous avez pass le numro de rfrence dans rfElment et, facultativement, dans tabRfs, parmi la liste dont vous avez pass la rfrence dans liste. Si un lment n'est pas visible (car il est par exemple inclus dans une liste contracte), SELECTIONNER ELEMENTS PAR REFERENCE dploie la ou les sous-liste(s) correspondante(s) de manire ce qu'il devienne visible. Si vous ne passez pas le paramtre tabRfs, le paramtre rfElment reprsente la rfrence de l'lment slectionner. Si le numro d'lment ne correspond aucun lment de la liste, la commande ne fait rien. Le paramtre facultatif tabRfs permet de slectionner simultanment plusieurs lments au sein de la liste. Vous devez passer dans tabRfs un tableau dont chaque ligne indique la rfrence absolue dun lment slectionner. Dans ce cas, llment dsign par le paramtre refElm dsigne parmi la slection rsultante le nouvel lment courant de la liste. Il peut appartenir ou non lensemble dlments dfinis par le tableau. Llment courant est notamment celui qui passe en mode dition si la commande EDITER ELEMENT est utilise. Note : Pour que plusieurs lments puissent tre slectionns simultanment dans une liste hirarchique (manuellement ou par programmation), la proprit multiSlection doit avoir t active pour cette liste. Cette proprit est dfinie via la commande CHANGER PROPRIETES LISTE. Lorsque vous travaillez avec les numros de rfrence des lments, assurez-vous d'utiliser des numros uniques, sinon vous ne pourrez pas diffrencier les lments. Pour plus d'informations sur ce point, reportez-vous la description de la commande AJOUTER A LISTE.

4e Dimension - Langage 1169

Exemple En supposant que hList est une liste dont les lments ont des numros de rfrence uniques, la mthode objet de bouton suivante slectionne l'lment parent (s'il existe) de l'lment actuellement slectionn : ` Rcuprer la position de l'lment slectionn $vlElmPos:=Elements selectionnes(hList) ` Numro de rfrence de cet lment INFORMATION ELEMENT(hList;$vlElmPos;$vlElmRef;$vsElmText) ` Numro de l'lment parent (s'il existe) $vlParentElmRef:=Element parent(hList;$vlElmRef) Si ($vlParentElmRef>0) ` Slection de l'lment parent SELECTIONNER ELEMENTS PAR REFERENCE(hList;Element parent(hList; $vlElmRef)) REDESSINER LISTE(hList) ` Ne pas oublier de redessiner la liste pour la mettre jour Fin de si

Rfrence Elements selectionnes, SELECTIONNER ELEMENTS PAR POSITION.

1170 4e Dimension - Langage

39 ________________________ Menus

4e Dimension - Langage 1171

1172 4e Dimension - Langage

Gestion des menus

Menus version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Terminologie : La documentation sur les commandes de menus emploie indiffremment commande de menu et ligne de menu lorsqu'elle voque une ligne d'un menu. Barres de menus
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Chaque barre de menus est identifie par un numro et par un nom. La premire barre de menus (automatiquement cre par 4e Dimension) porte le numro 1 et est nomme par dfaut "Barre n1". Pour pouvoir renommer une barre de menus, cliquez sur son nom dans l'diteur de menus en maintenant la touche Ctrl (Windows) ou Commande (MacOS). Le nom dune barre de menus peut contenir jusqu 31 caractres et doit tre unique. La barre n1 est aussi la barre de menus utilise par dfaut. Si vous souhaitez ouvrir une application avec une barre de menus autre que la barre n1, vous devez appeler la commande CHANGER BARRE dans la Mthode base Sur ouverture. Chaque commande de menu peut tre associe une mthode projet ou une action standard. Si vous n'affectez pas de mthode ni d'action standard une commande de menu, la slection de cette commande de menu provoque la sortie du mode Menus crs et le passage en mode Utilisation. Si l'utilisateur exploite une application en menus crs uniquement ou ne dispose pas des privilges d'accs pour le mode Utilisation, cela provoquera la fermeture de l'application. Les actions standard permettent d'effectuer diverses oprations courantes lies aux fonctions systme (copier, quitter, etc.) ou de base de donnes 4D (ajouter enregistrement, tout slectionner, etc.). Vous pouvez associer la fois une action standard et une mthode projet une commande de menu. Dans ce cas, laction standard nest jamais excute ; toutefois, 4e Dimension utilise cette action pour activer/inactiver la commande de menu en fonction du contexte. Lorsquune commande de menu est inactive, la mthode projet associe ne peut tre excute. Chaque barre de menus comporte par dfaut trois menus Fichier, Edition et Mode. Le menu Fichier ne contient qu'une commande de menu : Quitter. L'action standard Quitter lui est associe. Cette action affiche une bote de dialogue de confirmation Etesvous certain ? puis quitte lapplication 4D en cas de validation. Dans le cas contraire, lopration est annule. Note : Sous MacOS X, la commande de menu cr associe laction Quitter est automatiquement place dans le menu de lapplication, lorsque la base est excute sur ce systme.

4e Dimension - Langage 1173

Vous pouvez renommer le menu Fichier, lui ajouter des commandes de menu ou le garder tel quel. Il est recommand de toujours garder la commande de menu Quitter comme dernire commande du menu Fichier. Le menu Edition contient les commandes de menu d'dition standard. A chaque commande de ce menu est associe une action standard (Annuler, Couper, Copier, etc.). Vous pouvez ajouter des commandes ce menu ou utiliser vos propres mthodes de gestion des actions d'dition. Le menu Mode contient par dfaut les commandes Structure, Utilisation et Menus crs. Ces commandes permettent daccder aux diffrents environnements de 4D partir du mode Menus crs. Note : 4e Dimension gre automatiquement les menus systme Aide, Pomme (MacOS) et application (MacOS X). Ces menus ne peuvent pas tre modifis, hormis pour la commande A propos de 4e Dimension, qui peut tre gre l'aide de la commande APPELER SUR A PROPOS. Important : Les barres de menus sont "interprocess". Toute modification effectue sur une barre sera rpercute dans tous les process o la barre est utilise. Numros des menus et des commandes de menu
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Comme les barres de menus, les menus sont numrots. Le menu Fichier est le menu 1. Les autres menus sont numrots squentiellement de gauche droite (2, 3, 4, etc.). La numrotation des menus est importante lorsque vous travaillez, par exemple, avec la fonction Menu choisi. Lorsqu'un menu est associ un formulaire, le principe de numrotation est diffrent. Le premier menu ajout commence avec le numro 2049. Pour rfrencer un menu associ un formulaire, ajoutez 2048 au numro initial du menu. Les commandes de chacun des menus sont numrotes squentiellement de haut en bas. La commande suprieure a le numro 1. Les barres de menus associes
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez associer une barre de menus un formulaire dans les Proprits du formulaire (page Gnral). Ce type de barre est appel "barre de menus de formulaire" dans cette section. Les menus d'une barre de menus de formulaire sont ajouts la barre de menus courante lorsque le formulaire est affich. Les menus sont ajouts pour les formulaires entre dans les modes Utilisation et Menus crs ainsi que pour les formulaires de sortie dans le mode Menus crs.

1174 4e Dimension - Langage

Les barres de menus de formulaires sont rfrences par un numro et un nom. Si le numro ou le nom de la barre de menus affiche avec le formulaire courant est le mme que celui de la barre de menus associe au formulaire, cette dernire ne s'affiche pas. Par dfaut, lorsqu'un formulaire est affich avec une barre de menus personnalise, les commandes de la barre de menus courante sont inactives, c'est--dire que leur slection est sans effet. Vous pouvez modifier ce fonctionnement en cochant l'option Barre de menus active dans les Proprits du formulaire : dans ce cas, les commandes de la barre de menus courante restent utilisables. Dans tous les cas, la slection d'une commande de menu provoque l'envoi d'un vnement Sur menu slectionn la mthode formulaire ; vous pouvez alors utiliser la commande Menu choisi pour tester le menu slectionn. Modifier des commandes de menu par programmation
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension fournit les commandes suivantes pour ajouter, supprimer, insrer ou modifier des commandes d'un menu de la barre affiche ou installe dans un process : ACTIVER LIGNE MENU INACTIVER LIGNE MENU CHANGER TEXTE LIGNE MENU CHANGER STYLE LIGNE MENU MARQUER LIGNE MENU CHANGER RACCOURCI CLAVIER AJOUTER LIGNE MENU INSERER LIGNE MENU SUPPRIMER LIGNE MENU

L'aire d'action de ces commandes est la barre de menus courante. Ds que vous appelez une nouvelle fois CHANGER BARRE, tous les menus et les commandes de menus retrouveront leur tat originel tel qu'il est dfini dans l'diteur de barres de menus du mode Structure. Vous devez passer chacune de ces commandes un numro de menu et un numro de commande. Comme expliqu plus haut, les menus sont numrots de 1 N de gauche droite. Par exemple, le menu Fichier est gnralement le premier menu. Les menus Pomme (MacOS) et Application (MacOS X) sont exclus de cette numrotation. Sur toutes les plates-formes, le menu Aide est galement exclu. Il est noter que la commande Nombre de menus ne tient pas compte de ces menus. Si, par exemple, votre barre de menus est constitue des menus Fichier, Edition, Clients, Factures et Aide, Nombre de menus retournera 4 (en ignorant les menus systme maintenus par 4D). Les commandes de menus sont numrotes de 1 N de haut en bas, y compris les sparateurs.

4e Dimension - Langage 1175

Les menus insrs dans la barre de menus au moyen d'une barre de menus associe un formulaire (et donc ajoute la barre de menus courante) sont numrots de gauche droite et commencent par le numro 2049 (2048 + 1 N). La commande Menu choisi retourne les numros de menus et de commandes en respectant cette convention. Important : Ces commandes n'ont pas accs aux menus systme. Menus connects : Les menus peuvent tre connects des barres de menu. Si un menu connect est modifi l'aide d'une de ces commandes, chacune des instances de ce menu refltera ces modifications. Pour plus d'informations sur ce point, reportez-vous au manuel Mode Structure de 4e Dimension.

1176 4e Dimension - Langage

CHANGER BARRE

Menus version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER BARRE (barre{; process}{; *}) Paramtre barre process * Type Numrique | Alpha Numrique Description Numro ou nom de la barre de menus Numro de rfrence du process Conserver l'tat de la barre de menus

Description La commande CHANGER BARRE remplace la barre de menus courante par la barre de menus barre, pour le process en cours uniquement. Vous pouvez passer dans le paramtre barre soit le numro soit le nom de la nouvelle barre. Note : Le nom dune barre de menus peut contenir jusqu 31 caractres et doit tre unique. Si vous passez le paramtre optionnel process, c'est la barre de menus du process spcifi qui sera remplace par la barre. Le paramtre optionnel * vous permet de conserver l'tat de la barre de menus. Si ce paramtre est omis, CHANGER BARRE rinitialise la barre de menus lors de l'excution de la commande. Imaginez, par exemple, que l'instruction CHANGER BARRE(1) soit excute. Ensuite, plusieurs commandes de menu sont dsactives l'aide de la commande INACTIVER LIGNE. Si CHANGER BARRE(1) est excute une seconde fois, soit partir du mme process, soit partir d'un autre process, toutes les commandes de menu retournent leur tat d'activation initial. Si CHANGER BARRE(1;*) est excute, la barre de menus conservera son tat prcdent, les commandes de menu qui taient inactives le resteront. Note : Si vous ne passez pas le paramtre optionnel process, * peut tre le second paramtre. Autrement dit, CHANGER BARRE(1;2;*) et CHANGER BARRE(1;*) sont deux syntaxes valides. Lorsqu'un utilisateur arrive en mode Menus crs, la premire barre de menus s'affiche (Barre n 1). Vous pouvez changer cette barre de menus par dfaut en spcifiant la barre que vous voulez dans la Mthode base Sur ouverture, ou dans la mthode de dmarrage associe un utilisateur.

4e Dimension - Langage 1177

Exemples (1) L'exemple suivant remplace la barre de menus courante par la barre de menus n 3 et initialise l'tat des commandes des menus :

CHANGER BARRE (3)

(2) L'exemple suivant remplace la barre de menus courante par la barre de menus nomme BarreForm1 et conserve l'tat des commandes des menus : celles qui taient prcdemment inactives apparatront inactives :

CHANGER BARRE ("BarreForm1";*)

(3) L'exemple suivant remplace la barre de menus courante par la barre de menus n 3 pendant que des enregistrements sont en cours de modification. Une fois les enregistrements modifis, la barre de menus n 2 est raffiche. L'tat des commandes de ce menu est conserv :

CHANGER BARRE(3) ` Dfinir la barre de menus n 3 pour le formulaire suivant TOUT SELECTIONNER([Clients]) MODIFIER SELECTION([Clients]) ` Afficher la slection CHANGER BARRE(2;*) ` Aprs modification, retour la barre de menus n 2

Rfrence Gestion des menus.

1178 4e Dimension - Langage

CACHER BARRE DE MENUS

Menus version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CACHER BARRE DE MENUS Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande CACHER BARRE DE MENUS rend invisible la barre de menus. Si la barre de menus tait dj cache, la commande est sans effet. Exemple La mthode suivante passe un enregistrement en plein cran (sous MacOS) jusqu' ce que l'utilisateur clique avec le bouton de la souris :

CACHER BARRE OUTILS CACHER BARRE DE MENUS Creer fenetre (-1;-1;1 + Largeur ecran; 1 + Hauteur ecran ; Autre bote de dialogue modale) FORMULAIRE ENTREE([Tableaux];"Plein cran 800") AFFICHER ENREGISTREMENT([Tableaux]) Repeter POSITION SOURIS($vlX;$vlY;$vlBouton) Jusque($vlBouton#0) FERMER FENETRE AFFICHER BARRE DE MENUS AFFICHER BARRE OUTILS

Note : Sous Windows, la taille de la fentre sera limite par celle de la fentre de l'application. Rfrence AFFICHER BARRE DE MENUS, AFFICHER BARRE OUTILS, CACHER BARRE OUTILS.

4e Dimension - Langage 1179

AFFICHER BARRE DE MENUS

Menus version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

AFFICHER BARRE DE MENUS Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande AFFICHER BARRE DE MENUS rend visible la barre de menus. Si la barre de menus tait dj visible, cette commande ne fait rien. Exemple Reportez-vous l'exemple de la commande CACHER BARRE DE MENUS. Rfrence AFFICHER BARRE OUTILS, CACHER BARRE DE MENUS, CACHER BARRE OUTILS.

1180 4e Dimension - Langage

APPELER SUR A PROPOS

Menus version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

APPELER SUR A PROPOS (libellLigne; mthode) Paramtre libellLigne mthode Type Alpha Alpha Description Nouvelle ligne de menu A propos... Mthode excuter lorsque la ligne est choisie

Description La commande APPELER SUR A PROPOS remplace la ligne de menu A propos de 4e Dimension du menu Aide (sous Windows), du menu Pomme (sous MacOS) ou du menu Application (MacOS X) par libellLigne. Aprs l'appel de cette commande, lorsqu'un utilisateur slectionne la ligne de menu, la mthode mthode est appele. Typiquement, cette mthode affiche une bote de dialogue qui fournit des informations sur les versions de votre base. L'icne et le numro de version de 4e Dimension ainsi qu'une ligne de copyrights seront affichs en haut de la bote de dialogue. Exemples (1) L'exemple suivant remplace la commande de menu A propos par la commande de menu A propos du programmateur. La mthode A PROPOS affiche une fentre d'A propos personnalise :

APPELER SUR A PROPOS("A propos du programmateur";"A PROPOS")

(2) L'exemple suivant rinitialise la commande de menu d'A propos de 4e Dimension :

APPELER SUR A PROPOS("A propos de 4e Dimension";"")

4e Dimension - Langage 1181

Menu choisi

Menus version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Menu choisi Numrique Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Numrique Commande de menu slectionne Mot machine haut = n de menu Mot machine bas = n de commande de menu

Description Menu choisi ne s'utilise que lorsqu'un formulaire est affich. Cette fonction dtecte la commande de menu choisie dans un menu. Astuce : A chaque fois que cela est possible, utilisez des mthodes associes des commandes de menus dans une barre associe (avec un numro de barre ngatif) plutt que d'appeler Menu choisi. Les barres de menus associes sont plus faciles grer, puisqu'il n'est pas ncessaire de tester leur slection. Cependant, si vous utilisez les commandes AJOUTER LIGNE MENU ou INSERER LIGNE MENU, vous devez utiliser Menu choisi car les lignes de menus cres de cette manire ne sont associes aucune mthode. Menu choisi retourne le numro systme du menu slectionn sous forme d'Entier long. Pour obtenir le numro du menu, divisez Menu choisi par 65536 et convertissez le rsultat en Entier. Pour obtenir le numro de la commande de menu, calculez le modulo de Menu choisi avec le coefficient 65536. Utilisez les formules suivantes pour calculer le numro du menu et de la commande de menu :

Menu := Menu choisi \ 65536 Ligne de menu := Menu choisi % 65536

A partir de la version 6 de 4D, vous pouvez galement extraire ces valeurs l'aide des Oprateurs sur les bits, comme dans l'exemple suivant :

Menu := (Menu choisi & 0xFFFF0000) >> 16 Ligne de menu := Menu choisi & 0xFFFF

Menu choisi retourne 0 si aucune commande de menu n'est slectionne.

1182 4e Dimension - Langage

Exemple La mthode formulaire suivante utilise la fonction Menu choisi pour fournir les arguments "menu" et "ligne de menu" MARQUER LIGNE : Au cas ou : (Evenement formulaire=Sur menu slectionn) Si (Menu choisi # 0) MARQUER LIGNE MENU (Menu choisi \ 65536 ; Menu choisi % 65536; Caractere (18)) Fin de si Fin de cas

Rfrence Gestion des menus.

4e Dimension - Langage 1183

Nombre de menus

Menus version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nombre de menus {(process)} Numrique Paramtre process Rsultat Type Numrique Numrique Description Numro de rfrence de process Nombre de menus de la barre de menus courante

Description La commande Nombre de menus retourne le nombre de menus prsents dans la barre de menus. Si vous omettez le paramtre process, Nombre de menus s'applique la barre de menus du process courant. Sinon, Nombre de menus s'applique la barre de menus du process dont vous avez pass le numro dans process. Rfrence Nombre de lignes de menu.

1184 4e Dimension - Langage

Nombre de lignes de menu

Menus version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nombre de lignes de menu (menu{; process}) Numrique Paramtre menu process Rsultat Type Numrique Numrique Numrique Description Numro de menu Numro de rfrence de process Nombre de lignes du menu

Description La commande Nombre de lignes de menu retourne le nombre de lignes (commandes) de menus prsentes dans le menu dont vous avez pass le numro dans menu. Si vous omettez le paramtre process, Nombre de lignes de menu s'applique la barre de menus du process courant. Sinon, Nombre de lignes de menu s'applique la barre de menus du process dont vous avez pass le numro dans process. Rfrence Nombre de menus.

4e Dimension - Langage 1185

Titre menu

Menus version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Titre menu (menu{; process}) Alpha Paramtre menu process Rsultat Type Numrique Numrique Alpha Description Numro de menu Numro de rfrence de process Titre du menu

Description La commande Titre menu retourne le titre du menu dont vous avez pass le numro dans menu. Si vous omettez le paramtre process, Titre menu s'applique la barre de menus du process courant. Sinon, Titre menu s'applique la barre de menus du process dont vous avez pass le numro dans process. Rfrence Nombre de menus.

1186 4e Dimension - Langage

Texte ligne menu

Menus version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Texte ligne menu (menu; ligneMenu{; process}) Alpha Paramtre menu ligneMenu process Rsultat Type Numrique Numrique Numrique Alpha Description Numro de menu Numro de ligne de menu Numro de rfrence de process Libell de la ligne de menu

Description La commande Texte ligne menu retourne le libell de la commande de menu dont les numros de menu et de commande ont t passs dans menu et cmdMenu. Si vous ne passez pas le paramtre process, Texte ligne menu est applique la barre de menus du process courant. Sinon Texte ligne menu est applique la barre de menus du process dont la rfrence est passe dans process. Rfrence CHANGER TEXTE LIGNE MENU, Raccourci clavier.

4e Dimension - Langage 1187

CHANGER TEXTE LIGNE MENU

Menus version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER TEXTE LIGNE MENU (menu; ligneMenu; texteLigne{; process}) Paramtre menu ligneMenu texteLigne process Type Numrique Numrique Alpha Numrique Description Numro de menu Numro de ligne de menu Nouveau libell de la ligne de menu Numro de rfrence de process

Description La commande CHANGER TEXTE LIGNE MENU remplace le libell de la ligne de menu, dont vous avez pass les numros de menu et de ligne dans menu et ligneMenu, par le libell que vous avez pass dans texteLigne. Si vous omettez le paramtre process, CHANGER TEXTE LIGNE MENU s'applique la barre de menus du process courant. Sinon, CHANGER TEXTE LIGNE MENU s'applique la barre de menus du process dont vous avez pass le numro dans process. Rfrence CHANGER RACCOURCI CLAVIER, Texte ligne menu.

1188 4e Dimension - Langage

Style ligne menu

Menus version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Style ligne menu (menu; ligneMenu{; process}) Numrique Paramtre menu ligneMenu process Rsultat Type Numrique Numrique Numrique Numrique Description Numro de menu Numro de ligne de menu Numro de rfrence de process Style courant de la ligne de menu

Description La commande Style ligne menu retourne le style de police de la ligne de menu dont vous avez pass les numros de menu et de commande dans menu et ligneMenu. Si vous omettez le paramtre process, Style ligne menu s'applique la barre de menus du process courant. Sinon, Style ligne menu s'applique la barre de menus du process dont vous avez pass le numro dans process. Style ligne menu retourne une combinaison (une ou une somme) des constantes prdfinies suivantes : Constante Standard Gras Italique Soulign Contours Ombr Condens Etendu Type Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long Valeur 0 1 2 4 8 16 32 64

Note : Sous Windows, seuls les styles Standard ou une combinaison de Gras, Italique et Soulign sont disponibles.

4e Dimension - Langage 1189

Exemple Si, par exemple, vous voulez tester si une ligne de menu est affiche en gras, vous crivez :

Si ((Style ligne menu($vlMenu;$vlItem) & Gras)#0) `... Fin de si

Rfrence CHANGER STYLE LIGNE MENU.

1190 4e Dimension - Langage

CHANGER STYLE LIGNE MENU

Menus version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER STYLE LIGNE MENU (menu; ligneMenu; styleLigne{; process}) Paramtre menu ligneMenu styleLigne process Type Numrique Numrique Numrique Numrique Description Numro de menu Numro de ligne de menu Nouveau style de la ligne de menu Numro de rfrence du process

Description La commande CHANGER STYLE LIGNE MENU remplace le style de police de la ligne de menu, dont vous avez pass les numros de menu et de commande dans menu et ligneMenu, par le style de police que vous avez pass dans styleLigne. Si vous omettez le paramtre process, CHANGER STYLE LIGNE MENU s'applique la barre de menus du process courant. Sinon, CHANGER STYLE LIGNE MENU s'applique la barre de menus du process dont vous avez pass le numro dans process. Vous pouvez dfinir le style de l'lment dans le paramtre styleLigne. Vous passez une ou une combinaison des constantes prdfinies suivantes : Constante Standard Gras Italique Soulign Contours Ombr Condens Etendu Type Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long Valeur 0 1 2 4 8 16 32 64

Note : Sous Windows, seuls les styles Standard ou une combinaison de Gras, Italique et Soulign sont disponibles. Rfrence Style ligne menu.

4e Dimension - Langage 1191

Marque ligne menu

Menus version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Marque ligne menu (menu; ligneMenu{; process}) Alpha Paramtre menu ligneMenu process Rsultat Type Numrique Numrique Numrique Alpha Description Numro de menu Numro de ligne de menu Numro de rfrence de process Marque de ligne de menu courante

Description La commande Marque ligne menu retourne la marque (ou "coche") de la ligne de menu dont vous avez pass le numro de menu et de ligne dans menu et ligneMenu. Si vous omettez le paramtre process, Marque ligne menu s'applique la barre de menus du process courant. Sinon, Marque ligne menu s'applique la barre de menus du process dont vous avez pass le numro dans process. Si la ligne de menu n'a pas de marque, Marque ligne menu retourne une chane vide. Note : Pour plus d'informations sur les marques des lignes de menus sous MacOS et Windows, reportez-vous la description de la commande MARQUER LIGNE MENU. Exemple L'exemple suivant inverse l'tat marqu d'une ligne de menu :

MARQUER LIGNE MENU($vlMenu;$vlItem;Caractere(18)*Num (Marque ligne menu($vlMenu;$vlItem)=""))

Rfrence MARQUER LIGNE MENU.

1192 4e Dimension - Langage

MARQUER LIGNE MENU

Menus version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

MARQUER LIGNE MENU (menu; ligneMenu; marque{; process}) Paramtre menu ligneMenu marque process Type Numrique Numrique Alpha Numrique Description Numro de menu Numro de ligne de menu Nouvelle marque de ligne de menu Numro de rfrence du process

Description La commande MARQUER LIGNE MENU remplace la marque (ou "coche") de la ligne de menu dont vous avez pass le numro de menu et de ligne dans menu et ligneMenu par le premier caractre de la chane que vous avez passe dans marque (sous MacOS) ou par la coche standard (sous Windows). Si vous omettez le paramtre process, MARQUER LIGNE MENU s'applique la barre de menus du process courant. Sinon, MARQUER LIGNE MENU s'applique la barre de menus du process dont vous avez pass le numro dans process. Si vous passez une chane vide dans marque, vous supprimez toute marque de la ligne de menu. Sinon : Sous MacOS, le premier caractre de la chane devient la marque de la ligne de menu (gnralement, le Caractere (18)), qui est la coche standard de MacOS, est utilise. Sous Windows, la marque standard de Windows est associe au menu. Exemple Reportez-vous l'exemple de la commande Marque ligne menu. Rfrence Marque ligne menu.

4e Dimension - Langage 1193

Raccourci clavier

Menus version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Raccourci clavier (menu; ligneMenu{; process}) Numrique Paramtre menu ligneMenu process Rsultat Type Numrique Numrique Numrique Numrique Description Numro de menu Numro de la ligne de menu Numro de rfrence de process Code ASCII du raccourci de la ligne de menu

Description La commande Raccourci clavier retourne le code ASCII de la touche Ctrl (sous Windows) ou Commande (MacOS) utilise comme raccourci clavier pour la commande de menu dont les numros de menu et de commande ont t passs dans menu et ligneMenu. Si vous ne passez pas le paramtre process, Raccourci clavier est applique la barre de menus du process courant. Sinon, Raccourci clavier est applique la barre de menus du process dont la rfrence est passe dans process. Si la commande de menus n'a pas d'quivalent clavier, Raccourci clavier retourne 0 (zro). Rfrence CHANGER RACCOURCI CLAVIER.

1194 4e Dimension - Langage

CHANGER RACCOURCI CLAVIER

Menus version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER RACCOURCI CLAVIER (menu; cmdeMenu; touche{; process}) Paramtre menu cmdeMenu touche process Type Numrique Numrique Numrique Numrique Description Numro du menu Numro de commande (ligne) de menu Code ASCII du nouvel quivalent clavier Numro de rfrence du process

Description La commande CHANGER RACCOURCI CLAVIER remplace la touches Ctrl (Windows) ou Commande (Macintosh) utilise dans le raccourci clavier de la commande de menu dont vous avez pass les numros de menu et de commande dans menu et cmdeMenu, par le caractre dont vous avez pass le code ASCII dans touche. Si vous ne passez pas le paramtre process, CHANGER RACCOURCI CLAVIER est applique la barre de menus du process courant. Sinon, CHANGER RACCOURCI CLAVIER est applique la barre de menus du process dont la rfrence est passe dans process. Si vous passez 0 (zro) dans touche, l'quivalent clavier de la commande de menu est supprim. Note : Afin de soigner l'ergonomie de votre interface, utilisez des caractres majuscules, des chiffres ou des symboles qui sont accessibles au clavier sans avoir recours des "modifiers" autres que les touches Ctrl (Windows) et Commande (MacOS). Rfrence Raccourci clavier.

4e Dimension - Langage 1195

INACTIVER LIGNE MENU

Menus version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

INACTIVER LIGNE MENU (menu; ligneMenu{; process}) Paramtre menu ligneMenu process Type Numrique Numrique Numrique Description Numro de menu Numro de ligne (commande) de menu Numro de rfrence du process

Description INACTIVER LIGNE MENU dsactive la commande de menu dont vous avez pass le numro de menu et de ligne dans menu et ligneMenu. Si vous omettez le paramtre process, INACTIVER LIGNE MENU s'applique la barre de menus du process courant. Sinon, INACTIVER LIGNE MENU s'applique la barre de menus du process dont vous avez pass le numro dans process. Astuce : Pour activer/inactiver toutes les lignes de menus en une fois, passez 0 (zro) dans ligneMenu. Rfrence ACTIVER LIGNE MENU.

1196 4e Dimension - Langage

ACTIVER LIGNE MENU

Menus version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ACTIVER LIGNE MENU (menu; ligneMenu{; process}) Paramtre menu ligneMenu process Type Numrique Numrique Numrique Description Numro de menu Numro de commande (ligne) de menu Numro de rfrence du process

Description ACTIVER LIGNE MENU active la commande de menu dont vous avez pass le numro de menu et de ligne dans menu et ligneMenu. Si vous omettez le paramtre process, ACTIVER LIGNE MENU s'applique la barre de menus du process courant. Sinon, ACTIVER LIGNE MENU s'applique la barre de menus du process dont vous avez pass le numro dans process. Astuce : Pour activer/inactiver toutes les lignes de menus en une fois, passez 0 (zro) dans ligneMenu. Rfrence INACTIVER LIGNE MENU.

4e Dimension - Langage 1197

AJOUTER LIGNE MENU

Menus version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

AJOUTER LIGNE MENU (menu; libellLigne{; process}) Paramtre menu libellLigne process Type Numrique Alpha Numrique Description Numro de menu Libell du ou des nouvelle(s) ligne(s) de menu Numro de rfrence du process

Description La commande AJOUTER LIGNE MENU ajoute une ou plusieurs ligne(s) de menu au menu dont vous avez pass le numro dans menu. Si vous omettez le paramtre process, AJOUTER LIGNE MENU s'applique la barre de menus du process courant. Sinon, AJOUTER LIGNE MENU s'applique la barre de menus du process dont vous avez pass le numro dans process. AJOUTER LIGNE MENU vous permet d'ajouter une ou plusieurs lignes de menu en un seul appel. Vous dfinissez les lignes ajouter l'aide du paramtre libellLigne, de la manire suivante : Chaque ligne est spare des autres par un point-virgule ";", "ligne1;ligne2;ligne3". Pour inactiver une ligne, placez une parenthse ouvrante "(" dans son libell. Pour dfinir une ligne de sparation, passez la valeur "(-" en tant que libell. Pour dfinir le style de caractres d'une ligne, placez dans son libell le symbole infrieur "<" suivi d'une lettre. Voici les diffrents codes : <B <I <U <O <S Gras Italique Soulign Contours (MacOS seulement) Relief (MacOS seulement)

Pour associer une coche une ligne, insrez dans son libell un point d'exclamation "!" suivi du caractre que vous voulez utiliser comme coche. Sous MacOS, le caractre est affich ; sous Windows, une coche standard est affiche (quel que soit le caractre pass).

1198 4e Dimension - Langage

Pour associer une icne une ligne, insrez dans son libell un accent circonflexe "^" suivi d'un caractre dont le code ASCII moins 48 plus 256 (ou plus 208) reprsente un numro de ressource d'icne MacOS. Pour ajouter un raccourci clavier une ligne, insrez dans son libell une barre oblique "/" suivie du caractre de raccourci. Note : Utilisez les menus avec un nombre "raisonnable" de lignes. Si, par exemple, vous voulez afficher plus de 50 lignes, envisagez plutt d'employer une zone de dfilement dans un formulaire. Note : AJOUTER LIGNE MENU accepte un texte comportant jusqu' 32 000 caractres alors que INSERER LIGNE MENU n'en accepte que 255. Important : Les nouvelles lignes ne sont pas associes des mthodes. Elles doivent donc tre gres par une mthode formulaire, l'aide de la commande Menu choisi. Exemple L'exemple suivant ajoute les noms des polices de caractres disponibles dans un menu Polices qui, dans cet exemple, est le sixime menu de la barre de menus courante : ` Dans la mthode base Sur ouverture ` La liste des polices est charge et les libells construits LISTE DES POLICES(<>asPolicesDispo) <>atPoliceCmdMenus:="" Boucle ($vlPolice;1;Taille tableau(<>asPolicesDispo)) <>atPoliceCmdMenus:=<>atPoliceCmdMenus+";"+<>asPolicesDispo{$vlPolice} Fin de boucle Ensuite, dans toute mthode formulaire ou projet, vous pouvez crire :

AJOUTER LIGNE MENU(6;<>atPoliceCmdMenus)

Rfrence INSERER LIGNE MENU, SUPPRIMER LIGNE MENU.

4e Dimension - Langage 1199

INSERER LIGNE MENU

Menus version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

INSERER LIGNE MENU (menu; aprsLigne; texteLigne{; process}) Paramtre menu aprsLigne libellLigne process Type Numrique Numrique Alpha Numrique Description Numro de menu Numro de commande de menu Libell de la ligne de menu insrer Numro de rfrence de process

Description La commande INSERER LIGNE MENU insre de nouvelles lignes dans le menu dont le numro est pass dans menu et les place aprs la ligne de menu dont le numro est pass dans aprsLigne. Si vous ne passez pas le paramtre process, INSERER LIGNE MENU est applique la barre de menus du process courant. Sinon, INSERER LIGNE MENU est applique la barre de menus du process dont la rfrence est passe dans process. INSERER LIGNE MENU vous permet d'insrer une ou plusieurs commandes de menus en une seule fois. INSERER LIGNE MENU fonctionne comme AJOUTER LIGNE MENU, hormis pour les deux diffrences suivantes : INSERER LIGNE MENU vous permet d'insrer des commandes de menu partout dans le menu alors que AJOUTER LIGNE MENU les ajoute toujours la fin du menu. Avec INSERER LIGNE MENU, le texte des commandes pass dans libellLigne est limit 255 caractres alors que pour la commande AJOUTER LIGNE MENU cette limitation est de 32 000 caractres. Reportez-vous la description de la commande AJOUTER LIGNE MENU pour plus de dtails sur la dfinition des commandes de menus passe dans libellLigne. Important : Les nouvelles lignes n'ont pas de mthodes associes. Elles doivent donc tre gres partir d'une mthode formulaire qui utilise la fonction Menu choisi. Rfrence AJOUTER LIGNE MENU.

1200 4e Dimension - Langage

SUPPRIMER LIGNE MENU

Menus version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER LIGNE MENU (menu; ligneMenu{; process}) Paramtre menu ligneMenu process Type Numrique Numrique Numrique Description Numro de menu Numro de ligne de menu Numro de rfrence de process

Description La commande SUPPRIMER LIGNE MENU supprime la ligne de menu dont vous avez pass les numros de menu et de ligne dans menu et ligneMenu. Si vous omettez le paramtre process, SUPPRIMER LIGNE MENU s'applique la barre de menus du process courant. Sinon, SUPPRIMER LIGNE MENU s'applique la barre de menus du process dont vous avez pass le numro dans process. Note : Pour soigner l'ergonomie de votre interface, ne laissez pas accessible un menu ne comportant aucune ligne. Rfrence AJOUTER LIGNE MENU, INSERER LIGNE MENU.

4e Dimension - Langage 1201

1202 4e Dimension - Langage

40 ________________________ Messages

4e Dimension - Langage 1203

1204 4e Dimension - Langage

SUPPRIMER MESSAGES

Messages version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER MESSAGES Paramtre Type Description Cette commande ne requiert pas de paramtre Description Les commandes SUPPRIMER MESSAGES et LAISSER MESSAGES suppriment ou font apparatre les thermomtres de progression affichs par 4e Dimension lorsque le programme excute des oprations de longue dure. Par dfaut, les messages sont affichs. Voici la liste des oprations du mode Utilisation qui peuvent provoquer l'affichage d'un thermomtre de progression : Application d'une formule, Gnration d'un tat rapide, Export de donnes, Import de donnes, Tri, Gnration d'un graphe, Recherche, Recherche par formulaire, Recherche par formule. Le tableau suivant liste les commandes qui peuvent provoquer l'affichage du thermomtre de progression : APPLIQUER A SELECTION LECTURE SYLK VALEURS DISTINCTES LECTURE ASCII ECRITURE DIF JOINTURE ECRITURE SYLK SELECTION RETOUR ECRITURE ASCII REDUIRE SELECTION GRAPHE SUR SELECTION QR ETAT LECTURE DIF SCAN INDEX CHERCHER CHERCHER PAR FORMULE CHERCHER PAR EXEMPLE CHERCHER DANS SELECTION CHERCHER PAR FORMULE DANS SELECTION TRIER PAR FORMULE TRIER Exemple L'exemple suivant supprime les thermomtres de progression avant d'effectuer un tri, puis les rtablit aprs l'opration :

SUPPRIMER MESSAGES TRIER ([Adresses]; [Adresses]CP; >; [Adresses]Nom2; >) LAISSER MESSAGES

4e Dimension - Langage 1205

LAISSER MESSAGES

Messages version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LAISSER MESSAGES Paramtre Type Description Cette commande ne requiert pas de paramtre Description Reportez-vous la description de la commande SUPPRIMER MESSAGES.

1206 4e Dimension - Langage

ALERTE

Messages version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ALERTE (message{; libellBoutonOK}) Paramtre message libellBoutonOK Type Alpha Alpha Description Message afficher dans la bote de dialogue d'alerte Libell du bouton OK

Description La commande ALERTE affiche une bote de dialogue d'alerte compose d'une icne, d'un message et d'un bouton OK. Vous passez le message afficher dans le paramtre message. Ce message peut contenir jusqu' 255 caractres. Si la longueur ou la largeur des caractres est trop importante par rapport la zone du message, il sera tronqu. Par dfaut, le libell du bouton OK est OK. Si vous voulez changer ce libell, passez le nouveau libell dans le paramtre optionnel libellBoutonOK. Si ncessaire, la largeur du bouton OK est augmente vers la gauche pour contenir ce nouveau libell. Note : N'appelez pas la commande ALERTE dans une mthode formulaire ou une mthode objet qui gre l'vnement formulaire Sur activation ou Sur dsactivation, car cela provoquerait une boucle sans fin. Exemples (1) L'exemple suivant appelle une bote de dialogue d'alerte qui affiche des informations sur une socit. Notez que le message contient des retours chariot (Caractere(13)) qui forcent le texte passer sur la ligne suivante :

ALERTE("Socit : "+[Socits]Nom+Caractere(13)+"Personnes dans la socit : "+ Chaine(Enregistrements trouves([Personne]))+ Caractere(13)+"Nombre d'lments qu'ils fournissent : "+ Chaine (Enregistrements trouves([Elments])))

4e Dimension - Langage 1207

Voici la bote de dialogue d'alerte affiche (sous Windows) par notre exemple :

(2) Voici un autre exemple :

ALERTE("Excuse-moi Pierre, je ne peux pas faire cela.";"Dommage !")

Cette instruction affichera (sous Windows) la bote de dialogue d'alerte suivante :

(3) Voici un autre exemple :

ALERTE("Vous n'avez plus le droit de supprimer des enregistrements.";"Je ne le savais pas !")

Ce code affiche la bote de dialogue d'alerte suivante :

Rfrence AFFICHER NOTIFICATION, CONFIRMER, Demander.

1208 4e Dimension - Langage

CONFIRMER

Messages version 6.0 (modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CONFIRMER (message{; libellBoutonOK{; libellBoutonAnn}}) Paramtre message libellBoutonOK libellBoutonAnn Type Alpha Alpha Alpha Description Message afficher dans la bote de dialogue de confirmation Libell du bouton OK Libell du bouton Annuler

Description La commande CONFIRMER affiche une bote de dialogue de confirmation qui se compose d'une icne, d'un message, d'un bouton OK et d'un bouton Annuler. Les botes de dialogue de confirmation ou d'alerte sont utilises pour afficher des informations (comme des messages d'erreur) qui ne ncessitent pas d'informations en retour. Vous passez le message afficher dans le paramtre message. Ce message peut contenir jusqu' 255 caractres. Si la longueur ou largeur des caractres est trop importante par rapport la zone d'affichage, le message sera tronqu. Par dfaut, le libell du bouton OK est OK et le libell du bouton Annuler est Annuler. Si vous voulez modifier le libell de ces boutons, passez le nouveau libell dans les paramtres optionnels libellBoutonOK et libellBouton Ann. Si ncessaire, les boutons sont agrandis vers la gauche en fonction de la taille des libells que vous avez saisis. Le bouton OK est le bouton par dfaut. L'utilisateur peut cliquer sur le bouton OK ou appuyer sur la touche Entre pour valider la bote de dialogue, la variable systme OK prend alors la valeur 1. L'utilisateur peut cliquer sur le bouton Annuler pour annuler la bote de dialogue, la variable systme OK prend alors la valeur 0. Conseil : N'appelez pas la commande CONFIRMER dans une mthode formulaire ou objet qui gre l'vnement Sur activation ou Sur dsactivation, car cela provoquerait une boucle sans fin.

4e Dimension - Langage 1209

Exemples (1) L'exemple ci-dessous :

CONFIRMER("ATTENTION : Vous ne pourrez pas annuler cette opration.") Si (OK=1) TOUT SELECTIONNER([Vieilles choses]) SUPPRIMER SELECTION([Vieilles choses]) Sinon ALERTE ("Opration annule.") Fin de si

... provoquera l'affichage de la bote de dialogue de confirmation suivante (sous Windows) :

(2) La ligne :

CONFIRMER("Voulez-vous vraiment fermer ce compte ?";"Oui";"Non")

... provoquera l'affichage de la bote de dialogue de confirmation suivante (sous Windows) :

1210 4e Dimension - Langage

(3) Vous dveloppez une application 4D pour le march international. Vous avez crit une mthode projet qui retourne du texte traduit partir d'une version franaise. Vous avez galement rempli un tableau nomm asLocalizedUIMessages dans lequel vous stockez les mots les plus courants. Dans ce cas, la ligne :

CONFIRMER(INTL Text ("Voulez-vous ajouter un nouveau mmo ?"); asLocalizedUIMessages{kLoc_OUI};asLocalizedUIMessages{kLoc_NON})

... pourrait afficher la bote de dialogue de confirmation (sous Windows) suivante :

(4) La ligne :

CONFIRMER("ATTENTION : Si vous poursuivez cette opration, des enregistrements seront "+"modifis irrmdiablement."+ Caractere(13)+"Que voulez-vous faire ?"; "Ne PAS continuer";"Continuer")

... provoque l'affichage de la bote de dialogue de confirmation suivante (sous MacOS) :

Rfrence ALERTE, Demander.

4e Dimension - Langage 1211

Demander

Messages version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Demander (message{; rponseDfaut{; titreBoutonOK{; titreBoutonAnn}}}) Alpha Paramtre message rponseDfaut titreBoutonOK titreBoutonAnn Rsultat Type Alpha Alpha Alpha Alpha Alpha Description Message afficher dans la bote de dialogue Valeur par dfaut dans la zone de saisie de texte Libell du bouton OK Libell du bouton Annuler Valeur saisie par l'utilisateur

Description La fonction Demander affiche une bote de dialogue de demande d'informations compose d'un message, d'une zone de saisie de texte, d'un bouton OK et d'un bouton Annuler. Vous passez le message afficher dans le paramtre message. Ce message peut contenir jusqu' 255 caractres. Il peut cependant apparatre tronqu, en fonction de sa taille et de la largeur des caractres, s'il est suprieur la capacit d'affichage de la zone de message. Par dfaut, le libell du bouton OK est OK et celui du bouton Annuler est Annuler. Si vous voulez modifier ces libells, passez d'autres valeurs dans les paramtres optionnels titreBoutonOK et titreBoutonAnn. Si ncessaire, les boutons sont agrandis vers la gauche, en fonction de la taille des libells que vous avez saisis. Le bouton OK est le bouton par dfaut. L'utilisateur peut cliquer sur le bouton OK ou appuyer sur la touche Entre pour valider la bote de dialogue, mettant ainsi la variable systme OK 1. Il peut galement cliquer sur le bouton Annuler pour annuler la bote de dialogue, mettant ainsi la variable systme OK 0. L'utilisateur peut taper des caractres dans la zone de saisie de texte. Pour dfinir une valeur par dfaut, passez le texte par dfaut dans le paramtre rponseDfaut. Si l'utilisateur clique sur le bouton OK, Demander retourne le texte. Si l'utilisateur clique sur le bouton Annuler, Demander retourne une chane vide (""). Si la rponse doit tre une valeur numrique ou une date, convertissez la chane retourne par Demander dans le type souhait l'aide des fonctions Num et Date.

1212 4e Dimension - Langage

Note : N'appelez pas la fonction Demander dans une mthode formulaire ou objet qui gre l'vnement Sur activation ou Sur desactivation car cela provoquerait une boucle sans fin. Conseil : Si vous voulez rcuprer plusieurs informations de l'utilisateur, construisez un formulaire appropri et appelez-le avec la commande DIALOGUE, plutt que d'afficher une succession de botes de dialogue du type Demander. Exemples (1) La ligne de code :

$vsAffiche := Demander ("Veuillez saisir votre nom :")

... provoquera l'affichage de la bote de dialogue suivante :

(2) Le code suivant :

$vsAffiche:= Demander ("Nom de l'employ :";"";"Crer un enregistrement";"Annuler") Si (OK=1) AJOUTER ENREGISTREMENT([Employs]) ` Note : $vsAffiche est alors copie dans le champ [Employs]Nom ` lors de l'vnement formulaire Sur chargement de la mthode formulaire Fin de si

... provoquera l'affichage de la bote de dialogue suivante :

4e Dimension - Langage 1213

(3) La ligne de code :

$vdAffiche := Date (Demander ("Veuillez saisir la nouvelle date :";Chaine (Date du jour)))

... provoquera l'affichage de la bote de dialogue suivante :

Rfrence ALERTE, CONFIRMER.

1214 4e Dimension - Langage

MESSAGE

Messages version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

MESSAGE (message) Paramtre message Type Alpha Description Message afficher

Description La commande MESSAGE affiche message l'cran dans une fentre spciale de message qui est ouverte et referme chaque fois que vous l'appelez ( moins que vous ne travailliez dans une fentre pralablement ouverte par la commande Creer fenetre, cf. ci-dessous). Le message est temporaire et est effac ds qu'un formulaire est affich ou ds que l'excution de la mthode est stoppe. Si une autre commande MESSAGE est excute, le prcdent message est effac. MESSAGE est gnralement utilise pour informer l'utilisateur du droulement d'une action. Si une fentre a t ouverte par la commande Creer fenetre, tous les appels ultrieurs la commande MESSAGE affichent les messages dans cette fentre. Cette fentre se comporte en quelque sorte comme un terminal : Chaque message successif n'efface pas le prcdent, les messages se placent les uns la suite des autres. Si un message est plus large que la fentre, 4e Dimension insre automatiquement un retour la ligne. Si le message contient plus de lignes que ne peut en afficher la fentre, 4e Dimension fait automatiquement dfiler le message dans la fentre. Si vous souhaitez contrler les retours la ligne, insrez vos propres retours chariot dans votre texte, l'aide de Caractere(13). Vous pouvez appeler la commande POSITION MESSAGE pour afficher le texte un emplacement particulier dans la fentre. Vous pouvez appeler la commande EFFACER FENETRE pour effacer le contenu de la fentre. La fentre est une fentre d'affichage statique : son contenu n'est pas redessin lorsque d'autres fentres s'affichent par-dessus.

4e Dimension - Langage 1215

4e Dimension exploite les proprits Police des messages et Taille associe pour afficher des messages. Vous dfinissez ces paramtres dans la bote de dialogue des Prfrences :

Vous pouvez fixer votre convenance la police et la taille de la police (dans les limites du possible) pour les messages. Cependant, si vous combinez l'utilisation de MESSAGE et de POSITION MESSAGE, nous vous conseillons de choisir une police espacement constant telle que Terminal sous Windows et Monaco sous MacOS. Exemples (1) L'exemple suivant traite une slection d'enregistrements et appelle la commande MESSAGE pour informer l'utilisateur de la progression de l'opration :

Boucle($vlEnregistrement;1;Enregistrements trouves([touteTable])) MESSAGE ("Traitement de l'enregistrement "+Chaine($vlEnregistrement)) ` Faire quelque chose avec l'enregistrement ENREGISTREMENT SUIVANT([touteTable]) Fin de boucle

1216 4e Dimension - Langage

La fentre suivante s'affiche puis disparat chaque appel de MESSAGE :

(2) Afin d'liminer le "clignotement" de la fentre, il est prfrable, comme dans ce deuxime exemple, d'afficher les messages dans une fentre ouverte par l'intermdiaire de la commande Creer fenetre : Creer fenetre(50;50;500;250;5;"Opration en cours") Boucle($vlEnregistrement;1;Enregistrements trouves([touteTable])) MESSAGE ("Traitement de l'enregistrement "+Chaine($vlEnregistrement)) ` Faire quelque chose avec l'enregistrement ENREGISTREMENT SUIVANT([touteTable]) Fin de boucle FERMER FENETRE

Le rsultat est le suivant (sous MacOS) :

(3) En ajoutant un retour chariot, vous amliorez la prsentation : Creer fenetre(50;50;500;250;5;"Opration en cours") Boucle($vlEnregistrement;1;Enregistrements trouves([touteTable])) MESSAGE ("Traitement de l'enregistrement "+Chaine($vlEnregistrement) +Caractere(13))

4e Dimension - Langage 1217

` Faire quelque chose avec l'enregistrement ENREGISTREMENT SUIVANT([touteTable]) Fin de boucle FERMER FENETRE Voici le rsultat (Sous MacOS) :

(4) A l'aide de la commande POSITION MESSAGE et de l'criture de quelques lignes supplmentaires, la prsentation s'amliore nettement : Creer fenetre(50;50;500;250;5;"Opration en cours") $vlNbEnregistrements:=Enregistrements trouves([touteTable]) $vhHeureDbut:=Heure courante Boucle($vlEnregistrement;1;$vlNbEnregistrements) POSITION MESSAGE(5;2) MESSAGE ("Traitement de l'enregistrement "+Chaine($vlNbEnregistrements)+ Caractere(13)) ` Faire quelque chose avec les enregistrements ENREGISTREMENT SUIVANT([touteTable]) POSITION MESSAGE(5;5) $vlReste:=(($vlNbEnregistrements/$vlEnregistrement)-1)* (Heure courante-$vhHeureDbut) MESSAGE ("Estimation du temps restant : "+Chaine heure($vlReste)) Fin de boucle FERMER FENETRE

1218 4e Dimension - Langage

Voici le rsultat (sous Windows) :

Rfrence Creer fenetre, EFFACER FENETRE, FERMER FENETRE, POSITION MESSAGE.

4e Dimension - Langage 1219

POSITION MESSAGE

Messages version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

POSITION MESSAGE (x; y) Paramtre x y Type Numrique Numrique Description Coordonne x (horizontale) du curseur Coordonne y (verticale) du curseur

Description La commande POSITION MESSAGE est destine tre utilise conjointement avec la commande MESSAGE lorsque vous affichez des messages dans une fentre ouverte par la commande Creer fenetre. La commande POSITION MESSAGE dtermine l'emplacement du curseur d'insertion des caractres (ce curseur est invivible) : elle dfinit les coordonnes auxquelles le prochain message s'affichera l'intrieur de la fentre. L'angle suprieur gauche de la fentre reprsente les coordonnes 0,0. Le curseur est automatiquement positionn 0,0 lorsqu'une fentre est cre ou aprs l'excution de la commande EFFACER FENETRE. Aprs que POSITION MESSAGE ait dfini l'emplacement du curseur, la commande MESSAGE peut tre appele pour afficher des caractres dans la fentre. Conseil : Pour contrler parfaitement l'affichage des caractres avec les commandes POSITION MESSAGE et MESSAGE, utilisez des polices espacement constant (par exemple Terminal sous Windows et Monaco sous MacOS). Dans ces polices, tous les caractres ont la mme largeur. Reportez-vous la description de la commande MESSAGE pour plus d'informations. Exemples (1) Reportez-vous l'exemple de la commande MESSAGE. (2) Reportez-vous l'exemple de la fonction Nombre de millisecondes.

1220 4e Dimension - Langage

(3) L'exemple ci-dessous : CREER FENETRE(50;50;300;300;5;"Ce n'est qu'un test") Boucle ($vlColonne;0;9) POSITION MESSAGE($vlColonne;0) MESSAGE(Chaine($vlColonne)) Fin de boucle Boucle ($vlLigne;0;9) POSITION MESSAGE(0;$vlLigne) MESSAGE(Chaine($vlLigne)) Fin de boucle $vhHeureDbut:=Heure courante Repeter Jusque ((Heure courante-$vhHeureDbut)>00:00:30)

... affiche la fentre suivante (sous MacOS) pendant 30 secondes :

Rfrence MESSAGE.

4e Dimension - Langage 1221

AFFICHER NOTIFICATION

Messages version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

AFFICHER NOTIFICATION (titre; contenu{; dlai}) Paramtre titre contenu dlai Type Alpha 255 Alpha 255 Numrique Description Titre de la notification Texte de la notification Dlai daffichage en secondes

Note : Cette commande fonctionne sous Windows uniquement. Description La commande AFFICHER NOTIFICATION provoque laffichage dun message dans la zone de notification de la barre des tches de Windows :

Ce type de message est gnralement utilis par le systme ou les applications pour informer lutilisateur dun vnement (dconnexion rseau, disponibilit de mises jour, etc.) Passez dans les paramtres titre et contenu le titre et le texte du message afficher (dans lexemple ci-dessus, le titre est Exportation 4D). Vous pouvez saisir jusqu 255 caractres. Par dfaut, la fentre du message reste affiche jusqu ce que lutilisateur clique sur sa case de fermeture. Si vous passez le paramtre facultatif dlai, la fentre sera automatiquement referme lissue de la dure dfinie si lutilisateur na pas cliqu sur la case de fermeture. A noter que licne de notification restera affiche jusqu la fin du dlai, mme si lutilisateur a referm le message. Rfrence ALERTE.

1222 4e Dimension - Langage

41 ________________________ Mthodes base

4e Dimension - Langage 1223

1224 4e Dimension - Langage

Prsentation des mthodes base

Mthodes base version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les mthodes base sont des mthodes automatiquement excutes par 4D lors d'un vnement affectant la session dans sa gnralit.

Pour crer, ouvrir ou diter une mthode base : 1. Ouvrez la fentre de l'Explorateur. 2. Slectionnez la page Mthodes. 3. Dployez le thme Mthodes base. 4. Double-cliquez sur la mthode. ou bien : 4. Slectionnez la mthode. 5. Appuyez sur la touche Entre ou Retour chariot. Vous ditez une mthode base de la mme manire que n'importe quelle autre mthode.

4e Dimension - Langage 1225

Vous ne pouvez pas appeler une mthode base depuis une autre mthode. Les mthodes base sont automatiquement excutes par 4D certains moments de la session de travail. Le tableau suivant rsume l'excution des mthodes base : Mthode base Sur ouverture Sur fermeture Sur authentification Web Sur connexion Web Sur dmarrage sauvegarde Sur arrt sauvegarde Sur dmarrage serveur Sur arrt serveur Sur ouverture connexion serveur Sur fermeture connexion serveur 4e Dimension Oui, une fois Oui, une fois Oui, plusieurs fois Oui, plusieurs fois Oui, plusieurs fois Oui, plusieurs fois Non Non Non Non 4D Server Non Non Oui, plusieurs fois Oui, plusieurs fois Oui, plusieurs fois Oui, plusieurs fois Oui, une fois Oui, une fois Oui, plusieurs fois Oui, plusieurs fois 4D Client Oui, une fois Oui, une fois Non Non Oui, plusieurs fois Oui, plusieurs fois Non Non Non Non

Pour plus de dtails sur chaque mthode base, reportez-vous aux sections suivantes : Mthode Mthode Mthode Mthode Mthode Mthode Mthode Mthode Mthode Mthode base Sur ouverture base Sur fermeture base Sur authentification Web base Sur connexion Web base Sur dmarrage sauvegarde base Sur arrt sauvegarde base Sur dmarrage serveur (cf. Guide de rfrence de 4D Server) base Sur arrt serveur (cf. Guide de rfrence de 4D Server) base Sur ouverture connexion serveur (cf. Guide de rfrence de 4D Server) base Sur fermeture connexion serveur (cf. Guide de rfrence de 4D Server)

Rfrence Mthodes.

1226 4e Dimension - Langage

Mthode base Sur ouverture

Mthodes base version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La Mthode base Sur ouverture est excute une seule fois, au moment de l'ouverture de la base. Les environnements 4D suivants sont concerns : 4e Dimension 4D Client (sur le poste client une fois que la connexion a t accepte par 4D Server) 4D Runtime Application 4D compile et fusionne avec 4D Runtime Volume License Note : La Mthode base Sur ouverture n'est PAS excute par 4D Server. La mthode base Sur ouverture est excute automatiquement par 4D ; la diffrence des mthodes projet, vous ne pouvez pas appeler cette mthode base vous-mme. Pour excuter des tches depuis la mthode base Sur ouverture, vous pouvez, tout comme avec des mthodes projet, utiliser des sous-routines. La mthode base Sur ouverture est l'emplacement idal pour : Initialiser les variables interprocess que vous utiliserez pendant toute la session de travail. Dmarrer automatiquement des process l'ouverture de la base. Charger des prfrences ou des paramtrages sauvegards dans ce but lors de la session de travail prcdente. Empcher l'ouverture de la base si une condition n'est pas remplie (comme par exemple, une ressource systme manquante) par l'appel explicite de la commande QUITTER 4D. Accomplir toute autre action que vous souhaitez excuter automatiquement chaque ouverture de la base. Compatibilit avec les versions prcdentes de 4D Les mthodes base sont un nouveau type de mthode introduit dans la version 6 de 4D. Dans les versions prcdentes, il n'y avait qu'une seule mthode (procdure) que 4D excutait automatiquement l'ouverture de la base. Cette procdure devait tre nomme Debut (en version franaise) ou Startup (dans les versions amricaine et internationale). Si vous utilisez une base version 5 convertie et si vous dsirez tirer parti des possibilits de la nouvelle mthode base Sur ouverture, assurez-vous que la proprit Utiliser l'ancienne mthode Dbut dans la bote de dialogue des Prfrences de la base est dslectionne.

4e Dimension - Langage 1227

Cette proprit ne concerne que le choix entre Debut et la mthode base Sur ouverture. Si vous n'avez pas dslectionn cette proprit et que vous crez, par exemple, une mthode base Sur fermeture, celle-ci sera excute par 4D.

Exemple Reportez-vous l'exemple de la section Mthode base Sur fermeture. Rfrence Mthode base Sur fermeture, Mthodes, Prsentation des mthodes base, QUITTER 4D.

1228 4e Dimension - Langage

Mthode base Sur fermeture

Mthodes base version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La Mthode base Sur fermeture est appele une fois lorsque vous quittez la base. Les environnements 4D suivants sont concerns : 4e Dimension 4D Client (ct client) 4D Runtime Application 4D compile et fusionne avec 4D Runtime Volume License Note : La Mthode base Sur fermeture n'est PAS excute par 4D Server. La mthode base Sur fermeture est excute automatiquement par 4D ; la diffrence des mthodes projet, vous ne pouvez pas appeler cette mthode base vous-mme. Pour excuter des tches depuis la mthode base Sur fermeture, vous pouvez, tout comme avec des mthodes projet, utiliser des sous-routines. On sort de la base lorsque l'un des vnements suivants se produit : L'utilisateur slectionne la commande Quitter dans le menu Fichier en mode Structure ou Utilisation. Un appel la commande QUITTER 4D a eu lieu. Un plug-in 4D a fait appel au point d'entre QUITTER 4D. Quel que soit le moyen par lequel la base a t quitte, 4D accomplit les actions qui suivent : S'il n'existe pas de mthode base Sur fermeture, 4D dtruit chaque process un par un, sans distinction. Si un utilisateur est en train de saisir des donnes, les enregistrements ne seront pas sauvegards. S'il existe une mthode base Sur fermeture, 4D dmarre l'excution de cette mthode dans un process local nouvellement cr. Vous pouvez ainsi utiliser cette mthode base pour informer d'autres process, via la communication interprocess, qu'ils doivent tre ferms (en cas de saisie de donnes) ou stopper leur excution. Notez que 4D quittera en tout tat de cause la mthode base Sur fermeture peut assurer le nettoyage et la fermeture de toutes les oprations que vous voulez, mais la fermeture de la base est inluctable.

4e Dimension - Langage 1229

La Mthode base Sur fermeture est l'emplacement idal pour : Stopper les process automatiquement dmarrs l'ouverture de la base. Sauvegarder (localement, sur disque) les prferences ou paramtrages devant tre rutiliss lors de la prochaine session dans la mthode base Sur ouverture. Accomplir toute autre action que vous souhaitez excuter automatiquement chaque fermeture de la base. Note: Rappelez-vous que le process cr pour la Mthode base Sur fermeture est un process client (local), qui n'existe donc pas sur le poste serveur. Par consquent, si vous effectuez dans cette mthode base une recherche ou un tri, tout poste client qui tentera de quitter l'application restera "bloqu". Si vous avez besoin d'accder aux donnes lorsque le client quitte, vous devez crer depuis cette mthode base un process global qui, lui, pourra accder aux donnes. Dans ce cas toutefois, veillez ce que ce process puisse terminer son excution (par l'intermdaire de variables interprocess, par exemple) avant dtre stopp par la Mthode base Sur fermeture. Exemple L'exemple ci-dessous liste les mthodes utilises dans une base qui note les vnements significatifs se produisant lors d'une session de travail. Les tapes sont crites dans un document texte appel Journal. La mthode base Sur ouverture initialise la variable interprocess vbQuit4D, qui signale tous les process utiliss, qu'on sorte ou non de la base. Elle cre aussi le fichier journal, s'il n'existe pas dj. ` Mthode base Sur ouverture C_TEXTE(vtIPMessage) C_BOOLEEN(vbQuit4D) vbQuit4D:=Faux Si (Tester chemin acces("Journal") # Est un document) $vhDocRef:=Creer document("Journal") Si (OK=1) FERMER DOCUMENT($vhDocRef) Fin de si Fin de si ECRIRE JOURNAL ("Ouverture Session")

1230 4e Dimension - Langage

La mthode projet ECRIRE JOURNAL, utilise comme sous-routine par les autres mthodes, crit l'information qu'elle reoit dans le fichier journal : ` Mthode Projet ECRIRE JOURNAL ` ECRIRE JOURNAL ( Texte ) ` ECRIRE JOURNAL ( Description Evenement ) C_TEXTE($1) C_HEURE($vhDocRef) Tant que (Semaphore("$Journal")) ENDORMIR PROCESS(Numero du process courant;1) Fin tant que $vhDocRef:=Ajouter a document("Journal") Si (OK=1) INFORMATIONS PROCESS(Numero du process courant;$vsProcessNom;$vlEtat; $vlTempsEcoule;$vbVisible) ENVOYER PAQUET($vhDocRef;Chaine(Date du jour)+Caractere(9)+ Chaine(Heure courante)+Caractere(9)+ Chaine(Numero du process courant)+Caractere(9)+ $vsProcessNom+Caractere(9)+$1+Caractere(13)) FERMER DOCUMENT($vhDocRef) Fin de si EFFACER SEMAPHORE("$Journal") Notez que le document est ouvert et referm chaque fois. Notez aussi l'emploi d'un smaphore comme protection d'accs au document nous ne voulons pas que deux process essaient d'accder au fichier journal en mme temps. La mthode projet M_AJOUT_ENRG est excute lorsque la commande de menu Ajouter enregistrement est slectionne en mode Menus crs : ` Mthode Projet M_AJOUT_ENRG CHANGER BARRE(1) Repeter AJOUTER ENREGISTREMENT([Table1];*) Si (OK=1) ECRIRE JOURNAL("Ajout d'enregistrement #"+ Chaine(Numero enregistrement([Table1]))+" dans Table1") Fin de si Jusque ((OK=0) | vbQuit4D) Cette mthode effectue une boucle jusqu' ce que l'utilisateur annule la saisie de donnes ou que la base soit referme.

4e Dimension - Langage 1231

Le formulaire entre de la [Table1] inclut le traitement des vnements Sur appel extrieur. Ainsi, mme si un process est en saisie de donnes, on en sort "en douceur", et l'utilisateur peut sauvegarder (ou non) la saisie en cours : ` Mthode formulaire [Table1];"Entre" Au cas ou : (Evenement formulaire=Sur appel extrieur) Si (vtIPMessage="QUITTER") CONFIRMER("Voulez-vous sauvegarder les modifications dans cet enregistrement ?") Si (OK=1) VALIDER Sinon NE PAS VALIDER Fin de si Fin de si Fin de cas La mthode projet M_QUIT est excute lorsque la commande Quitter du menu Fichier en mode Menus crs est slectionne : ` Mthode Projet M_QUIT $vlProcessID:=Nouveau process("ON_QUIT";32*1024;"$ON_QUIT") Cette mthode utilise une astuce. Lorsque la commande QUITTER 4D est appele, elle a un effet immdiat. En consquence, le process dans lequel elle est appele est plac en mode arrt, jusqu' ce que la base ait t effectivement referme. Comme ce process peut tre un des process dans lequel est effectue la saisie de donnes, l'appel QUITTER 4D est ralis dans un process local qui n'est dmarr que pour ce but. Voici la mthode ON_QUIT: ` Mthode projet ON_QUIT CONFIRMER("Etes-vous certain de vouloir quitter ?") Si (OK=1) ECRIRE JOURNAL ("Sortie de la base") QUITTER 4D ` QUITTER 4D a un effet immdiat. Aucune ligne de code n'est excute par la suite. ` ... Fin de si

1232 4e Dimension - Langage

Enfin, voici la mthode base Sur fermeture, qui signale tous les process utilisateur qu'il est temps de partir !. Elle met vbQuit4D Vrai et envoie des messages interprocess aux process utilisateur qui grent la saisie de donnes : ` Mthode base Sur fermeture vbQuit4D:=Vrai Repeter $vbfini:=Vrai Boucle ($vlProcess;1;Nombre de process) INFORMATIONS PROCESS($vlProcess;$vsProcessNom;$vlEtat;$vlTempsEcoul; $vbVisible) Si (((($vsProcessNom="ML_@") | ($vsProcessNom="M_@"))) & ($vlEtat>=0)) $vbDFini:=Faux vtIPMessage:="QUITTER" PASSER AU PREMIER PLAN($vlProcess) APPELER PROCESS($vlProcess) $vhStart:=Heure courante Repeter ENDORMIR PROCESS(Numero du process courant;60) Jusque ((Statut du process($vlProcess)<0) | ((Heure courante-$vhStart) >=?00:01:00?)) Fin de si Fin de boucle Jusque ($vbDone) ECRIRE JOURNAL ("Fermeture de session") Note : Les process dont les noms commencent par "ML_..." ou "M_..." sont dmarrs par les commandes de menus pour lesquelles la proprit Dmarrer un process a t slectionne. Dans cet exemple, ce sont les process dmarrs suite la slection de la commande de menu Ajouter enregistrement. Le test (Heure courante-$vhStart)>=?00:01:00? permet la mthode base de sortir de la boucle en attente de l'autre process, si l'autre process ne ragit pas pendant une minute. Voici un exemple type de fichier Journal produit par la base : 2/6/03 15:47:25 1 Process principal Ouverture de Session 2/6/03 15:55:43 5 ML_1 Ajout d'enregistrement #23 dans Table1 2/6/03 15:55:46 5 ML_1 Ajout d'enregistrement #24 dans Table1 2/6/03 15:55:54 6 $On_QUIT Sortie de la base 2/6/03 15:55:58 7 $xx Fermeture de session Note : $xx est le nom du process local dmarr par 4D pour excuter la mthode base Sur fermeture. Rfrence Mthode base Sur ouverture, QUITTER 4D.

4e Dimension - Langage 1233

1234 4e Dimension - Langage

42 ________________________ Oprateurs

4e Dimension - Langage 1235

1236 4e Dimension - Langage

Oprateurs

Oprateurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les oprateurs sont des symboles permettant d'effectuer des oprations sur des expressions. Les oprateurs peuvent effectuer des calculs sur des nombres, des dates et des heures. Ils effectuent aussi des oprations logiques sur les chanes, les boolens et des expressions logiques ainsi que des oprations spciales sur des images. Ils combinent des expressions simples pour gnrer de nouvelles expressions. Priorit L'ordre dans lequel une expression est value s'appelle la priorit. 4e Dimension applique strictement une rgle de priorit de gauche droite. L'ordre algbrique n'est pas appliqu. Par exemple : 3+4*5 retourne 35 car l'expression est value comme 3 + 4, qui donne 7, multipli par 5, ce qui donne 35. Les parenthses doivent tre utilises pour forcer l'ordre de calcul en fonction de vos besoins. Par exemple : 3 + (4 * 5) retourne 23 car l'expression (4 * 5) est value en premier lieu. Le rsultat (20) est alors ajout 3, ce qui donne le rsultat final 23. Des parenthses peuvent tre incluses dans d'autres parenthses. Assurez-vous qu'il y ait une parenthse fermante pour chaque parenthse ouverte. Une parenthse manquante ou place un mauvais endroit peut soit donner un rsultat erron, soit renvoyer une expression invalide. De plus, si vous avez l'intention de compiler vos applications, vous devez vous assurer d'une bonne utilisation des parenthses. Le compilateur interprtera toute parenthse manquante ou superflue comme une erreur de syntaxe. L'oprateur d'affectation (ou d'assignation) L'oprateur d'affectation := se distingue des autres oprateurs. Au lieu de combiner des expressions en une seule, l'oprateur d'affectation copie la valeur de l'expression situe sa droite dans la variable ou le champ qui se trouve sa gauche.

4e Dimension - Langage 1237

Par exemple, la ligne suivante place la valeur 4 (le nombre de caractres prsents dans le mot Pont) dans la variable maVar, qui prend alors le type numrique. maVar := Longueur ("Pont") Important : Ne confondez pas l'oprateur d'affectation := avec l'oprateur de comparaison d'galit =. Les autres oprateurs proposs par le langage de 4D sont dcrits dans les sections suivantes : Oprateurs sur les chanes Rfrez-vous la section Oprateurs sur les chanes. Oprateurs numriques Rfrez-vous la section Oprateurs numriques. Oprateurs sur les dates Rfrez-vous la section Oprateurs sur les dates. Oprateurs sur les heures Rfrez-vous la section Oprateurs sur les heures. Comparateurs Rfrez-vous la section Oprateurs de comparaison. Oprateurs logiques Rfrez-vous la section Oprateurs logiques. Oprateurs sur les images Rfrez-vous la section Oprateurs sur les images. Oprateurs sur les bits Rfrez-vous la section Oprateurs sur les bits.

1238 4e Dimension - Langage

Oprateurs sur les chanes

Oprateurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Une expression qui utilise un oprateur sur les chanes alphanumriques retourne une chane. Le tableau suivant dcrit les oprateurs sur les chanes : Opration Concatnation Rptition Syntaxe Chane + Chane Chane * Nombre Retourne Chane Chane Expression "abc" + "def" "ab" * 3 Valeur "abcdef" "ababab"

Rfrence Oprateurs, Oprateurs de comparaison, Oprateurs logiques, Oprateurs numriques, Oprateurs sur les bits, Oprateurs sur les dates, Oprateurs sur les heures, Oprateurs sur les images.

4e Dimension - Langage 1239

Oprateurs numriques

Oprateurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Une expression qui utilise un oprateur numrique retourne une valeur numrique. Le tableau suivant dcrit les oprateurs numriques : Opration Addition Soustraction Multiplication Division Division entire Modulo Exponentiation Syntaxe Nombre + Nombre Nombre Nombre Nombre * Nombre Nombre /Nombre Nombre \ Nombre Nombre % Nombre Nombre ^ Nombre Retourne Nombre Nombre Nombre Nombre Nombre Nombre Nombre Expression 2+3 32 5*2 5/2 5\2 5%2 2^3 Valeur 5 1 10 2.5 2 1 8

L'oprateur modulo % divise le premier nombre par le second et retourne le reste de la division entire. Voici quelques exemples : 10 % 2 retourne 0 car la division de 10 par 2 ne donne pas de reste. 10 % 3 retourne 1 car le reste est 1. 10,5 % 2 retourne 0 car le reste n'est pas un nombre entier. ATTENTION : L'oprateur modulo % retourne des valeurs significatives avec des nombres appartenant la catgorie des entiers longs (de 2^31 +2^31 moins 1). Pour calculer le modulo de nombres qui ne sont pas dans cet intervalle, utilisez la fonction Modulo. L'oprateur division entire \ retourne des valeurs significatives avec des nombres entiers uniquement. Rfrence Oprateurs, Oprateurs de comparaison, Oprateurs logiques, Oprateurs sur les bits, Oprateurs sur les chanes, Oprateurs sur les dates, Oprateurs sur les heures, Oprateurs sur les images.

1240 4e Dimension - Langage

Oprateurs sur les dates

Oprateurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Une expression qui utilise un oprateur sur les dates retourne une date ou une valeur numrique, suivant l'opration effectue. Toutes les oprations sur les dates retournent des valeurs exactes, tenant compte en particulier des annes bissextiles. Le tableau suivant dcrit les oprateurs sur les dates : Opration Diffrence Addition Soustraction Syntaxe Date Date Date + Nombre Date Nombre Retourne Nombre Date Date Expression !20/1/97! !1/1/97! !20/1/97! + 9 !20/1/97! 9 Valeur 19 !29/1/97! !11/1/97!

Rfrence Oprateurs, Oprateurs de comparaison, Oprateurs logiques, Oprateurs numriques, Oprateurs sur les bits, Oprateurs sur les chanes, Oprateurs sur les heures, Oprateurs sur les images.

4e Dimension - Langage 1241

Oprateurs sur les heures

Oprateurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Une expression qui utilise un oprateur sur les heures retourne une heure ou une valeur numrique, suivant l'opration effectue. Le tableau suivant dcrit les oprateurs sur les heures : Opration Addition Soustraction Addition Soustraction Multiplication Division Division entire Modulo Astuces (1) Pour obtenir une expression de type heure partir d'une expression qui combine une heure avec un chiffre, utilisez les fonctions Heure et Chaine heure. Par exemple : ` La ligne suivante assigne la variable $vlSecondes le nombre de secondes qui, ` dans une heure partir de maintenant, se seront coules depuis minuit $vlSecondes:=Heure courante+3600 ` La ligne suivante assigne la variable $vhBientt l'heure qu'il sera dans une heure $vhBientt:=Heure(Chaine heure(Heure courante+3600)) La seconde ligne peut galement tre crite de la faon suivante : ` La ligne suivante affecte dans la variable $vhBientt l'heure qu'il sera dans une ` heure $vhBientt:=Heure courante+?01:00:00? Vous pouvez utiliser cette astuce si, lors du dveloppement de votre application, vous vous retrouvez dans la situation o un dlai exprim en secondes doit tre ajout une valeur de type heure disponible en tant que valeur numrique. Syntaxe Heure + Heure Heure Heure Heure + Nombre Heure Nombre Heure * Nombre Heure / Nombre Heure \ Nombre Heure % Nombre Retourne Heure Heure Nombre Nombre Nombre Nombre Nombre Nombre Expression ?02:03:04? ?02:03:04? ?02:03:04? ?02:03:04? ?02:03:04? ?02:03:04? ?02:03:04? ?02:03:04? Valeur ?03:05:07? ?01:01:01? 7449 7319 14768 3692 3692 0

+ ?01:02:03? ?01:02:03? + 65 65 *2 / 2 \ 2 %2

1242 4e Dimension - Langage

(2) Il faut parfois convertir une expression heure en expression numrique. Par exemple, vous ouvrez un document sur disque l'aide de la fonction Ouvrir document, qui retourne un numro de rfrence de document (DocRef) qui est une expression de type heure. Vous pouvez passer DocRef une routine de plug-in 4D qui attend une valeur numrique comme numro de rfrence de document. Dans ce cas, ajoutez 0 (zro) l'heure pour obtenir une valeur numrique, sans la modifier. Par exemple : ` Slectionner et ouvrir un document $vhDocRef:=Ouvrir document("") Si (OK=1) ` Passez l'expression heure DocRef en tant qu'expression numrique ` une routine d'extension 4D faire quelque chose (0+$vhDocRef) Fin de si Rfrence Oprateurs, Oprateurs de comparaison, Oprateurs logiques, Oprateurs numriques, Oprateurs sur les bits, Oprateurs sur les chanes, Oprateurs sur les dates, Oprateurs sur les images.

4e Dimension - Langage 1243

Oprateurs de comparaison

Oprateurs version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les tableaux suivants dcrivent les oprateurs de comparaison. Ces oprateurs peuvent tre appliqus aux expressions de type chane, numrique, date, heure et pointeur (il n'est donc pas possible de les utiliser avec des expressions de type tableau, image ou BLOB). Une expression qui utilise un oprateur de comparaison retourne une valeur boolenne, soit VRAI soit FAUX. Comparaisons de chanes Opration Syntaxe Egalit Chane = Chane Ingalit Suprieur Infrieur Suprieur ou gal Infrieur ou gal Chane # Chane Chane > Chane Chane < Chane Chane >= Chane Chane <= Chane

Retourne Boolen Boolen Boolen Boolen Boolen Boolen

Expression "abc" = "abc" "abc" = "abd" "abc" # "abd" "abc" # "abc" "abd" > "abc" "abc" > "abc" "abc" < "abd" "abc" < "abc" "abd" >= "abc" "abc" >= "abd" "abc" <= "abd" "abd" <= "abc"

Valeur Vrai Faux Vrai Faux Vrai Faux Vrai Faux Vrai Faux Vrai Faux

Comparaisons de numriques Opration Syntaxe Egalit Nombre = Nombre Ingalit Suprieur Infrieur Suprieur ou gal Infrieur ou gal Nombre # Nombre Nombre > Nombre Nombre < Nombre Nombre >= Nombre Nombre <= Nombre

Retourne Boolen Boolen Boolen Boolen Boolen Boolen

Expression 10 = 10 10 = 11 10 #11 10 # 10 11 > 10 10 > 11 10 < 11 11 < 10 11 >= 10 10 >= 11 10 <= 11 11 <= 10

Valeur Vrai Faux Vrai Faux Vrai Faux Vrai Faux Vrai Faux Vrai Faux

1244 4e Dimension - Langage

Comparaisons de dates Opration Syntaxe Egalit Date = Date Ingalit Suprieur Infrieur Suprieur ou gal Infrieur ou gal Date # Date Date > Date Date < Date Date >= Date Date <= Date

Retourne Boolen Boolen Boolen Boolen Boolen Boolen

Expression !1/1/97! =!1/1/97! !20/1/97! =!1/1/97! !20/1/97! # !1/1/97! !1/1/97! # !1/1/97! !20/1/97! > !1/1/97! !1/1/97! > !1/1/97! !1/1/97! < !20/1/97! !1/1/97! < !1/1/97! !20/1/97! >=!1/1/97! !1/1/97!>=!20/1/97! !1/1/97!<=!20/1/97! !20/1/97!<=!1/1/97!

Valeur Vrai Faux Vrai Faux Vrai Faux Vrai Faux Vrai Faux Vrai Faux

Comparaisons d'heures Opration Syntaxe Egalit Heure = Heure Ingalit Suprieur Infrieur Suprieur ou gal Infrieur ou gal Heure # Heure Heure > Heure Heure < Heure Heure >= Heure Heure <= Heure

Retourne Boolen Boolen Boolen Boolen Boolen Boolen

Expression ?01:02:03? ?01:02:03? ?01:02:03? ?01:02:03? ?01:02:04? ?01:02:03? ?01:02:03? ?01:02:03? ?01:02:03? ?01:02:03? ?01:02:03? ?01:02:04?

= ?01:02:03? = ?01:02:04? # ?01:02:04? # ?01:02:03? > ?01:02:03? > ?01:02:03? < ?01:02:04? < ?01:02:03? >=?01:02:03? >=?01:02:04? <=?01:02:03? <=?01:02:03?

Valeur Vrai Faux Vrai Faux Vrai Faux Vrai Faux Vrai Faux Vrai Faux

4e Dimension - Langage 1245

Comparaisons de pointeurs Avec : ` vPtrA et vPtrB pointent sur le mme objet vPtrA:=->unObjet vPtrB:=->unObjet ` vPtrC pointe sur un autre objet vPtrC:=->autreObjet Opration Egalit Ingalit Syntaxe Pointeur = Pointeur Pointeur # Pointeur Retourne Boolen Boolen Expression vPtrA = vPtrB vPtrA = vPtrC vPtrA # vPtrC vPtrA # vPtrB Valeur Vrai Faux Vrai Faux

Remarques sur les comparaisons de chanes Voici quelques informations supplmentaires sur les comparaisons d'alphanumriques : Les chanes sont toujours compares caractre par caractre. Lors d'une comparaison de chanes, 4e Dimension ne tient pas compte de la casse des caractres ; par exemple, "a"="A" retourne VRAI. Pour savoir si des caractres sont en majuscules ou en minuscules, vous devez comparer leurs codes ASCII. Par exemple, l'expression suivante retourne FAUX : Code ascii ("A") = Code ascii ("a") ` 65 n'est pas gal 97 Lors d'une comparaison de chanes, les caractres diacritiques sont compars l'aide de la table de comparaison des caractres de votre machine. Par exemple, les expressions suivantes retournent VRAI : "n" = "" "n" = "" "A"="" ` etc Le joker (@) peut tre utilis dans toute comparaison de chanes. Il remplace un ou plusieurs caractres. Ainsi, par exemple, l'expression suivante est value VRAI : "abcdefghij" = "abc@"

1246 4e Dimension - Langage

Le joker doit tre utilis dans le second oprande (la chane qui se trouve droite de l'oprateur). L'expression suivante est value FAUX car le joker est alors considr en tant que caractre : "abc@" = "abcdefghij" Le joker signifie un ou plusieurs caractres sinon rien. Les expressions suivantes sont values VRAI : "abcdefghij" = "abcdefghij@" "abcdefghij" = "@abcdefghij" "abcdefghij" = "abcd@efghij" "abcdefghij" = "@abcdefghij@" "abcdefghij" = "@abcde@fghij@" En revanche, dans tous les cas, lorsque deux jokers conscutifs sont placs dans une comparaison de chanes, celle-ci sera value FAUX. L'expression suivante est FAUX : "abcdefghij" = "abc@@fg" Notes Si vous souhaitez effectuer des comparaisons ou des recherches utilisant @ en tant que caractre (et non en tant que joker), vous disposez de deux possibilits : Utiliser l'instruction Code ascii(Arobase). Imaginons par exemple que vous souhaitiez savoir si une chane se termine par le caractre @. - lexpression suivante (si $vaValeur n'est pas vide) retourne toujours VRAI : ($vaValeurLongueur($vaValeur)="@") - l'expression suivante sera correctement value : (Code ascii($vaValeurLongueur($vaValeur))#64) Utiliser l'option Considrer @ comme caractre pour les tris et les recherches, accessible via la bote de dialogue des Proprits de la base. Cette option permet de paramtrer le mode dinterprtation du caractre @ lorsque celui-ci est inclus dans une chane de caractres. Elle peut donc influer sur le fonctionnement des oprateurs de comparaison utiliss dans le cadre de recherches ou de tris. Pour plus d'informations, reportez-vous au manuel Mode Structure de 4D. Rfrence Oprateurs, Oprateurs logiques, Oprateurs numriques, Oprateurs sur les bits, Oprateurs sur les dates, Oprateurs sur les heures, Oprateurs sur les images.

4e Dimension - Langage 1247

Oprateurs logiques

Oprateurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension supporte deux oprateurs logiques : l'oprateur d'intersection (ET) et l'oprateur de runion inclusive (OU). Ces deux oprateurs ne s'appliquent qu'aux expressions boolennes. Le ET logique retourne VRAI si les deux expressions sont VRAIES. Le OU logique retourne VRAI si au moins une des expressions est VRAIE. 4e Dimension vous permet galement d'exploiter les fonctions boolennes Vrai, Faux et Non. Pour plus d'informations, reportez-vous aux descriptions de ces commandes. Le tableau suivant dcrit les oprateurs logiques : Opration ET Syntaxe Boolen & Boolen Retourne Boolen Expression ("A" = "A") & (15 # 3) ("A" = "B") & (15 # 3) ("A" = "B") & (15 = 3) ("A" = "A") | (15 # 3) ("A" = "B") | (15 # 3) ("A" = "B") | (15 = 3) Valeur Vrai Faux Faux Vrai Vrai Faux

OU

Boolen | Boolen

Boolen

Voici la "table de vrit" pour l'oprateur logique "ET" : Expr1 Vrai Vrai Faux Faux Expr2 Vrai Faux Vrai Faux Expr1 & Expr2 Vrai Faux Faux Faux

Voici la "table de vrit" pour l'oprateur logique "OU" : Expr1 Vrai Vrai Faux Faux Expr2 Vrai Faux Vrai Faux Expr1 | Expr2 Vrai Vrai Vrai Faux

1248 4e Dimension - Langage

Astuce Si vous devez calculer une runion exclusive (le "OU" exclusif) entre Expr1 et Expr2, crivez : (Expr1 | Expr2) & Non(Expr1 & Expr2) Rfrence Oprateurs, Oprateurs de comparaison, Oprateurs numriques, Oprateurs sur les bits, Oprateurs sur les chanes, Oprateurs sur les dates, Oprateurs sur les heures, Oprateurs sur les images.

4e Dimension - Langage 1249

Oprateurs sur les images

Oprateurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le tableau suivant dcrit les oprateurs que vous pouvez utiliser avec 4e Dimension sur les images. Une expression qui utilise un oprateur sur les images retourne toujours une image. Opration Syntaxe Action Concatnation horizontale Image1 + Image2 Place Image2 la droite d'Image1 Concatnation verticale Image1 / Image2 Place Image2 au-dessous d'Image1 Superposition exclusive Image1 & Image2 Effectue un OU exclusif entre Image1 et Image2 Superposition inclusive Image1 | Image2 Effectue un OU inclusif entre Image1 et Image2 Dplacement horizontal Image + Nombre Dplace Image horizontalement d'un nombre de pixels gal Nombre Dplacement vertical Image / Nombre Dplace Image verticalement d'un nombre de pixels gal Nombre Redimensionnement Image * Nombre Redimensionne Image au pourcentage Nombre Extension horizontale Image *+ Nombre Redimensionne Image horizontalement au pourcentage Nombre Extension verticale Image */ Nombre Redimensionne Image verticalement au pourcentage Nombre Les deux oprateurs & et | retournent toujours une image de type bitmap, quel que soit le type des deux images source. La raison en est que 4D dessine d'abord les images en mmoire en tant que bitmaps et calcule l'image rsultante appliquant l'oprateur OU sur chaque pixel du bitmap. Les autres oprateurs sur les images retournent des images vectorielles si les deux images source sont elles aussi vectorielles (rappelez-vous qu'une image imprime avec le format d'affichage Sur fond est imprime en tant que bitmap).

1250 4e Dimension - Langage

Exemples Toutes les images qui sont affiches utilisent le format d'affichage Image sur fond. Voici l'image cercle :

Voici l'image rectangle :

Dans les exemples ci-dessous, chaque expression est suivie de sa reprsentation graphique. Concatnation horizontale cercle + rectangle ` Placer le rectangle droite du cercle

4e Dimension - Langage 1251

rectangle + cercle ` Placer le cercle droite du rectangle

Concatnation verticale cercle / rectangle ` Placer le rectangle sous cercle

rectangle / cercle ` Placer le cercle sous le rectangle

1252 4e Dimension - Langage

Superposition exclusive (OU exclusif) cercle & rectangle ` Exclusif OU des deux images

Superposition inclusive (OU inclusif) cercle | rectangle ` Inclusif OU des deux images

4e Dimension - Langage 1253

Dplacement horizontal rectangle + 50 ` Dplacer le rectangle 50 pixels vers la droite

rectangle - 50 ` Dplacer le rectangle 50 pixels vers la gauche

1254 4e Dimension - Langage

Dplacement vertical rectangle /50 ` Dplacer le rectangle 50 pixels vers le bas

rectangle /-20 ` Dplacer le rectangle 20 pixels vers le haut

4e Dimension - Langage 1255

Redimensionnement rectangle * 1.5 ` Augmenter la taille du rectangle de 50%

rectangle * 0.5 ` Rduire la taille du rectangle de 50%

1256 4e Dimension - Langage

Extension horizontale cercle *+3 `Multiplier par 3 la largeur du cercle

cercle *+ 0,25 ` La largeur du cercle est rduite un quart de sa taille originale

4e Dimension - Langage 1257

Extension verticale cercle */ 2 ` Doubler la hauteur du cercle

cercle */ 0.25 ` La hauteur du cercle est rduite un quart de sa taille originale

Rfrence Oprateurs, Oprateurs de comparaison, Oprateurs logiques, Oprateurs numriques, Oprateurs sur les bits, Oprateurs sur les chanes, Oprateurs sur les dates, Oprateurs sur les heures.

1258 4e Dimension - Langage

Oprateurs sur les bits

Oprateurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les oprateurs sur les bits s'appliquent des expressions ou valeurs de type Entier long. Note : Si vous passez une valeur de type Entier ou Numrique (Rel) un oprateur sur les bits, 4e Dimension la convertit en Entier long avant de calculer le rsultat de l'expression. Lorsque vous employez des oprateurs sur les bits, vous devez considrer une valeur de type Entier long comme un tableau de 32 bits. Les bits sont numrots de 0 31, de droite gauche. Comme un bit peut valoir 0 (zro) ou 1, vous pouvez galement considrer une valeur de type Entier long comme une expression dans laquelle vous pouvez stocker 32 valeurs de type Boolen. Lorsque le bit vaut 1, la valeur est Vrai et lorsque le bit vaut 0, la valeur est Faux. Une expression utilisant un oprateur sur les bits retourne une valeur de type Entier long, l'exception de l'oprateur Tester bit avec lequel l'expression retourne est du type Boolen. Le tableau suivant fournit la liste des oprateurs sur les bits et leur syntaxe : Opration ET OU (inclusif) OU (exclusif) Dcaler bits gauche Dcaler bits droite Mettre bit 1 Mettre bit 0 Tester bit Oprateur & | ^| << >> ?+ ??? Syntaxe E.long & E.long E.long | E.long E.long ^| E.long E.long << E.long E.long >> E.long E.long ?+ E.long E.long ?- E.long E.long ?? E.long Retourne E.long E.long E.long E.long E.long E.long E.long Boolen

(voir (voir (voir (voir (voir

note note note note note

1) 1) 2) 2) 2)

Notes (1) Dans les oprations utilisant Dcaler bits gauche et Dcaler bits droite, le second oprande indique le nombre de dcalages de bits du premier oprande effectuer dans la valeur retourne. Par consquent, ce second oprande doit tre compris entre 0 et 31. Notez qu'un dcalage de 0 retourne une valeur inchange et qu'un dcalage de plus de 31 bits retourne 0x00000000 car tous les bits sont perdus. Si vous passez une autre valeur en tant que second oprande, le rsultat sera non significatif.

4e Dimension - Langage 1259

(2) Dans les oprations utilisant Mettre bit 1, Mettre bit 0 et Tester bit, le second oprande indique le numro du bit sur lequel agir. Par consquent, ce second oprande doit tre compris entre 0 et 31. Sinon, l'expression retourne inchange la valeur du premier oprande pour Mettre bit 1 et Mettre bit 0, et retourne Faux pour Tester bit. Le tableau suivant dresse la liste des oprateurs sur les bits et de leurs effets : Opration sur les bits Description ET Chaque bit retourn est le rsultat de l'opration ET logique applique aux deux bits oprandes. Voici la table du ET logique : 1&11 0&10 1&00 0&00 En rsum, le rsultat vaut 1 si les deux bits oprandes valent 1, dans tous les autres cas le bit rsultant vaut 0. Chaque bit retourn est le rsultat de l'opration OU inclusif logique applique aux deux bits oprandes. Voici la table du OU inclusif logique : 1|11 0|11 1|01 0|00 En rsum, le rsultat vaut 1 si au moins un des deux bits oprandes vaut 1, sinon le bit rsultant vaut 0. Chaque bit retourn est le rsultat de l'opration OU exclusif logique applique aux deux bits oprandes. Voici la table du OU exclusif logique: 1 ^| 1 0 0 ^| 1 1 1 ^| 0 1 0 ^| 0 0 Donc, le rsultat vaut 1 si un seul des deux bits oprandes vaut 1 (et pas l'autre), dans tous les autres cas le bit rsultant vaut 0. La valeur retourne correspond au premier oprande dont la valeur est dcale vers la gauche du nombre de bits spcifi par le second oprande. Les bits auparavant situs gauche sont perdus et les nouveaux bits situs droite ont la valeur 0. Note : En ne tenant compte que des valeurs positives, un dcalage vers la gauche de N bits revient multiplier la valeur par 2^N.

OU (inclusif)

OU (exclusif)

Dcaler bits gauche

1260 4e Dimension - Langage

Dcaler bits droite

Mettre bit 1

Mettre bit 0

Tester bit

La valeur retourne correspond au premier oprande dont la valeur est dcale vers la droite du nombre de bits spcifi par le second oprande. Les bits auparavant situs droite sont perdus et les nouveaux bits situs gauche ont la valeur 0. Note : En ne tenant compte que des valeurs positives, un dcalage vers la droite de N bits revient diviser la valeur par 2^N. La valeur retourne est la valeur du premier oprande dans lequel le bit dont le numro est spcifi par le second oprande est positionn 1. Les autres bits sont inchangs. La valeur retourne est la valeur du premier oprande dans lequel le bit dont le numro est spcifi par le second oprande est positionn 0. Les autres bits sont inchangs. Retourne Vrai si, dans le premier oprande, le bit dont le numro est indiqu par le second oprande vaut 1. Retourne Faux si, dans le premier oprande, le bit dont le numro est indiqu par le second oprande vaut 0.

Exemples (1) Le tableau ci-dessous propose un exemple d'utilisation de chaque oprateur sur les bits : Opration ET OU (inclusif) OU (exclusif) Dcaler bit gauche Dcaler bit droit Mettre bit 1 Mettre bit 0 Tester bit Exemple 0x0000FFFF & 0xFF00FF00 0x0000FFFF | 0xFF00FF00 0x0000FFFF ^| 0xFF00FF00 0x0000FFFF << 8 0x0000FFFF >> 8 0x00000000 ?+ 16 0x00010000 ?- 16 0x00010000 ?? 16 Rsultat 0x0000FF00 0xFF00FFFF 0xFF0000FF 0x00FFFF00 0x000000FF 0x00010000 0x00000000 Vrai

4e Dimension - Langage 1261

(2) 4e Dimension exploite de nombreuses constantes prdfinies. Le nom de certaines d'entre elles commence par "Bit" ou "Masque". C'est le cas des constantes incluses dans le thme Proprits des ressources : Constante Masque ressource heap systme Bit ressource heap systme Masque ressource purgeable Bit ressource purgeable Masque ressource verrouille Bit ressource verrouille Masque ressource protge Bit ressource protge Masque ressource prcharge Bit ressource prcharge Masque ressource modifie Bit ressource modifie Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long Valeur 64 6 32 5 16 4 8 3 4 2 2 1

Ces constantes vous permettent de tester la valeur retourne par la fonction Lire proprietes ressource ou de dfinir la valeur passer ECRIRE PROPRIETES RESSOURCE. Les constantes dont le nom dbute par Bit fournissent la position du bit que vous voulez tester, effacer ou fixer. Les constantes dont le nom dbute par Masque sont des valeurs de type Entier long dans lesquelles seul le bit que vous voulez tester, effacer ou fixer est gal 1. Si, par exemple, vous devez tester si une ressource (dont les proprits sont stockes dans la variable $vlResAttr) est purgeable ou non, vous pouvez crire : Si ($vlResAttr ?? Bit ressource purgeable) ` La ressource est-elle purgeable ? ou : Si (($vlResAttr & Masque ressource purgeable) # 0) ` La ressource est-elle purgeable ? A l'inverse, vous pouvez utiliser ces constantes pour dfinir le mme bit. Vous pouvez crire : $vlResAttr:=$vlResAttr ?+ Bit ressource purgeable ou : $vlResAttr:=$vlResAttr | Bit ressource purgeable

1262 4e Dimension - Langage

(3) Vous voulez stocker deux valeurs entires dans un Entier long. Vous pouvez crire : $vlLong:=($viIntA<<16) | $viIntB ` Stocker deux Entiers dans un Entier long $vlIntA:=$vlLong>>16 ` Extraire l'Entier stock dans le mot haut $viIntB:=$vlLong & 0xFFFF ` Extraire l'entier stock dans le mot bas Note : Soyez prudent lorsque vous manipulez des Entiers longs ou des Entiers avec des expressions qui combinent des oprateurs sur les bits et des oprateurs numriques. Le bit suprieur (bit 31 pour un Entier long, bit 15 pour un Entier) dtermine le signe de la valeur (positif s'il est 0, ngatif s'il est 1). Les oprateurs numriques utilisent ce bit pour dtecter le signe d'une valeur, mais les oprateurs sur les bits n'en tiennent pas compte. Rfrence Oprateurs, Oprateurs de comparaison, Oprateurs logiques, Oprateurs numriques, Oprateurs sur les chanes, Oprateurs sur les dates, Oprateurs sur les heures, Oprateurs sur les images.

4e Dimension - Langage 1263

1264 4e Dimension - Langage

43 ________________________ Outils

4e Dimension - Langage 1265

1266 4e Dimension - Langage

GENERER APPLICATION

Outils version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

GENERER APPLICATION {(nomProjet)} Paramtre nomProjet Type Chane Description Chemin daccs complet du projet utiliser

Description La commande GENERER APPLICATION lance le processus de gnration dapplication en prenant en compte les paramtres dfinis dans le projet dapplication courant ou le projet dapplication dsign par le paramtre nomProjet. Un projet dapplication est un fichier XML contenant tous les paramtrages utiliss pour gnrer une application. La plupart de ces paramtrages sont visibles dans la bote de dialogue du Gnrateur dapplication (pour plus d'informations sur le Gnrateur d'application, reportez-vous au manuel Mode Structure de 4e Dimension). Par dfaut, 4e Dimension cre pour chaque base un projet dapplication par dfaut nomm buildapp.xml et plac dans le sous-dossier BuildApp du dossier Preferences de la base. Si la base na pas t compile ou si le code compil nest pas jour, la commande lance au pralable le processus de compilation. Dans ce cas, la fentre du compilateur napparat pas (sauf en cas derreur), seule une barre de progression est affiche. Si vous ne passez pas le paramtre facultatif nomProjet, la commande utilisera les paramtres dfinis dans le projet dapplication courant. Aucune bote de dialogue napparat. Si vous passez le chemin daccs et le nom dun fichier XML de projet dapplication valide (extension .xml), la commande utilisera les paramtres dfinis dans le fichier. Pour plus dinformations sur la structure et les cls utilisables dans un fichier XML de projet dapplication, reportez-vous au manuel (HTML) Cls XML de 4e Dimension. Exemple Gnration de deux applications dans une seule mthode :

GENERER APPLICATION("c:\\dossier\\projets\\monprojet1.xml") Si (OK=1) GENERER APPLICATION("c:\\dossier\\projets\\monprojet2.xml") Fin de si

Variables et ensembles systme La variable systme OK prend la valeur 1 si la commande a t correctement excute, sinon elle prend la valeur 0. Gestion des erreurs Si la commande choue, une erreur est gnre, que vous pouvez intercepter laide de la commande APPELER SUR ERREUR. 4e Dimension - Langage 1267

ENCODER

Outils version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENCODER (blob) Paramtre blob Type BLOB Description BLOB encoder en base64 BLOB encod en base64

Description La commande ENCODER encode le BLOB pass dans le paramtre blob en base64. La commande modifie directement le BLOB pass en paramtre. Lencodage base64 modifie des donnes codes sur 8 bits afin quelles ne conservent plus que 7 bits utiles. Cet encodage est par exemple requis pour la manipulation des BLOBs via le XML. Rfrence DECODER.

1268 4e Dimension - Langage

DECODER

Outils version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DECODER (blob) Paramtre blob Type BLOB Description BLOB encod en base64 BLOB dcod

Description La commande DECODER permet de dcoder le BLOB encod en base64 pass dans le paramtre blob. La commande modifie directement le BLOB pass en paramtre. La commande neffectue pas de contrle sur le contenu de blob. Vous devez veiller ce que les donnes passes soient effectivement encodes en base64, sinon le rsultat obtenu ne sera pas correct. Rfrence ENCODER.

4e Dimension - Langage 1269

CORRECTION ORTHOGRAPHIQUE

Outils version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CORRECTION ORTHOGRAPHIQUE Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande CORRECTION ORTHOGRAPHIQUE dclenche la vrification de lorthographe du champ ou de la variable ayant le focus dans le formulaire affich lcran. Lobjet vrifi doit tre de type Alpha ou Texte. Note : Si vous souhaitez dclencher la correction orthographique partir dun bouton dans le formulaire, assurez-vous quil ne dispose pas de la proprit Focusable. La vrification dbute par le premier mot du champ ou de la variable. Si un mot inconnu est dtect, la bote de dialogue de correction apparat (pour plus dinformations, reportezvous au manuel Mode Structure de 4e Dimension). 4e Dimension utilise le dictionnaire courant (correspondant la langue de lapplication) sauf si vous avez utilis la commande CHANGER DICTIONNAIRE. Rfrence CHANGER DICTIONNAIRE.

1270 4e Dimension - Langage

CHANGER DICTIONNAIRE

Outils version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER DICTIONNAIRE (dictionnaire) Paramtre dictionnaire Type Entier long Description Dictionnaire utiliser pour la correction orthographique

Description La commande CHANGER DICTIONNAIRE provoque le remplacement du dictionnaire courant par celui spcifi par le paramtre dictionnaire. Le dictionnaire courant est utilis pour la correction orthographique intgre de 4e Dimension (pour plus dinformations, reportez-vous au manuel Mode Structure de 4e Dimension). Par dfaut, 4e Dimension utilise le dictionnaire correspondant la langue de lapplication. Quatre dictionnaires sont disponibles : franais, anglais, allemand et espagnol. Passez dans le paramtre dictionnaire le numro du dictionnaire utiliser. Vous pouvez utiliser une des constantes prdfinies suivantes, places dans le thme Dictionnaires : Constante Type Valeur Dictionnaire anglais Entier long 69632 Dictionnaire allemand Entier long 131584 Dictionnaire espagnol Entier long 196608 Dictionnaire franais Entier long 262144 Rfrence CORRECTION ORTHOGRAPHIQUE. Variables et ensembles systme Si le dictionnaire est correctement charg, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est retourne.

4e Dimension - Langage 1271

1272 4e Dimension - Langage

44 ________________________ Presse-Papiers

4e Dimension - Langage 1273

1274 4e Dimension - Langage

AJOUTER A PRESSE PAPIERS

Presse-Papiers version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

AJOUTER A PRESSE PAPIERS (typeDonnes; donnes) Paramtre typeDonnes donnes Type Alpha BLOB Description Type de donnes (4 caractres) Donnes ajouter au Presse-papiers

Description AJOUTER A PRESSE PAPIERS ajoute dans le Presse-papiers les donnes du type spcifi dans typeDonnes prsentes dans le BLOB donnes. ATTENTION : La valeur passe dans typeDonnes tablit la distinction majuscules/minuscules, par exemple abcd n'est pas gal ABCD. Si les donnes dans le BLOB sont correctement ajoutes au Presse-papiers, la variable OK prend la valeur 1. Sinon, la variable OK est mise 0 et une erreur peut tre gnre. Gnralement, vous utilisez la commande AJOUTER A PRESSE PAPIERS pour placer plusieurs instances des mmes donnes dans le Presse-papiers ou pour y ajouter des valeurs qui ne sont pas du type TEXT ou PICT. Pour ajouter de nouvelles donnes au Presse-papiers, il faut d'abord effacer le Presse-papiers l'aide de la commande EFFACER PRESSE PAPIERS. Si vous voulez effacer le Presse-papiers et y ajouter : du texte, utilisez la commande ECRIRE TEXTE DANS PRESSE PAPIERS, une image, utilisez la commande ECRIRE IMAGE DANS PRESSE PAPIERS. Notez cependant que si un BLOB contient du texte ou une image, vous pouvez utiliser la commande AJOUTER A PRESSE PAPIERS pour y ajouter du texte ou une image.

4e Dimension - Langage 1275

Exemple A l'aide des commandes du thme Presse-papiers et des BLOBs, vous pouvez crire des mthodes de Couper/Copier/Coller pour grer des donnes structures au lieu d'une seule information. Dans l'exemple suivant, les deux mthodes projet crire enregistrement dans Presse-papiers et lire enregistrement dans Presse-papiers vous permettent de traiter un enregistrement comme une information copier dans le Presse-papiers. ` Mthode projet crire enregistrement dans Presse-papiers ` crire enregistrement dans Presse-papiers ( Numrique ) ` crire enregistrement dans Presse-papiers ( Numro de table ) C_ENTIER LONG($1;$vlChamp;$vlTypeChamp) C_POINTEUR($vpTable;$vpChamp) C_ALPHA(255;$vaNomDoc) C_TEXTE($vtDonnesEnregistrement;$vtDonnesChamp) C_BLOB($vxDonnesEnregistrement) ` Effacer le Presse-papiers (il restera vide s'il n'y a pas d'enregistrement courant) EFFACER PRESSE PAPIERS ` Obtenir un pointeur vers la table dont le numro est pass en paramtre $vpTable:=Table($1) ` S'il y a un enregistrement courant pour cette table Si ((Numero enregistrement($vpTable->)>=0) | (Nouvel enregistrement($vpTable->))) ` Initialiser la variable Texte qui contiendra l'image de texte de l'enregistrement $vtDonnesEnregistrement:="" ` Pour chaque champ de l'enregistrement : Boucle ($vlChamp;1;Nombre de champs($1)) ` Obtenir le type du champ LIRE PROPRIETES CHAMP($1;$vlChamp;$vlTypeChamp) ` Obtenir un pointeur vers le champ $vpChamp:=Champ($1;$vlChamp) ` Selon le type du champ, copier (ou non) ses donnes de faon approprie Au cas ou : (($vlTypeChamp=Champ alphanumrique ) | ($vlTypeChamp=Texte )) $vtDonnesChamp:=$vpChamp-> : (($vlTypeChamp=Numrique ) | ($vlTypeChamp=Entier ) | ($vlTypeChamp=Entier long) | ($vlTypeChamp=Champ ou variable date ) | ($vlTypeChamp=Champ ou variable heure )) $vtDonnesChamp:=Chaine($vpChamp->) : ($vlTypeChamp=Boolen ) $vtDonnesChamp:=Chaine(Num($vpChamp->);"Oui;;Non")

1276 4e Dimension - Langage

Sinon ` Passer et ignorer les autres types de champs $vtDonnesChamp:="" Fin de cas ` Accumuler les donnes sur le champ dans une variable texte qui stocke ` l'image de texte de l'enregistrement $vtDonnesEnregistrement:=$vtDonnesEnregistrement+Nom du champ($1; $vlChamp)+":"+Caractere(9)+$vtDonnesChamp+CR ` Note : La mthode CR retourne Caractere(13) sous MacOS et ` Caractere(13) + Caractere(10) sous Windows Fin de boucle ` Mettre l'image de texte de l'enregistrement dans le Presse-papiers ECRIRE TEXTE DANS PRESSE PAPIERS($vtDonnesEnregistrement) ` Nommer le fichier d'Album dans le Dossier temporaire $vaNomDoc:=Dossier temporaire+"Album"+Chaine(1+(Hasard%99)) ` Supprimer le fichier d'Album s'il existe (il faut tester une erreur ici) SUPPRIMER DOCUMENT($vaNomDoc) ` Crer le fichier d'Album REGLER SERIE(10;$vaNomDoc) ` Envoyer l'enregistrement entier dans le Presse-papiers ENVOYER ENREGISTREMENT($vpTable->) ` Fermer le fichier d'Album REGLER SERIE(11) ` Charger le fichier d'Album dans un BLOB DOCUMENT VERS BLOB($vaNomDoc;$vxDonnesEnregistrement) ` Nous n'avons plus besoin du fichier d'Album SUPPRIMER DOCUMENT($vaNomDoc) ` Ajouter l'image complte de l'enregistrement dans le Presse-papiers ` Note: nous utilisons le type de donnes "4Drc" de faon arbitraire AJOUTER A PRESSE PAPIERS("4Drc";$vxDonnesEnregistrement) ` Le Presse-papiers contient : ` (1) Une image de texte de l'enregistrement ` (2) Une image entire de l'enregistrement (y compris les images, sous-tables et ` les champs de type BLOB) Fin de si

Lors de la saisie d'un enregistrement, si vous appliquez la mthode crire enregistrement dans Presse-papiers la table, le Presse-papiers contiendra le texte de l'enregistrement et galement l'image entire de l'enregistrement.

4e Dimension - Langage 1277

Vous pouvez coller cette image de l'enregistrement dans un autre enregistrement, l'aide de la mthode lire enregistrement dans Presse-papiers, qui est la suivante : ` Mthode lire enregistrement dans Presse-papiers ` lire enregistrement dans Presse-papiers ( Numro ) ` lire enregistrement dans Presse-papiers ( Numro de table ) C_ENTIER LONG($1;$vlChamp;$vlTypeChamp;$vlPosCR;$vlPosColon) C_POINTEUR($vpTable;$vpChamp) C_ALPHA(255;$vaNomDoc) C_BLOB($vxDonneesPressePapiers) C_TEXTE($vtDonneesPressePapiers;$vtDonnesChamp) ` Obtenir un pointeur vers la table dont le numro est pass en tant que paramtre $vpTable:=Table($1) ` S'il y a un enregistrement courant pour cette table SI ((Numero enregistrement($vpTable->)>=0) | (Numero enregistrement ($vpTable->)=-3)) Au cas ou ` Est-ce que le Presse-papiers contient une image entire de l'enregistrement ? : (Tester presse papiers("4Drc")>0) ` Si oui, extraire le contenu du Presse-papiers LIRE PRESSE PAPIERS("4Drc";$vxDonnesPressePapiers) ` Nommer le fichier d'Album dans le Dossier temporaire $vaNomDoc:=Dossier temporaire+"Album"+Chaine(1+(Hasard%99)) ` Supprimer le fichier d'Album s'il existe (il faut tester l'erreur ici) SUPPRIMER DOCUMENT($vaNomDoc) ` Enregistrer le BLOB dans le fichier d'Album BLOB VERS DOCUMENT($vaNomDoc;$vxDonnesPressePapiers) ` Ouvrir le fichier d'Album REGLER SERIE(10;$vaNomDoc) ` Recevoir l'enregistrement entier du fichier d'Album RECEVOIR ENREGISTREMENT($vpTable->) ` Fermer le fichier d'Album REGLER SERIE(11) ` Nous n'avons plus besoin du fichier d'Album SUPPRIMER DOCUMENT($vaNomDoc) ` Est-ce que le Presse-papiers contient du texte ? : (Tester presse papiers("TEXT")>0) ` Extraire le texte du Presse-papiers $vtDonnesPressePapiers:=Lire texte dans presse papiers ` Initialiser le numro de champ incrmenter $vlChamp:=0

1278 4e Dimension - Langage

Repeter ` Chercher la ligne de champ suivante dans le texte $vlPosCR:=Position(CR ;$vtDonnesPressePapiers) Si ($vlPosCR>0) ` Extraire la ligne de champ $vtDonnesChamp:=Sous chaine($vtDonnesPressePapiers;1; $vlPosCR-1) ` S'il y a un signe deux points ":" $vlPosColon:=Position(":";$vtDonnesChamp) Si ($vlPosColon>0) ` Ne rcuprer que les donnes de champ (supprimer son nom) $vtDonnesChamp:=Sous chaine($vtDonnesChamp; $vlPosColon+2) Fin de si ` Incrmenter le numro du champ $vlChamp:=$vlChamp+1 ` Le Presse-papiers peut contenir d'autres donnes dont nous n'avons ` pas besoin... Si ($vlChamp<=Nombre de champs($vpTable)) ` Obtenir le type du champ LIRE PROPRIETES CHAMP($1;$vlChamp;$vlTypeChamp) ` Obtenir un pointeur vers le champ $vpChamp:=Champ($1;$vlChamp) ` Selon le type du champ, copier (ou non) le texte de manire ` approprie Au cas ou : (($vlTypeChamp=Champ alphanumrique ) | ($vlTypeChamp= Texte )) $vpChamp->:=$vtDonnesChamp : (($vlTypeChamp=Numrique ) | ($vlTypeChamp= Entier ) | ($vlTypeChamp=Entier long )) $vpChamp->:=Num($vtDonnesChamp) : ($vlTypeChamp=Champ ou variable date ) $vpChamp->:=Date($vtDonnesChamp) : ($vlTypeChamp=Champ ou variable heure ) $vpChamp->:=Heure($vtDonnesChamp) : ($vlTypeChamp=Boolen ) $vpChamp->:=($vtDonnesChamp="Oui") Sinon ` Passer et ignorer les autres types de donnes Fin de cas

4e Dimension - Langage 1279

Sinon ` Tous les champs ont t affects, sortir de la boucle $vtDonnesPressePapiers:="" Fin de si ` Eliminer le texte qui vient d'tre extrait $vtDonneesPressePapiers:=Sous chaine($vtDonneesPressePapiers; $vlPosCR+Longueur(CR )) Sinon ` Aucun dlimiteur trouv, sortir de la boucle $vtDonnesPressePapiers:="" Fin de si ` Rpter jusqu' ce que nous avons des donnes Jusque (Longueur($vtDonnesPressePapiers)=0) Sinon ALERTE("Le Presse-papiers ne contient pas de donnes pouvant tre colles en tant qu'enregistrement.") Fin de cas Fin de si Rfrence ECRIRE IMAGE DANS PRESSE PAPIERS, ECRIRE TEXTE DANS PRESSE PAPIERS, EFFACER PRESSE PAPIERS. Variables systme Si les donnes dans le BLOB sont correctement ajoutes au Presse-papiers, la variable systme OK prend la valeur 1. Sinon, OK est mise 0 et une erreur peut tre gnre. Gestion des erreurs S'il n'y a pas assez de mmoire pour ajouter les donnes du BLOB dans le Presse-papiers, une erreur -108 est gnre.

1280 4e Dimension - Langage

EFFACER PRESSE PAPIERS

Presse-Papiers version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

EFFACER PRESSE PAPIERS Paramtre Type Description Cette commande ne requiert pas de paramtre Description EFFACER PRESSE PAPIERS efface le contenu du Presse-papiers. Si le Presse-papiers contient plusieurs instances des mmes donnes, toutes les instances sont effaces. Aprs un appel EFFACER PRESSE PAPIERS, le Presse-papiers est vide. Vous devez appeler EFFACER PRESSE PAPIERS une fois avant de placer des nouvelles donnes dans le Presse-papiers l'aide de la commande AJOUTER A PRESSE PAPIERS, car cette dernire n'efface pas le Presse-papiers avant d'y coller des donnes. Si vous appelez EFFACER PRESSE PAPIERS une fois et puis appelez AJOUTER A PRESSE PAPIERS plusieurs fois, vous pouvez couper ou copier les mmes donnes sous des formats diffrents. En revanche, les commandes ECRIRE TEXTE DANS PRESSE PAPIERS et ECRIRE IMAGE DANS PRESSE PAPIERS effacent automatiquement le Presse-papiers avant d'y placer des donnes TEXT ou PICT. Exemple (1) Le code suivant efface le Presse-papiers et puis y ajoute des donnes :

EFFACER PRESSE PAPIERS ` Effacer le contenu du Presse-papiers ` Ajouter des donnes de type 'XWKZ' AJOUTER A PRESSE PAPIERS('XWKZ';$vxSomeData) AJOUTER A PRESSE PAPIERS('SYLK';$vxSylkData) ` Ajouter des donnes de type SYLK

(2) Reportez-vous l'exemple de la commande AJOUTER A PRESSE PAPIERS. Rfrence AJOUTER A PRESSE PAPIERS.

4e Dimension - Langage 1281

LIRE PRESSE PAPIERS

Presse-Papiers version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE PRESSE PAPIERS (typeDonnes; donnes) Paramtre typeDonnes donnes Type Alpha BLOB Description Type de donnes (4 caractres) Donnes extraites du Presse-papiers

Description LIRE PRESSE PAPIERS retourne dans le champ ou la variable de type BLOB donnes les donnes qui se trouvent dans Presse-papiers, et dont le type est pass dans typeDonnes. ATTENTION : La valeur passe dans typeDonnes tablit la distinction majuscules/minuscules, par exemple abcd n'est pas gal ABCD. Si les donnes sont correctement extraites du Presse-papiers, la variable OK prend la valeur 1. Si le Presse-papiers est vide ou ne contient pas de donnes du type spcifi, la commande retourne un BLOB vide et la variable OK prend la valeur 0 ; l'erreur -102 est gnre. S'il n'y a pas assez de mmoire pour extraire les donnes du Presse-papiers, la commande met la variable OK 0 et gnre l'erreur -108. Exemple Les mthodes objet suivantes sont celles de deux boutons qui copient et collent des donnes dans le tableau taOptions (pop up menu, liste droulante...) se trouvant dans le formulaire : ` Mthode objet bCopiertaOptions Si (Taille tableau(taOptions)>0) ` Est-ce qu'il y a quelque chose copier ? ` Mettre les lments du tableau dans un BLOB VARIABLE VERS BLOB (taOptions;$vxClipData) EFFACER PRESSE PAPIERS ` Vider le Presse-papiers ` Le type de donnes est choisi arbitrairement AJOUTER A PRESSE PAPIERS ("artx";taOptions) Fin de si

1282 4e Dimension - Langage

` Mthode objet bCollertaOptions ` Est-ce qu'il y a les donnes du type "artx" dans le Presse-papiers ? Si (Tester presse papiers ("artx")>0) LIRE PRESSE PAPIERS ("artx";$vxClipData) ` Extraire les donnes du Presse-papiers ` Remplir le tableau avec les donnes venant du BLOB BLOB VERS VARIABLE ($vxClipData;taOptions) taOptions:=0 ` Rinitialiser l'lment slectionn du tableau Fin de si

Rfrence AJOUTER A PRESSE PAPIERS, LIRE IMAGE DANS PRESSE PAPIERS, Lire texte dans presse papiers. Variables systme Si les donnes sont extraites correctement, la variable OK prend la valeur 1. Sinon, elle prend la valeur 0 et une erreur est gnre. Gestion des erreurs S'il n'y a pas assez de mmoire pour extraire les donnes, l'erreur -108 est gnre. S'il n'y a pas de donnes du type spcifi dans le Presse-papiers, l'erreur -102 est gnre.

4e Dimension - Langage 1283

LIRE IMAGE DANS PRESSE PAPIERS

Presse-Papiers version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE IMAGE DANS PRESSE PAPIERS (image) Paramtre image Type Image Description Image extraite du Presse-papiers

Description LIRE IMAGE DANS PRESSE PAPIERS retourne l'image prsente dans le Presse-papiers dans le champ ou la variable image. Si l'image est correctement extraite du Presse-papiers, la variable OK prend la valeur 1. Si le Presse-papiers est vide ou ne contient pas d'image, la variable OK prend la valeur 0 et l'erreur 102 est gnre. S'il n'y a pas assez de mmoire, la commande donne la valeur 0 la variable OK et gnre l'erreur 108. Exemple Ci-dessous, la mthode objet d'un bouton affecte l'image prsente dans le Presse-papiers, s'il y en a une, au champ [Employs]Photo :

Si (Tester presse papiers ("PICT")>0) LIRE IMAGE DANS PRESSE PAPIERS ([Employs]Photo) Sinon ALERTE ("Le Presse-papiers ne contient pas d'image.") Fin de si

Rfrence LIRE PRESSE PAPIERS, Lire texte dans presse papiers, Tester presse papiers. Variables et ensembles systme Si l'image est correctement extraite, OK prend la valeur 1. Sinon, OK prend la valeur 0 et une erreur est gnre. Gestion des erreurs S'il n'y a pas assez de mmoire pour extraire l'image, l'erreur -108 est gnre. Si aucune photo ne se trouve dans le Presse-papiers, l'erreur -102 est gnre.

1284 4e Dimension - Langage

Lire texte dans presse papiers

Presse-Papiers version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire texte dans presse papiers Alpha Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Alpha Texte prsent dans le Presse-papiers

Description Lire texte dans presse papiers retourne le texte prsent dans le Presse-papiers. Si le texte est correctement extrait du Presse-papiers, la variable OK prend la valeur 1. Si le Presse-papiers est vide ou ne contient pas de texte, la commande retourne une chane vide, la variable OK prend la valeur 0 et l'erreur 102 est gnre. S'il n'y a pas assez de mmoire, la variable OK prend la valeur 0 et l'erreur 108 est gnre. Les champs et variables de type Texte de 4e Dimension peuvent contenir jusqu' 32 000 caractres. Si le Presse-papiers en contient davantage, le rsultat retourn par Lire texte dans presse papiers est tronqu au moment d'tre coll dans le champ ou variable. Pour grer des textes longs venant du Presse-papiers, testez en premier lieu la taille des donnes l'aide de la fonction Tester presse papiers. Ensuite, si le texte dpasse 32 000 caractres, utilisez la commande LIRE PRESSE PAPIERS au lieu de Lire texte dans presse papiers.

4e Dimension - Langage 1285

Exemple L'exemple teste s'il y a du texte dans le Presse-papiers. En fonction de la taille des donnes, la mthode extrait le texte du Presse-papiers soit comme du texte, soit comme un BLOB : $vlTaille:=Tester presse papiers ("TEXT") Au cas ou : ($vlTaille<=0) ALERTE ("Il n'y a pas de texte dans le presse-papiers.") : ($vlTaille<=32000) $vlDonnesPresse:=Lire texte dans presse papiers Si (OK=1) ` Traitement du texte Fin de si : ($vlTaille>32000) LIRE PRESSE PAPIERS ("TEXT";$vxDonnesPresse) Si (OK=1) ` Traitement du BLOB Fin de si Fin de cas Rfrence LIRE IMAGE DANS PRESSE PAPIERS, LIRE PRESSE PAPIERS, Tester presse papiers. Variables et ensembles systme Si le texte est correctement extrait, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre. Gestion des erreurs S'il n'y a pas assez de mmoire pour extraire le texte, l'erreur 108 est gnre. Si aucun texte ne se trouve dans le Presse-papiers, l'erreur 102 est gnre.

1286 4e Dimension - Langage

ECRIRE IMAGE DANS PRESSE PAPIERS

Presse-Papiers version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRIRE IMAGE DANS PRESSE PAPIERS (image) Paramtre image Type Image Description Image copier dans le Presse-papiers

Description ECRIRE IMAGE DANS PRESSE PAPIERS place une copie de l'image que vous avez passe dans image dans le Presse-papiers. Les donnes ventuellement prsentes dans le Presse-papiers sont pralablement effaces. Aprs avoir plac l'image dans le Presse-papiers, vous pouvez la rcuprer l'aide de la commande LIRE IMAGE DANS PRESSE PAPIERS ou LIRE PRESSE PAPIERS("PICT";...). Si l'image est correctement colle dans le Presse-papiers, la variable systme OK prend la valeur 1. S'il n'y a pas assez de mmoire pour coller l'image dans le Presse-papiers, la variable systme OK prend la valeur 0, mais aucune erreur n'est gnre. Exemple Dans une fentre flottante, vous affichez un formulaire contenant le tableau tabNomEmploys qui liste les noms des employs stocks dans la table [Employs]. Chaque fois que vous cliquez sur un nom, vous voulez copier la photographie de l'employ dans le Presse-papiers. Dans la mthode objet du tableau, vous crivez : Si (tabNomEmploys#0) CHERCHER ([Employs];[Employs]Nom=tabNomEmploys{tabNomEmploys}) Si (Taille image ([Employs]Photo)>0) ECRIRE IMAGE DANS PRESSE PAPIERS ([Employs]Photo) ` Copier la photo Sinon EFFACER PRESSE PAPIERS ` Aucune photo ou aucun enregistrement trouv(e) Fin de si Fin de si

Rfrence AJOUTER A PRESSE PAPIERS, LIRE IMAGE DANS PRESSE PAPIERS. Variables et ensembles systme Si une copie de l'image est correctement colle dans le Presse-papiers, la variable systme OK prend la valeur 1.

4e Dimension - Langage 1287

ECRIRE TEXTE DANS PRESSE PAPIERS

Presse-Papiers version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRIRE TEXTE DANS PRESSE PAPIERS (texte) Paramtre texte Type Alpha Description Texte coller dans le Presse-papiers

Description ECRIRE TEXTE DANS PRESSE PAPIERS place une copie du texte que vous avez pass dans texte dans le Presse-papiers. Les donnes ventuellement prsentes dans le Presse-papiers sont auparavant effaces. Vous pouvez rcuprer le texte coll dans le Presse-papiers l'aide de la fonction Lire texte dans presse papiers ou en appelant LIRE PRESSE PAPIERS ("TEXT";...). Si le texte est correctement coll dans le Presse-papiers, la variable systme OK prend la valeur 1. S'il n'y a pas assez de mmoire pour placer une copie du texte dans le Pressepapiers, la variable systme OK prend la valeur 0, mais aucune erreur n'est gnre. Les expressions de type Texte de 4e Dimension peuvent contenir jusqu' 32 000 caractres. Pour copier des valeurs de texte plus importantes, il faut placer le texte dans un BLOB, appeler EFFACER PRESSE PAPIERS puis AJOUTER A PRESSE PAPIERS ("TEXT";...). Exemple Rfrez-vous l'exemple de la commande AJOUTER A PRESSE PAPIERS. Rfrence AJOUTER A PRESSE PAPIERS, Lire texte dans presse papiers. Variables et ensembles systme Si la copie du texte est correctement colle dans le Presse-papiers, la variable systme OK prend la valeur 1.

1288 4e Dimension - Langage

Tester presse papiers

Presse-Papiers version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Tester presse papiers (typeDonnes) Numrique Paramtre typeDonnes Rsultat Type Alpha Numrique Description Type de donnes (4 caractres) Taille (en octets) des donnes contenues dans le Presse-papiers ou code d'erreur

Description Tester presse papiers vous permet de savoir s'il y a des donnes du type typeDonnes dans le Presse-papiers. ATTENTION : La valeur passe dans typeDonnes tablit la distinction majuscules/minuscules, par exemple abcd n'est pas gal ABCD. Si le Presse-papiers est vide ou ne contient pas de donnes du type spcifi, la fonction retourne une erreur -102 (rfrez-vous ci-dessous la table des constantes). Si le Pressepapiers contient des donnes du type spcifi, la fonction retourne la taille des donnes exprime en octets. Aprs avoir vrifi que le Presse-papiers contient bien des donnes du type que vous voulez, vous pouvez les rcuprer l'aide d'une des commandes suivantes : Si le Presse-papiers contient du texte, vous pouvez l'extraire l'aide de la commande Lire texte dans presse papiers, qui retourne une valeur texte. Sinon, vous pouvez utiliser la commande LIRE PRESSE PAPIERS, qui retourne le texte dans un BLOB. Si le Presse-papiers contient une image, vous pouvez l'extraire l'aide de la commande LIRE IMAGE DANS PRESSE PAPIERS, qui retourne l'image dans un champ ou une variable. Sinon, vous pouvez utiliser la commande LIRE PRESSE PAPIERS, qui retourne l'image dans un BLOB. Pour tout type de donnes, vous pouvez utiliser la commande LIRE PRESSE PAPIERS, qui retourne les donnes dans un BLOB. 4e Dimension fournit les constantes suivantes : Constante Type Donnes absentes presse-papiers Entier long Donnes texte Alpha Donnes image Alpha

Valeur -102 TEXT PICT

4e Dimension - Langage 1289

Exemples (1) L'exemple suivant teste si le Presse-papiers contient une image et, si oui, la copie dans une variable 4D :
Si (Tester presse papiers(Donnes image)>0) `Y a-t-il une image dans le pressepapiers ? LIRE IMAGE DANS PRESSE PAPIERS ($vPicVariable) ` Si oui, en extraire l'image Sinon ALERTE("Il n'y a pas d'image dans le Presse-papiers.") Fin de si

(2) Gnralement, aprs un couper ou un copier, les applications placent des donnes de type Texte ou Image dans le Presse-papiers, ces deux types de donnes standard sont reconnus par la plupart des applications. Cependant, une application peut placer dans le Presse-papiers plusieurs copies des mmes donnes sous des formats diffrents. Par exemple, chaque fois que vous copiez ou coupez un tableau, l'application tableur peut placer les donnes dans un format propritaire par exemple, SPSH ou dans les formats SYLK et TEXT. La copie SPSH contient les donnes structures dans le format interne de l'application. La copie SYLK contient les mmes donnes, mais dans le format SYLK, reconnu par la plupart des tableurs. Enfin, la copie TEXT contient les mmes donnes, mais sans les informations de formatage supplmentaires prsentes dans les formats SYLK ou SPSH. Donc, lorsque vous crivez des routines de Couper/Copier/Coller entre 4e Dimension et une application tableur, en prenant l'hypothse que vous connaissez la description du format SPSH et que vous pouvez analyser les donnes SYLK, vous pouvez crire le code suivant : Au cas ou ` D'abord, vrifier si le Presse-papiers contient les donnes venant du tableur : (Tester presse papiers ('SPSH') > 0) ` ... ` Ensuite, vrifier si le Presse-papiers contient des donnes au format SYLK : (Tester presse papiers ('SYLK') > 0) ` ... ` Enfin, vrifier si le Presse-papiers contient des donnes au format TEXT : (Tester presse papiers ('TEXT') > 0) ` ... Fin de cas

Autrement dit, vous essayez d'extraire du Presse-papiers la copie des donnes la plus riche en informations originales. (3) Rfrez-vous l'exemple de la commande AJOUTER A PRESSE PAPIERS. Rfrence LIRE IMAGE DANS PRESSE PAPIERS, LIRE PRESSE PAPIERS, Lire texte dans presse papiers.

1290 4e Dimension - Langage

45 ________________________ Process

4e Dimension - Langage 1291

1292 4e Dimension - Langage

Introduction aux process

Process version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le multi-tche dans 4D reprsente la possibilit d'excuter simultanment plusieurs oprations de base de donnes distinctes. Ces oprations sont appeles des process. Crer de multiples process quivaut avoir plusieurs utilisateurs travaillant sur le mme ordinateur, chacun effectuant sa tche. Cela signifie principalement qu'une mthode peut tre excute comme une tche distincte de base de donnes. Cette section traite les sujets suivants: Crer et effacer des process Elments du process Process crs par 4D Process locaux et globaux Verrouillage d'enregistrements entre process. Note : Cette section ne traite pas les procdures stockes. Pour cela, reportez-vous la section Procdures stockes dans le manuel de rfrence de 4D Server. Crer un process spar
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Il existe trois manires de crer un nouveau process : Excuter une mthode partir du mode Utilisation en slectionnant la case cocher Nouveau Process dans la bote de dialogue d'excution de mthode. La mthode choisie dans ce dialogue est la mthode process. Les process peuvent tre dmarrs par les commandes de menu. Dans l'diteur de menus de l'environnement Structure, slectionnez la commande de menu et cochez l'option Dmarrer un process. La mthode associe la commande de menu est la mthode process. Utiliser la fonction Nouveau process. La mthode passe en paramtre la fonction Nouveau process est la mthode process. Un process peut tre supprim dans les conditions suivantes. Les deux premires sont automatiques : Lorsque la mthode process a termin de s'excuter, Lorsque l'utilisateur quitte la base, Si vous stoppez le process par le langage ou utilisez le bouton Stop dans le dbogueur, Si vous choisissez Tuer dans le menu Process du mode Structure.

4e Dimension - Langage 1293

Un process peut crer un autre process. Les process ne sont pas organiss hirarchiquement. Tous les process sont gaux, et cela indpendamment du process partir duquel ils ont t crs. Une fois cr, le process vit indpendamment de celui qui l'a cr. Elments d'un process
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Chaque process contient certains lments spcifiques. Il y a trois types d'lments bien distincts dans un process : Elments d'interface : Ce sont les lments ncessaires l'affichage du process. Elments de donnes : Ce sont les informations lies aux donnes de la base. Elments de langage : Ce sont les lments utiliss par le langage ou importants pour le dveloppement de l'application. Elments d'interface Les lments d'interface sont les suivants : Barre de menus : Chaque process a sa propre barre de menus courante. La barre de menus du process de premier plan est la barre de menu courante de la base. Une ou plusieurs fentres : Chaque process peut contrler plusieurs fentres ouvertes simultanment. A l'inverse, des process peuvent n'avoir pas de fentre du tout. Une fentre de premier plan : Bien qu'un process puisse disposer de plusieurs fentres ouvertes simultanment, chaque process n'a qu'une fentre active. Pour avoir plusieurs fentres actives la fois, vous devez dmarrer plusieurs process. Elments de donnes Les lments de donnes se rfrent aux donnes de la base. Ce sont les suivants : Slection courante par table : Chaque process a sa propre slection courante. La mme table peut avoir diffrentes slections courantes dans diffrents process. Enregistrement courant par table : Chaque table peut avoir un enregistrement courant diffrent dans chaque process. Note : Cette description des lments de donnes est valide si les process sont des process globaux. Par dfaut, tous les process sont globaux. Reportez-vous plus bas au paragraphe traitant de ce point. Elments de langage Les lments de langage d'un process sont tous les lments lis la programmation dans 4D. Variables : Chaque process a ses propres variables process. Reportez-vous la section Variables pour plus d'informations. Les variables process ne sont reconnues que dans le cadre de leur process natif. Table par dfaut : Chaque process a sa propre table par dfaut. Cependant, notez que la commande TABLE PAR DEFAUT est seulement une convention de programmation.

1294 4e Dimension - Langage

Formulaires entre et sortie : Les formulaires entre et sortie par dfaut peuvent tre choisis par programmation pour chaque table et chaque process. UserSet, LockedSet et ensembles process : Chaque process a ses propres ensembles process. UserSet et LockedSet sont des ensembles process. Les ensembles process sont effacs ds que la mthode du process est termine. Appel sur erreur par process : Chaque process a sa propre mthode de gestion d'erreurs. Fentre de dbogueur : Chaque process peut avoir sa propre Fentre de dbogueur. Process utilisateur
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les process utilisateur sont des process que vous crez pour effectuer certaines tches. Ils partagent le temps machine avec les process principaux. Les process de connexion Web sont des process utilisateur. Voici les process crs et grs par 4D : Process principal : Le process principal gre les environnements Utilisation et Menus Crs. L'cran d'accueil par dfaut de l'environnement Menus crs est aussi une partie du process principal. Ce process est cr l'ouverture d'une session 4D. Process de structure : Le process de structure gre le mode Structure, qui fonctionne dans un process spar. Le process de structure peut tre ferm par la commande Quitter le mode Structure du menu Fichier en mode Structure. Il n'y a pas de process de structure dans une base compile. Le process de structure est cr uniquement lorsque l'utilisateur entre dans l'environnement structure pour la premire fois de la session. Si l'application s'ouvre par dfaut en mode Utilisation ou Menus crs, le process n'est pas cr. Process Server Web : Le process Server Web est cr lorsque la base est publie sur le Web. Reportez-vous la section Mise en route du serveur Web et gestion des connexions pour plus d'informations. Process Gestionnaire du cache : Le process Gestionnaire du cache gre les entres/sorties disque de la base. Ce process est cr ds que 4D ou 4D Server est lanc. Process d'indexation : Le process d'indexation gre les index des champs de la base dans un process spar. Ce process est cr lorsqu'un index est cr ou dtruit pour un champ. Process de Gestion d'vnements : Ce process est cr quand une mthode de gestion d'vnement est installe par la commande APPELER SUR EVENEMENT. Ce process excute la mthode d'appel sur vnement installe par la commande APPELER SUR EVENEMENT chaque fois qu'un vnement se produit. La mthode vnement est la mthode process de ce process. Elle s'excute continuellement, mme s'il n'y a pas de mthode en excution. La gestion d'vnements fonctionne aussi en mode Structure.

4e Dimension - Langage 1295

Process globaux et locaux


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La porte (l'aire d'action) des process peut tre globale ou locale. Par dfaut, tous les process sont globaux. Dans la plupart des cas, vous utiliserez des process globaux. Les process globaux peuvent effectuer n'importe quelle opration, accder aux donnes et les manipuler. Les process locaux ne doivent tre utiliss que pour des oprations qui n'accdent pas aux donnes. Par exemple, vous pouvez utiliser un process local pour contrler les lments d'interface comme les palettes flottantes ou excuter une mthode de gestion d'vnements. Attention : Si vous tentez d'accder aux donnes partir d'un process local, vous accdez aux donnes par l'intermdiaire du Process principal, et prenez donc le risque d'entrer en conflit avec les oprations effectues dans ce process. Vous spcifiez qu'un process est local par le biais de son nom. Le nom d'un process local doit commencer par le symbole dollar ($). 4D Server : Avec 4D Server, l'utilisation de process locaux ct client, pour des oprations qui ne ncessitent pas d'accs aux donnes, permet d'allouer davantage de temps machine des tches qui sollicitent intensivement le serveur. Verrouillage d'enregistrements entre process
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Un enregistrement est verrouill pour un process lorsqu'un autre process l'a dj charg pour modification. Un enregistrement verrouill peut tre charg par un autre process mais ne peut pas tre modifi. L'enregistrement est dverrouill seulement dans le process dans lequel l'enregistrement est modifi. Une table doit tre en mode lecture/criture pour qu'un enregistrement puisse tre charg non verrouill. Rfrence Mthodes, Mthodes projet, Variables.

1296 4e Dimension - Langage

Nouveau process

Process version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nouveau process (mthode; pile{; nom{; param{; param2; ...; paramN}{; *}}}) Numrique Paramtre mthode pile nom param * Rsultat Type Alpha Numrique Alpha Expression Description Mthode excuter dans le process Taille de la pile en octets Nom du process cr Paramtre(s) de la mthode Process unique Numro du process nouvellement cr ou du process dj en cours d'excution

Numrique

Description La commande Nouveau process lance un nouveau process (sur la mme machine) et retourne le numro de ce process. Si le process n'a pas pu tre cr, par exemple s'il n'y a pas assez de mmoire, Nouveau process retourne zro et une erreur est gnre. Vous pouvez intercepter cette erreur l'aide d'une mthode de gestion d'erreurs installe par la commande APPELER SUR ERREUR. Mthode du process : Vous passez le nom de la mthode de gestion du nouveau process dans mthode. Une fois que 4D a dfini le contexte pour le nouveau process, il dmarre l'excution de cette mthode qui devient alors la mthode du process. Pile du process : Vous passez dans pile la quantit de mmoire alloue pour la pile du process. Cette valeur reprsente la place utilise en mmoire pour empiler les appels de mthode, les variables locales, les paramtres des sous-routines et les enregistrements empils. Elle est exprime en octets, vous devez gnralement passer au moins 32K (environ 32000 octets) mais vous pouvez passer davantage si la chane d'appel dans le process (sous-routines appelant des sous-routines en cascade) est importante. Si ncessaire, vous pouvez passer par exemple 200K (environ 200000 bytes). Note : La pile n'est pas la mmoire totale rserve au process. Les process se partagent la mmoire pour les enregistrements, les variables interprocess, etc. Un process utilise galement de la mmoire supplmentaire pour stocker ses variables process. La pile contient diverses informations internes 4D ; la taille de ces informations varie en fonction du nombre d'appels de mthodes imbriques.

4e Dimension - Langage 1297

Nom du process : Vous passez le nom du nouveau process dans nom. Ce nom s'affichera dans la fentre Liste des process du mode Structure de 4D et sera retourn par la commande INFORMATIONS PROCESS. Un nom de process peut contenir jusqu' 31 caractres. Vous pouvez omettre ce paramtre ; dans ce cas, le nom du process sera une chane vide. Vous pouvez crer un process local en prfixant son nom d'un symbole dollar ($). Important : Rappelez-vous que, en client/serveur, les process locaux ne doivent pas accder aux donnes. Paramtres de la mthode process : Depuis la version 6 de 4D, vous pouvez passer des paramtres la mthode process. Vous pouvez le faire de la mme manire que pour les sous-routines. Notez cependant qu'il y a une restriction : vous ne pouvez pas passer d'expression de type Pointeur. Rappelez-vous galement que les tableaux ne peuvent pas tre passs comme paramtres une mthode. Une fois qu'elle a commenc s'excuter dans le contexte du nouveau process, la mthode process reoit les valeurs des paramtres dans $1, $2, etc. Note : Si vous passez des paramtres la mthode process, vous devez passer le paramtre nom, il ne peut tre omis dans ce cas. Si vous passez le dernier paramtre (optionnel) *, vous indiquez 4D de vrifier en premier lieu si un process du mme nom que celui que vous avez pass dans nom est dj en cours d'excution. Si c'est le cas, 4D ne dmarre pas de nouveau process et retourne le numro du process existant. Exemple Examinons la mthode projet suivante : ` AJOUT CLIENTS CHANGER BARRE (1) Repeter AJOUTER ENREGISTREMENT([Clients];*) Jusque (OK=0) Si vous associez cette mthode projet une commande de menu cr dans l'Editeur de barres de menus en mode Structure et que vous lui affectez la proprit Dmarrer un process, 4D va automatiquement crer un nouveau process lors de l'excution de la mthode. L'instruction CHANGER BARRE(1) associe cette barre de menus au nouveau process. En l'absence de toute fentre (que vous pourriez avoir ouverte avec Creer fenetre), l'appel AJOUTER ENREGISTREMENT en crera une automatiquement.

1298 4e Dimension - Langage

Si maintenant vous voulez pouvoir dmarrer le process Ajout Clients lorsque vous cliquez sur un bouton situ dans un tableau de contrle personnalis, vous pouvez crire :

` Mthode objet bouton bAjoutClients $vlProcessID:=Nouveau process("Ajout Clients";32*1024;"Ajout de clients")

Ce bouton fait la mme chose que la commande de menu personnalise. Si, maintenant, lorsque la commande de menu est slectionne ou lorsque le bouton reoit un clic, vous voulez que le process soit lanc s'il n'existe pas ou qu'il soit pass au premier plan s'il existe dj, vous pouvez crer la mthode DEMARRER AJOUT CLIENTS :

` DEMARRER AJOUT CLIENTS $vlProcessID:=Nouveau process("Ajout Clients";32*1024;"Ajout de clients ";*) Si ($vlProcessID#0) PASSER AU PREMIER PLAN ($vlProcessID) Fin de si

La mthode objet de bAjoutClient devient : ` Mthode objet bouton bAjoutClients DEMARRER AJOUT CLIENTS Dans l'diteur de barres de menus, vous remplacez AJOUT CLIENTS par la mthode DEMARRER AJOUT CLIENTS. Dslectionnez l'option Dmarrer un process pour la commande de menu. Rfrence Executer sur serveur, Introduction aux process, Mthodes, Mthodes projet, Variables.

4e Dimension - Langage 1299

Executer sur serveur

Process version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Executer sur serveur (procdure; pile{; nom{; param{; param2; ...; paramN}{; *}}}) Numrique Paramtre procdure pile nom param * Rsultat Type Alpha Numrique Alpha Expression Description Procdure excuter dans le process Taille de la pile en octets Nom du process cr Paramtre(s) de la procdure Process unique Numro du process pour un process nouvellement cr ou un process dj en cours d'excution

Numrique

Description La commande Executer sur serveur lance un nouveau process sur la machine serveur (lorsqu'elle est appele en environnement client/serveur) et retourne le numro de ce process. Executer sur serveur vous permet de dmarrer une procdure stocke. Pour plus d'informations sur les procdures stockes, reportez-vous la section Procdures stockes dans le manuel de rfrence de 4D Server. Si vous appelez Executer sur serveur sur un poste client, la commande retourne un numro de process ngatif. Si vous appelez Executer sur serveur sur le poste serveur, la commande retourne un numro de process positif. A noter que l'appel de la fonction Nouveau process sur le poste serveur est quivalent l'appel de Executer sur serveur. Si le process n'a pas pu tre cr (par exemple s'il n'y a pas assez de mmoire), Executer sur serveur retourne zro et une erreur est gnre. Vous pouvez intercepter cette erreur l'aide d'une mthode de gestion d'erreurs installe par la commande APPELER SUR ERREUR. Mthode du process : Vous passez le nom de la mthode de gestion du nouveau process dans mthode. Une fois que 4D a dfini le contexte pour le nouveau process, il dmarre l'excution de cette mthode qui devient alors la mthode du process.

1300 4e Dimension - Langage

Pile du process : Vous passez dans pile la quantit de mmoire alloue pour la pile du process. Cette valeur reprsente la place utilise en mmoire pour empiler les appels de mthodes, les variables locales, les paramtres des sous-routines et les enregistrements empils. Elle est exprime en octets, vous devez gnralement passer au moins 32K (environ 32000 octets) mais vous pouvez passer davantage si la chane d'appel dans le process (sous-routines appelant des sous-routines en cascade) est importante. Si ncessaire, vous pouvez passer par exemple 200K (environ 200000 octets). Note : La pile n'est pas la mmoire totale rserve au process. Les process se partagent la mmoire pour les enregistrements, les variables interprocess, etc. Un process utilise galement de la mmoire supplmentaire pour stocker ses variables process. La pile ne contient que les variables locales, les appels de mthodes, les paramtres des sous-routines et les enregistrements empils. Nom du process : Vous passez le nom du nouveau process dans nom. Avec 4D monoposte, ce nom s'affichera dans la fentre Liste des process du mode Structure de 4D et sera retourn par la commande INFORMATIONS PROCESS applique ce process. En client/serveur, ce nom apparatra en bleu dans la liste des Procdures stockes de la fentre principale de 4D Server. Un nom de process peut contenir jusqu' 31 caractres. Vous pouvez omettre ce paramtre ; dans ce cas, le nom du process sera une chane vide. Attention : A la diffrence de la commande Nouveau process, vous ne devez pas avec Executer sur serveur crer un process local en prfixant son nom du symbole dollar ($). Cela fonctionnerait correctement en version monoposte, car Executer sur serveur se comporte comme Nouveau process dans cet environnement, mais, en client/serveur, cela gnrerait une erreur. Paramtres de la mthode process : Depuis la version 6 de 4D, vous pouvez passer des paramtres la mthode process. Vous pouvez le faire de la mme manire que pour les sous-routines. Notez cependant qu'il y a une restriction : vous ne pouvez pas passer d'expression de type Pointeur. Rappelez-vous galement que les tableaux ne peuvent pas tre passs comme paramtres une mthode. Une fois qu'elle a commenc s'excuter dans le contexte du nouveau process, la mthode process reoit les valeurs des paramtres dans $1, $2, etc. Note : Si vous passez des paramtres la mthode process, vous devez passer le paramtre nom, il ne peut tre omis dans ce cas.

4e Dimension - Langage 1301

Paramtre optionnel * : Si vous passez le dernier paramtre (optionnel) *, vous indiquez 4D de vrifier en premier lieu si un process du mme nom que celui que vous avez pass dans nom est dj en cours d'excution. Si c'est le cas, 4D ne dmarre pas de nouveau process et retourne le numro du process existant. Exemple L'exemple suivant dmontre comment l'import de donnes peut tre acclr de manire spectaculaire en environnement client/serveur. La mthode Import classique liste cidessous vous permet de mesurer combien de temps prend un import d'enregistrements bas sur la commande LECTURE ASCII : ` Mthode projet Import classique $vhDocRef:=Ouvrir document("") Si (OK=1) FERMER DOCUMENT($vhDocRef) FORMULAIRE ENTREE([Table1];"Import") $vhStartTime:=Heure courante LECTURE ASCII([Table1];Document) $vhEndTime:=Heure courante ALERTE("L'opration a dur "+Chaine(0+($vhEndTime-$vhStartTime))+" secondes.") Fin de si Avec l'import de donnes classique, 4D Client analyse le fichier ASCII puis, pour chaque enregistrement, cre un nouvel enregistrement, remplit les champs avec les valeurs importes et envoie l'enregistrement au poste serveur afin qu'il soit ajout la base. Par consquent, de nombreuses requtes circulent sur le rseau. Afin d'optimiser l'opration, vous pouvez utiliser des procdures stockes pour effectuer l'import localement sur le poste serveur. Le poste client charge le document dans un BLOB et dclenche une procdure stocke en passant le BLOB comme paramtre. La procdure stocke place le BLOB dans un document sur le disque du poste serveur, puis importe le document en local. L'import des donnes est ainsi effectu localement une vitesse comparable celle d'une version monoposte de 4D, car la plupart des requtes transitant sur le rseau ont t limines. Voici la mthode projet CLIENT IMPORT. Lance sur le poste client, elle dclenche l'excution de la procdure stocke SERVER IMPORT, liste la suite : ` Mthode projet CLIENT IMPORT ` CLIENT IMPORT ( Pointeur ; Alpha ) ` CLIENT IMPORT ( -> [Table] ; Formulaire entre ) C_POINTEUR($1) C_ALPHA(31;$2) C_HEURE($vhDocRef) C_BLOB($vxData) C_ENTIER LONG(spErrCode) ` Slectionnez le document importer

1302 4e Dimension - Langage

$vhDocRef:=Ouvrir document("") Si (OK=1) ` Si un document tait slectionn, ne pas le garder ouvert FERMER DOCUMENT($vhDocRef) $vhStartTime:=Heure courante ` Essayons de le charger en mmoire DOCUMENT VERS BLOB(Document;$vxData) Si (OK=1) ` Si le document a pu tre charg dans le BLOB, dmarrer la procdure ` stocke qui va importer les donnes sur le poste serveur $spProcessID:=Executer sur serveur("SERVER IMPORT";32*1024; "Serveur Import Services";Table($1);$2;$vxData) ` Nous n'avons alors plus besoin du BLOB dans ce process EFFACER VARIABLE($vxData) ` Attendons l'achvement de l'opration effectue par la procdure stocke Repeter ENDORMIR PROCESS(Numero du process courant;300) LIRE VARIABLE PROCESS($spProcessID;spErrCode;spErrCode) Si (Indefinie(spErrCode)) ` Note: si la procdure stocke n'a pas initialis sa propre instance ` de la variable spErrCode, il se peut qu'une variable indfinie soit ` retourne spErrCode:=1 Fin de si Jusque (spErrCode<=0) ` Envoyons un accus de rception la procdure stocke spErrCode:=1 ECRIRE VARIABLE PROCESS($spProcessID;spErrCode;spErrCode) $vhEndTime:=Heure courante ALERTE("L'opration a dur "+Chaine(0+($vhEndTime-$vhStartTime))+ " secondes.") Sinon ALERTE("Il n'y a pas assez de mmoire pour charger le document.") Fin de si Fin de si

4e Dimension - Langage 1303

Voici la mthode projet SERVER IMPORT, excute en tant que procdure stocke : ` Mthode projet SERVER IMPORT ` SERVER IMPORT ( Entier long ; Alpha ; BLOB ) ` SERVER IMPORT ( Numro de table ; Formulaire entre ; Donnes importes ) C_ENTIER LONG($1) C_ALPHA(31;$2) C_BLOB($3) C_ENTIER LONG(spErrCode) ` L'opration n'est pas encore termine, affectons 1 spErrCode spErrCode:=1 $vpTable:=Table($1) FORMULAIRE ENTREE($vpTable->;$2) $vsDocName:="Fichier Import "+Chaine(1+Hasard) SUPPRIMER DOCUMENT($vsDocName) BLOB VERS DOCUMENT($vsDocName;$3) LECTURE ASCII($vpTable->;$vsDocName) SUPPRIMER DOCUMENT($vsDocName) ` L'opration est termine, affectons 0 spErrCode spErrCode:=0 ` Attendons que le poste client l'origine de la requte ait reu les rsultats Repeter ENDORMIR PROCESS(Numero du process courant;1) Jusque (spErrCode>0) Une fois que ces deux mthodes projet ont t implmentes dans votre base, vous pouvez effectuer un import bas sur une procdure stocke, en crivant par exemple : CLIENT IMPORT (->[Table1];"Import") Si vous ralisez quelques tests comparatifs, vous pourrez constater qu'avec ce type de mthode, l'import des enregistrements est jusqu' 60 fois plus rapide qu'un import "classique". Rfrence Nouveau process, Procdures stockes.

1304 4e Dimension - Langage

ENDORMIR PROCESS

Process version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENDORMIR PROCESS (process; dure) Paramtre process dure Type Numrique Numrique Description Numro de process Dure exprime en ticks

Description ENDORMIR PROCESS permet d'endormir un process pour un certain nombre de ticks (1 tick = 1/60me de seconde). Pendant cette priode, le process endormi n'utilise pas de temps machine. Il reste cependant toujours en mmoire. Si le process est dj endormi, cette commande l'endort nouveau. Le paramtre dure n'est pas ajout au temps restant mais le remplace. Vous pouvez passer zro (0) dans dure si vous ne voulez plus endormir le process. Si le process n'existe pas, la commande ne fait rien. Attention : Utilisez ENDORMIR PROCESS uniquement avec les process que vous avez crs. ENDORMIR PROCESS n'affecte pas le process principal. Astuce : Pour endormir le process principal (par exemple, pour afficher pendant un certain temps un message dans une fentre que vous ouvrez et fermez dans ce but), crivez une petite sous-routine "d'attente" qui effectue une boucle pendant un certain temps l'aide des fonctions Heure courante, Nombre de ticks ou Nombre de millisecondes). Exemples (1) Reportez-vous aux exemples de la section Verrouillage d'enregistrements. (2) Reportez-vous l'exemple de la fonction Chercher process. Rfrence CACHER PROCESS, SUSPENDRE PROCESS.

4e Dimension - Langage 1305

SUSPENDRE PROCESS

Process version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUSPENDRE PROCESS (process) Paramtre process Type Numrique Description Numro de process

Description SUSPENDRE PROCESS suspend l'excution de process jusqu' ce qu'il soit remis en action par la comande REACTIVER PROCESS. Pendant ce temps, process n'utilise pas de temps machine. Lorsqu'un process est suspendu, il existe toujours en mmoire. Si process est dj suspendu, SUSPENDRE PROCESS ne fait rien. Si le process est endormi l'aide de ENDORMIR PROCESS, le process est suspendu. S'il reoit l'ordre REACTIVER PROCESS, le process redevient actif immdiatement. Lorsqu'un process est suspendu, les fentres qui lui appartiennent ne sont pas saisissables. Dans ce cas, si vous ne voulez pas drouter l'utilisateur, il faut auparavant cacher le process. Si process n'existe pas, cette commande ne fait rien. Attention : Utilisez SUSPENDRE PROCESS seulement avec les process que vous avez crs. SUSPENDRE PROCESS n'a aucun effet sur le process Utilisation/Menus crs. Rfrence CACHER PROCESS, ENDORMIR PROCESS, REACTIVER PROCESS.

1306 4e Dimension - Langage

REACTIVER PROCESS

Process version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

REACTIVER PROCESS (process) Paramtre process Type Numrique Description Numro de process

Description REACTIVER PROCESS ractive un process suspendu ou endormi. Si process n'est pas endormi ou suspendu, REACTIVER PROCESS ne fait rien. Si process a t suspendu, rfrez-vous aux commandes SUSPENDRE PROCESS ou ENDORMIR PROCESS. Si process n'existe pas, cette commande ne fait rien. Rfrence ENDORMIR PROCESS, SUSPENDRE PROCESS.

4e Dimension - Langage 1307

Process interrompu

Process version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Process interrompu Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Vrai = le process est sur le point dtre interrompu, Faux = le process nest pas sur le point dtre interrompu

Description La commande Process interrompu retourne Vrai si le process dans lequel elle est appele est sur le point dtre interrompu de manire inopine cest--dire sans tre parvenu au terme normal de son excution. Cela peut se produire, par exemple, la suite dun appel QUITTER 4D. Exemple Cette commande peut tre utilise dans le cadre dun type particulier de programmation du serveur Web, en mode compil uniquement : lorsque vous utilisez une mthode envoyant des pages Web laide dune boucle du type Tant que...Fin tant que, le mcanisme du serveur Web ne permet pas de stopper la boucle en cas de timeout (fin de priode dinactivit autorise) avec un browser. Le process Web ntant pas referm, des ressources sont ainsi gaspilles. La commande Process interrompu, place dans le test initial de la boucle, retournera Vrai en cas de timeout. La boucle pourra donc tre interrompue et le process tu. Voici une mthode parfois utilise pour envoyer des pages HTML. En mode compil, cette boucle ne pourra pas tre interrompue en cas de timeout : Tant que (Vrai) ENVOYER FICHIER HTML (FichierHTML) Fin tant que La commande Process interrompu permet dutiliser le mme type de mthode, tout en prservant la possibilit de sortir de la boucle en cas de timeout :

Tant que (Non (Process interrompu)) ENVOYER FICHIER HTML (FichierHTML) Fin tant que

1308 4e Dimension - Langage

Numero du process courant

Process version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Numero du process courant Numrique Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Numrique Numro du process en cours d'excution

Description Numero du process courant retourne le numro du process partir duquel la fonction a t appele. Exemples Rfrez-vous aux exemples de ENDORMIR PROCESS et INFORMATIONS PROCESS. Rfrence Chercher process, INFORMATIONS PROCESS, Statut du process.

4e Dimension - Langage 1309

Statut du process

Process version 3

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Statut du process (process) Numrique Paramtre process Rsultat Type Numrique Numrique Description Numro du process Statut du process

Description La commande Statut du process retourne le statut du process dont le numro est pass dans process. Le rsultat de la fonction peut tre l'une des valeurs des constantes prdfinies suivantes : Constante Dtruit Endormi Inexistant En excution Dialogue cach Suspendu En attente entre sortie En attente drapeau interne En attente vnement Type Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long Valeur -1 1 -100 0 6 5 3 4 2

Si le process n'existe pas (ce qui signifie le numro que vous avez pass est hors de l'intervalle de 1 Nombre de process), Statut du process retourne Inexistant (-100). Exemple L'exemple suivant retourne le nom et le numro de rfrence du process de chaque process dans les tableaux asProcName et aiProcNum. La mthode teste si le process a t dtruit. Dans ce cas, le nom et le numro du process ne sont pas ajouts dans le tableau : $vlNbTasks:=Nombre de process TABLEAU ALPHA(31;arProcName; $vlNbTasks) TABLEAU ENTIER(aiProcNum; $vlNbTasks) $vlActualCount:=0 Boucle ($vlProcess;1; $vlNbTasks) Si (Statut du process($vlProcess)>=En excution)

1310 4e Dimension - Langage

$vlActualCount:=$vlActualCount+1 INFORMATIONS PROCESS($vlProcess; asProcName{$vlActualCount};$vlState; $vlTime)aiProcNum{$vlActualCount}:=$vlProcess Fin de si Fin de boucle ` Eliminer les lments superflus TABLEAU ALPHA(31;asProcName;$vlActualCount) TABLEAU ENTIER(aiProcNum;$vlActualCount) Rfrence INFORMATIONS PROCESS, Nombre de process.

4e Dimension - Langage 1311

INFORMATIONS PROCESS

Process version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

INFORMATIONS PROCESS (process; procNom; procStatut; procTemps{; procVisible{; uniqueID{; origine}}}) Paramtre process procNom procStatut procTemps procVisible uniqueID origine Type Numrique Alpha Numrique Numrique Boolen Entier Entier long Description Numro du process Nom du process Statut du process Temps d'excution cumul du process en ticks Visible (Vrai) ou Cach (Faux) Numro unique du process Origine du process

Description La commande INFORMATIONS PROCESS retourne les informations sur le process dont vous passez le numro dans process. Aprs l'appel : procNom retourne le nom du process. Quelques points sont noter propos du nom du process : - Si le process a t dmarr depuis la bote de dialogue Excuter une mthode en mode Utilisation (avec l'option Nouveau process slectionne), son nom est P_ suivi d'un numro. - Si le process a t dmarr partir d'une commande de Menus crs dont la proprit Dmarrer un process est slectionne, le nom du process est M_ ou ML_ suivi d'un numro. - Si un process a t stopp (et son espace non encore rutilis), son nom est encore retourn. Pour dtecter si un process est stopp, testez procStatut=-1 (voir ci-dessous). procStatut retourne le statut du process au moment de l'appel. Ce paramtre peut retourner l'une des valeurs fournies par les constantes prdfinies suivantes (thme "Statut du process") : Constante Dtruit Endormi Inexistant En excution Dialogue cach Type Entier Entier Entier Entier Entier long long long long long Valeur -1 1 -100 0 6

1312 4e Dimension - Langage

Suspendu En attente d'entre sortie En attente d'un drapeau interne En attente d'vnement

Entier Entier Entier Entier

long long long long

5 3 4 2

procTemps retourne le cumul du temps que le process a utilis depuis qu'il a t dmarr, en ticks (1/60e de seconde.) procVisible, s'il est spcifi, retourne VRAI si le process est visible, FAUX s'il est cach. uniqueID, s'il est spcifi, retourne le numro unique du process. En effet, depuis la version 6.5 de 4D, chaque process se voit attribuer un numro de process ainsi quun numro unique de process par session. Ce dernier permet de diffrencier strictement deux process ou sessions de process. Il correspond au nombre de process ayant t lancs au cours de la session de lapplication 4e Dimension. origine, s'il est spcifi, retourne une valeur dcrivant lorigine du process. Ce paramtre peut retourner l'une des valeurs fournies par les constantes prdfinies suivantes (thme Type du process) : Constante Process web 4D Client Process web avec contexte Autre process 4D Tche externe Gestionnaire dvnement Gestionnaire Apple Event Gestionnaire du port srie Gestionnaire d'index Gestionnaire du cache Process web sans contexte Process de structure Process principal Aucun Process excut sur serveur Cr par commande de menu Cr depuis le mode Utilisation Autre process utilisateur Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long long Valeur -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4

Note : Les process internes 4D retournent une valeur ngative et les process gnrs par lutilisateur retournent une valeur positive.

4e Dimension - Langage 1313

Si le process n'existe pas, ce qui veut dire que vous n'avez pas pass un nombre inclus dans l'intervalle [1>Nombre de process], INFORMATIONS PROCESS laisse les valeurs des variables passes en paramtres inchanges. Exemples (1) L'exemple suivant retourne le nom, le statut, et le temps coul dans les variables vNom, vStatut, et vTempsPass pour le process courant : C_ALPHA(80; vNom) ` Initialiser les variables C_ENTIER(vStatut) C_ENTIER(vTempsPass) INFORMATIONS PROCESS (Numero du process courant;vNom;vStatut;vTempsPass)

(2) Voir l'exemple de la section Mthode base Sur fermeture. Rfrence Nombre de process, Statut du process.

1314 4e Dimension - Langage

Chercher process

Process version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Chercher process (nom{; *}) Numrique Paramtre nom * Rsultat Type Alpha * Numrique Description Nom du process duquel rcuprer le numro Retourner le numro du process serveur Numro du process

Description La commande Chercher process retourne le numro du process dont vous passez le nom dans nom. Si aucun process n'est trouv, Chercher process retourne 0. Le paramtre optionnel * vous permet, partir de 4D Client, de rcuprer le numro d'un process s'excutant sur le serveur, c'est--dire une procdure stocke. Dans ce cas, la valeur retourne est ngative. Cette option est particulirement utile dans le cadre de l'utilisation des commandes LIRE VARIABLE PROCESS et ECRIRE VARIABLE PROCESS. Pour plus d'informations, reportez-vous la description de ces commandes. Si la commande est excute avec le paramtre * partir d'un process tournant sur le poste serveur, la valeur retourne est positive. Exemple Vous crez une palette flottante, fonctionnant dans un process spar, dans lequel vous implmentez vos propres outils pour interagir avec l'environnement Structure. Par exemple, quand vous slectionnez un lment dans une liste hrarchique de mots-cls, vous voulez coller du texte dans la fentre de premier plan du mode Structure. Pour cela, vous pouvez utiliser le presse-papiers, mais l'vnement de collage doit se passer dans le process Structure. La petite fonction qui suit retourne le numro du process de Structure (s'il est actif) : ` Mthode projet Numro process Structure ` Numro process Structure -> Entier long ` Numro process Structure -> Numro du process de Structure

$0:=Chercher process(Lire chaine dans liste(170;3)) ` Le nom du process Structure est stock dans la ressource 'STR#" ID=170, chane #3 ` dans 4D ` Note: ceci peut ne pas fonctionner si la ressource est modifie dans l'avenir

4e Dimension - Langage 1315

Avec cette fonction, la mthode projet liste ci-dessous colle le texte reu en paramtre dans la fentre de premier plan du mode Structure (si c'est possible) : ` ` ` ` Mthode projet COLLER TEXTE EN STRUCTURE COLLER TEXTE EN STRUCTURE ( Texte) COLLER TEXTE EN STRUCTURE ( Texte coller dans la fentre de Structure de premier plan )

C_TEXTE($1) C_ENTIER LONG($vlStructurePID;$vlCompte) $vlStructurePID:=Numero process Structure Si ($vlStructurePID # 0) ` Mettre le texte dans le presse-papiers ECRIRE TEXTE DANS PRESSE PAPIERS($1) ` Gnrer un vnement Ctrl-V / Command-V GENERER FRAPPE CLAVIER(Code ascii("v");Masque touche commande; $vlStructurePID) ` Appeler rptitivement ENDORMIR PROCESS pour que le minuteur puisse passer ` l'vnement au process Structure Boucle ($vlCompte;1;5) ENDORMIR PROCESS(Numero du process courant;1) Fin de boucle Fin de si Rfrence INFORMATIONS PROCESS, Statut du process.

1316 4e Dimension - Langage

Nombre utilisateurs

Process version 3

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nombre utilisateurs

Entier

Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Entier Nombre d'utilisateurs connects au serveur

Description Nombre utilisateurs retourne le nombre d'utilisateurs connects au poste serveur. Si le serveur excute au moins une procdure stocke, Nombre utilisateurs retourne le nombre d'utilisateurs +1. Dans le cas d'une version monoposte de 4e Dimension, Nombre utilisateurs retourne 1. Rfrence Nombre de process, Nombre de process utilisateurs.

4e Dimension - Langage 1317

Nombre de process

Process version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nombre de process Entier Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Entier Nombre total de process ouverts (y compris les process du moteur de 4D)

Description Nombre de process retourne le nombre de process ouverts sur un poste 4D Client, 4D Server (procdures stockes) ou dans une version monoposte de 4e Dimension. Ce nombre inclut tous les process, qu'ils soient crs par vos soins ou par 4e Dimension. Les process crs automatiquement par 4D sont le Process principal, le Gestionnaire de cache, le process de Structure, le Process d'indexation et le Serveur Web. La valeur retourne par Nombre de process comprend galement les process qui ont t dtruits. Exemples Rfrez-vous l'exemple de Statut du process et Mthode base Sur fermeture. Rfrence INFORMATIONS PROCESS, Nombre de process utilisateurs, Nombre utilisateurs, Statut du process.

1318 4e Dimension - Langage

Nombre de process utilisateurs

Process version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nombre de process utilisateurs

Entier

Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Entier Nombre de process ouverts ( l'exception des process du moteur)

Description Nombre de process utilisateurs retourne le nombre de process ouverts sur le serveur, l'exception de ceux crs automatiquement par 4e Dimension. Le "Process principal" (mode Utilisation/Menus crs) est considr comme faisant partie des process utilisateurs. En outre, le process "Structure" et le "Process Serveur Web", pouvant tre ferms par l'utilisateur, sont galement considrs comme des process utilisateurs. Ces trois process sont donc comptabiliss dans les process ouverts retourns par cette commande. Par ailleurs, certains process sont comptabiliss comme process utilisateurs lorsqu'ils sont excuts sur 4D Server en tant que procdure stocke. Le tableau suivant rsume ce fonctionnement : Process Process principal Structure Serveur Web Gestionnaire client Interface utilisateur Procdure stocke 4D X X X 4D Client 4D Server (Proc. stocke) X X X X X X 0 X 0 X X

X = process inclus dans les process utilisateurs 0 = process non inclus dans les process utilisateurs Rfrence Nombre de process, Nombre utilisateurs.

4e Dimension - Langage 1319

EXECUTER SUR CLIENT

Process version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

EXECUTER SUR CLIENT (nomClient; nomMthode{; param}{; param2; ...; paramN}) Paramtre nomClient nomMthode param Type Alpha Alpha Description Nom dinscription du 4D Client Nom de la mthode excuter Paramtre(s) de la mthode

Description La commande EXECUTER SUR CLIENT provoque lexcution de la mthode nomMthode, avec, ventuellement, le(s) paramtre(s) param1... paramN, sur le ou les 4D Client inscrit(s) sous le nom nomClient. Le nom dinscription du ou des 4D Client est dfini par la commande INSCRIRE CLIENT. Cette commande peut tre appele depuis un 4D Client ou une procdure stocke sur 4D Server. Si la mthode admet des paramtres, passez-les aprs le nom de la mthode. Lexcution de la mthode sur le 4D Client seffectue dans un process global cr automatiquement sur le poste client, et portant le nom dinscription du 4D Client. Si cette commande est appele plusieurs fois de suite pour un mme 4D Client, les ordres dexcution seront empils. Par consquent, les mthodes seront traites les unes la suite des autres : les excutions sont asynchrones. Plus lempilement est grand, plus la charge de travail est grande pour le 4D Client. Vous pouvez connatre ltat de la charge de travail de chaque client laide de la commande LIRE CLIENTS INSCRITS. Note : Lempilement des ordres dexcutions ne peut tre modifi ou stopp, sauf si le 4D Client est dsinscrit laide de la commande DESINSCRIRE CLIENT. Il est possible dexcuter simultanment la mme mthode sur plusieurs ou sur la totalit des 4D Clients inscrits : pour cela, passez le caractre joker (@) dans le paramtre nomClient. Exemples (1) Vous souhaitez excuter sur le poste client Client1 la mthode GnreNums, comportant trois paramtres :

EXECUTER SUR CLIENT("Client1";"GnreNums";12;$a;"Text")

(2) Vous souhaitez que tous les clients inscrits excutent la mthode VideTemp :

EXECUTER SUR CLIENT("@";"VideTemp")

1320 4e Dimension - Langage

(3) Reportez-vous lexemple de la commande INSCRIRE CLIENT. Rfrence DESINSCRIRE CLIENT, INSCRIRE CLIENT, LIRE CLIENTS INSCRITS. Variables et ensembles systme La variable systme OK prend la valeur 1 si 4D Server a correctement reu la requte dexcution dune mthode cela ne garantit pas toutefois la bonne excution de la mthode sur le 4D Client.

4e Dimension - Langage 1321

INSCRIRE CLIENT

Process version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

INSCRIRE CLIENT (nomClient{; priode{; *}}) Paramtre nomClient priode * Type Alpha Entier long * Description Nom de la session 4D Client Dlai dinterrogation au serveur (en secondes) Process local

Description La commande INSCRIRE CLIENT inscrit un poste 4D Client sous le nom nomClient auprs de 4D Server, afin de permettre que dautres clients ou ventuellement 4D Server (par lintermdiaire de procdures stockes) puissent y excuter des mthodes laide de la commande EXECUTER SUR CLIENT. Une fois inscrit, un 4D Client peut donc excuter une ou plusieurs mthodes pour le compte dautres clients. Note : Vous pouvez galement inscrire automatiquement chaque poste client qui se connecte 4D Server, dans la bote de dialogue des Proprits de la base (cf. manuel Mode Structure). A lissue de lexcution de la commande, un process, nomm nomClient, est cr sur le poste client. Ce process ne peut tre dtruit que par la commande DESINSCRIRE CLIENT. Si le paramtre optionnel * est pass, le process cr est local (4D ajoute automatiquement le signe $ au nom du process). Sinon, il est global. Note : Plusieurs 4D Client peuvent avoir le mme nom dinscription. Aprs lexcution de la commande, le poste client interroge priodiquement 4D Server afin de savoir si un autre 4D Client ou le serveur lui-mme font appel lui. Par dfaut, cette interrogation est effectue toutes les 2 secondes. Vous pouvez modifier ce dlai laide du paramtre priode. La valeur minimale est de 1 seconde. Note : Lorsquelle est utilise avec 4e Dimension monoposte, cette commande ne fait rien. Une fois la commande excute, il nest pas possible de modifier la vole le nom du 4D Client ni le dlai dinterrogation du serveur. Pour cela, il est ncessaire dappeler la commande DESINSCRIRE CLIENT puis dexcuter nouveau INSCRIRE CLIENT. Si le 4D Client est correctement inscrit, la variable systme OK prend la valeur 1. Si le 4D Client tait dj inscrit, la commande ne fait rien et OK prend la valeur 0.

1322 4e Dimension - Langage

Exemple Les mthodes suivantes permettent de raliser une petite messagerie entre les postes clients inscrits. 1. La mthode INSCRIPTION permet dinscrire un 4D Client et de le tenir prt recevoir un message de la part dun autre 4D Client : `Mthode INSCRIPTION `Il faut se dsinscrire avant de sinscrire sous un autre nom DESINSCRIRE CLIENT Repeter vNomPseudo:=Demander("Entrez votre nom :";"Utilisateur";"OK";"Annuler") Jusque ((OK=0) | (vNomPseudo # "")) Si (OK=0) ...` Ne rien faire Sinon INSCRIRE CLIENT(vNomPseudo;*) Fin de si

2. Linstruction suivante permet de connatre les 4D Clients inscrits. Elle peut tre place dans la Mthode base Sur ouverture : ` Mthode base Sur ouverture PrListeClient:=Nouveau process("Liste_4DClients";32000;"Liste d'inscrits") 3. La mthode Liste_4DClients permet de rcuprer tous les 4D Client inscrits et les personnes acceptant de recevoir des messages : ` Mthode Liste_4DClients Si (Type application=4D Client) ` Le code ci-dessous nest valable quen mode client-serveur $Ref:=Creer fenetre(100;100;300;400;-(Fentre palette+Avec titre de fentre); "Liste d'inscrits") Repeter LIRE CLIENTS INSCRITS($ListeClient;$ListeCharge) `Rcupration des clients inscrits dans $ListeClient EFFACER FENETRE($Ref) POSITION MESSAGE(0;0) Boucle ($p;1;Taille tableau($ListeClient)) MESSAGE($ListeClient{$p}+Caractere(Retour chariot)) Fin de boucle `Afficher chaque seconde ENDORMIR PROCESS(Numero du process courant;60) Jusque (Faux) ` Boucle infinie Fin de si

4e Dimension - Langage 1323

4. La mthode Envoyer_Message permet denvoyer un message un autre 4D Client inscrit. ` Mthode Envoyer_Message $Destinataire:=Demander("Destinataire du message :";"") ` Saisir le nom d'une des personnes visibles dans la fentre gnre par la ` mthode base Sur ouverture Si (OK # 0) $Message:=Demander("Message :") ` Contenu du message Si (OK # 0) EXECUTER SUR CLIENT($Destinataire;"Afficher_Message";$Message) ` Envoi du message Fin de si Fin de si

5. La mthode Afficher_Message affiche le message sur le poste client : ` Mthode Afficher_Message C_TEXTE($1) ALERTE($1) 6. Enfin, cette mthode permet un poste client de ntre plus visible par les autres 4D Clients et ne plus recevoir de message :

` Mthode DSINSCRIPTION : DESINSCRIRE CLIENT

Rfrence DESINSCRIRE CLIENT, EXECUTER SUR CLIENT, LIRE CLIENTS INSCRITS. Variables et ensembles systme Si le poste client est correctement inscrit, la variable systme OK prend la valeur 1. Si le poste tait dj inscrit, la commande ne fait rien et OK prend la valeur 0.

1324 4e Dimension - Langage

DESINSCRIRE CLIENT

Process version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DESINSCRIRE CLIENT Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande DESINSCRIRE CLIENT dsinscrit le poste 4D Client de 4D Server. Il doit avoir t pralablement inscrit laide de la commande INSCRIRE CLIENT. Si le poste client ntait pas inscrit ou si la commande est excute sur 4e Dimension monoposte, la commande ne fait rien. Note : Un 4D Client est automatiquement dsinscrit lorsque lapplication quitte. Exemple Reportez-vous lexemple de la commande INSCRIRE CLIENT. Rfrence EXECUTER SUR CLIENT, INSCRIRE CLIENT, LIRE CLIENTS INSCRITS. Variables et ensembles systme Si le client est correctement dsinscrit, la variable systme OK prend la valeur 1. Si le 4D Client ntait pas inscrit, OK prend la valeur 0.

4e Dimension - Langage 1325

LIRE CLIENTS INSCRITS

Process version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE CLIENTS INSCRITS (listeClients; nbMthodes) Paramtre listeClients nbMthodes Type Tab Texte Tab Entier long Description Liste des 4D Client enregistrs Liste des mthodes restant excuter

Description La commande LIRE CLIENTS INSCRITS remplit deux tableaux : listeClients, qui contient la liste des clients inscrits laide de la commande INSCRIRE CLIENT. nbMthodes, qui fournit liste des charges de travail de chaque client. La charge de travail est le nombre de mthodes quun 4D Client doit encore excuter, la demande de la commande EXECUTER SUR CLIENT. Exemples (1) Vous souhaitez obtenir la liste des clients inscrits et des mthodes restant excuter : TABLEAU TEXTE($clients;0) TABLEAU ENTIER LONG($nprocs;0) LIRE CLIENTS INSCRITS($clients;$nprocs)

2) Reportez-vous lexemple de la commande INSCRIRE CLIENT. Rfrence DESINSCRIRE CLIENT, EXECUTER SUR CLIENT, INSCRIRE CLIENT. Variables et ensembles systme Si lopration se droule correctement, la variable systme OK prend la valeur 1.

1326 4e Dimension - Langage

46 ________________________ Process (Communications)

4e Dimension - Langage 1327

1328 4e Dimension - Langage

Semaphore

Process (Communications) version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Semaphore (smaphore{; nbTicks}) Boolen Paramtre smaphore nbTicks Rsultat Type Alpha Entier Boolen Description Smaphore tester et positionner Temps dattente maximum smaphore a t correctement cr (Faux) ou smaphore tait dj cr (Vrai)

Description Un smaphore est un drapeau visible par chaque poste client (l'ordinateur de chaque utilisateur) ou chaque process sur un mme poste. Un smaphore a simplement pour rle d'exister ou de ne pas exister. Chaque mthode excute par un utilisateur peut tester la prsence d'un smaphore. En crant et en testant des smaphores, vous permettez aux mthodes de communiquer entre les postes clients et les process. La fonction Semaphore retourne Vrai si smaphore existe. Si smaphore n'existe pas, Semaphore le cre et retourne Faux. Un seul utilisateur la fois peut crer un smaphore. Si Semaphore retourne Faux, cela indique que smaphore n'existait pas, mais cela signifie galement que smaphore a t cr et positionn dans le process d'o l'appel a t effectu. Semaphore retourne Faux si le smaphore n'existait pas. La fonction retourne galement Faux si le smaphore avait t dj positionn par le process d'o l'appel a t effectu. Un smaphore est limit 30 caractres, mtacaractres ($, <>) inclus. Si vous passez une chane plus longue, elle est tronque. Attention, 4D tient compte de la casse des caractres en ce qui concerne les noms de smaphores (le programme considre par exemple que "MonSmaphore" est diffrent de "monsmaphore"). Le paramtre optionnel nbTicks vous permet de spcifier un dlai dattente en ticks (1 tick = 1/60me de seconde) si smaphore est dj positionn. Dans ce cas, avant de retourner Vrai, la fonction attend, dans la limite du temps fix, que smaphore se libre (auquel cas elle retourne Faux). Si le dlai expire sans que smaphore ait t libr, Semaphore retourne Vrai.

4e Dimension - Langage 1329

Il y a deux types de smaphores dans 4e Dimension : les smaphores locaux et les smaphores globaux. Un smaphore local est visible par tous les process d'un mme poste et seulement sur ce poste. Vous dclarez un smaphore local en prfixant son nom avec le signe dollar ($). Les smaphores locaux permettent de contrler des oprations entre les diffrents process excuts sur le mme poste. Par exemple, un smaphore local peut tre utilis pour grer les accs un tableau interprocess appel par tous les process d'une base de donnes monoutilisateur ou d'un poste client. Un smaphore global est visible par tous les utilisateurs et tous les process. Les smaphores globaux permettent de contrler des oprations entre les postes clients d'une base multiutilisateurs. Le principe de fonctionnement des smaphores globaux et locaux est identique. Leur diffrence rside uniquement dans leur porte, c'est--dire leur visibilit. Dans 4D Server, les smaphores globaux sont visibles pour tous les process de tous les postes clients. Un smaphore local n'est visible que pour les process du poste client sur lequel il a t cr. Avec 4e Dimension (monoposte), les smaphores globaux et locaux ont la mme porte car il n'y a qu'un seul utilisateur. Cependant, si votre base est utilise dans les deux environnements, n'hsitez pas employer des smaphores globaux et locaux, en fonction de vos besoins. Les smaphores ne servent pas protger l'accs aux enregistrements cette gestion est effectue automatiquement par 4e Dimension et 4D Server. Les smaphores ont pour but d'viter que plusieurs utilisateurs effectuent la mme opration en mme temps. Exemples (1) Dans l'exemple suivant, vous souhaitez empcher que deux utilisateurs effectuent simultanment une mise jour globale des prix dans une table [Produits]. Pour cela, des smaphores sont utiliss :

Si (Semaphore("MAJPrix")) ` Essai de cration du smaphore ALERTE("Un autre utilisateur est dj en train de mettre jour les prix. Essayez plus tard.") Sinon MAJdesPrix ` Mthode de mise jour des prix EFFACER SEMAPHORE("MAJPrix")) ` Effacer le smaphore Fin de si

1330 4e Dimension - Langage

(2) L'exemple suivant illustre l'utilisation d'un smaphore local. Dans une base comportant plusieurs process, vous souhaitez maintenir une liste de "Choses faire". Vous envisagez de la maintenir jour dans un tableau interprocess et non dans une table. Vous devez empcher les accs simultans l'aide d'un smaphore. Dans ce cas, il vous suffit d'utiliser un smaphore local car la liste "Choses faire" est pour votre utilisation personnelle. Le tableau interprocess est initialis dans la mthode base Sur ouverture : TABLEAU TEXTE (<>ListeAFaire;0) ` La liste de choses faire est vide Voici la mthode utilise pour ajouter des lments la "liste des choses faire" : ` Mthode projet AJOUTER LISTE A FAIRE ` AJOUTER LISTE A FAIRE (Texte) ` AJOUTER LISTE A FAIRE (Elment la liste faire)

C_TEXTE($1) ` Paramtre pass la commande Si (Non (Semaphore("$AccsListe";300))) ` Attendre 5 secondes maximum $vlElem:=Taille tableau(<>ListeAFaire)+1 INSERER LIGNES(<>ListeAFaire;$vlElem) <>ListeAFaire{$vlElem}:=1 EFFACER SEMAPHORE("$AccsListe") ` Effacer le smaphore Fin de si

Vous pouvez appeler cette mthode depuis n'importe quel process. Rfrence EFFACER SEMAPHORE, Tester semaphore.

4e Dimension - Langage 1331

EFFACER SEMAPHORE

Process (Communications) version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

EFFACER SEMAPHORE (smaphore) Paramtre smaphore Type Alpha Description Smaphore effacer

Description EFFACER SEMAPHORE permet d'effacer le smaphore prcdemment cr par la fonction Semaphore. La rgle d'utilisation est que tous les smaphores doivent tre effacs lorsqu'ils ne sont plus ncessaires. Si les smaphores ne sont pas effacs, ils restent en mmoire jusqu' la fermeture du process dans lequel ils ont t crs. Un process ne peut effacer que les smaphores qu'il a crs. Si vous tentez d'effacer un smaphore depuis un autre process que celui qui l'a cr, EFFACER SEMAPHORE ne fait rien. Note : Attention, 4D tient compte de la casse des caractres en ce qui concerne les noms de smaphores (le programme considre par exemple que "MonSmaphore" est diffrent de "monsmaphore"). Exemple Reportez-vous l'exemple de la fonction Semaphore. Rfrence Semaphore.

1332 4e Dimension - Langage

Tester semaphore

Process (Communications) version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Tester semaphore (smaphore) Boolen Paramtre smaphore Rsultat Type Alpha Boolen Description Nom du smaphore tester Vrai = le smaphore existe, Faux = le smaphore nexiste pas

Description La commande Tester semaphore permet de tester lexistence dun smaphore. A la diffrence de la fonction Semaphore, Tester semaphore ne cre pas le smaphore sil nexiste pas. Si le smaphore existe, la fonction retourne Vrai, sil nexiste pas elle retourne Faux. Note : Attention, 4D tient compte de la casse des caractres en ce qui concerne les noms de smaphores (le programme considre par exemple que "MonSmaphore" est diffrent de "monsmaphore"). Exemple Cet exemple permet de connatre ltat dun traitement (en loccurrence, la modification dun code) sans modifier le smaphore : Creer fenetre (x1;x2;y1;y2;-Fentre palette) Repeter Si (Tester semaphore("Code dencryptage")) POSITION MESSAGE ($x3;$y3) MESSAGE("Code d'encryptage en cours de modification.") Sinon POSITION MESSAGE($x3;$y3) MESSAGE("Modification du code d'encryptage autorise.") Fin de si Jusque (StopInfo) FERMER FENETRE

Rfrence Semaphore.

4e Dimension - Langage 1333

APPELER PROCESS

Process (Communications) version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

APPELER PROCESS (process) Paramtre process Type Numrique Description Numro du process

Description APPELER PROCESS appelle le formulaire affich dans la fentre au premier plan de process. Important : APPELER PROCESS ne fonctionne qu'avec des process tournant sur la mme machine. Si vous appelez un process qui n'existe pas, la commande ne fait rien. Si process (le process appel) n'a aucune fentre ou si aucun formulaire n'est affich, rien ne se passe. Le formulaire affich dans le process appel reoit un vnement Sur appel extrieur. Cet vnement doit avoir t slectionn pour le formulaire dans la fentre des proprits de formulaire en mode Structure, et vous devez le traiter dans la mthode formulaire. Si l'vnement n'est pas slectionn ou gr dans la mthode formulaire, la commande ne fait rien. Note : La rception de l'vnement Sur appel extrieur dans un formulaire entre provoque le changement du contexte de saisie du formulaire. En particulier, si un champ tait en cours de modification, l'vnement formulaire Sur donnes modifies est gnr. Le process appelant (dans lequel la commande APPELER PROCESS est excute) n'attend pas : APPELER PROCESS a un effet immdiat. Il est de votre ressort d'crire, si ncessaire, une boucle d'attente pour traiter une ventuelle rponse du process appel l'aide des variables interprocess ou des variables process (rserves cette utilisation) pouvant tre lues et crites entre les deux process avec les commandes LIRE VARIABLE PROCESS et ECRIRE VARIABLE PROCESS. Si vous voulez tablir une communication entre des process qui n'affichent pas de formulaires, utilisez les commandes LIRE VARIABLE PROCESS et ECRIRE VARIABLE PROCESS.

1334 4e Dimension - Langage

APPELER PROCESS accepte la syntaxe alternative APPELER PROCESS (-1). Pour ne pas ralentir l'excution d'une mthode, 4e Dimension ne redessine pas les variables interprocess chaque fois qu'elles sont modifies. Si vous passez -1 au lieu du numro du process dans le paramtre process de la commande APPELER PROCESS, toutes les variables interprocess affiches dans toutes les fentres de tous les process seront mises jour et redessines. Exemple Reportez-vous l'exemple de la section Mthode base Sur fermeture. Rfrence ECRIRE VARIABLE PROCESS, Evenement formulaire, LIRE VARIABLE PROCESS.

4e Dimension - Langage 1335

LIRE VARIABLE PROCESS

Process (Communications) version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE VARIABLE PROCESS (process; varSource; varDestination{; varSource2; varDestination2; ...; varSourceN; varDestinationN}) Paramtre process varSource varDestination Type Numrique Variable Variable Description Numro de process source Variable source Variable de destination

Description La commande LIRE VARIABLE PROCESS lit la valeur de la ou des variable(s) process varSource (varSource2, etc.) depuis le process source dont le numro est pass dans process et la retourne dans la ou les variables(s) varDestination ( varDestination2, etc.) du process courant. Chaque variable source peut tre une variable, un tableau ou un lment de tableau. Tenez cependant compte des restrictions voques plus bas. Pour chaque association varSource;varDestination les types des deux variables doivent tre compatibles, sinon vous pourrez obtenir des valeurs non significatives. Le process courant "pille" les variables du process de destination : ce dernier n'est averti en aucune manire de la lecture de l'instance de ses variables par un autre process. 4D Server : A partir d'un 4D Client, vous pouvez lire des variables dans un process de destination excut sur le poste serveur (procdure stocke). Pour cela, passez dans process le numro du process serveur en ngatif, c'est--dire prcd du signe - (moins). Attention, la communication process intermachine permise par les commandes Prsentation des commandes XML, ECRIRE VARIABLE PROCESS et VARIABLE VERS VARIABLE nest possible que du client vers le serveur. Cest toujours un process client qui lit ou crit les variables dune procdure stocke. Astuce : Si vous ne connaissez pas le numro du process serveur source, vous pouvez tout de mme lire les variables interprocess du serveur. Pour cela, il vous suffit de passer toute valeur ngative dans process. En d'autres termes, il n'est pas ncessaire de connatre prcisment le numro d'un process excut sur le serveur pour utiliser LIRE VARIABLE PROCESS avec les variables interprocess du serveur. Cette possibilit s'avre particulirement utile dans le cas d'une procdure stocke lance sur le serveur par l'intermdiaire de la Mthode base Sur dmarrage serveur. Comme, par dfaut, les postes clients ne connaissent pas le numro de ce process serveur, il vous suffit de passer une valeur ngative (n'importe laquelle) dans le paramtre process.

1336 4e Dimension - Langage

Restrictions LIRE VARIABLE PROCESS n'accepte pas de variables locales comme variables sources. En revanche, les variables de destination peuvent tre interprocess, process ou locales. Vous pouvez "recevoir" les valeurs uniquement dans des variables, pas dans des champs. LIRE VARIABLE PROCESS accepte tout type de variable source, process ou interprocess, l'exception des variables de type : Pointeur Tableau de pointeurs Tableau deux dimensions Le process source doit tre un process utilisateur, ce ne peut tre un des process du moteur de 4D. Si le process source n'existe pas, la commande ne fait rien. Note : En mode interprt, si une variable source n'existe pas, la valeur indfinie est retourne. Vous pouvez le dtecter en testant la variable de destination correspondante l'aide de la fonction Type. En mode compil, si aucune variable n'est associe au process source, une erreur est retourne. Vous pouvez intercepter cette erreur l'aide d'une mthode de gestion d'erreurs installe par la commande APPELER SUR ERREUR. Exemples (1) La ligne de code suivante lit la valeur de la variable Texte vtCurStatus dans le process dont le numro est $vlProcess et retourne le rsultat dans la variable process vtInfo du process courant :

LIRE VARIABLE PROCESS($vlProcess;vtCurStatus;vtInfo)

(2) La ligne de code suivante fait la mme chose mais retourne la valeur dans la variable locale $vtInfo de la mthode s'excutant dans le process courant :

LIRE VARIABLE PROCESS($vlProcess;vtCurStatus;$vtInfo)

(3) La ligne de code suivante fait la mme chose mais retourne la valeur dans la mme variable vtCurStatus du process courant :

LIRE VARIABLE PROCESS($vlProcess;vtCurStatus;vtCurStatus)

Note : La premire vtCurStatus dsigne l'instance de la variable dans le process source, la seconde vtCurStatus dsigne l'instance de la variable dans le process courant.

4e Dimension - Langage 1337

(4) L'exemple suivant lit squentiellement les lments d'un tableau process depuis le process indiqu par $vlProcess : LIRE VARIABLE PROCESS($vlProcess;vl_IPCom_Array;$vlSize) Boucle($vlElem;1;$vlSize) LIRE VARIABLE PROCESS($vlProcess;at_IPCom_Array{$vlElem};$vtElem) ` Faire quelque chose avec $vtElem Fin de boucle

Note : Dans cet exemple, la variable process vl_IPCom_Array doit tre gre par le process source et contient la taille du tableau at_IPCom_Array. (5) L'exemple suivant fait la mme chose que le prcdent mais lit le tableau dans son intgralit au lieu de le faire lment par lment :

LIRE VARIABLE PROCESS($vlProcess;at_IPCom_Array;$anArray) Boucle($vlElem;1;Taille tableau($anArray)) ` Faire quelque chose avec $anArray{$vlElem} Fin de boucle

(6) L'exemple suivant lit l'instance des variables v1,v2,v3 dans le process source et retourne leurs valeurs dans l'instance des mmes variables du process courant :

LIRE VARIABLE PROCESS($vlProcess;v1;v1;v2;v2;v3;v3)

(7) Reportez-vous l'exemple de la commande PROPRIETES GLISSER DEPOSER. Rfrence APPELER PROCESS, ECRIRE VARIABLE PROCESS, Introduction aux process, Prsentation du Glisser-Dposer, PROPRIETES GLISSER DEPOSER, VARIABLE VERS VARIABLE.

1338 4e Dimension - Langage

ECRIRE VARIABLE PROCESS

Process (Communications) version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRIRE VARIABLE PROCESS (process; varDestination; exprSource{; varDestination2; exprSource2; ...; varDestinationN; exprSourceN}) Paramtre process varDestination exprSource Type Numrique Variable Variable Description Numro de process de destination Variable de destination Expression source (ou variable source)

Description La commande ECRIRE VARIABLE PROCESS crit la ou les valeur(s) de exprSource (exprSource2, etc.) dans la ou les variable(s) process varDestination (varDestination2, etc.) du process de destination dont le numro est pass dans process. Chaque variable de destination peut tre une variable ou un lment de tableau. Tenez cependant compte des restrictions voques ci-dessous. Pour chaque association varDestination;exprSource, le type de l'expression doit tre compatible avec la variable de destination, sinon vous pourrez obtenir des variables avec des valeurs incorrectes. En mode interprt, si la variable de destination n'existe pas, elle est cre et reoit l'expression. En mode compil, si aucune variable n'est associe au process de destination, une erreur est retourne. Vous pouvez intercepter cette erreur l'aide d'une mthode de gestion d'erreurs installe par la commande APPELER SUR ERREUR. Lorsque le process courant crit les variables du process de destination, ce dernier n'est averti en aucune manire de l'criture de l'instance de ses variables par un autre process. 4D Server : A partir d'un 4D Client, vous pouvez crire des variables dans un process de destination excut sur le poste serveur (procdure stocke). Pour cela, passez dans process le numro du process serveur en ngatif, c'est--dire prcd du signe - (moins). Attention, la communication process intermachine permise par les commandes Prsentation des commandes XML, LIRE VARIABLE PROCESS et VARIABLE VERS VARIABLE nest possible que du client vers le serveur. Cest toujours un process client qui lit ou crit les variables dune procdure stocke.

4e Dimension - Langage 1339

Astuce : Si vous ne connaissez pas le numro du process serveur de destination, vous pouvez tout de mme crire dans les variables interprocess du serveur. Pour cela, il vous suffit de passer toute valeur ngative dans process. En d'autres termes, il n'est pas ncessaire de connatre prcisment le numro d'un process excut sur le serveur pour utiliser ECRIRE VARIABLE PROCESS avec des variables interprocess du serveur. Cette possibilit s'avre particulirement utile dans le cas d'une procdure stocke lance sur le serveur par l'intermdiaire de la Mthode base Sur dmarrage serveur. Comme les postes clients ne connaissent pas forcment le numro de ce process serveur, il vous suffit de passer une valeur ngative (n'importe laquelle) dans le paramtre process. Restrictions ECRIRE VARIABLE PROCESS n'accepte pas de variables locales comme variables de destination. ECRIRE VARIABLE PROCESS accepte tout type de variable process ou interprocess de destination, l'exception : des variables de type Pointeur. des tableaux de tous types. Pour crire un tableau entier d'un process vers un autre, utilisez la commande VARIABLE VERS VARIABLE. Notez cependant que ECRIRE VARIABLE PROCESS vous permet d'crire des lments de tableaux. des lments de tableaux de pointeurs et des lments de tableaux deux dimensions. Le process de destination doit tre un process utilisateur, ce ne peut tre un des process du moteur de 4D. Si le process de destination n'existe pas, la commande ne fait rien. Exemples (1) La ligne de code suivante affecte une chane vide la variable Texte vtCurStatus du process dont le numro est $vlProcess :

ECRIRE VARIABLE PROCESS($vlProcess;vtCurStatus;"")

(2) La ligne de code suivante affecte la variable Texte vtCurStatus du process dont le numro est $vlProcess la valeur de la variable $vtInfo depuis la mthode en cours d'excution du process courant :

ECRIRE VARIABLE PROCESS($vlProcess;vtCurStatus;$vtInfo)

(3) La ligne de code suivante affecte la variable Texte vtCurStatus du process dont le numro est $vlProcess la valeur de la mme variable dans le process courant :

ECRIRE VARIABLE PROCESS($vlProcess;vtCurStatus;vtCurStatus)

Note : Le premier vtCurStatus dsigne l'instance de la variable dans le process de destination, le second vtCurStatus dsigne l'instance de la variable dans le process courant.

1340 4e Dimension - Langage

(4) L'exemple suivant place squentiellement en majuscules les lments d'un tableau process depuis le process dsign par $vlProcess: LIRE VARIABLE PROCESS($vlProcess;vl_IPCom_Array;$vlSize) Boucle($vlElem;1;$vlSize) LIRE VARIABLE PROCESS($vlProcess;at_IPCom_Array{$vlElem};$vtElem) ECRIRE VARIABLE PROCESS($vlProcess;at_IPCom_Array{$vlElem};Majusc($vtElem)) Fin de boucle

Note : Dans cet exemple, la variable process vl_IPCom_Array doit tre gre par les process source/destination et contient la taille du tableau at_IPCom_Array. (5) L'exemple suivant crit l'instance des variables v1, v2, v3 dans le process de destination partir de l'instance de ces mmes variables dans le process courant :

ECRIRE VARIABLE PROCESS($vlProcess;v1;v1;v2;v2;v3;v3)

Rfrence APPELER PROCESS, Introduction aux process, LIRE VARIABLE PROCESS, VARIABLE VERS VARIABLE.

4e Dimension - Langage 1341

VARIABLE VERS VARIABLE

Process (Communications) version 6.0.2

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

VARIABLE VERS VARIABLE (process; varDestination; varSource{; varDestination2; varSource2; ...; varDestinationN; varSourceN}) Paramtre process varDestination varSource Type Numrique Variable Variable Description Numro du process de destination Variable de destination Variable source

Description La commande VARIABLE VERS VARIABLE crit la valeur de la ou des variable(s) varSource1 (varSource2, etc.), dans la ou les variable(s) process varDestination (varDestination2, etc.) du process de destination dont vous avez pass le numro dans process. VARIABLE VERS VARIABLE a un fonctionnement semblable celui de la commande ECRIRE VARIABLE PROCESS, avec cependant les diffrences suivantes : Alors que vous passez comme source ECRIRE VARIABLE PROCESS des expressions (et donc vous ne pouvez pas passer un tableau en totalit), vous devez passer comme source VARIABLE VERS VARIABLE uniquement des variables (et donc vous pouvez passer un tableau en totalit). Avec ECRIRE VARIABLE PROCESS, chaque variable de destination peut tre une variable ou un lment de tableau, mais ne peut pas tre un tableau. Avec VARIABLE VERS VARIABLE, chaque variable de destination peut tre une variable, un tableau ou un lment de tableau. 4D Server : La communication process intermachine permise par les commandes VARIABLE VERS VARIABLE, ECRIRE VARIABLE PROCESS et LIRE VARIABLE PROCESS nest possible que du client vers le serveur. Cest toujours un process client qui lit ou crit les variables dune procdure stocke. Pour chaque association varDestination;varSource, le type de la variable source doit tre compatible avec la variable de destination, sinon vous pourrez obtenir des variables avec des valeurs non significatives. En mode interprt, si la variable de destination n'existe pas, elle est cre puis le type et la valeur de la variable source lui sont affects. Lorsque le process courant crit les variables du process de destination, ce dernier n'est averti en aucune manire de l'criture de l'instance de ses variables par un autre process.

1342 4e Dimension - Langage

Restrictions VARIABLE VERS VARIABLE n'accepte pas de variables locales comme variables de destination. VARIABLE VERS VARIABLE accepte tout type de variable process ou interprocess de destination, l'exception de variables de type : Pointeur Tableau de pointeurs Tableau deux dimensions Le process de destination doit tre un process utilisateur, ce ne peut tre un des process du moteur de 4D. Si le process de destination n'existe pas, une erreur est retourne. Vous pouvez intercepter cette erreur l'aide d'une mthode de gestion d'erreurs installe par la commande APPELER SUR ERREUR. Exemple L'exemple suivant rcupre un tableau process depuis le process dsign par $vlProcess, passe squentiellement tous ses lments en caractres majuscules puis rcrit entirement le tableau : LIRE VARIABLE PROCESS($vlProcess;at_IPCom_Tab;$anTab) Boucle($vlElem;1;Taille tableau($anTab)) $anTab{$vlElem}:=Majusc($anTab{$vlElem}) Fin de boucle VARIABLE VERS VARIABLE($vlProcess;at_IPCom_Tab;$anTab)

Rfrence ECRIRE VARIABLE PROCESS, Introduction aux process, LIRE VARIABLE PROCESS.

4e Dimension - Langage 1343

1344 4e Dimension - Langage

47 ________________________ Process (Interface utilisateur)

4e Dimension - Langage 1345

1346 4e Dimension - Langage

CACHER PROCESS

Process (Interface utilisateur) version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CACHER PROCESS (process) Paramtre process Type Numrique Description Numro du process cacher

Description CACHER PROCESS masque toutes les fentres appartenant au process dont le numro est process. Tous les lments d'interface de process sont cachs jusqu'au MONTRER PROCESS suivant. La barre de menus du process est aussi cache. L'ouverture d'une fentre alors que le process est cach ne provoquera aucun redessinement d'cran. Si le process est dj cach, cette commande ne fait rien. La seule exception cette rgle est la fentre du dbogueur. Si la fentre du dbogueur est affiche lorsque process est cach, process est affich et passe au premier plan. Si vous ne voulez pas qu'un process soit affich lorsqu'il est cr, CACHER PROCESS doit tre la premire commande appeler dans la mthode du process. Les process Process principal et Gestionnaire du cache ne peuvent pas tre cachs l'aide de cette commande. Lorsqu'un process est cach, il est toujours en cours d'excution. Si vous souhaitez ne cacher qu'une fentre du process, utilisez la commande CACHER FENETRE. Exemple L'exemple suivant cachera toutes les fentres appartenant au process courant :

CACHER PROCESS (Numero du process courant)

Rfrence MONTRER PROCESS, Statut du process, CACHER FENETRE.

4e Dimension - Langage 1347

MONTRER PROCESS

Process (Interface utilisateur) version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

MONTRER PROCESS (process) Paramtre process Type Numrique Description Numro du process dont les fentres doivent tre affiches

Description MONTRER PROCESS fait apparatre l'ensemble des fentres appartenant process. Cette commande ne passe pas les fentres de process au premier plan, utilisez pour cela la commande PASSER AU PREMIER PLAN. Si les fentres de process sont dj affiches, cette commande ne fait rien. Exemple L'exemple suivant affiche le process "Clients", s'il tait cach auparavant. Le numro de process est stock dans la variable interprocess <>Clients :

MONTRER PROCESS (<>Clients)

Rfrence CACHER PROCESS, PASSER AU PREMIER PLAN, Statut du process.

1348 4e Dimension - Langage

PASSER AU PREMIER PLAN

Process (Interface utilisateur) version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

PASSER AU PREMIER PLAN (process) Paramtre process Type Numrique Description Numro du process passer au premier plan

Description PASSER AU PREMIER PLAN passe les fentres du process de numro process au premier plan. Toutes les fentres appartenant process passent au premier plan. L'ordre des fentres est conserv. Si le process est dj au premier plan, la commande ne fait rien. Si le process est cach, il faut utiliser la commande MONTRER PROCESS pour faire d'abord apparatre le process, sinon PASSER AU PREMIER PLAN ne fait rien. Le Process principal et le Process de structure peuvent tre passs au premier plan l'aide de cette commande. Exemple L'exemple suivant est une mthode qui peut tre excute partir d'une commande de menu. Elle vrifie si le process au premier plan est le process <>Clients. Sinon, ce process passe au premier plan :

Si (Process de premier plan#<>Clients) ` Si la liste des clients n'est pas affiche PASSER AU PREMIER PLAN (<>Clients) ` Passer cette liste au premier plan Fin de si

Rfrence CACHER PROCESS, MONTRER PROCESS, Statut du process.

4e Dimension - Langage 1349

Process de premier plan

Process (Interface utilisateur) version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Process de premier plan {(*)} Entier Paramtre * Rsultat Type Entier Description Numro du process de la premire fentre non-flottante Numro du process dont la ou les fentre(s) est (sont) au premier plan

Description Process de premier plan retourne le numro du process dont la ou les fentre(s) est (sont) au premier plan. Lorsqu'une ou plusieurs fentres flottantes sont ouvertes, deux niveaux diffrents de fentres sont distingus : les fentres standard les fentres flottantes Si la fonction Process de premier plan est utilise dans la mthode formulaire ou dans une mthode objet d'une fentre flottante, la fonction retourne le numro du process de la fentre flottante au premier plan parmi les fentres flottantes. Si vous passez le paramtre optionnel astrisque, la fonction retourne le numro du process dont la fentre est au premier plan, exception faite du niveau des fentres flottantes. Exemple Rfrez-vous l'exemple de PASSER AU PREMIER PLAN. Rfrence LISTE FENETRES, PASSER AU PREMIER PLAN.

1350 4e Dimension - Langage

48 ________________________ Proprits des objets

4e Dimension - Langage 1351

1352 4e Dimension - Langage

Proprits des objets

Proprits des objets version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les commandes de proprits des objets agissent sur les proprits des objets prsents dans les formulaires. Elles vous permettent de modifier l'apparence et le comportement de ces objets lorsque vous utilisez les formulaires dans les modes Utilisation et Menus crs. Important : La porte (l'aire d'action) de ces commandes est le formulaire en cours d'utilisation ; les modifications ne sont pas conserves lorsque vous sortez du formulaire. Accs aux objets par leur nom d'objet ou partir du nom de la source de donnes Les commandes de proprits des objets partagent toutes la mme syntaxe : NOM DE LA COMMANDE({*;} objet { ; paramtres spcifiques la commande ) Si vous spcifiez le paramtre optionnel *, vous indiquez un nom d'objet (une chane) dans objet. Vous pouvez utiliser le caractre @ dans ce nom si vous voulez adresser plusieurs objets du formulaire dans un seul appel. Le tableau qui suit montre des exemples de noms d'objets que vous pouvez spcifier pour cette commande. Noms d'objets zoneGroupe zone@ @zoneGroupe @Groupe@ zone@Btn @ Objets affects par l'appel Uniquement l'objet zoneGroupe. Les objets dont le nom commence par zone. Les objets dont le nom finit par zoneGroupe. Les objets dont le nom contient Groupe. Les objets dont le nom commence par zone et finit par Btn. Tous les objets prsents dans le formulaire.

Note : Il est possible de paramtrer le mode dinterprtation du caractre @, lorsque celui-ci est inclus dans une chane de caractres. Cette option influe sur le fonctionnement des commandes du thme Proprits des objets. Pour plus d'informations, reportez-vous au manuel Mode Structure de 4D. Si vous omettez le paramtre optionnel *, vous indiquez un champ ou une variable dans objet. Dans ce cas, vous ne spcifiez pas une chane mais une rfrence de champ ou de variable (champ et variable objet uniquement). Note : Cette seconde syntaxe reste compatible avec les versions prcdentes de 4D.

4e Dimension - Langage 1353

CHANGER JEU DE CARACTERES

Proprits des objets version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER JEU DE CARACTERES ({*; }objet; police) Paramtre * objet police Type Objet Description Si spcifi = objet est un nom d'objet (chane) Si omis = objet est un champ ou une variable Nom d'objet (si * spcifi) ou Champ ou Variable (si * omis) Nom ou numro de police de caractres

Chane | Num

Description CHANGER JEU DE CARACTERES passe la police dans laquelle objet est affich en police. Le paramtre police peut tre soit un nom soit un numro de police. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom d'objet (une chane). Si vous ne passez pas le paramtre, vous indiquez que le paramtre objet est un champ ou une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de champ ou de variable (champ ou variable objet uniquement). Pour plus d'informations sur les noms d'objets, reportez-vous la section d'introduction, Proprits des objets. Exemples (1) L'exemple suivant dfinit la police d'un bouton nomm bOK. La police est Arial, une police systme sous Windows :

` Modification de la police de bOK CHANGER JEU DE CARACTERES (bOK; "Arial")

(2) L'exemple suivant dfinit la police de tous les objets d'un formulaire dont le nom contient "info".

CHANGER JEU DE CARACTERES (*;"@info@";"Times")

Rfrence CHANGER STYLE, CHANGER TAILLE.

1354 4e Dimension - Langage

CHANGER TAILLE

Proprits des objets version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER TAILLE ({*; }objet; taille) Paramtre * objet taille Type Objet Numrique Description Si spcifi = objet est un nom d'objet (chane) Si omis = objet est un champ ou une variable Nom d'objet (si * est spcifi) ou Champ ou variable (si * est omis) Taille de police en points

Description CHANGER TAILLE dfinit la taille de la police du ou des objet(s) de formulaire spcifi(s) par objet. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom d'objet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est un champ ou une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de champ ou de variable (champ ou variable objet uniquement). Pour plus d'informations sur les noms d'objets, reportez-vous la section Proprits des objets. La taille peut tre tout Entier compris entre 1 et 255. Si la taille exacte n'existe pas, les caractres sont proportionnellement redimensionns. La zone de l'objet, telle qu'elle a t dfinie dans le formulaire, doit tre suffisamment grande pour afficher les donnes dans la nouvelle taille. Autrement, le texte peut tre tronqu ou pas du tout affich. Exemples (1) L'exemple suivant dfinit la taille de police de la variable appele vInfo :

CHANGER TAILLE (vInfo; 14)

(2) L'exemple suivant dfinit la taille de police de tous les objets de formulaire dont le nom dbute par "hl" :

CHANGER TAILLE (*;"hl@";14)

4e Dimension - Langage 1355

CHANGER STYLE

Proprits des objets version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER STYLE ({*; }objet; style) Paramtre * objet style Type Objet Numrique Description Si spcifi = objet est un nom d'objet (chane) Si omis = objet est un champ ou une variable Nom d'objet (si * est spcifi) ou Champ ou variable (si * est omis) Style de police

Description CHANGER STYLE assigne le style de police style ou aux objet(s) de formulaire dsign(s) par objet. Le nombre style est un code de style du systme d'exploitation. En additionnant des codes, vous combinez les styles. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom d'objet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est un champ ou une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de champ ou de variable (champ ou variable objet uniquement). Pour plus d'informations sur les noms d'objets, reportez-vous la section Proprits des objets. Vous devez passer dans le paramtre style une des constantes prdfinies suivantes ou la somme de plusieurs de ces constantes : Constante Normal Gras Italique Soulign Relief Ombr Condens Etendu Type Entier Entier Entier Entier Entier Entier Entier Entier Valeur 0 1 2 4 8 16 32 64

long long long long long long long long

Note : Sous Windows, seuls les styles Normal, Gras, Italique et Soulign sont disponibles.

1356 4e Dimension - Langage

Exemples (1) L'exemple suivant dfinit le style de police du bouton bAjoutNouveau. Le style demand est gras italique :

CHANGER STYLE (bAjoutNouveau; Gras + Italique)

(2) L'exemple suivant dfinit le style de police Normal pour tous les objets de formulaire dont le nom dbute par "vt" :

CHANGER STYLE (*; "vt@";Normal)

Rfrence CHANGER JEU DE CARACTERES, CHANGER TAILLE.

4e Dimension - Langage 1357

ACTIVER BOUTON

Proprits des objets version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ACTIVER BOUTON ({*; }objet) Paramtre * objet Type Objet de formulaire Description Si spcifi, objet est un nom d'objet (chane) Si omis, objet est une variable Nom d'objet (si * est spcifi) ou Variable (si * est omis)

Description La commande ACTIVER BOUTON active le ou les objet(s) de formulaire dsign(s) par objet. Un bouton ou un objet activ ragit aux clics souris et aux raccourcis clavier. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom d'objet (une chane). Si ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable (variable objet uniquement). Pour plus d'informations sur les noms d'objets, reportez-vous la section Proprits des objets. Cette commande (malgr ce que son nom suggre) peut tre applique aux types d'objets suivants : Bouton, Bouton par dfaut, Bouton 3D, Bouton invisible, Bouton invers Bouton radio, Bouton radio 3D, Bouton image Case cocher, Case cocher 3D Pop-up menu, Liste droulante, Combo Box, Menu/Liste droulante Thermomtre, Rgle

Note : Il est inutile d'appeler cette commande avec un objet auquel une action automatique a t assigne car 4D se charge de modifier son tat lorsque c'est ncessaire. Exemples (1) L'exemple suivant active le bouton bValider :

ACTIVER BOUTON(bValider)

1358 4e Dimension - Langage

(2) L'exemple suivant active tous les objets du formulaire dont le nom contient btn:

ACTIVER BOUTON(*;"@btn@")

(3) Reportez-vous l'exemple de la commande TITRE BOUTON. Rfrence INACTIVER BOUTON, TITRE BOUTON.

4e Dimension - Langage 1359

INACTIVER BOUTON

Proprits des objets version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

INACTIVER BOUTON ({*; }objet) Paramtre * objet Type Objet de formulaire Description Si spcifi, objet est un nom d'objet (chane) Si omis, objet est une variable Nom d'objet (si * est spcifi) ou Variable (si * est omis)

Description La commande INACTIVER BOUTON inactive le ou les objet(s) de formulaire dsign(s) par objet. Un bouton ou un objet inactiv ne ragit pas aux clics souris ni aux raccourcis clavier, et est affich en gris. Note : Dsactiver un bouton ou un objet ne vous empche pas de modifier sa valeur par programmation. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom d'objet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable (variable objet uniquement). Pour plus d'informations sur les noms d'objets, reportez-vous la section Proprits des objets. Cette commande (malgr ce que son nom suggre) peut tre applique aux types d'objets suivants : Bouton, Bouton par dfaut, Bouton 3D, Bouton invisible, Bouton invers Bouton radio, Bouton radio 3D, Bouton image Case cocher, Case cocher 3D Pop-up menu, Liste droulante, Combo Box, Menu/Liste droulante Thermomtre, Rgle

Note : Il est inutile d'appeler cette commande avec un objet auquel une action automatique a t assigne car 4D se charge de modifier son tat lorsque c'est ncessaire.

1360 4e Dimension - Langage

Exemples (1) L'exemple suivant inactive le bouton bValider :

INACTIVER BOUTON(bValider)

(2) L'exemple suivant inactive tous les objets de formulaire dont le nom contient btn :

INACTIVER BOUTON(*;"@btn@")

(3) Reportez-vous l'exemple de la commande TITRE BOUTON. Rfrence ACTIVER BOUTON, TITRE BOUTON.

4e Dimension - Langage 1361

TITRE BOUTON

Proprits des objets version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TITRE BOUTON ({*; }objet; libellBouton) Paramtre * objet libellBouton Type Objet de formulaire Alpha Description Si spcifi, objet est un nom d'objet (chane) Si omis, objet est une variable Nom d'objet (si * est spcifi) ou Variable (si * est omis) Nouveau nom du bouton

Description La commande TITRE BOUTON change le titre du ou des bouton(s) spcifi(s) dans le paramtre objet et le remplace par la valeur dfinie dans le paramtre libellBouton. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom d'objet (une chane). Si vous ne passez pas ce paramtre, vous indiquez que le paramtre objet est une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de variable (variable objet uniquement). Pour plus d'informations sur les noms d'objets, reportez-vous la section Proprits des objets. TITRE BOUTON n'affecte que les boutons affichant du texte : boutons, cases cocher et boutons radio. Gnralement, cette commande s'applique un bouton la fois. La zone du bouton doit tre assez grande pour pouvoir accueillir le texte ; sinon, le texte est tronqu. N'utilisez pas de retours chariot dans libellBouton.

1362 4e Dimension - Langage

Exemple L'exemple suivant est la mthode objet d'un bouton de recherche situ dans la zone de pied de page d'un formulaire sortie affich par la commande MODIFIER SELECTION. La mthode effectue une recherche dans une table et active ou inactive le bouton intitul bSuppr et change son titre, en fonction des rsultats de la recherche : CHERCHER ([Personnes]; [Personnes]Nom = vNom) Au cas ou : (Enregistrements trouves ([Personnes]) = 0) ` Personne n'a t trouv TITRE BOUTON (bSuppr;" Supprimer") INACTIVER BOUTON (bSuppr) : (Enregistrements trouves ([Personnes]) = 1) ` Une personne a t trouve TITRE BOUTON (bSuppr;"Supprimer la personne") ACTIVER BOUTON (bSuppr) : (Enregistrements trouves([Personnes]) > 1) ` Plusieurs personnes ont t trouves TITRE BOUTON (bSuppr;"Supprimer les personnes") ACTIVER BOUTON (bSuppr) Fin de cas

Rfrence ACTIVER BOUTON, INACTIVER BOUTON.

4e Dimension - Langage 1363

Lire formatage

Proprits des objets version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire formatage ({*; }objet) Chane Paramtre * objet Rsultat Type * Objet de formulaire Chane Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est un champ ou une variable Nom dobjet (si * spcifi) ou Champ ou variable (si * omis) Format daffichage de lobjet

Description La commande Lire formatage retourne le format daffichage courant appliqu lobjet spcifi par le paramtre objet. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (dans ce cas, passez une chane dans objet). Si vous ne passez pas le paramtre, vous indiquez que le paramtre objet est un champ ou une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de champ ou de variable. Cette commande retourne le format daffichage courant de lobjet, cest--dire le format dfini en mode Structure ou laide de la commande CHOIX FORMATAGE. Lire formatage fonctionne avec tous les types dobjets de formulaire (champs ou variables) acceptant un format daffichage : boolen, date, heure, image, chane, numrique, ainsi que les grilles de boutons, cadrans, thermomtres, rgles, pop up menus image, boutons image et boutons 3D. Pour plus dinformations sur les formats daffichage de ces objets, reportezvous la documentation de la commande CHOIX FORMATAGE. Note : Si vous appliquez la commande un ensemble dobjets, seul le formatage du dernier objet pris en compte est retourn. Lorsque la commande Lire formatage est applique des objets de type date, heure ou image (formats dfinis sous forme de constantes), la chane retourne correspond au code ASCII de la constante. Pour obtenir la valeur de la constante, il suffit dappliquer la fonction Code ascii au rsultat (cf. exemple ci-dessous).

1364 4e Dimension - Langage

Exemples (1) Cet exemple permet dobtenir la valeur de la constante de formatage applique la variable image dont le nom dobjet est maphoto : C_ALPHA(2;$format) CHOIX FORMATAGE(*;"maphoto";Caractere(Sur fond)) `Application du format sur fond (valeur = 3) $format:=Lire formatage(*;"maphoto") ALERTE("Format numro :"+Chaine(Code ascii($format))) `Affichage de la valeur "3"

(2) Cet exemple permet dobtenir le formatage appliqu au champ boolen [Adhrents]Etat_civil :

C_ALPHA(30;$format) $format:=Lire formatage([Adhrents]Etat_civil) ALERTE($format) `Affichage du format, par exemple "Mari;Clibataire"

Rfrence CHOIX FORMATAGE.

4e Dimension - Langage 1365

CHOIX FORMATAGE

Proprits des objets version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHOIX FORMATAGE ({*; }objet; formatAffich) Paramtre * objet formatAffich Type Objet de formulaire Alpha Description Si spcifi, objet est un nom d'objet (chane) Si omis, objet est un champ ou une variable Nom d'objet (si * spcifi) ou Champ ou Variable (si * omis) Nouveau format d'affichage de l'objet

Description CHOIX FORMATAGE remplace le format d'affichage du ou des objet(s) spcifi(s) par objet avec le format que vous avez pass dans formatAffich. Le nouveau format est utilis uniquement pour l'affichage courant, il n'est pas stock avec le formulaire. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom d'objet (une chane). Si vous ne passez pas le paramtre, vous indiquez que le paramtre objet est un champ ou une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de champ ou de variable (champ ou variable objet uniquement). Pour plus d'informations sur les noms d'objets, reportez-vous la section Proprits des objets. La commande CHOIX FORMATAGE peut tre indiffremment utilise dans des formulaires entre ou sortie (affichs ou imprims) et applique aux champs ou aux variables (saisissables ou non saisissables). Bien entendu, vous devez utiliser un format d'affichage compatible avec le type de donnes prsentes dans l'objet ou avec l'objet lui-mme. Boolens Pour formater des champs boolens, vous disposez de deux possibilits : vous pouvez passer une valeur simple dans formatAffich. Dans ce cas, le champ sera affich sous forme de case cocher, son libell sera la valeur dfinie. vous pouvez passer deux valeurs spares par un point-virgule (;) dans formatAffich. Dans ce cas, le champ sera affich sous forme de deux boutons radio.

1366 4e Dimension - Langage

Dates Pour formater des champs ou variables de type Date, passez Caractere(n) dans formatAffich, o n peut tre une des constantes prdfinies suivantes (thme Formats d'affichage des dates) : Constante Type Valeur Format court Entier long 1 Format abrg Entier long 2 Format long Entier long 3 Format spcial Entier long 4 Jour Mois Anne Entier long 5 Abrg Jour Mois Anne Entier long 6 Spcial forc Entier long 7 Heures Pour formater des champs ou variables de type Heure, passez Caractere(n) dans formatAffich, o n peut tre une des constantes prdfinies suivantes (thme Formats d'affichage des heures) : Constante Type Valeur h mn s Entier long 1 h mn Entier long 2 Heure Minute Seconde Entier long 3 Heure Minute Entier long 4 h mn Matin Aprs Midi Entier long 5 Images Pour formater des champs ou variables de type Image, passez Caractere(n) dans formatAffich, o n peut tre une des constantes prdfinies suivantes (thme Formats d'affichage des images) : Constante Type Valeur Tronque centre Entier long 1 Non tronque Entier long 2 Sur fond Entier long 3 Tronque non centre Entier long 4 Proportionnelle Entier long 5 Proportionnelle centre Entier long 6 Alphas et numriques Pour formater des champs ou variables de type alpha ou numrique, passez directement le libell du format dans le paramtre formatAffich. Pour plus d'informations sur les formats d'affichage, reportez-vous au manuel Mode Structure de 4e Dimension.

4e Dimension - Langage 1367

Note : Pour pouvoir exploiter les formats d'affichage personnaliss que vous avez crs dans la bote de dialogue des Prfrences, prfixez le nom du format, dans le paramtre formatAffich, d'une barre verticale (|). Boutons image Pour formater des boutons image, passez dans le paramtre formatAffich une chane de caractres respectant la syntaxe suivante : cols;lignes;image;mode{;ticks} cols = nombre de colonnes de l'image lignes = nombre de lignes de l'image image = image utilise, provenant de la bibliothque d'images, d'une variable image ou d'une ressource PICT : - si l'image provient de la bibliothque d'images, saisissez son numro, prcd d'un point d'interrogation (ex. : "?250"). - si l'image provient d'une variable image, saisissez le nom de la variable - si l'image provient d'une ressource PICT, saisissez son numro, prcd de deux points (ex. : ":62500") mode = mode d'affichage et de fonctionnement du bouton image. Ce paramtre peut prendre les valeurs 0, 1, 2, 16, 32, 64 et 128, chaque valeur reprsentant un mode daffichage ou de fonctionnement. Ces valeurs sont cumulatives ; en dautres termes, pour slectionner les valeurs 64 et 1, passez 65 dans le paramtre mode. Voici le dtail de chaque valeur : - mode = 0 (pas d'option) Affiche limage suivante de la srie lorsque lutilisateur clique sur le bouton. Affiche limage prcdente de la srie lorsque lutilisateur effectue Maj+clic sur le bouton. La squence dimages sarrte lorsquon atteint la dernire image de la srie. En dautres termes, le bouton ne retourne pas la premire image de la srie. - mode = 1 (Dfilement continu sur clic) Similaire au prcdent, la diffrence prs que lorsque lutilisateur clique sur limage et maintient le bouton de la souris enfonc, lenchanement des images est continu (cest-dire que la srie dfile comme une animation). La squence dimages sarrte lorsquon atteint la dernire image de la srie. - mode = 2 (Recommencer la squence) Similaire au prcdent, la diffrence prs que le dfilement des images est reboucl lorsquon atteint la dernire image de la squence de dfilement : une fois la dernire image atteinte, la premire image est de nouveau affiche et la squence recommence. - mode = 16 (Bascule sur passage du curseur) Le contenu du bouton image est modifi lorsque le curseur de la souris passe au-dessus de lui, sans que lutilisateur ne clique. Limage initiale est rtablie lorsque le curseur quitte la zone du bouton. Ce mode, aussi appel Roll over, est frquemment utilis dans les navigateurs Web et dans les applications multimedia. Limage affiche est la dernire du tableau dimagettes, sauf si le mode 128 (Dernire imagette si dsactiv) est galement slectionn dans ce cas, cest lavant-dernire imagette qui est utilise comme bascule.

1368 4e Dimension - Langage

- mode = 32 (Retour sur relchement du clic) Ce mode fonctionne avec deux images ; il indique que le bouton doit toujours afficher la premire image, sauf quand lutilisateur clique dessus. En dautres termes, le bouton affiche limage A par dfaut, limage B lorsquil reoit un clic souris, et de nouveau limage A ds que le bouton de la souris est relch. Ce mode permet de raliser un bouton daction avec une image diffrente pour chaque tat (normal et enfonc). Vous pouvez ainsi crer un effet 3D personnalis ou toute image symbolisant laction effectue par bouton. - mode = 64 (Transparent) Permet de rendre transparent le fond de limage. - mode = 128 (Dernire imagette si dsactiv) Permet dindiquer que la dernire image de la srie doit tre utilise lorsque le bouton est inactiv. Avec ce paramtrage, 4e Dimension affiche la dernire partie de limage rfrence lorsque le bouton image est inactiv. Limage dinactivation est traite part par 4e Dimension : lorsque vous combinez cette option avec les valeurs 0, 1 ou 2 dans le paramtre mode, la dernire image est exclue de la squence associe au bouton et napparatra que lorsquil sera inactiv. ticks = activation du mode dfilement automatique tous les N ticks et intervalle de temps sparant l'affichage de chaque image. Ce paramtre optionnel, s'il est pass, provoque le dfilement automatique et en boucle du contenu du bouton image la vitesse spcifie. Par exemple, si vous passez "2;3;?16807;0;10", la variation du bouton image seffectuera tous les 10 ticks. Dans ce mode, toutes les autres options sont ignores lexception de loption Transparent (mode 64). Pop up menus image Pour formater des pop up menus image, passez dans le paramtre formatAffich une chane de caractres respectant la syntaxe suivante : cols;lignes;image;margeH;margeV;mode cols = nombre de colonnes de l'image lignes = nombre de lignes de l'image image = image utilise, provenant de la bibliothque d'images, d'une variable image ou d'une ressource PICT : - si l'image provient de la bibliothque d'images, saisissez son numro, prcd d'un point d'interrogation (ex. : "?250"). - si l'image provient d'une variable image, saisissez le nom de la variable - si l'image provient d'une ressource PICT, saisissez son numro, prcd de deux points (ex. : ":62500") margeH = marge en pixels entre les limites horizontales du menu et limage. margeV = marge en pixels entre les limites verticales du menu et limage. mode = mode de transparence du pop up menu image. Accepte les valeurs 0 et 64 : - mode = 0 : le pop-up menu image n'est pas transparent, - mode = 64 : le pop-up menu image est transparent.

4e Dimension - Langage 1369

Thermomtres et rgles Pour formater des objets de type thermomtre ou rgle, passez dans le paramtre formatAffich une chane de caractres respectant la syntaxe suivante : min;max;unit;pas;mode{;format} min = valeur de la graduation d'origine de la jauge max = valeur de la graduation de fin de la jauge unit = intervalle entre les graduations de la jauge pas = intervalle de dplacement du curseur dans la jauge mode = mode d'affichage et de fonctionnement de la jauge. Ce paramtre accepte les valeurs 0, 2, 3, 16 et 32. Ces valeurs peuvent tre cumules afin de dfinir plusieurs options. Voici le dtail de chaque valeur : - mode = 0 : ne pas afficher les libells - mode = 2 : afficher les libells droite ou au-dessous de la jauge - mode = 3 : afficher les libells gauche ou au-dessus de la jauge - mode = 16 : afficher les graduations en regard des libells - mode = 32 : dclencher la mthode objet avec lvnement Sur donnes modifies pendant que lutilisateur change la valeur de la jauge. Par dfaut, la mthode est excute aprs la modification. format = format d'affichage des graduations de la jauge. A noter les libells et les graduations sont automatiquement masqus si la taille de l'objet jauge ne permet pas de les afficher correctement. Cadrans Pour formater des objets de type cadran, passez dans le paramtre formatAffich une chane de caractres respectant la syntaxe suivante : min;max;unit;pas{;mode} min = valeur de la graduation d'origine du cadran max = valeur de la graduation de fin du cadran unit = intervalle entre les graduations du cadran pas = intervalle de dplacement du curseur dans le cadran mode = mode de fonctionnement du cadran (facultatif). Ce paramtre accepte uniquement la valeur 32 : dclencher la mthode objet avec lvnement Sur donnes modifies pendant que lutilisateur change la valeur du cadran. Par dfaut, la mthode est excute aprs la modification. Grilles de boutons Pour formater des grilles de boutons, passez dans le paramtre formatAffich une chane de caractres respectant la syntaxe suivante : cols;lignes cols = nombre de colonnes de la grille lignes = nombre de lignes de la grille Note : Pour plus d'informations sur les formats d'affichage des objets de formulaire, reportez-vous au manuel Mode Structure de 4e Dimension.

1370 4e Dimension - Langage

Boutons 3D Pour formater des boutons 3D, passez dans le paramtre formatAffich une chane de caractres respectant la syntaxe suivante : titre;image;imageFond;posTitre;titreVisible;icneVisible;style;margeHor;margeVert; dcalageIcne;popupMenu titre = titre du bouton. Cette valeur peut tre exprime sous forme de texte ou de numro de ressource (ex. : :16800,1) image = image associe au bouton, provenant de la bibliothque dimages, dune variable image ou dune ressource PICT : - si limage provient de la bibliothque dimages, saisissez son numro, prcd dun point dinterrogation (ex. : ?250). - si limage provient dune variable image, saisissez le nom de la variable. - si limage provient dune ressource PICT, saisissez son numro, prcd de deux points (ex. : :62500). imageFond = image de fond associe au bouton (style Personnalis), provenant de la bibliothque dimages, dune variable image ou dune ressource PICT (cf. ci-dessus). posTitre = position du titre du bouton. Cinq valeurs sont possibles : - posTitre = 0 : Centre - posTitre = 1 : Droite - posTitre = 2 : Gauche - posTitre = 3 : Bas - posTitre = 4 : Haut titreVisible = Titre visible ou non. Deux valeurs sont possibles : - titreVisible = 0 : le titre est masqu - titreVisible = 1 : le titre est affich icneVisible = Icne visible ou non. Deux valeurs sont possibles : - icneVisible = 0 : licne est masque - icneVisible = 1 : licne est affiche style = Style du bouton. La valeur de cette option dtermine la prise en compte de certaines autres options (par exemple imageFond). Dix valeurs de style sont possibles : - style = 0 : Aucun - style = 1 : Dcalage du fond - style = 2 : Bouton poussoir - style = 3 : Bouton barre outils - style = 4 : Personnalis - style = 5 : Rond - style = 6 : Petit carr systme - style = 7 : Office XP - style = 8 : Bevel - style = 9 : Bevel arrondi margeHor = Marge horizontale. Nombre de pixels dlimitant les marges internes droite et gauche du bouton (zones dans lesquelles licne et le texte ne doivent pas empiter).

4e Dimension - Langage 1371

margeVert = Marge verticale. Nombre de pixels dlimitant les marges internes en haut et en bas du bouton (zones dans lesquelles licne et le texte ne doivent pas empiter). dcalageIcne = Dcalage de licne vers la droite et le bas. Cette valeur, exprime en pixels, indique le dcalage de licne du bouton vers la droite et le bas en cas de clic (la mme valeur est utilise pour les deux directions). popupMenu = Association dun pop up menu au bouton. Trois valeurs sont possibles : - popupMenu = 0 : Sans pop up menu - popupMenu = 1 : Avec pop up menu li - popupMenu = 2 : Avec pop up menu spar Certaines options ne sont pas prises en charge dans tous les styles de boutons 3D. De plus, dans certains cas vous pourrez souhaiter ne pas modifier toutes les options. Pour ne pas passer une option, il suffit domettre la valeur correspondante. Par exemple, pour ne pas passer les options titreVisible et margeVert, vous pouvez crire : CHOIX FORMATAGE(maVar;"JoliBouton;?256;:562;1;;1;4;5;;5;0") Exemples (1) La ligne de code suivante formate le champ [Employs]Date embauche au cinquime format de date.

CHOIX FORMATAGE ([Employs]Date embauche; Caractere(Jour Mois Anne))

(2) L'exemple suivant change le format d'un champ [Socits]Code postal selon la longueur du code postal :

Si (Longueur ([Socits]Code postal) = 9) CHOIX FORMATAGE ([Socits]Code postal; "#########") Sinon CHOIX FORMATAGE ([Socits]Code postal; "#####") Fin de si

(3) L'exemple suivant dfinit le format d'un champ boolen pour afficher soit "Mari" soit "Clibataire" au lieu des valeurs par dfaut "Oui" et "Non" :

CHOIX FORMATAGE ([Employs]Situation; "Mari;Clibataire")

(4) L'exemple suivant dfinit le format d'un champ boolen pour afficher une case cocher libelle "Class" :

CHOIX FORMATAGE ([Dossier]Classement; "Class")

1372 4e Dimension - Langage

(5) Vous disposez dun tableau dimagettes contenant 1 ligne et 4 colonnes, destin afficher un bouton image (actif par dfaut, bouton cliqu, survol du curseur et inactiv). Vous souhaitez lui associer les options Bascule sur passage du curseur, Retour sur relchement du clic et Dernire imagette si dsactiv :

CHOIX FORMATAGE (*;"BoutonImage"; "4;1;?15000;176")

Rfrence CHOIX FILTRE SAISIE, Lire formatage.

4e Dimension - Langage 1373

CHOIX FILTRE SAISIE

Proprits des objets version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHOIX FILTRE SAISIE ({*; }objet; filtreSaisie) Paramtre * objet filtreSaisie Type Objet Alpha Description Si spcifi = objet est un nom d'objet (chane) Si omis = objet est un champ ou une variable Nom d'objet (si * spcifi) ou Champ ou Variable (si * omis) Nouveau filtre de saisie pour la zone saisissable

Description CHOIX FILTRE SAISIE remplace le filtre de saisie pour objet par filtreSaisie dans le formulaire courant affich l'cran. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom d'objet (une chane). Si vous ne passez pas le paramtre, vous indiquez que le paramtre objet est un champ ou une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de champ ou de variable (champ ou variable objet uniquement). Pour plus d'informations sur les noms d'objets, reportez-vous la section Proprits des objets. La commande CHOIX FILTRE SAISIE peut tre utilise dans des formulaires entre et des dialogues et peut tre applique aux champs et variables saisissables acceptant les filtres de saisie en mode Structure. Pour enlever un filtre, passez une chane vide dans le paramtre filtreSaisie. Note : Cette commande ne peut pas tre utilise avec des champs situs dans le formulaire "liste" d'un sous-formulaire. Note : Pour pouvoir exploiter les filtres de saisie que vous avez crs dans la bote de dialogue des Proprits de la base, prfixez le nom du filtre, dans le paramtre filtreSaisie, d'une barre verticale (|).

1374 4e Dimension - Langage

Exemples (1) L'exemple suivant dfinit le filtre de saisie pour le champ code postal. Si l'adresse se trouve en France, le filtre est paramtr pour les codes postaux franais. Sinon, le filtre peut accepter toute valeur saisie :

Si (Pays = "France") ` Fixer le filtre au format du code postal franais CHOIX FILTRE SAISIE ([Socits]Code postal; &"#####") Sinon ` Fixer le filtre pour qu'il accepte toute valeur alphanumrique CHOIX FILTRE SAISIE ([Socits]Code postal; "~@") Fin de si

(2) L'exemple suivant autorise uniquement la saisie des lettres a, b, c ou g dans un champ comportant deux lettres :

CHOIX FILTRE SAISIE([Table]Champ;" &"+Caractere (Guillemets doubles)+ "a;b;c;g" + Caractere (Guillemets doubles)+"##")

Note : Cet exemple dfinit le filtre de saisie &"a;b;c;g"##. Rfrence CHOIX FORMATAGE.

4e Dimension - Langage 1375

CHOIX ENUMERATION

Proprits des objets version 6.0 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHOIX ENUMERATION ({*; }objet; num) Paramtre * objet num Type Objet de formulaire Alpha Description Si spcifi, objet est un nom d'objet (chane) Si omis, objet est un champ ou une variable Nom d'objet (si * spcifi) ou Champ ou Variable (si * omis) Nom de la liste utiliser comme numration (telle que dfinie en mode Structure)

Description La commande CHOIX ENUMERATION construit ou remplace l'numration du ou des objet(s) spcifi(s) par objet avec la liste hirarchique cre dans l'diteur d'numrations, en mode Structure, et passe dans num. Cette commande peut tre applique, dans un formulaire entre ou un dialogue, aux champs et variables saisissables dont les valeurs peuvent tre saisies sous forme de texte. La liste s'affiche pendant la saisie lorsque l'utilisateur slectionne la zone de texte. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom d'objet (une chane). Si vous ne passez pas le paramtre, vous indiquez que objet est un champ ou une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de champ ou de variable (champ ou variable objet uniquement). Pour plus d'informations sur les noms d'objets, reportez-vous la section Proprits des objets. Note : Cette commande ne peut pas tre utilise avec des champs placs dans le formulaire "liste" d'un sous-formulaire. Exemple L'exemple suivant dfinit l'numration lie un champ Coursiers. Si l'envoi doit tre effectu de nuit, alors l'numration affiche les socits de courses qui fonctionnent la nuit. Sinon, l'numration standard est propose :

Si ([Courses]Nuit) CHOIX ENUMERATION([Courses]Coursier; "Coursiers de nuit") Sinon CHOIX ENUMERATION([Courses]Coursier; "Coursiers standard") Fin de si

1376 4e Dimension - Langage

CHOIX SAISISSABLE

Proprits des objets version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHOIX SAISISSABLE ({*; }objet; zoneSaisie) Paramtre * objet zoneSaisie Type Objet de formulaire Boolen Description Si spcifi, objet est un nom d'objet (chane) Si omis, objet est une table, un champ ou une variable Nom d'objet (si * spcifi) ou Table ou Champ ou Variable (si * omis) Vrai = saisissable ; Faux = non saisissable

Description CHOIX SAISISSABLE rend saisissable ou non saisissable le ou les objet(s) de formulaire dsign(s) par objet. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom d'objet (une chane). Si vous ne passez pas le paramtre, vous indiquez que le paramtre objet est une table, un champ ou une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de table, de champ ou de variable (champ ou variable objet uniquement). Pour plus d'informations sur les noms d'objets, reportez-vous la section Proprits des objets. L'utilisation de cette commande est quivalente la slection de l'option Saisissable pour un champ ou une variable dans la Liste des proprits de l'diteur de formulaires. CHOIX SAISISSABLE fonctionne avec un sous-formulaire uniquement si elle se trouve dans la mthode formulaire du sous-formulaire. Lorsque zoneSaisie est saisissable (Vrai), l'utilisateur peut y placer le curseur pour saisir des donnes. Lorsque zoneSaisie est non saisissable (Faux), l'utilisateur ne peut pas placer le curseur dans la zone et ne peut donc pas saisir de valeurs. La commande CHOIX SAISISSABLE permet galement dactiver par programmation le mode Saisie en liste pour les sous-formulaires et les formulaires liste affichs par les commandes MODIFIER SELECTION et VISUALISER SELECTION : Pour les sous-formulaires, vous pouvez passer dans le paramtre objet soit le nom de la table du sous-formulaire, soit le nom de lobjet sous-formulaire lui-mme, par exemple : CHOIX SAISISSABLE(*;"Sousform";Vrai) Pour les formulaires liste, vous devez passer le nom de la table du formulaire dans le paramtre objet, par exemple : CHOIX SAISISSABLE([MaTable];Vrai).

4e Dimension - Langage 1377

Note : Rendre un objet non saisissable n'empche pas sa modification par programmation. Exemples (1) L'exemple suivant dfinit un champ de type d'expdition suivant le poids d'un colis expdi. Si le colis pse un kilo ou moins, l'expditeur sera La Poste et le champ est rendu non saisissable. Sinon, le champ est rendu saisissable. Si ([Expdition]Poids <= 1) [Expdition]Type := "La Poste" CHOIX SAISISSABLE ([Expdition]Type; Faux) Sinon CHOIX SAISISSABLE ([Expdition]Type; Vrai) Fin de si

(2) Voici la mthode objet dune case cocher place dans len-tte dune liste pour contrler le mode Saisie en liste :

C_BOOLEEN(bSaisissable) CHOIX SAISISSABLE([Table1];bSaisissable)

Rfrence ACTIVER BOUTON, CHOIX VISIBLE, INACTIVER BOUTON.

1378 4e Dimension - Langage

CHOIX VISIBLE

Proprits des objets version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHOIX VISIBLE ({*; }objet; visible) Paramtre * objet visible Type Objet de formulaire Boolen Description Si spcifi, objet est un nom d'objet (chane) Si omis, objet est un champ ou une variable Nom d'objet (si * est pass) ou Champ ou Variable (si * est omis) Vrai = visible, Faux = invisible

Description La commande CHOIX VISIBLE affiche ou masque le ou les objet(s) dfini(s) par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet dsigne le nom d'un objet (une chane). Si vous ne passez pas le paramtre *, vous indiquez que le paramtre objet dsigne un champ ou une variable. Dans ce cas, vous ne passez pas une chane de caractres mais la rfrence du champ ou de la variable (champs ou variables objets uniquement). Pour plus d'informations sur les noms d'objets, reportez-vous la section Proprits des objets. Si vous passez la valeur VRAI dans le paramtre visible, le ou les objet(s) sont affichs. Si vous passez FAUX dans visible, les objets sont masqus. Exemple Voici un formulaire tel qu'il apparat en mode Structure :

4e Dimension - Langage 1379

Les objets dans la zone de groupe Employer Information ont tous un nom qui contient l'expression employer (y compris la zone de groupe). Lorsque l'option Currently Employed est coche, les objets doivent tre visibles, lorsqu'elle est dslectionne les objets doivent tre invisibles. Voici la mthode objet de la case cocher : ` Mthode objet Case cocher cbCurrentlyEmployed Au cas ou : (Evenement formulaire=Sur chargement) cbCurrentlyEmployed:=1 : (Evenement formulaire=Sur clic) ` Cacher ou montrer tous les objets dont le nom contient "emp" CHOIX VISIBLE(*;"@emp@";cbCurrentlyEmployed # 0) ` Mais conserver la case cocher toujours visible CHOIX VISIBLE(cbCurrentlyEmployed;Vrai) Fin de cas

En mode Utilisation ou Menus crs, le formulaire apparatra ainsi :

ou ainsi :

1380 4e Dimension - Langage

CHOIX COULEUR

Proprits des objets version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHOIX COULEUR ({*; }objet; couleur{; couleurAlt}) Paramtre * objet couleur couleurAlt Type Champ|Variable Numrique Numrique Description Si spcifi, objet est un nom d'objet (chane) Si omis, objet est un champ ou une variable Nom d'objet (si * spcifi) ou Champ ou Variable (si * omis) Nouvelles couleurs pour l'objet Couleurs alternes pour une list box

Description La commande CHOIX COULEUR dfinit les couleurs de premier plan et d'arrire-plan du ou des objet(s) de formulaire spcifi(s) par objet. Si objet est une list box, un paramtre supplmentaire permet de dfinir les couleurs de premier plan et d'arrire-plan des lignes paires (couleurs alternes). Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom d'objet (une chane). Si vous ne passez pas le paramtre, vous indiquez que le paramtre objet est un champ ou une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de champ ou de variable (champ ou variable objet uniquement). Pour plus d'informations sur les noms d'objets, reportez-vous la section Proprits des objets. couleurAlt permet de dsigner une couleur alternative pour les lignes paires d'une list box ou d'une colonne de list box. Lorsque ce paramtre est pass, le paramtre couleur s'applique aux lignes impaires uniquement. Utiliser des couleurs alternes amliore la lisibilit des tableaux. Si objet dsigne lobjet list box, les couleurs alternes sont utilises dans la totalit de la list box. Si objet dsigne une colonne, seule la colonne utilisera les couleurs dfinies. Le paramtre couleur (ainsi que le paramtre couleurAlt) dfinit la fois les couleurs de premier plan et d'arrire-plan. La couleur est calcule de la manire suivante : Couleur:=(Premier_Plan+(256 * Arrire_Plan)), o Premier_Plan et Arrire_Plan sont des numros de couleur (de 0 255) parmi la palette de couleurs de 4D que vous pouvez visualiser, par exemple, dans la Liste des proprits de l'diteur de formulaires. Couleur est toujours un nombre ngatif. Par exemple, si la couleur de premier plan est 20 et si la couleur d'arrire-plan est 10, alors couleur est gal (20 + (256 * 10)) soit 2580.

4e Dimension - Langage 1381

Les numros les plus souvent utiliss sont fournis par 4e Dimension sous forme de constantes prdfinies, places dans le thme Couleurs : Constante Blanc Jaune Orange Rouge Violet Bleu fonc Bleu Bleu clair Vert Vert fonc Marron fonc Gris fonc Gris clair Marron Gris Noir Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long Valeur 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Note : Tandis que CHOIX COULEUR travaille avec des couleurs indexes dans la palette de couleurs de 4D, la commande FIXER COULEURS RVB vous permet de travailler avec toute couleur RVB. Exemple L'exemple suivant dfinit la couleur d'un bouton nomm bInfo. La couleur est dtermine par les deux variables vForeground et vBackground :

CHOIX COULEUR (bInfo; (vForeground + (256 * vBackground)))

Rfrence FIXER COULEURS RVB.

1382 4e Dimension - Langage

FIXER COULEURS RVB

Proprits des objets version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER COULEURS RVB ({*; }objet; couleurAvantPlan; couleurArrirePlan{; couleurArrirePlanAlt}) Paramtre * objet couleurAvantPlan couleurArrirePlan couleurArrirePlanAlt Type Objet Numrique Numrique Numrique Description Si spcifi, objet est un nom d'objet (chane) Si omis, objet est un champ ou une variable Nom d'objet (si * est spcifi) ou Champ ou Variable (si * est omis) Valeur de la couleur RVB d'avant-plan Valeur de la couleur RVB d'arrire-plan Valeur de la couleur RVB d'arrire-plan alterne

Description La commande FIXER COULEURS RVB modifie les couleurs d'avant-plan et d'arrire-plan du ou des objet(s) dfini(s) par le paramtre objet et le paramtre optionnel *. Lorsque la commande est applique un objet de type List box, un paramtre supplmentaire permet de modifier la couleur alterne des lignes. Si vous passez le paramtre optionnel *, vous spcifiez que le paramtre objet est le nom d'un objet (une chane de caractres). Si le paramtre * est omis, vous spcifiez que objet est un champ ou un objet. Dans ce cas, vous ne passez pas dans objet une chane de caractres mais la rfrence un champ ou une variable (champ ou variable objet uniquement). Pour plus d'informations sur les noms d'objets, reportez-vous la section Proprits des objets. Le paramtre facultatif couleurArrirePlanAlt permet de dsigner une couleur alternative pour larrire-plan (cest--dire le fond) des lignes paires. Ce paramtre nest utile que lorsque lobjet dsign est de type List box ou colonne de list box. Lorsque ce paramtre est utilis, la couleurArrirePlan est utilise pour le fond des lignes impaires uniquement. Utiliser des couleurs alternes amliore la lisibilit des tableaux. Si objet dsigne lobjet List box, les couleurs alternes sont utilises dans la totalit de la list box. Si objet dsigne une colonne de list box, seule la colonne utilisera les couleurs dfinies.

4e Dimension - Langage 1383

Vous passez des valeurs de couleurs RVB dans les paramtres couleurAvantPlan, couleurArrirePlan et couleurArrirePlanAlt. Ces valeurs sont des entiers longs de 4 octets dont le format (0x00RRGGBB) est dcrit ci-dessous (les octets sont numrots de 0 3 de la droite vers la gauche) : Octet 3 2 1 0 Description Doit tre zro pour une couleur RVB absolue Composante rouge de la couleur (0..255) Composante verte de la couleur (0..255) Composante bleue de la couleur (0..255)

Le tableau ci-dessous prsente des exemples de valeurs de couleurs RVB : Valeur 0x00000000 0x00FF0000 0x0000FF00 0x000000FF 0x007F7F7F 0x00FFFF00 0x00FF7F7F 0x00FFFFFF Description Noir Rouge vif Vert vif Bleu vif Gris Jaune vif Rouge pastel Blanc

Vous pouvez aussi spcifier une des couleurs systme utilises par dfaut par 4e Dimension pour dessiner des objets ayant la proprit de couleur automatique. Les constantes prdfinies suivantes sont proposes par 4e Dimension dans le thme FIXER COULEURS RVB : Constante Coul premier plan Coul arrire plan Coul sombre Coul claire Coul de fond texte slect Coul texte slect Coul fond ligne menu slect Coul texte ligne menu slect Coul fond lment slect dsact Type Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long Valeur -1 -2 -3 -4 -7 -8 -9 -10 -11

1384 4e Dimension - Langage

Ces couleurs (sur un systme standard) sont les suivantes :

ATTENTION : Notez que, sous Windows, ces couleurs automatiques dpendent du systme. Si vous modifiez vos couleurs systme dans le Panneau de configuration "Affichage", les couleurs automatiques de 4e Dimension seront modifies en consquence. Utilisez les valeurs de couleurs automatiques pour assigner des objets les couleurs systme, et non pour leur assigner les mmes couleurs que celles dfinies dans l'exemple ci-dessus. Exemple Voici un formulaire contenant deux variables non saisissables, vsColorValue et vsColor ainsi que trois thermomtres, thRouge, thVert et thBleu :

4e Dimension - Langage 1385

Les mthodes associes ces objets sont les suivantes : ` Mthode objet de la variable non saisissable vsColorValue Au cas ou : (Evenement formulaire=Sur chargement) vsColorValue:="0x00000000" Fin de cas ` Mthode objet de la variable non saisissable vsColor Au cas ou : (Evenement formulaire=Sur chargement) vsColor:="" FIXER COULEURS RVB(vsColor;0x00FFFFFF;0x0000) Fin de cas ` Mthode objet du thermomtre thRouge CLIC SUR THERMOMETRE COULEUR ` Mthode objet du thermomtre thVert CLIC SUR THERMOMETRE COULEUR ` Mthode objet du thermomtre thBleu CLIC SUR THERMOMETRE COULEUR La mthode projet appele par les trois thermomtres est la suivante :

` Mthode projet CLIC SUR THERMOMETRE COULEUR FIXER COULEURS RVB(vsColor;0x00FFFFFF;(thRouge << 16)+(thVert << 8)+thBleu) vsColorValue:=Chaine((thRouge << 16)+(thVert << 8)+thBleu;"&x") Si (thRouge=0) vsColorValue:=Sous chaine(vsColorValue;1;2)+"0000"+Sous chaine(vsColorValue;3) Fin de si

Notez l'utilisation des Oprateurs sur les bits pour le calcul des valeurs des couleurs partir de celles des thermomtres.

1386 4e Dimension - Langage

Dans les modes Utilisation ou Menus crs, le formulaire a l'aspect suivant :

Rfrence CHOIX COULEUR, Oprateurs sur les bits.

4e Dimension - Langage 1387

LIRE RECT OBJET

Proprits des objets version 6.7 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE RECT OBJET ({*; }objet; gauche; haut; droite; bas) Paramtre * objet gauche haut droite bas Type * Objet Entier Entier Entier Entier long long long long Description Si spcifi = objet est un nom dobjet (chane) Si omis = objet est une variable Nom dobjet (si * est spcifi) ou Champ ou variable (si * est omis) Coordonne gauche de lobjet Coordonne suprieure de lobjet Coordonne droite de lobjet Coordonne infrieure de lobjet

Description La commande LIRE RECT OBJET retourne dans les variables ou champs gauche, haut, droite et bas les coordonnes (en points) du ou des objet(s) du formulaire courant dfini(s) par les paramtres * et objet. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane de caractres). Si vous ne passez pas le paramtre *, vous indiquez que objet est un champ ou une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de champ ou de variable (champ ou variable de type objet uniquement). Si vous passez un nom dobjet dans le paramtre objet et utilisez le caractre joker @ afin de slectionner plusieurs objets, les coordonnes retournes seront celles du rectangle form par lensemble des objets concerns. Note : Il est possible de paramtrer le mode dinterprtation du caractre @, lorsque celui-ci est inclus dans une chane de caractres. Cette option influe sur le fonctionnement des commandes du thme Proprits des objets. Pour plus d'informations, reportez-vous au manuel Mode Structure. Si lobjet nexiste pas ou si la commande est appele ailleurs que dans le contexte dun formulaire, les coordonnes retournes sont (0;0;0;0). Exemple Vous souhaitez obtenir les coordonnes du rectangle form par tous les objets dont le nom commence par bouton :

LIRE RECT OBJET(*;"bouton@";gauche;haut;droite;bas)

Rfrence DEPLACER OBJET.

1388 4e Dimension - Langage

DEPLACER OBJET

Proprits des objets version 6.7 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DEPLACER OBJET ({*; }objet; dpH; dpV{; redimH{; redimV{; *}}}) Paramtre * objet dpH dpV redimH redimV * Type * Objet Entier long Entier long Entier long Entier long * Description Si spcifi = objet est un nom dobjet (chane) Si omis = objet est une variable Nom dobjet (si * est spcifi) ou Champ ou variable (si * est omis) Valeur de dplacement horizontal de lobjet (>0 = vers la droite, <0 = vers la gauche) Valeur de dplacement vertical de lobjet (>0 = vers le bas, <0 = vers le haut) Valeur de redimensionnement horizontal de lobjet Valeur de redimensionnement vertical de lobjet Si spcifi = coordonnes absolues Si omis = coordonnes relatives

Description La commande DEPLACER OBJET permet de dplacer le ou les objet(s) du formulaire courant, dfini(s) par les paramtres * et objet, de dpH pixels horizontalement et de dpV pixels verticalement. Il est galement possible (optionnellement) de redimensionner le ou les objet(s) de redimH pixels horizontalement et de redimV pixels verticalement. Le sens du dplacement ou du redimensionnement est dfini par le signe des valeurs passes dans les paramtres dpH et dpV : Si la valeur est positive, le dplacement ou le redimensionnement seffectue respectivement vers la droite ou vers le bas. Si la valeur est ngative, le dplacement ou le redimensionnement seffectue respectivement vers la gauche ou vers le haut. Si vous passez le premier paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane de caractres). Si vous ne passez pas le paramtre *, vous indiquez que objet est un champ ou une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de champ ou de variable (champ ou variable de type objet uniquement). Si vous passez un nom dobjet dans le paramtre objet et utilisez le caractre joker @ afin de slectionner plusieurs objets, tous les objets slectionns seront dplacs ou redimensionns. Par dfaut, les valeurs de dpH, dpV, redimH et redimV modifient les coordonnes de lobjet relativement sa position prcdente. Si vous souhaitez que ces paramtres dfinissent des coordonnes absolues, passez le dernier paramtre optionnel *. 4e Dimension - Langage 1389

Cette commande fonctionne uniquement dans les contextes suivants : Formulaires entre en mode saisie, Formulaires affichs via la commande DIALOGUE, En-ttes et pieds de page des formulaires sortie affichs par les commandes MODIFIER SELECTION ou VISUALISER SELECTION, Formulaires en cours dimpression. Exemples (1) Linstruction suivante dplace le bouton Bouton_1 de 10 pixels vers la droite et de 20 pixels vers le haut, et agrandit le bouton de 30 pixels en largeur et de 40 en hauteur :

DEPLACER OBJET (*;"Bouton_1";10;-20;30;40)

(2) Linstruction suivante place le bouton Bouton_1 aux coordonnes (10;20) (30;40) :

DEPLACER OBJET (*;"Bouton_1";10;20;30;40;*)

Rfrence LIRE RECT OBJET.

1390 4e Dimension - Langage

TAILLE OBJET OPTIMALE

Proprits des objets version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TAILLE OBJET OPTIMALE ({*; }objet; largeurOpti; hauteurOpti{; largeurMax}) Paramtre * objet largeurOpti hauteurOpti largeurMax Type Objet Entier long Entier long Entier long Description Si spcifi = objet est un nom d'objet (chane) Si omis = objet est une variable Nom dobjet (si * est spcifi) ou Champ ou variable (si * est omis Largeur optimale de lobjet Hauteur optimale de lobjet Largeur maximum de lobjet

Description La commande TAILLE OBJET OPTIMALE retourne dans les paramtres largeurOpti et hauteurOpti la largeur et la hauteur optimales de lobjet de formulaire dsign par les paramtres * et objet. Ces valeurs sont exprimes en pixels. Cette commande est particulirement utile dans le cadre de laffichage ou de limpression dtats complexes, associe la commande DEPLACER OBJET. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet est un nom dobjet (une chane de caractres). Si vous ne passez pas le paramtre *, vous indiquez que objet est un champ ou une variable. Dans ce cas, vous ne passez pas une chane mais une rfrence de champ ou de variable (de type objet uniquement). Les valeurs optimales retournes indiquent la taille minimale de lobjet pour que son contenu courant soit entirement inclus dans ses limites. Bien entendu, ces valeurs nont de sens quavec des objets contenant du texte. Ce calcul tient compte de la police, de sa taille, de son style et du contenu de lobjet. Il tient compte galement des csures et des retours chariot. Si lobjet spcifi est vide, la largeurOpti retourne est 0. La taille retourne ne tient pas compte du cadre graphique ventuellement appliqu autour de lobjet ni des barres de dfilement. Pour obtenir la taille relle dun objet lcran, il sera ncessaire dajouter lpaisseur de ces lments. Le paramtre optionnel largeurMax vous permet dattribuer une largeur maximale lobjet. Si la largeur optimale de lobjet est suprieure cette valeur, TAILLE OBJET OPTIMALE retourne largeurMax dans le paramtre largeurOpti et augmente la hauteur optimale en consquence.

4e Dimension - Langage 1391

Les objets pris en charge par cette commande sont les suivants : Zones de texte statiques Textes insrs sous forme de rfrences Champs et variables de type Alpha, Texte, Numrique, Entier, Entier long, Date, Heure, Boolens (cases cocher et boutons radio) Boutons Pour tous les autres types dobjets de formulaires (zones de groupes, onglets, rectangles, droites, cercles/ellipses, zones externes, etc.), la commande TAILLE OBJET OPTIMALE retourne la taille courante de lobjet (dfinie dans lditeur de formulaires et ventuellement laide de la commande DEPLACER OBJET). Exemple Reportez-vous lexemple de la routine FIXER TAQUET IMPRESSION. Rfrence DEPLACER OBJET.

1392 4e Dimension - Langage

Lire alignement

Proprits des objets version 6.8.1

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire alignement ({*; }objet) Numrique Paramtre * objet Rsultat Type Objet de formulaire Numrique Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est un champ ou une variable Nom dobjet (si * est pass) ou Champ ou variable (si * est omis) Code dalignement

Description La commande Lire alignement retourne un code indiquant le type dalignement appliqu lobjet dsign par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet dsigne le nom dun objet (une chane). Si vous ne passez pas le paramtre *, vous indiquez que le paramtre objet dsigne un champ ou une variable. Dans ce cas, vous ne passez pas une chane de caractres mais la rfrence du champ ou de la variable (champs ou variables de formulaire uniquement). Note : Si vous appliquez la commande un ensemble dobjets, seule la valeur dalignement du dernier objet est retourne. Le code retourn correspond lune des constantes suivantes, places dans le thme Alignement objet : Constante Type Valeur Align par dfaut Entier long 1 Align gauche Entier long 2 Centr Entier long 3 Align droite Entier long 4 Les objets de formulaire auxquel un alignement peut tre appliqu sont les suivants : Zone de dfilement Combo box Texte statique Pop up menu/Liste droulante Champ Variable Rfrence FIXER ALIGNEMENT.

4e Dimension - Langage 1393

FIXER ALIGNEMENT

Proprits des objets version 6.8.1

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER ALIGNEMENT ({*; }objet; alignement) Paramtre * objet alignement Type Objet de fomulaire Numrique Description Si spcifi, objet est un nom dobjet (chane) Si omis, objet est un champ ou une variable Nom dobjet (si * est pass) ou Champ ou variable (si * est omis) Code dalignement

Description La commande FIXER ALIGNEMENT vous permet de fixer le type dalignement appliqu lobjet ou aux objets dsign(s) par les paramtres objet et *. Si vous passez le paramtre optionnel *, vous indiquez que le paramtre objet dsigne le nom dun objet (une chane). Si vous ne passez pas le paramtre *, vous indiquez que le paramtre objet dsigne un champ ou une variable. Dans ce cas, vous ne passez pas une chane de caractres mais la rfrence du champ ou de la variable (champs ou variables de formulaire uniquement). Passez dans le paramtre alignement une des constantes du thme Alignement objet : Constante Type Valeur Align par dfaut Entier long 1 Align gauche Entier long 2 Centr Entier long 3 Align droite Entier long 4 Les objets de formulaire auxquels vous pouvez appliquer cette commande sont les suivants : Zone de dfilement Combo box Texte statique Zones de groupes Champ Variable Rfrence Lire alignement.

1394 4e Dimension - Langage

49 ________________________ Protocole scuris

4e Dimension - Langage 1395

1396 4e Dimension - Langage

GENERER CLES CRYPTAGE

Protocole scuris version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

GENERER CLES CRYPTAGE (clPrive; clPublique{; longueur}) Paramtre clPrive clPublique longueur Type BLOB BLOB Entier long Description BLOB devant recevoir la cl prive BLOB devant recevoir la cl publique Longueur des cls en bits [386...1024] Par dfaut = 512

Description La commande GENERER CLES CRYPTAGE gnre une nouvelle paire de cls RSA. Ces cls, destines au cryptage/dcryptage des donnes, sont la base du systme de scurisation des donnes propos par 4D. Elles pourront tre utilises, dans le cadre du protocole SSL, avec le serveur Web 4D (cryptage et scurit des communications) mais galement dans toute base de donnes (cryptage de donnes). Aprs lexcution de la commande, les BLOB passs dans les paramtres clPrive et clPublique contiennent une nouvelle paire de cls de cryptage. Le paramtre optionnel longueur vous permet de prciser la taille (en bits) des cls que vous souhaitez obtenir. Plus une cl est longue, plus son dcryptage frauduleux sera difficile. En contrepartie, plus les cls sont longues, plus les dlais dexcution ou de rponse seront importants, en particulier dans le cadre dune connexion SSL. Par dfaut (si vous omettez le paramtre longueur), la taille des cls gnre est de 512 bits, ce qui correspond au compromis scurit/ rapidit gnralement admis. Pour augmenter la scurit dans ce cas, vous pouvez envisager de changer de paire de cls assez frquemment, par exemple tous les six mois. Vous pouvez gnrer des cls de 1024 bits, ce qui renforce la scurit du cryptage, mais ralentira les connexions de votre application Web. Notes : Attention si vous gnrez des cls dans le but dtablir une demande de certificat SSL : seules les cls de 512 et de 1024 bits sont admises. Une grande partie des navigateurs Web actuels n'acceptent pas les cls dune longueur suprieure 512 bits. En outre, la version Export de la bibliothque systme de cryptage fournie par dfaut par 4D SA ne permet pas dexploiter des cls pives dune longueur suprieure 512 bits. Pour plus d'informations sur ce point, reportez-vous la section Utiliser le protocole SSL.

4e Dimension - Langage 1397

Les cls gnres par cette commande sont au format PKCS standard, ce qui signifie que leur contenu peut tre copi et coll dans un e-mail en toute scurit et sans risque daltration. Une fois que vous avez obtenu une paire de cls, vous pouvez gnrer un document texte (par exemple laide de la commande BLOB VERS DOCUMENT) et stocker les cls dans un endroit sr. Important : La cl prive ne doit jamais tre diffuse, sous quelque forme que ce soit. RSA, cls prives et cls publiques Lalgorithme de cryptage RSA employ par la commande GENERER CLES CRYPTAGE est bas sur un systme de cryptage double cl : une cl prive et une cl publique. Comme son nom lindique, la cl publique peut tre diffuse auprs de tiers, et permet le dcryptage des informations. Il lui correspond une cl prive unique, utilise pour crypter les donnes. La cl prive sert au cryptage ; la cl publique, au dcryptage (ou inversement). Ce qui est crypt avec une cl ne peut tre dcrypt quavec lautre. Les fonctions de cryptage du protocole SSL sont bases sur ce principe, la cl publique tant incluse dans le certificat envoy aux navigateurs (cf. section Utiliser le protocole SSL). Ce mode de cryptage est galement utilis par la premire syntaxe des commande CRYPTER BLOB et DECRYPTER BLOB. Ce principe requiert que la cl publique soit diffuse de manire confidentielle. Il est possible de mler les cls publiques et prives de deux intervenants pour crypter des donnes de telle manire que seul le rcepteur peut dcrypter les donnes, et seul lmetteur peut les avoir cryptes. Cest le principe de la seconde syntaxe des commandes CRYPTER BLOB et DECRYPTER BLOB. Exemple Reportez-vous lexemple de la commande CRYPTER BLOB. Rfrence CRYPTER BLOB, DECRYPTER BLOB, GENERER DEMANDE CERTIFICAT.

1398 4e Dimension - Langage

GENERER DEMANDE CERTIFICAT

Protocole scuris version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

GENERER DEMANDE CERTIFICAT (clPrive; demCertif; tabCodes; tabLibells) Paramtre clPrive demCertif tabCodes tabLibells Type BLOB BLOB Tab Entier long Tab Alpha Description BLOB contenant la cl prive BLOB devant recevoir la demande de certificat Liste des codes dinformations Liste des libells dinformations

Description La commande GENERER DEMANDE CERTIFICAT permet de gnrer une demande de certificat au format PKCS, directement exploitable par des autorits de certification telles que Verisign ou Thawthe. Le certificat est une pice essentielle du fonctionnement du protocole SSL dans le cadre dun serveur Web. Il est envoy chaque browser se connectant en mode SSL. Il contient la carte didentit du site Web (reprenant les informations que vous saisissez dans la commande), ainsi que sa cl publique permettant aux browsers de dcrypter les informations reues. En outre, le certificat contient diverses informations ajoutes par lautorit de certification. Note : Pour plus dinformations sur le fonctionnement du protocole SSL avec le serveur Web 4D, reportez-vous la section Utiliser le protocole SSL. La demande de certificat ncessite une paire de cls gnre laide de la commande GENERER CLES CRYPTAGE et contient diverses informations. Cest en combinant cette demande avec dautres paramtres qui lui sont propres, que lautorit de certification sera en mesure de gnrer un certificat. Passez dans clPrive un BLOB contenant la cl prive gnre avec la commande GENERER CLES CRYPTAGE. Passez dans demCertif un BLOB vide. Aprs lexcution de la commande, il contiendra la demande de certificat au format PKCS. Vous pouvez placer cette demande dans un fichier texte, par exemple laide de la commande BLOB VERS DOCUMENT, pour la faire parvenir lautorit de certification. Important : La cl prive est utilise pour gnrer la demande de certificat mais ne doit pas tre envoye lautorit de certification. Vous devez remplir les tableaux tabCodes (de type entier long) et tabLibells (de type alpha) avec, respectivement, les numros de code et les libells des informations destines lautorit de certification.

4e Dimension - Langage 1399

Les codes et les libells attendus peuvent varier en fonction de lautorit de certification et du mode dutilisation du certificat. Toutefois, dans le cadre dune utilisation standard du certificat (connexions dun serveur Web via SSL), les tableaux doivent contenir les lments suivants : Informations fournir CommonName : Nom du domaine CountryName : Code du pays (deux lettres) LocalityName : Ville StateOrProvinceName : Dpartement, Etat... OrganizationName : Raison sociale OrganizationUnit : Service/Personne en charge du serveur tabCodes 13 14 15 16 17 18 tabLibells (Exemples) www.4D.fr FR Clichy Hauts de Seine 4D Web Administrator

Lordre dans lequel les codes et les informations sont insrs dans les tableaux na pas dimportance, en revanche les deux tableaux doivent tre synchroniss : si llment {3} du tableau tabCodes contient la valeur 15 (nom de la ville), llment {3} du tableau tabLibells doit contenir cette information, dans notre exemple Clichy. Exemple Un formulaire Demande de certificat comporte les six champs ncessaires ltablissement dune demande de certificat standard. Le bouton Gnrer cre un document sur disque contenant la demande de certificat. Le document Clprive.txt contient la cl prive (gnre laide la commande GENERER CLES CRYPTAGE) doit dj tre prsent sur le disque.

1400 4e Dimension - Langage

` Mthode objet du bouton bGnrer C_BLOB($vbclPrive;$vbDemandeCert) C_ENTIER LONG($NumTable) TABLEAU ENTIER LONG ($tLCodes;6) TABLEAU ALPHA (80;$tAInfos;6) $NumTable:=Table(Table du formulaire courant) Boucle ($i;1;6) $tAInfos{$i}:= Champ($NumTable;$i)-> $tLCodes{$i}:=$i+12 Fin de boucle Si (Chercher dans tableau($tAInfos;"") # -1) ALERTE ("Vous devez remplir tous les champs.") Sinon ALERTE ("Slectionnez votre cl prive.") $vhRefDoc:=Ouvrir document("") Si (OK=1) FERMER DOCUMENT($vhRefDoc) DOCUMENT VERS BLOB(Document;$vbclPrive) GENERER DEMANDE CERTIFICAT($vbclPrive;$vbDemandeCert;$tLCodes; $tAInfos) BLOB VERS DOCUMENT ("Demande.txt";$vbDemandeCert) Sinon ALERTE ("Cl prive invalide.") Fin de si Fin de si

Rfrence GENERER CLES CRYPTAGE.

4e Dimension - Langage 1401

1402 4e Dimension - Langage

50 ________________________ Recherches et tris

4e Dimension - Langage 1403

1404 4e Dimension - Langage

CHERCHER PAR EXEMPLE

Recherches et tris version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHERCHER PAR EXEMPLE ({table}{; }{*}) Paramtre table * Type Table * Description Table de laquelle une slection d'enregistrements doit tre retourne ou Table par dfaut si omis Masquer les barres de dfilement

Description La commande CHERCHER PAR EXEMPLE effectue la mme action que la commande de menu Recherche par formulaire... en mode Utilisation. Cette commande affiche le formulaire entre courant comme fentre de recherche. CHERCHER PAR EXEMPLE cherche dans table les donnes que l'utilisateur a saisies dans cette fentre. Le formulaire doit contenir les champs sur lesquels vous voulez que l'utilisateur puisse effectuer la recherche. La recherche est optimise : les champs indexs sont automatiquement utiliss. Si vous passez le paramtre optionnel *, les barres de dfilement du formulaire sont masques. Reportez-vous au manuel Mode Utilisation de 4e Dimension pour plus d'informations sur l'utilisation de la commande de menu Recherche par formulaire... du mode Utilisation. Exemple La mthode dans l'exemple suivant affiche le formulaire maRecherche. Si l'utilisateur valide le formulaire et excute la recherche (c'est--dire si la variable systme OK prend la valeur 1), les enregistrements trouvs sont affichs :

FORMULAIRE ENTREE ([Personnes]; "maRecherche") ` Dfinir le formulaire entre CHERCHER PAR EXEMPLE ([Personnes]) ` Afficher le formulaire pour la recherche Si (OK = 1) ` Si l'utilisateur valide la recherche VISUALISER SELECTION ([Personnes]) ` Visualiser les enregistrements trouvs Fin de si

Rfrence CHERCHER, TRIER. Variables et ensembles systme Si l'utilisateur clique sur le bouton Valider ou appuie sur Entre, la variable systme OK prend la valeur 1 et la recherche est effectue. Si l'utilisateur clique sur Annuler ou utilise la touche d'annulation, la variable systme OK prend la valeur 0 et la recherche est annule.

4e Dimension - Langage 1405

CHERCHER

Recherches et tris version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHERCHER ({table}{; critreRecherche}{; *}) Paramtre table critreRecherche * Type Table Description Table dans laquelle la slection est cre ou Table par dfaut si ce paramtre est omis Critre de recherche Attente d'excution de la recherche

Description La commande CHERCHER recherche les enregistrements rpondant au(x) critre(s) de recherche spcifi(s) dans critreRecherche et retourne une slection d'enregistrements de table. CHERCHER modifie la slection courante de table pour le process courant. Le premier enregistrement de la nouvelle slection devient l'enregistrement courant. Si vous omettez le paramtre table, la commande s'applique la table par dfaut. Si aucune table par dfaut n'a t dfinie, une erreur est gnre. Si vous ne passez ni le paramtre critreRecherche ni le paramtre *, CHERCHER affiche la bote de dialogue de l'Editeur de recherches de 4D pour table. Cet diteur du mode Utilisation est prsent ci-dessous :

1406 4e Dimension - Langage

Pour plus d'informations sur l'utilisation de cet diteur, reportez-vous au manuel Mode Utilisation de 4D. L'utilisateur construit la recherche puis clique sur le bouton Rechercher ou Chercher dans slection. Si la recherche est correctement effectue et n'est pas interrompue, la variable systme OK prend la valeur 1. Si l'utilisateur clique sur Annuler, la commande CHERCHER est interrompue sans effectuer de recherche et la variable OK prend la valeur 0 (zro). Exemples (1) L'exemple suivant affiche l'Editeur de recherches pour la table [Produits] :

CHERCHER([Produits])

(2) L'exemple suivant affiche l'Editeur de recherches pour la table par dfaut (si elle a t dfinie) :

CHERCHER

Si vous spcifiez le paramtre critreRecherche, l'Editeur de recherches ne s'affiche pas et la recherche est entirement dfinie par programmation. Pour des recherches simples (recherches sur un seul champ), vous appelez CHERCHER une seule fois avec le paramtre critreRecherche construit de la manire dcrite plus bas. Pour des recherches complexes (recherches sur de multiples champs ou avec de multiples conditions), vous appelez CHERCHER autant de fois que ncessaire avec le paramtre critreRecherche et le paramtre optionnel * sauf pour la dernire ligne CHERCHER (qui dclenche la recherche). (3) L'exemple suivant recherche les [Personnes] dont le nom commence par "a" :

CHERCHER([Personnes];[Personnes]Nom="a@")

(4) L'exemple suivant recherche les [Personnes] dont le nom commence par "a" ou "b" :

`* indique qu'il y a un autre critre de recherche CHERCHER([Personnes];[Personnes]Nom="a@";*) ` Pas de * : cela indique la fin de la dfinition des critres et lance l'excution de ` la recherche CHERCHER([Personnes]; |; [Personnes]Nom="b@")

4e Dimension - Langage 1407

Construction d'une ligne de recherche Le paramtre critreRecherche utilise la syntaxe suivante : {oprateur ; } champ comparateur valeur L'oprateur est utilis pour lier deux appels CHERCHER lors d'une dfinition de recherche complexe. Les oprateurs disponibles sont les mmes que ceux proposs dans l'Editeur de recherches en mode Utilisation : Oprateur ET OU Sauf Symbole & | #

L'oprateur est optionnel et n'est pas ncessaire pour le premier appel CHERCHER pour une recherche complexe. Il est galement inutile si votre recherche s'crit sur une seule ligne. Le champ est le champ sur lequel va porter la recherche. Il peut provenir d'une autre table si celle-ci est la table 1 d'une table lie table par un lien automatique (la table laquelle CHERCHER est applique doit tre la table N). Le comparateur est l'lment qui va permettre de confronter champ et critreRecherche. Voici la liste des comparateurs possibles : Comparateur Egal Diffrent de Infrieur Suprieur Infrieur ou gal Suprieur ou gal Symbole utiliser avec CHERCHER = # < > <= >=

La valeur reprsente ce qui va tre confront au contenu de champ. La valeur peut tre toute expression du mme type que champ. Le type de la valeur n'est valu qu'une seule fois, au dmarrage de la recherche, et ne l'est donc pas pour chaque enregistrement. Si la recherche porte sur le contenu d'une chane de caractres, utilisez dans 'valeur' le symbole "@" pour isoler le contenu rechercher, par exemple "@Dupon@". Il est noter, dans ce cas, que vous ne bnficierez pas d'une recherche indexe.

1408 4e Dimension - Langage

Voici les rgles observer pour la construction de squences de recherche : La premire ligne ne doit pas contenir d'oprateur. Les suivantes doivent dbuter par un oprateur. Toutes les lignes, l'exception de la dernire, doivent s'achever par le symbole *. Pour lancer la recherche, ne passez pas le paramtre * la fin de la dernire ligne. Autre solution : vous pouvez excuter la commande CHERCHER sans autre paramtre que la table (l'Editeur de recherches ne s'affiche pas ; au lieu de cela, les lignes de recherche complexe dfinies auparavant sont excutes). Note : Chaque table maintient sa propre construction de recherche courante. Cela signifie que vous pouvez crer de multiples recherches simultanment, une pour chaque table. Dans ce cas, vous devez passer le paramtre table ou spcifier une table par dfaut. Quelle que soit la manire dont la recherche a t dfinie : Si l'excution d'une commande CHERCHER ncessite un certain temps, 4e Dimension affiche automatiquement un message contenant un thermomtre de progression. Ces thermomtres peuvent tre cachs l'aide des commandes SUPPRIMER MESSAGES et LAISSER MESSAGES. Si le thermomtre de progression est affich, l'utilisateur peut cliquer sur le bouton Stop pour interrompre l'opration. Si la recherche s'est correctement droule, la variable systme OK prend la valeur 1. Sinon, si la recherche est interrompue, OK prend la valeur 0 (zro). Si des champs indexs sont spcifis, la recherche est optimise chaque fois que c'est possible (la recherche commence par les champs indexs), rduisant au maximum la dure de l'opration. Exemples (5) Nous recherchons tous les enregistrements dont le nom est gal "Dupont" :

CHERCHER([Personnes]; [Personnes]Nom = "Dupont")

Note : Si le champ Nom est index, nous bnficions donc d'une recherche acclre tirant parti de l'index. Rappel : Cette recherche trouvera les enregistrements tels que "Dupont", "dupont", "DUPONT", etc. Si vous voulez que la recherche tienne compte des majuscules/minuscules, dfinissez des critres supplmentaires utilisant les codes ASCII.

4e Dimension - Langage 1409

(6) Nous recherchons les personnes se nommant "Dupont" et se prnommant "Jean". Le champ Nom est index. En revanche, le champ Prnom ne l'est pas :

` Chercher toute personne qui s'appelle Dupont CHERCHER ([Personnes]; [Personnes]Nom = "Dupont"; *) CHERCHER ([Personnes]; &; [Personnes]Prnom = "Jean") ` et dont le prnom est Jean

Cet exemple effectue dans un premier temps une recherche rapide sur le champ index Nom, ce qui rduit la slection d'enregistrements ceux des personnes s'appelant Dupont. La recherche s'effectue ensuite squentiellement sur le champ Prnom, mais nous serons peu pnaliss car elle s'excute parmi une prslection d'enregistrements. (7) L'exemple suivant recherche les personnes se nommant Dupont ou Blanc. Le champ Nom est index :

` Chercher toute personne qui s'appelle Dupont CHERCHER ([Personnes]; [Personnes]Nom = "Dupont"; *) CHERCHER ([Personnes]; |;[Personnes]Nom = "Blanc") ` ou Blanc

La commande utilise l'index du champ Nom pour les deux recherches. Les deux recherches sont effectues, et leurs rsultats sont placs dans des ensembles internes qui sont finalement combins par l'intermdiaire d'une opration Union. (8) L'exemple suivant recherche des personnes qui ne travaillent pas pour une socit. La recherche est effectue en testant si le nom de la socit est une chane vide.

CHERCHER ([Personnes]; [Personnes]Socit = "") ` Chercher les personnes sans socit

(9) L'exemple suivant recherche chaque personne se nommant "Dupont" et travaillant dans une socit base Paris. La deuxime recherche utilise un champ venant d'une autre table. Cette recherche peut tre effectue parce que la table [Personnes] est lie la table [Socit] par un lien de N vers 1 :

` Chercher toute personne qui s'appelle Dupont CHERCHER ([Personnes]; [Personnes]Nom = "Dupont"; *) ` ...qui travaille pour une socit Paris CHERCHER ([Personnes]; &;[Socit]Ville = "Paris")

(10) L'exemple suivant recherche l'enregistrement de chaque personne dont l'initiale du nom est situe entre les lettre A (incluse) et M (incluse) :

` Trouver toute personne entre A et M CHERCHER ([Personnes]; [Personnes]Nom < "n")

1410 4e Dimension - Langage

(11) L'exemple suivant recherche les enregistrements des personnes habitant soit Paris soit Lyon :

` Trouver ceux qui habitent Paris CHERCHER ([Personnes]; [Personnes]CodePostal = "75@"; *) CHERCHER ([Personnes]; |;[Personnes]CodePostal = "6900@") ` ou Lyon

(12) Cette recherche porte sur le contenu d'un sous-champ index. Cette recherche ne nous retournera pas une slection de sous-enregistrements mais une slection d'enregistrements parents (de la table [Personnes]) dont les sous-enregistrements rpondent aux critres de recherche.

` Trouver les personnes qui ont un enfant qui s'appelle Marjorie CHERCHER ([Personnes]; [Personnes]Enfant'Nom = "Marjorie")

(13) Nous recherchons les enregistrements correspondant la rponse fournie dans une bote de dialogue : `Demander un numro de facture l'utilisateur vTrouv := Demander ("Saisissez un numro de facture :") Si (OK = 1) ` Si l'utilisateur clique sur OK `Trouver le numro qui correspond vTrouv CHERCHER ([Factures]; [Factures]Num = vTrouv) Fin de si

(14) Cet exemple recherche tous les enregistrements des factures saisies en 1996. Nous recherchons les dates entre le 31/12/95 et le 1/1/97 :

` Trouver des factures datant d'aprs le 31/12/95 CHERCHER ([Factures]; [Factures]DateFacture > !31/12/95!; *) CHERCHER ([Factures]; &;[Factures]DateFacture < !1/1/97!) ` et d'avant le 1/1/97

(15) L'exemple suivant trouve les employs qui ont un salaire entre 100 000 F et 250 000 F. La recherche inclut les employs qui gagnent 100 000 F et exclut ceux qui gagnent 250 000 F :

` Trouver les employs qui ont un salaire entre CHERCHER ([Employs]; [Employs]Salaire >= 100000; *) CHERCHER ([Employs]; &; [Employs]Salaire < 250000) ` 100 000 F et 250 000 F

4e Dimension - Langage 1411

(16) L'exemple suivant cherche les employs du service Marketing qui ont un salaire suprieur 150 000 F. Le champ Salaire est utilis dans un premier temps car il est index. Notez que la seconde recherche utilise un champ venant d'une autre table. Le champ [Service]Nom est li la table [Employs] par un lien automatique de N vers 1. Le champ [Service]Nom est index, mais la recherche n'est pas indexe car le lien doit tre activ squentiellement pour chaque enregistrement dans la table [Employs] :

` Trouver les employs qui ont un salaire suprieur 150 000 F CHERCHER ([Employs]; [Employs]Salaire > 150000; *) ` et qui travaillent dans le service marketing CHERCHER ([Employs]; &; [Service]Nom = "marketing")

(17) La recherche suivante recherche les informations gales la valeur de la variable mavar.

` Trouver toutes les lois qui sont gales la valeur de mavar CHERCHER ([Lois]; [Lois]Texte = mavar)

La recherche peut avoir des rsultats diffrents selon la valeur de mavar. Elle sera galement excute diffrement. Par exemple : Si mavar est gale "Copyright@", la slection contient toutes les lois qui commencent par Copyright. Si mavar est gale "@Copyright@", la slection contient toutes les lois qui contiennent au moins une occurrence de Copyright. Rfrence CHERCHER DANS SELECTION.

1412 4e Dimension - Langage

CHERCHER DANS SELECTION

Recherches et tris version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHERCHER DANS SELECTION ({table}{; critre}{; *}) Paramtre table critre * Type Table Description Table dans laquelle effectuer la recherche ou ou Table par dfaut si ce paramtre est omis Lignes de recherche Attente d'excution de la recherche

Description CHERCHER DANS SELECTION recherche des enregistrements dans table. CHERCHER DANS SELECTION modifie la slection courante de table pour le process courant. Le premier enregistrement de la nouvelle slection devient l'enregistrement courant. CHERCHER DANS SELECTION a un fonctionnement et des effets proches de ceux de CHERCHER. La diffrence entre ces deux commandes est la porte de la recherche : CHERCHER recherche des enregistrements dans la table. CHERCHER DANS SELECTION recherche des enregistrements parmi la slection courante de la table. Pour plus d'informations, reportez-vous la description de la commande CHERCHER. Note : La commande FIXER PARAMETRE BASE permet de dfinir si CHERCHER DANS SELECTION doit utiliser ou non l'index, en fonction du nombre d'enregistrements prsents dans la slection. Exemple Cet exemple illustre la diffrence entre CHERCHER et CHERCHER DANS SELECTION. Voici deux recherches : ` Trouver TOUTES les socits bases Paris CHERCHER ([Socits]; [Socits]Ville="Paris") ` Trouver toutes les socits s'occupant d'affaires boursires (quelle que soit leur ville) CHERCHER ([Socits]; [Socits]Activit="Affaires boursires")

4e Dimension - Langage 1413

Notez que le second CHERCHER "ignore" compltement les rsultats du premier. Comparez avec : ` Trouver TOUTES les socits bases Paris CHERCHER ([Socits]; [Socits]Ville="Paris") ` Trouver TOUTES les socits s'occupant d'affaires boursires bases Paris CHERCHER DANS SELECTION ([Socits]; [Socits]Activit="Affaires boursires")

CHERCHER DANS SELECTION n'effectue sa recherche que parmi les enregistrements slectionns, dans cet exemple les socits bases Paris. Rfrence CHERCHER, FIXER PARAMETRE BASE.

1414 4e Dimension - Langage

CHERCHER PAR FORMULE

Recherches et tris version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHERCHER PAR FORMULE ({table}{; }{formule}) Paramtre table formule Type Table Boolen Description Table dans laquelle effectuer la recherche ou Table par dfaut si ce paramtre est omis Formule de recherche

Description CHERCHER PAR FORMULE effectue une recherche d'enregistrements dans table. CHERCHER PAR FORMULE modifie la slection courante de table pour le process courant et fait du premier enregistrement le nouvel enregistrement courant. CHERCHER PAR FORMULE et la commande CHERCHER PAR FORMULE DANS SELECTION fonctionnent exactement de la mme manire, la diffrence prs que CHERCHER PAR FORMULE effectue sa recherche parmi la totalit des enregistrements de la table alors que CHERCHER PAR FORMULE DANS SELECTION se cantonne aux enregistrements de la slection courante. Les deux commandes appliquent formule chaque enregistrement de la table ou de la slection. formule est une expression boolenne qui doit retourner VRAI ou FAUX. Si formule retourne Vrai, l'enregistrement est inclus dans la nouvelle slection. formule peut tre simple (par exemple la comparaison d'un champ une valeur) ou complexe (ralisation d'un calcul ou mme valuation de valeurs dans une table lie). Ce peut tre une fonction 4e Dimension, ou une fonction ou une expression que vous avez cre. Vous pouvez utiliser des jokers dans formule lorsque vous travaillez avec des champs de type Alpha ou Texte. Si vous omettez le paramtre formule, 4D affiche la bote de dialogue standard de recherche. Lorsque la recherche est termine, le premier enregistrement de la nouvelle slection est charg depuis le disque et devient l'enregistrement courant. Ces commandes effectuent toujours une recherche squentielle, non indexe. CHERCHER PAR FORMULE et CHERCHER PAR FORMULE DANS SELECTION sont plus lentes que CHERCHER lorsqu'elles sont utilises sur des champs indexs. La dure de la recherche est proportionnelle au nombre d'enregistrements prsents dans la table ou la slection.

4e Dimension - Langage 1415

4D Server : Le serveur n'excute pas la formule de recherche. Chaque enregistrement est envoy au poste client et la formule de recherche est excute sur le client. Ce fonctionnement rend ces commandes moins efficaces avec 4D Server que la commande CHERCHER. Exemples (1) L'exemple suivant recherche les enregistrements de toutes les factures qui ont t saisies au mois de dcembre, sans tenir compte de l'anne. Le principe est d'appliquer la fonction Mois de chaque enregistrement. Cette recherche ne pourrait pas tre effectue d'une autre manire sans crer un champ spar pour le mois :

CHERCHER PAR FORMULE ([Factures]; Mois de ([Factures]Saisie) = 12) ` Chercher les factures saisies en dcembre

(2) L'exemple suivant recherche les enregistrements de toutes les personnes dont le nom comporte plus de dix caractres :

CHERCHER PAR FORMULE ([Personnes]; Longueur ([Personnes]Nom) > 10) ` Chercher les personnes dont le nom fait plus de dix caractres

Rfrence CHERCHER, CHERCHER DANS SELECTION, CHERCHER PAR FORMULE DANS SELECTION.

1416 4e Dimension - Langage

CHERCHER PAR FORMULE DANS SELECTION

Recherches et tris version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHERCHER PAR FORMULE DANS SELECTION ({table}{; }{formule}) Paramtre table formule Type Table Boolen Description Table dans laquelle effectuer la recherche parmi la slection courante ou Table par dfaut si ce paramtre est omis Formule de recherche

Description La commande CHERCHER PAR FORMULE DANS SELECTION vous permet de rechercher des enregistrements dans table. CHERCHER PAR FORMULE DANS SELECTION modifie la slection courante de table pour le process courant et fait du premier enregistrement le nouvel enregistrement courant. CHERCHER PAR FORMULE DANS SELECTION fonctionne de la mme manire que CHERCHER PAR FORMULE. La diffrence entre ces deux commandes se situe au niveau de la porte de la recherche : CHERCHER PAR FORMULE effectue sa recherche parmi la totalit des enregistrements de la table. CHERCHER PAR FORMULE DANS SELECTION effectue sa recherche uniquement parmi les enregistrements de la slection courante. Pour plus d'informations, reportez-vous la description de la commande CHERCHER PAR FORMULE. Rfrence CHERCHER, CHERCHER DANS SELECTION, CHERCHER PAR FORMULE.

4e Dimension - Langage 1417

CHERCHER PAR TABLEAU

Recherches et tris version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHERCHER PAR TABLEAU (champIndex; tableau) Paramtre champIndex tableau Type Champ Tableau Description Champ index duquel comparer les valeurs Tableau des valeurs recherches

Description La commande CHERCHER PAR TABLEAU recherche dans la table du champ pass en premier paramtre tous les enregistrements pour lesquels la valeur de champIndex est gale au moins une des valeurs des lments du tableau tableau. Les enregistrements trouvs constituent la nouvelle slection courante. Cette commande permet de construire rapidement et simplement une recherche sur plusieurs valeurs. Notes : Cette commande ne fonctionne quavec des champs indexs. Elle ne peut donc pas tre utilise avec des champs de type texte, image, sous-table et BLOB. Rappelons quun tableau de type Entier long est compatible avec un champ de type Heure. Exemple Cet exemple permet de rcuprer les enregistrements des clients franais et amricains : TABLEAU ALPHA (2;TabRecherche;30) TabRecherche{1}:="FR" TabRecherche{2}:="US" CHERCHER PAR TABLEAU ([Clients]Pays;TabRecherche)

1418 4e Dimension - Langage

FIXER DESTINATION RECHERCHE

Recherches et tris version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER DESTINATION RECHERCHE (destinationType{; destinationObjet}) Paramtre destinationType Type Numrique Description 0 slection courante 1 ensemble 2 slection temporaire 3 variable Nom de l'ensemble ou Nom de la slection temporaire ou Variable

destinationObjet

Chane | Variable

Description La commande FIXER DESTINATION RECHERCHE vous permet d'indiquer 4e Dimension o placer les rsultats de toutes les recherches qui suivent l'appel de cette commande dans le process courant. Vous spcifiez le type de la destination dans le paramtre destinationType. 4e Dimension fournit les constantes prdfinies suivantes : Constante Vers slection courante Vers ensemble Vers slection temporaire Vers variable Type Entier Entier Entier Entier long long long long Valeur 0 1 2 3

Vous spcifiez le nom de la destination de la recherche dans le paramtre optionnel destinationObjet en fonction du tableau suivant : Paramtre destinationType Paramtre destinationObjet

0 (slection courante) Vous ne passez pas de paramtre. 1 (ensemble) Vous passez le nom de l'ensemble (existant ou crer) 2 (slection temporaire) Vous passez le nom de la slection temporaire (existante ou crer) 3 (variable) Vous passez une variable numrique (existante ou crer) Avec FIXER DESTINATION RECHERCHE(Vers slection courante) Les enregistrements trouvs par la recherche seront placs dans la slection courante de la table dans laquelle la recherche est effectue.

4e Dimension - Langage 1419

Avec FIXER DESTINATION RECHERCHE(Vers ensemble;"monEnsem") Les enregistrements trouvs par la recherche seront placs dans l'ensemble monEnsem. La slection courante et l'enregistrement courant de la table dans laquelle vous recherchez restent inchangs. Note : En client-serveur, vous ne pouvez pas utiliser comme destination de recherche un ensemble local/client (dont le nom est prcd du symbole $). En effet, ce type d'ensemble est stock sur les postes clients alors que les recherches sont effectues sur le serveur. Pour plus d'informations sur les types d'ensembles, reportez-vous la section Prsentation des ensembles. Avec FIXER DESTINATION RECHERCHE(Vers slection temporaire;"maTemp") Les enregistrements trouvs par la recherche seront placs dans la slection temporaire maTemp. La slection courante et l'enregistrement courant pour la table sur laquelle vous effectuez la recherche restent inchangs. Avec FIXER DESTINATION RECHERCHE(Vers variable;$vlRsultatRech) Le nombre d'enregistrements trouvs par la recherche sera plac dans la variable $vlRsultatRech. La slection courante et l'enregistrement courant de la table dans laquelle vous effectuez la recherche restent inchangs. Attention : FIXER DESTINATION RECHERCHE affecte toutes les recherches suivantes dans le process courant. N'oubliez pas d'associer toujours un appel FIXER DESTINATION RECHERCHE (lorsque destinationType#0) un appel FIXER DESTINATION RECHERCHE(0) ultrieur pour rtablir le mode standard de recherche. FIXER DESTINATION RECHERCHE modifie uniquement le comportement des commandes de recherche, c'est--dire : CHERCHER CHERCHER DANS SELECTION CHERCHER PAR EXEMPLE CHERCHER PAR FORMULE CHERCHER PAR FORMULE DANS SELECTION CHERCHER PAR TABLEAU En revanche, FIXER DESTINATION RECHERCHE n'affecte pas les autres commandes qui modifient la slection courante telles que TOUT SELECTIONNER, LIEN RETOUR, etc.

1420 4e Dimension - Langage

Exemples (1) Vous crez un formulaire qui affiche les enregistrements venant de la table [Annuaire]. Vous crez un objet du type onglet qui s'appelle asRolodex (avec un onglet pour chaque lettre dans l'alphabet) et un sous-formulaire qui affiche les enregistrements de la table [Annuaire]. En choisissant un onglet, vous affichez les enregistrements qui correspondent cette lettre. Puisque, dans cet exemple, la table [Annuaire] contient des donnes statiques, vous ne voulez pas effectuer une recherche chaque fois que vous cliquez sur un onglet et donc vous dpensez moins de temps prcieux excuter ces recherches. Pour faire ceci, vous pouvez placer vos recherches dans les slections temporaires pour les rutiliser quand il le faut. Vous crivez la mthode objet de l'onglet asRolodex comme indique ci-dessous : ` mthode objet de l'onglet asRolodex Au cas ou : (Evenement formulaire=Sur chargement) ` Avant que le formulaire s'affiche l'cran, ` initialiser l'onglet et le tableau de boolens qui nous indiquent ` si une recherche pour la lettre sur laquelle vous avez cliqu ` a t excute ou pas TABLEAU ALPHA(1;asRolodex;26) TABLEAU BOOLEEN(abRechFini;26) Boucle ($vlElm;1;26) asRolodex{$vlElm}:=Caractere(64+$vlElm) abRechFini{$vlElm}:=Faux Fin de boucle : (Evenement formulaire=Sur clic) ` Lorsque l'utilisateur clique sur un onglet, vrifier si une recherche pour cette ` lettre a t excute ou pas Si (Non(abRechFini{asRolodex})) ` Sinon, fixer la destination de la recherche vers une slection temporaire FIXER DESTINATION RECHERCHE(Vers slection temporaire;"Rolodex"+ asRolodex{asRolodex}) ` Effectuer la recherche CHERCHER([Phone Book];[Phone Book]Last name=asRolodex{asRolodex}+"@") ` Restituer le mode standard de recherche FIXER DESTINATION RECHERCHE(Vers slection courante) ` La prochaine fois que la lettre sera choisie, la recherche ne sera pas excute abRechFini{asRolodex}:=Vrai Fin de si ` Utiliser la slection temporaire pour l'affichage des enregistrements ` qui correspondent cette lettre UTILISER SELECTION("Rolodex"+asRolodex{asRolodex})

4e Dimension - Langage 1421

: (Evenement formulaire=Sur libration) ` Aprs que le formulaire disparat de l 'cran ` Effacer les slections temporaires de la mmoire Boucle ($vlElem;1;26) Si(abRechFini{$vlElm}) EFFACER SELECTION("Rolodex"+asRolodex{$vlElm}) Fin de si Fin de boucle ` Effacer les deux tableaux dont nous n'avons pas besoin EFFACER VARIABLE(asRolodex) EFFACER VARIABLE(abRechFini) Fin de cas (2) La mthode ValeursUniques suivante vrifie si les valeurs sont uniques pour des champs dans une table de votre choix. L'enregistrement courant peut dj exister ou vient d'tre cr. ` Mthode projet ValeursUniques ` ValeursUniques ( Pointeur ; Pointeur { ; Pointeur... } ) -> Boolen ` ValeursUniques ( ->Table ; ->Champ { ; ->Champ2... } ) -> Oui ou non C_BOOLEEN($0;$2) C_POINTEUR(${1}) C_ENTIER LONG($vlChamp;$vlNmbChamps;$vlTrouv;$vlEnregCour) $vlNmbChamps:=Nombre de parametres-1 $vlEnregCour:=Numero enregistrement($1->) Si ($vlNmbChamps>0) Si ($vlEnregCour#-1) Si ($vlEnregCour<0) ` Il s'agit d'un nouvel enregistrement qui n'a pas t sauvegard (numro ` d'enregistrement gal -3) donc nous pouvons arrter la recherche ` ds que nous avons trouv un enregistrement FIXER LIMITE RECHERCHE(1) Sinon ` Il s'agit d'un enregistrement existant, donc nous pouvons arrter ` la recherche ds que nous avons trouv au moins deux enregistrements FIXER LIMITE RECHERCHE(2) Fin de si ` La recherche retournera le rsultat dans la variable $vlTrouv ` sans changer l'enregistrement courant ni la slection courante FIXER DESTINATION RECHERCHE(Vers variable;$vlTrouv) ` Construire la recherche selon le nombre de champs spcifis Au cas ou : ($vlNmbChamps=1) CHERCHER($1->;$2->=$2->)

1422 4e Dimension - Langage

: ($vlNmbChamps=2) CHERCHER($1->;$2->=$2->;*) CHERCHER($1->; & ;$3->=$3->) Sinon CHERCHER($1->;$2->=$2->;*) Boucle ($vlChamp;2;$vlNmbChamps-1) CHERCHER($1->; & ;${1+$vlChamp}->=${1+$vlChamp}->;*) Fin de boucle CHERCHER($1->; & ;${1+$vlNmbChamps}->=${1+$vlNmbChamps}->) Fin de cas FIXER DESTINATION RECHERCHE(0) ` Rtablir le mode standard de recherche FIXER LIMITE RECHERCHE(0) ` Enlever la limite sur la recherche ` Traiter le rsultat de la recherche Au cas ou : ($vlTrouv=0) $0:=Vrai ` Pas de valeurs dupliques : ($vlTrouv=1) Si ($vlEnregCour<0) $0:=Faux ` Un enregistrement avec les mmes valeurs que le nouveau existe Sinon $0:=Vrai ` Pas de valeurs dupliques, c'est bien le mme Fin de si : ($vlTrouv=2) $0:=Faux ` Quoi que ce soit, les valeurs sont dupliques Fin de cas Sinon Si (Dbogage) ` Cela n'a aucun sens, signalez-le pendant le dveloppement de la base TRACE ` Attention, cette mthode a t appele sans enregistrement courant Fin de si $0:=Faux ` Ne peut pas garantir le rsultat Fin de si Sinon Si (Dbogage) ` Cela n'a aucun sens, signalez-le pendant le dveloppement de la base TRACE ` Attention, cette mthode a t appele sans conditions de recherche Fin de si $0:=Faux ` Ne peut pas garantir le rsultat Fin de si

4e Dimension - Langage 1423

Lorsque cette mthode est implmente dans votre application, vous pouvez crire le code suivant : ` ... Si (ValeursUniques (->[Contacts];->[Contacts]Socit;->[Contacts]Nom; ->[Contacts]Prnom)) ` Traitement de l'enregistrement qui a les valeurs uniques Sinon ALERTE("Il existe dj un contact avec ce nom pour cette socit.") Fin de si ` ... Rfrence CHERCHER, CHERCHER DANS SELECTION, CHERCHER PAR EXEMPLE, CHERCHER PAR FORMULE, CHERCHER PAR FORMULE DANS SELECTION, CHERCHER PAR TABLEAU, FIXER LIMITE RECHERCHE.

1424 4e Dimension - Langage

FIXER LIMITE RECHERCHE

Recherches et tris version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER LIMITE RECHERCHE (limite) Paramtre limite Type Numrique Description Nombre limite d'enregistrements ou 0 pour nombre illimit

Description La commande FIXER LIMITE RECHERCHE vous permet d'indiquer 4e Dimension d'arrter toutes les recherches suivant l'appel de cette commande dans le process courant ds que le nombre d'enregistrements dfini dans limite a t atteint. Si, par exemple, limite est gal 1, les recherches s'arrteront ds qu'un enregistrement sera trouv selon les conditions de la recherche. Pour que les recherches soient de nouveau sans limite, appelez FIXER LIMITE RECHERCHE en fixant le paramtre limite 0. Attention : FIXER LIMITE RECHERCHE affecte toutes les recherches dans le process courant. N'oubliez pas d'associer toujours un appel FIXER LIMITE RECHERCHE(limite) (lorsque limite>0) un appel FIXER LIMITE RECHERCHE(0) ultrieur pour rtablir les recherches sans limite. FIXER LIMITE RECHERCHE modifie uniquement le comportement des commandes de recherche, c'est--dire : CHERCHER CHERCHER DANS SELECTION CHERCHER PAR EXEMPLE CHERCHER PAR FORMULE CHERCHER PAR FORMULE DANS SELECTION CHERCHER PAR TABLEAU En revanche, FIXER LIMITE RECHERCHE n'affecte pas les autres commandes qui modifient la slection courante d'une table telles que TOUT SELECTIONNER, LIEN RETOUR, etc. Exemples (1) Pour effectuer une recherche qui correspond la formule ...trouver dix clients avec lesquels les ventes sont suprieures 1MF..., crivez le code suivant :

FIXER LIMITE RECHERCHE(10) CHERCHER([Clients];[Clients]Ventes>1000000) FIXER LIMITE RECHERCHE(0)

4e Dimension - Langage 1425

(2) Rfrez-vous au deuxime exemple de la commande FIXER DESTINATION RECHERCHE. Rfrence CHERCHER, CHERCHER DANS SELECTION, CHERCHER PAR EXEMPLE, CHERCHER PAR FORMULE, CHERCHER PAR FORMULE DANS SELECTION, FIXER DESTINATION RECHERCHE.

1426 4e Dimension - Langage

Trouver clef index

Recherches et tris version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Trouver clef index (champIndex; valeur) Entier long Paramtre champIndex valeur Type Champ Description Champ index sur lequel effectuer la recherche Valeur rechercher Valeur trouve Numro de lenregistrement trouv ou -1 si pas denregistrement trouv

Rsultat

Entier long

Description La commande Trouver clef index retourne le numro du premier enregistrement dont le champ champIndex est gal la valeur valeur. Si aucun enregistrement ne correspond au critre, Trouver clef index retourne -1. Aprs lappel, le paramtre valeur contient la valeur effectivement trouve. Ce fonctionnement permet deffectuer des recherches utilisant le caractre @ sur des champs de type alpha, et pour lesquelles il est ncessaire de rcuprer la valeur trouve. La commande ne modifie ni la slection courante, ni lenregistrement courant. Cette fonction, trs rapide car exploitant uniquement lindex, est particulirement utile pour prvenir la cration de doublons au moment de la saisie de donnes. Exemple Dans une base de donnes de CD audio, vous souhaitez vrifier, au moment de la saisie dun nouveau nom de chanteur, si celui-ci nexiste pas dj dans la base. Comme il peut exister des homonymes, vous ne souhaitez pas toutefois que le champ [Chanteur]Nom soit unique. Pour cela, dans le formulaire dentre, vous crivez dans la mthode objet du champ [Chanteur]Nom :

Si (Evenement formulaire=Sur donnes modifies) $EnrgNum:=Trouver clef index([Chanteur]Nom;[Chanteur]Nom) Si ($EnrgNum # -1) ` Si ce nom a dj t saisi CONFIRMER("Un chanteur de ce nom existe dj. Voulez-vous visualiser sa fiche ?";"Oui";"Non") Si (OK=1) ALLER A ENREGISTREMENT([Chanteur];$EnrgNum) Fin de si Fin de si Fin de si

4e Dimension - Langage 1427

TRIER

Recherches et tris version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TRIER ({table}{; champ}{; > ou <}{; champ2; > ou <2; ...; champN; > ou <N}{; *}) Paramtre table champ > ou < * Type Table Champ Description Table de laquelle rordonner la slection courante ou Table par dfaut si ce paramtre est omis Champ sur lequel effectuer le tri pour chaque niveau Sens du tri pour chaque niveau : > demander un tri croissant ou < demander un tri dcroissant Attente d'excution du tri

Description TRIER trie (rordonne) les enregistrements de la slection courante de table pour le process courant. Une fois le tri effectu, le premier enregistrement de la nouvelle slection courante devient le nouvel enregistrement courant. Si vous omettez le paramtre table, la commande s'applique la table par dfaut. Si aucune table par dfaut n'a t dfinie, une erreur est retourne. Si vous ne passez ni le paramtre champ, ni les paramtres >, < ou *, TRIER affiche la bote de dialogue de l'Editeur de tri de 4D pour table. Cet diteur du mode Utilisation est prsent ci-dessous :

1428 4e Dimension - Langage

Pour plus d'informations sur l'utilisation de cet diteur, reportez-vous au manuel Mode Utilisation de 4D. L'utilisateur construit le tri puis clique sur le bouton Trier. Si le tri est correctement effectu, la variable systme OK prend la valeur 1. Si l'utilisateur clique sur Annuler, aucun tri n'est effectu et la variable OK prend la valeur 0 (zro). Exemples (1) L'exemple suivant affiche la bote de dialogue de Tri pour la table [Produits] :

TRIER ([Produits])

(2) L'exemple suivant affiche la bote de dialogue de Tri pour la table par dfaut (si elle a t dfinie) :

TRIER

Si vous spcifiez les paramtres champ et > ou <, la bote de dialogue standard de Tri ne s'affiche pas et le tri est entirement dfini par programmation. Vous pouvez trier la slection courante sur un plusieurs niveaux. Pour chaque niveau de tri, vous passez un champ dans le paramtre champ et un ordre de tri dans > ou <. Si vous passez le paramtre suprieur (>), l'ordre est croissant. Si vous passez le paramtre infrieur (<), l'ordre est dcroissant. Exemples (3) L'exemple suivant trie la slection courante de [Produits] par nom dans un ordre croissant :

TRIER ([Produits]; [Produits]Nom;>)

(4) L'exemple suivant trie la slection courante de [Produits] par nom dans un ordre dcroissant :

TRIER ([Produits]; [Produits]Nom;<)

(5) L'exemple suivant trie la slection courante de [Produits] par type et par prix dans un ordre croissant chaque niveau :

TRIER ([Produits]; [Produits]Type;>; [Produits]Prix;>)

(6) L'exemple suivant trie la slection courante de [Produits] par type et par prix dans un ordre dcroissant chaque niveau :

TRIER ([Produits]; [Produits]Type;<; [Produits]Prix;<)

4e Dimension - Langage 1429

(7) L'exemple suivant trie la slection courante de [Produits] par type dans un ordre croissant et par prix dans un ordre dcroissant :

TRIER ([Produits]; [Produits]Type;>; [Produits]Prix;<)

(8) L'exemple suivant trie la slection courante de [Produits] par type dans un ordre dcroissant et par prix dans un ordre croissant :

TRIER ([Produits]; [Produits]Type;<; [Produits]Prix;>)

Si vous omettez le paramtre d'ordre > ou <, le tri est croissant par dfaut. Exemple (9) L'exemple suivant trie la slection courante de [Produits] par nom dans un ordre croissant :

TRIER ([Produits]; [Produits]Nom)

Si un seul champ est spcifi (tri sur un niveau) et s'il est index, le tri tire parti de l'index. Si le champ n'est pas index ou si plus d'un champ est utilis, le tri est effectu de manire squentielle. Le champ peut appartenir la table de la slection que vous triez ou une table 1 lie table par un lien automatique (la table rordonne doit tre la table N). Dans ce cas, le tri est toujours squentiel. Exemples (10) L'exemple suivant effectue un tri index si le champ [Produits]Nom est index :

TRIER ([Produits]; [Produits]Nom;>)

(11) L'exemple suivant effectue un tri squentiel, que les champs soient ou non indexs :

TRIER ([Produits]; [Produits]Type;>;[Produits]Prix;>)

(12) L'exemple suivant effectue un tri squentiel l'aide d'un champ li :

TRIER ([Factures];[Socit]Nom;>) ` les factures sont tries par ordre alphabtique sur le champ Nom de la socit Pour indiquer que le tri ne doit pas tre immdiatement effectu, passez en dernier paramtre le symbole *. 4e Dimension attendra de rencontrer une nouvelle ligne de tri ne se terminant pas par * pour excuter le tri. Cette possibilit est utile pour grer les tris multicritres dans le cadre d'interfaces personnalises. Attention : lorsque vous utilisez cette syntaxe, vous ne pouvez passer qu'un seul niveau de tri (un seul champ) par ligne d'instruction.

1430 4e Dimension - Langage

Exemple (13) Dans un formulaire sortie affich en mode Menus crs, vous souhaitez permettre aux utilisateurs de trier une colonne par ordre croissant en cliquant sur son en-tte. Si l'utilisateur maintient la touche Maj enfonce et clique ensuite sur plusieurs autres colonnes, le tri est multicritres, c'est--dire que les colonnes sont tries sur autant de niveaux qu'il y a de clics :

Chaque en-tte de colonne contient un bouton invers dont la mthode est du type suivant : MULTITRIS (->[CDs]Titre) `Bouton de l'en-tte de la colonne Titre

Chaque bouton appelle la mthode projet MULTITRIS en passant un pointeur sur le champ de la colonne. Voici le contenu de la mthode projet MULTITRIS : ` Mthode projet MULTITRIS ` MULTITRIS (Pointeur) ` MULTITRIS (->[Table]Champ) C_POINTEUR($1) C_ENTIER LONG($nbCrit) `Construction des critres Si (Non(Majuscule enfoncee)) `Si le tri est simple TABLEAU POINTEUR(tPtrTriChp;1) `Crons un tableau 1 lment tPtrTriChp{1}:=$1 `Champ sur lequel l'utilisateur a cliqu

4e Dimension - Langage 1431

`Si la touche Maj tait enfonce (tri multicritre) `Vrifions que le critre n'est pas dj prsent $nbCrit:=Chercher dans tableau(tPtrTriChp;$1) Si ($nbCrit<0) `Critre inexistant `Remplissons le tableau INSERER LIGNES(tPtrTriChp;Taille tableau(tPtrTriChp)+1;1) tPtrTriChp{Taille tableau(tPtrTriChp)}:=$1 Fin de si Fin de si `Excution du tri $nbCrit:=Taille tableau(tPtrTriChp) Si ($nbCrit>0) `S'il y a au moins un lment dans le tableau de pointeurs Boucle ($i;1;$nbCrit) `Pour chaque critre dfini TRIER([CDs];(tPtrTriChp{$i})->;>;*) `On construit le tri Fin de boucle TRIER([CDs]) `Pas de * : on effectue le tri Fin de si

Sinon

Quelle que soit la manire dont le tri est dfini, si l'opration risque de prendre un certain temps, 4e Dimension affiche automatiquement un message contenant un thermomtre de progression. Vous pouvez dcider d'afficher ou de ne pas afficher ce message pour le process l'aide des commandes SUPPRIMER MESSAGES et LAISSER MESSAGES. Si le thermomtre de progression est affich, l'utilisateur peut cliquer sur le bouton Stop pour interrompre l'opration. Si le tri s'est correctement droul, la variable systme OK prend la valeur 1. Sinon, si le tri est interrompu, OK prend la valeur 0 (zro). Rfrence TRIER PAR FORMULE.

1432 4e Dimension - Langage

TRIER PAR FORMULE

Recherches et tris version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TRIER PAR FORMULE (table{; expression}{; > ou <}{; expression2; > ou <2; ...; expressionN; > ou <N}) Paramtre table expression > ou < Type Table Description Table de laquelle trier la slection d'enregistrements Formule de tri des enregistrements (peut tre de type Alphanumrique, Rel, Entier, Entier long, Date, Heure ou Boolen) Ordre de tri pour chaque niveau : > ordre croissant ou < ordre dcroissant

Description TRIER PAR FORMULE trie (rordonne) les enregistrements de la slection courante de table pour le process courant. Une fois le tri effectu, le premier enregistrement de la nouvelle slection courante devient le nouvel enregistrement courant. Notez que vous devez spcifier table. Vous ne pouvez pas utiliser une table par dfaut. Vous pouvez trier la slection sur un ou plusieurs niveaux. Pour chaque niveau, vous passez une expression dans expression et un ordre de tri dans > ou <. Si vous passez le symbole suprieur (>), l'ordre est croissant. Si vous passez le symbole infrieur (<), l'ordre est dcroissant. Si vous ne passez pas ce paramtre, l'ordre est par dfaut croissant. Le paramtre expression peut tre de type Alpha, Rel (Numrique), Entier, Entier long, Date, Heure ou Boolen. Quelle que soit la manire dont le tri est dfini, si l'opration risque de prendre un certain temps, 4e Dimension affiche automatiquement un message contenant un thermomtre de progression. Vous pouvez dcider d'afficher ou de ne pas afficher ce message pour le process l'aide des commandes SUPPRIMER MESSAGES et LAISSER MESSAGES. Si le thermomtre de progression est affich, l'utilisateur peut cliquer sur le bouton Stop pour interrompre l'opration. Si le tri s'est correctement droul, la variable systme OK prend la valeur 1. Sinon, si le tri est interrompu, OK prend la valeur 0 (zro).

4e Dimension - Langage 1433

4D Server : Comme expression ne peut pas tre interprte par 4D Server, chaque enregistrement est envoy au poste client et la formule de tri est value sur ce poste. Pour cette raison, le tri par formule n'est gure efficace, il est conseill d'utiliser de prfrence la commande TRIER lorsque c'est possible. A la diffrence de TRIER, TRIER PAR FORMULE effectue toujours un tri squentiel. Exemple L'exemple suivant trie les enregistrements de la table [Personnes] dans l'ordre dcroissant par rapport la longueur du nom de famille de chaque personne. L'enregistrement de la personne qui a le nom le plus long sera le premier enregistrement de la slection courante :

TRIER PAR FORMULE ([Personnes]; Longueur ([Personnes]Nom); <)

Rfrence TRIER.

1434 4e Dimension - Langage

51 ________________________ Ressources

4e Dimension - Langage 1435

1436 4e Dimension - Langage

Ressources

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Qu'est-ce qu'une ressource ? Une ressource regroupe des donnes de tout type, structures dans un format dfini, et stockes dans un fichier Windows .RSR ou dans la resource fork ("partie de ressources") d'un fichier MacOS. Gnralement, les ressources contiennent des chanes de caractres, des images, des icnes, etc. En fait, vous pouvez crer et utiliser vos propres types de ressources et y stocker toutes les donnes que vous voulez. Data fork et Resource fork Sur Macintosh, chaque fichier peut contenir une data fork ("partie de donnes") et une resource fork ("partie de ressources"). La data fork d'un fichier Macintosh est l'quivalent d'un fichier Windows ou UNIX. La resource fork d'un fichier Macintosh contient les ressources spcifiques MacOS du fichier et n'a pas d'quivalent direct sous Windows ou UNIX. Sous Windows, les ressources spcifiques Windows sont intgres aux autres donnes du fichier. Par exemple, une application Windows un fichier .EXE peut contenir la fois des donnes de type ressource et du code. Afin d'assurer l'indpendance de plate-forme de vos applications 4D, 4e Dimension exploite les ressources de type MacOS sur les platesformes Macintosh et Windows. 4D Transporter Comme les resource forks n'existent pas sous Windows, le programme utilitaire 4D Transporter (fourni avec la version Macintosh de 4e Dimension) vous permet de transporter une base 4D de Windows vers MacOS et inversement. Lorsque vous transportez une base 4D de Windows vers MacOS, les fichiers .4DB et .RSR de la structure de la base sont fusionns en un seul fichier Macintosh. Le fichier .4DB devient la data fork du fichier de structure Macintosh, et le fichier .RSR devient la resource fork du fichier de structure Macintosh. A l'inverse, lorsque vous transportez une base 4D de MacOS vers Windows, le fichier de structure Macintosh est dissoci en deux fichiers distincts. Sa data fork devient le fichier .4DB et sa resource fork devient le fichier .RSR. La dissociation ou la fusion de la data fork et de la resource fork constituent en fait l'unique rle de 4D Transporter. Le programme ne traduit ni ne modifie en aucune manire les donnes stockes dans les fichiers. Pour plus d'informations sur le transport de bases 4D entre les plates-formes, reportez-vous au manuel de rfrence de 4D Transporter.

4e Dimension - Langage 1437

Fichiers de ressources
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Quelle que soit la plate-forme que vous utilisez, le fichier de structure d'une base 4D n'est pas le seul type de fichier utilisant des ressources. L'application 4D elle-mme contient des ressources. Sous MacOS, elles sont stockes dans la resource fork de l'application. Sous Windows, elles sont stockes dans le fichier 4D.RSR le code excutable est stock quant lui dans le fichier 4D.EXE. Les plug-ins 4D peuvent galement contenir des ressources. Par exemple, le plug-in 4D Write de 4D utilise des ressources. Sous MacOS, elles sont stockes dans la resource fork de 4D Write. Sous Windows, elles sont stockes dans le fichier 4DWRITExx.RSR (varie en fonction du numro de version). Le fichier de donnes d'une base 4D peut galement contenir des ressources. Par exemple, l'aide de l'utilitaire Customizer Plus (fourni avec les versions Windows et Macintosh de 4e Dimension), vous pouvez verrouiller un fichier de donnes de manire ce qu'il ne puisse tre utilis que par un fichier de structure particulier. Cette opration s'effectue par la cration de la mme ressource WEDD ("wedding" signifiant "mariage") dans les fichiers de structure et de donnes. Sous MacOS, la ressource est stocke dans la resource fork du fichier de donnes. Sous Windows, elle est stocke dans le fichier .4DR, le fichier de ressources du fichier de donnes. Sous Windows, exception faite du fichier .4DR pour le fichier de donnes, vous pourrez gnralement reconnatre leur extension .RSR les fichiers 4D standard contenant des ressources de type MacOS transformes en fichier. En plus des fichiers de ressources fournis par 4D, vous pouvez crer et utiliser vos propres fichiers de ressources l'aide des commandes 4D Creer fichier ressources et Ouvrir fichier ressources. Lorsque leur excution s'est droule correctement, ces deux commandes retournent un numro de rfrence de fichier de ressources identifiant de manire unique le fichier de ressources ouvert. Ce numro quivaut au numro de rfrence de document retourn, pour les fichiers standard, par les commandes du thme Documents systme, telles que Ouvrir document. Toutes les commandes 4D de gestion des ressources acceptent un numro de rfrence de fichier de ressources (optionnel). Une fois que vous en avez termin avec un fichier de ressources, n'oubliez pas de le refermer en appelant la commande FERMER FICHIER RESSOURCES. La chane des fichiers de ressources
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lorsque vous travaillez avec une base 4D, vous pouvez soit utiliser tous les fichiers de ressources ouverts soit un fichier de ressources particulier. Plusieurs fichiers de ressources peuvent tre ouverts simultanment. C'est d'ailleurs toujours le cas lorsqu'une base 4D est en cours d'utilisation : Sur Macintosh, le fichier de ressources du systme est ouvert. Sous Windows, le fichier ASIPORT.RSR est ouvert (il contient une partie des ressources systme du Macintosh).

1438 4e Dimension - Langage

Le fichier de ressources de l'application 4D est ouvert. Le fichier de ressources de la structure de la base est ouvert. Le fichier de ressources des donnes de la base est ouvert (s'il existe). Enfin, vous pouvez ouvrir votre propre fichier de ressources l'aide de la fonction Ouvrir fichier ressources. Cette liste de ressources ouvertes s'appelle la chane des fichiers de ressources. Lorsque vous recherchez une ressource particulire, celle-ci peut tre dsigne de deux manires : Si vous passez un numro de rfrence de fichier de ressources une commande 4D de gestion des ressources, la ressource est recherche dans ce fichier uniquement. Si vous ne passez pas de numro de rfrence de fichier de ressources la commande 4D, la ressource est recherche dans tous les fichiers de ressources ouverts, depuis le plus rcemment ouvert jusqu'au premier ouvert. 4D remonte en sens inverse la chane des fichiers de ressources ouverts : le dernier fichier ouvert est examin en premier. Voici un exemple : $vhResFile:=Creer fichier ressources("Simple_Fichier") Si (OK=1) TABLEAU ALPHA(63;asDesChaines;0) LISTE DE CHAINES VERS TABLEAU(8;asDesChaines;$vhResFile) ALERTE("Le tableau contient "+Chaine(Taille tableau(asDesChaines))+ " lment(s).") LISTE DE CHAINES VERS TABLEAU(8;asDesChaines) ALERTE("Le tableau contient "+Chaine(Taille tableau(asDesChaines))+ " lment(s).") FERMER FICHIER RESSOURCES($vhResFile) Fin de si Lors de l'excution de cette mthode, la premire alerte affiche Le tableau contient 0 lment(s) et la seconde alerte affiche Le tableau contient 634 lment(s). Le premier appel : LISTE DE CHAINES VERS TABLEAU(8;asDesChaines;$vhResFile) recherche la ressource "STR#" ID=8 uniquement dans le fichier de ressources qui vient d'tre cr et ouvert par la commande Creer fichier ressources. Comme ce fichier est neuf et donc vide, la recherche ne donne rien. Le second appel : LISTE DE CHAINES VERS TABLEAU(8;asDesChaines) recherche la ressource "STR#" ID=8 dans tous les fichiers de ressources ouverts. Comme le fichier qui vient d'tre cr et ouvert par la commande Creer fichier ressources ne contient pas cette ressource, LISTE DE CHAINES VERS TABLEAU recherche alors la ressource dans le fichier de ressources de la structure de la base. Ce fichier ne la contenant pas non plus, LISTE DE CHAINES VERS TABLEAU examine alors le fichier de ressources de l'application 4D et y trouve finalement la ressource recherche. Le tableau est alors rempli. 4e Dimension - Langage 1439

Conclusion : Lorsque vous travaillez avec des fichiers de ressources, vous devez passer un numro de rfrence de fichier de ressources aux commandes 4D de gestion des ressources, si vous voulez accder un fichier spcifique. Sinon, 4D considre que vous ne souhaitez pas utiliser de ressources en provenance d'un fichier particulier. Types de ressources
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le format interne d'un fichier de ressources est trs structur. En plus des donnes de chaque ressource, le fichier contient un en-tte et un descriptif qui fournissent des informations prcises sur son contenu. Les ressources sont classes en types. Le type d'une ressource est indiqu par une chane de 4 caractres. Par exemple : Une ressource de type "STR#" est une ressource contenant une liste de chanes Pascal. Elle est appele ressource liste de chanes. Une ressource de type "STR " (notez que le quatrime caractre est un caractre d'espacement) est une ressource contenant une chane Pascal individuelle. Elle est appele ressource chane. Une ressource de type "TEXT" est une ressource contenant du texte sans longueur dclare. Elle est appele ressource texte. Une ressource de type "PICT" est une ressource contenant une image QuickDraw Macintosh que vous pouvez utiliser et afficher sous MacOS et Windows avec 4D. Elle est appele ressource image. Une ressource de type "cicn" est une ressource contenant une icne couleur Macintosh que vous pouvez utiliser et afficher sous MacOS et Windows avec 4D. Une ressource "cicn" peut, par exemple, tre associe un lment d'une liste hirarchique l'aide de la commande CHANGER PROPRIETES ELEMENT. Elle est appele ressource icne couleur. En plus des types de ressources standard (la liste ci-dessus n'est pas exhaustive), vous pouvez crer vos propres types. Par exemple, vous pouvez dcider de travailler avec des ressources du type "MTYP" (pour Mon Type). Pour obtenir la liste des types de ressources prsents parmi tous les fichiers ouverts ou dans un fichier particulier, utilisez la commande LISTE TYPES RESSOURCE. A l'inverse, pour obtenir la liste des ressources d'un certain type parmi tous les fichiers de ressources ouverts ou dans un fichier de ressources particulier, utilisez la commande LISTE RESSOURCES. Cette dernire retourne les numros et les noms (cf. section suivante) de toutes les ressources d'un type particulier. Un type de ressource est toujours indiqu par une chane de 4 caractres. Les caractres diacritiques et les majuscules/minuscules sont pris en compte. Par exemple, les types de ressources "Hi_!", "hi_!" et "HI_!" sont tous diffrents. Important : Les types de ressources en caractres minuscules sont rservs pour le Systme d'exploitation. Evitez de dsigner vos propres types de ressources en utilisant des caractres minuscules.

1440 4e Dimension - Langage

ATTENTION : De nombreuses applications s'appuient sur le type des ressources pour traiter leur contenu. Par exemple, lorsqu'elles accdent une ressource "STR#", les applications s'attendent trouver une liste de chanes. Ne stockez pas de donnes atypiques dans des ressources de type standard, cela peut provoquer des erreurs systme dans vos applications 4D ou dans d'autres applications. ATTENTION : Comme un fichier de ressources est trs structur, vous ne devez pas y accder par des commandes autres que celles de gestion des ressources. Notez que si vous passez un numro de rfrence de fichier de ressources (sous forme d'une expression 4D de type heure, tout comme pour les numros de rfrence de document) une commande telle que ENVOYER PAQUET, rien ne vous en empchera (aucune mise en garde ne vous est adresse). Mais il est trs probable que le fichier de ressources soit endommag par l'opration. ATTENTION : Un fichier de ressources peut contenir jusqu' 2 700 ressources individuelles. Prenez garde ne pas de dpasser cette limite (aucune mise en garde ne vous est adresse, mais le fichier de ressources devient endommag et inutilisable). Nom et numro de ressource
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Toute ressource a un nom de ressource. Un nom de ressource peut contenir jusqu' 255 caractres, tient compte des caractres diacritiques mais n'tablit pas de distinction entre les majuscules et les minuscules. Les noms des ressources peuvent tre utiles pour leur identification visuelle, mais gnralement vous accderez une ressource par l'intermdiaire de son numro. Les noms des ressources ne sont pas uniques, plusieurs ressources peuvent avoir le mme nom. Toute ressource a un numro d'identification (on dit aussi numro d'ID ou ID). Ce numro d'ID est unique l'intrieur d'un type et d'un fichier de ressources. Par exemple : Un fichier de ressource peut contenir une ressource "ABCD" ID=1 et une ressource "EFGH" ID=1. Deux fichiers de ressources peuvent contenir une ressource de mme type et de mme numro. Lorsque vous accdez une ressource par l'intermdiaire d'une commande 4D, vous indiquez son type et son numro. Si vous ne spcifiez pas le fichier de ressources dans lequel vous souhaitez la rechercher, la commande retournera l'occurrence de la ressource trouve dans le premier fichier de ressource examin. Rappelez-vous que les fichiers de ressources sont examins dans l'ordre inverse de celui dans lequel ils ont t ouverts. Les numros de ressources sont compris entre 32 768 et 32 767. Important : N'utilisez pas de numros de ressources ngatifs, ils sont rservs au Systme d'exploitation. N'utilisez pas non plus de numros situs entre 0 et 14 999, cet intervalle est rserv 4e Dimension. Pour vos propres ressources, utilisez les numros situs entre 15 000 et 32 767.

4e Dimension - Langage 1441

Pour obtenir les numros et les noms de ressources d'un type particulier, utilisez la commande LISTE RESSOURCES. Pour obtenir le nom d'une ressource individuelle, utilisez la commande Lire nom ressource. Pour changer le nom d'une ressource individuelle, utilisez la commande ECRIRE NOM RESSOURCE. Pour obtenir le numro courant d'une ressource PICT ou STR# installe par un composant 4D, utilisez la commande Lire ID ressource composant. Comme chaque commande 4D accepte de manire optionnelle un numro de rfrence de fichier de ressources, vous pouvez facilement manipuler des ressources ayant le mme type et le mme numro mais situes dans deux fichiers de ressources diffrents. L'exemple suivant copie toutes les ressources "PICT" d'un fichier de ressources dans un autre : ` Ouverture d'un fichier de ressources existant $vhResFileA:=Ouvrir fichier ressources("") Si (OK=1) ` Cration d'un nouveau fichier de ressources $vhResFileB:=Creer fichier ressources("") Si (OK=1) ` Rcuprer la liste des numros et des noms de toutes les ressources de type ` "PICT" situes dans le fichier de ressources A LISTE RESSOURCES("PICT";$aiResID;$asResName;$vhResFileA) ` Pour chaque ressource : Boucle($vlElem;1;Taille tableau($aiResID)) $viResID:=$aiResID{$vlElem} ` Charger la ressource du fichier A LIRE RESSOURCE ("PICT";$viResID;vxResData;$vhResFileA) ` Si la ressource peut tre charge Si (OK=1) ` Ecrire la ressource dans le fichier B ECRIRE RESSOURCE ("PICT";$viResID;vxResData;$vhResFileB) ` Si la ressource peut tre crite Si (OK=1) ` Copie galement du nom de la ressource... ECRIRE NOM RESSOURCE("PICT;$viResID;$asResName{$vlElem} ;$vhResFileB) ` ...Ainsi que ses proprits (cf. ci-dessous) $vlResAttr:=Lire proprietes ressource("PICT";$viResID;$vhResFileA) ECRIRE PROPRIETES RESSOURCE("PICT";$viResID;$vlResAttr; $vhResFileB) Sinon ALERTE("La ressource PICT ID="+Chaine($viResID)+" ne peut pas tre cre.") Fin de si Sinon ALERTE("La ressource PICT ID="+Chaine($viResID)+" ne peut pas tre charge.") Fin de si 1442 4e Dimension - Langage

Fin de boucle FERMER FICHIER RESSOURCES($vhResFileB) Fin de si FERMER FICHIER RESSOURCES($vhResFileA) Fin de si Proprits des ressources
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

En plus de son type, de son nom et de son numro, une ressource possde des proprits supplmentaires (aussi appeles attributs). Par exemple, une ressource peut tre purgeable ou non. Cet attribut indique au Systme d'exploitation si, une fois la ressource charge en mmoire, il peut ou non la purger (c'est--dire l'effacer) en cas de besoin de mmoire supplmentaire. Comme le montre l'exemple prcdent, il peut tre important lors de la copie ou de la cration d'une ressource de ne pas copier uniquement la ressource, mais galement son nom et ses proprits. Pour plus d'informations sur les proprits des ressources, reportez-vous aux descriptions des commandes Lire proprietes ressource et ECRIRE PROPRIETES RESSOURCE. Manipuler le contenu des ressources
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Pour charger en mmoire tout type de ressource, utilisez la commande LIRE RESSOURCE, qui retourne le contenu de la ressource dans un BLOB. Pour crer ou rcrire une ressource sur disque, appelez la commande ECRIRE RESSOURCE, qui utilise le contenu du BLOB que vous passez en paramtre pour crire le contenu de la ressource. Pour supprimer une ressource existante, utilisez la commande SUPPRIMER RESSOURCE. Pour simplifier la manipulation des ressources, 4D dispose de commandes intgres supplmentaires ddies la gestion des ressources de type standard. Ces commandes vous vitent de devoir analyser des BLOBs pour pouvoir en extraire le contenu des ressources qui vous intressent : LISTE DE CHAINES VERS TABLEAU remplit un tableau Alpha ou Texte avec les chanes de caractres contenues dans une ressource liste de chanes. TABLEAU VERS LISTE DE CHAINES cre ou rcrit une ressource liste de chanes avec les lments d'un tableau Alpha ou Texte. Lire chaine dans liste retourne une chane particulire d'une ressource liste de chanes. Lire ressource chaine retourne la chane d'une ressource chane. ECRIRE RESSOURCE CHAINE cre ou rcrit une ressource chane. Lire ressource texte retourne le texte d'une ressource texte. ECRIRE RESSOURCE TEXTE cre ou rcrit une ressource texte. LIRE RESSOURCE IMAGE retourne l'image d'une ressource image. ECRIRE RESSOURCE IMAGE cre ou rcrit une ressource image. LIRE RESSOURCE ICONE retourne une icne couleur en tant qu'image.

4e Dimension - Langage 1443

Notez que ces commandes sont fournies afin de simplifier l'emploi des ressources de type standard, mais vous pouvez parfaitement utiliser LIRE RESSOURCE et ECRIRE RESSOURCE avec des BLOBs. Par exemple, la ligne de code suivante : ALERTE(Lire ressource texte(20000)) est quivalente (en plus court) : LIRE RESSOURCE("TEXT";20000;vxData) Si (OK=1) $vlOffset:=0 ALERTE(BLOB vers texte(vxData;Texte sans longueur;$vlOffset; Taille BLOB(vxData))) Fin de si Les commandes 4D et les ressources
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Outre les commandes de gestion des ressources dcrites dans ce chapitre, plusieurs commandes 4D vous permettent de travailler avec des fichiers de ressources : Sur Macintosh, DOCUMENT VERS BLOB et BLOB VERS DOCUMENT peuvent charger et crire la totalit de la resource fork d'un fichier Macintosh. A l'aide des commandes CHANGER PROPRIETES ELEMENT et CHANGER PROPRIETES LISTE, vous pouvez associer des ressources images ou icnes couleur aux lments d'une liste, ou encore utiliser des ressources icnes couleur en tant qu'icnes des lments parents d'une liste hirarchique (dploys/contracts). La commande JOUER SON joue des ressources "snd " (sous MacOS et Windows). La commande CHANGER POINTEUR SOURIS peut utiliser des ressources "CURS" pour modifier l'apparence du pointeur de la souris. Rfrence Commandes du thme BLOB, Erreurs du gestionnaire de ressources du systme, Les ressources et 4D Insider : un exemple, Lire ID ressource composant.

1444 4e Dimension - Langage

Les ressources et 4D Insider : un exemple

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les ressources sont un moyen trs pratique de traiter les questions de localisation lies au dveloppement et la maintenance de bases 4D destines au march international, et devant tre disponibles en plusieurs langues. Nous allons examiner un exemple. L'cran suivant montre la barre de menus personnalise d'une base en franais :

Le libell du menu Fichier rfrence dj une ressource, mais pas la ligne Quitter. Le menu Exemples se compose des lignes Listes hirarchiques et Menus images. Ni le libell du menu ni ses lignes ne rfrencent de ressources. A l'aide de 4D Insider, vous pouvez transformer les libells de la barre de menus en rfrences des chanes de caractres stockes dans des ressources STR#. Nous allons voir comment raliser cette opration. Note : 4D Insider est l'outil de gestion des rfrences croises et des librairies d'objets de 4D. Il est compris dans l'offre 4D Desktop.

4e Dimension - Langage 1445

Ouvrez la base de donnes avec 4D Insider. L'cran suivant prsente la barre de menus dans la fentre de navigation de 4D Insider :

Vous pouvez alors convertir les libells de la barre de menus afin qu'ils rfrencent une ressource STR#. Pour cela, choisissez la commande Texte vers STR# dans le menu Outils de 4D Insider :

La bote de dialogue Texte vers ressource STR# apparat.

1446 4e Dimension - Langage

Saisissez, par exemple, Menu Exemples et 20000 comme nom et numro de ressource :

Cliquez sur le bouton Crer, puis sur OK. Slectionnez Ressources STR# dans le pop up menu de la liste Base de la fentre de navigation :

4e Dimension - Langage 1447

Double-cliquez sur la STR# Menu Exemples afin d'afficher son contenu :

Maintenant que ces chanes sont stockes dans une ressource, vous pouvez les modifier sans perturber la logique de dveloppement de votre base. Pour cela, assurez-vous que l'lment Menu Exemples est bien slectionn dans la liste Base, puis choisissez la commande Modifier la STR# dans le menu Outils de 4D Insider :

1448 4e Dimension - Langage

L'diteur de ressources STR# de 4D Insider apparat :

Traduisez les chanes de caractres dans une autre langue, par exemple en anglais :

Une fois que vous avez termin la traduction, fermez la fentre. Cliquez sur Oui dans la bote de dialogue de confirmation :

4e Dimension - Langage 1449

Quittez ensuite 4D Insider et rouvrez la base avec 4e Dimension. L'diteur de barres de menus de 4D (en mode Structure) affiche dsormais la barre n1 avec les rfrences aux ressources en anglais :

Pour plus d'informations sur cette opration, reportez-vous la documentation 4D Insider, si vous avez souscrit l'offre 4D Desktop. Plus gnralement, pour plus d'informations sur l'utilisation de rfrences des ressources dans les barres de menus ainsi que dans les objets des formulaires de vos bases 4D, reportez-vous au manuel Mode Structure de 4e Dimension. Les commandes 4D du thme Ressources peuvent exploiter les ressources cres par 4D Insider. La mthode prsente ci-dessous utilise la commande LISTE DE CHAINES VERS TABLEAU pour charger dans un tableau la ressource STR# resource cre l'aide de 4D Insider :

1450 4e Dimension - Langage

Dans la fentre du dbogueur, vous pouvez constater que le tableau est rempli avec les chanes traduites dans 4D Insider :

Rfrence Ressources.

4e Dimension - Langage 1451

Ouvrir fichier ressources

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ouvrir fichier ressources (resNomFichier{; typeFichier}) DocRef Paramtre resNomFichier typeFichier Type Alpha Alpha Description Nom ou chemin d'accs complet du fichier de ressources ou chane vide pour afficher la bote de dialogue standard d'ouverture de fichiers Type de fichier MacOS (chane de 4 caractres), ou extension de fichier Windows (chane de 1 3 caractres), ou fichier de ressources ("res " / .RES) si omis Numro de rfrence du fichier de ressources

Rsultat

DocRef

Description La commande Ouvrir fichier ressources ouvre le fichier de ressources dont vous avez pass le nom ou le chemin d'accs complet dans le paramtre resNomFichier. Si vous passez un nom de fichier, celui-ci doit se trouver dans le mme dossier/rpertoire que le fichier de structure de la base. Pour ouvrir un fichier de ressources se trouvant dans un autre dossier, passez un chemin d'accs complet dans resNomFichier. Si vous passez une chane vide dans resNomFichier, la bote de dialogue standard d'ouverture de fichiers apparat, permettant l'utilisateur de slectionner le fichier ouvrir. Si l'utilisateur clique sur Annuler dans cette bote de dialogue, aucun fichier de ressources n'est ouvert, Ouvrir fichier ressources retourne une valeur nulle dans RefDoc et la variable OK prend la valeur 0. Si le fichier de ressources est correctement ouvert, Ouvrir fichier ressources retourne son numro de rfrence de fichier et met la variable OK 1. Si le fichier de ressources n'existe pas ou si le fichier de que vous tentez d'ouvrir n'est pas un fichier de ressources, une erreur est gnre. Sous MacOS, si vous utilisez la bote de dialogue standard d'ouverture de fichiers, tous les fichiers sont prsents par dfaut. Pour ne faire apparatre que les fichiers d'un type particulier, spcifiez-le dans le paramtre optionnel typeFichier. Sous Windows, si vous utilisez la bote de dialogue standard d'ouverture de fichiers, tous les fichiers sont prsents par dfaut. Pour ne faire apparatre que les fichiers d'un type particulier, passez dans typeFichier une extension de fichier Windows de 1 3 caractres ou un type de fichier Macintosh associ une extension Windows l'aide de la commande ASSOCIER TYPES FICHIER.

1452 4e Dimension - Langage

N'oubliez pas d'appeler finalement FERMER FICHIER RESSOURCES pour le fichier de ressources. Notez cependant que 4D referme automatiquement tous les fichiers de ressources ouverts par l'intermdiaire de Ouvrir fichier ressources ou Creer fichier ressources lorsque vous quittez l'application ou ouvrez une autre base de donnes. A la diffrence de la commande Ouvrir document qui ouvre un document (la data fork sous MacOS) avec un accs exclusif en lecture-criture, Ouvrir fichier ressources vous permet d'ouvrir un fichier de ressources dj ouvert dans la session 4D. Par exemple, lorsque vous tentez d'ouvrir deux fois le mme document avec Ouvrir document, une erreur d'E/S vous est retourne lors de la seconde opration. En revanche, vous pouvez accder un fichier de ressources dj ouvert lors de la session 4D : Ouvrir fichier ressources retourne son numro de rfrence. Mme lorsque vous ouvrez plusieurs fois un fichier de ressources, il vous suffit d'appeler FERMER FICHIER RESSOURCES une seule fois pour refermer ce fichier. Notez que ce fonctionnement n'est valable que lorsque le fichier de ressources est ouvert l'intrieur de la session 4D. Si vous tentez d'ouvrir un fichier de ressources dj ouvert par une autre application, une erreur d'E/S vous sera retourne. Grce ces possibilits d'ouvertures multiples, vous pouvez facilement obtenir les numros de rfrence des fichiers de ressources de la base ou de l'application 4D sans interfrer avec le droulement normal des oprations dans 4D (cf. exemples 5 et 6). ATTENTION Soyez trs prudent si vous accdez au fichier de ressources de l'application 4D. Ne modifiez en aucun cas ces ressources, vous pourriez par inadvertance endommager le programme et provoquer des erreurs systme. Rappelez-vous galement que votre base peut tre utilise dans des environnements diffrents (4D, 4D Runtime, 4D Server et 4D Client). Si vous accdez au fichier de ressources de la base et souhaitez ajouter, supprimer ou modifier des ressources par programmation, pensez tester l'environnement dans lequel la base s'excute. Avec 4D Server, cela posera certainement d'pineux problmes. Si, par exemple, vous modifiez une ressource sur le poste serveur (via une mthode base ou une procdure stocke), vous allez en dfinitive perturber le systme d'administration de 4D Server charg de distribuer de manire transparente les ressources aux postes clients. Notez qu'avec 4D Client vous n'accdez pas directement au fichier de structure : il est situ sur le poste serveur. Pour toutes ces raisons, si vous exploitez des ressources, nous vous conseillons de les stocker dans vos propres fichiers. Lorsque vous travaillez avec vos propres ressources, n'utilisez pas de numros de ressources ngatifs, ils sont rservs au Systme d'exploitation. N'utilisez pas non plus de numros situs entre 0 et 14 999, cet intervalle est rserv 4e Dimension. Pour vos propres ressources, utilisez les numros situs entre 15 000 et 32 767. Rappelez-vous que ds qu'un fichier de ressources est ouvert, il devient le premier maillon de la chane des fichiers de ressources, et c'est dans ce fichier que les ressources seront recherches en premier lieu. En consquence, si vous stockez dans ce fichier des ressources dont les numros appartiennent aux intervalles rservs au Systme ou 4D, ces ressources seront utilises non seulement par les commandes telles que LIRE RESSOURCE mais galement par les routines internes de l'application 4D elle-mme. Si vous n'tes pas absolument certain de ce que vous faites, n'utilisez pas les intervalles rservs, cela peut conduire des erreurs systme.

4e Dimension - Langage 1453

Un fichier de ressources est trs structur et ne peut contenir plus 2 700 ressources. Si vous travaillez avec des fichiers comportant un grand nombre de ressources, il est conseill de tester ce nombre avant d'ajouter de nouvelles ressources un fichier (reportez-vous l'exemple Nombre de ressources dans la description de la commande LISTE TYPES RESSOURCE). Une fois que vous avez ouvert un fichier de ressources, vous pouvez analyser son contenu l'aide des commandes LISTE TYPES RESSOURCE et LISTE RESSOURCES. Exemples (1) Dans l'exemple suivant, nous cherchons ouvrir sous Windows le fichier de ressources "MesPrefs.res" situ dans le dossier de la base :

$vhResFile:=Ouvrir fichier ressources("MesPrefs";"res ")

Sous MacOS, l'exemple recherchera le fichier MesPrefs. (2) Cet exemple tente d'ouvrir sous Windows le fichier de ressources "MesPrefs.rsr" situ dans le dossier de la base :

$vhResFile:=Ouvrir fichier ressources("MesPrefs";"rsr")

Sous MacOS, l'exemple recherchera le fichier MesPrefs. (3) L'exemple suivant fait apparatre la bote de dialogue standard d'ouverture de fichiers, dans laquelle tous les types de documents sont affichs :

$vhResFile:=Ouvrir fichier ressources("")

(4) L'exemple suivant fait apparatre la bote de dialogue standard d'ouverture de fichiers, dans laquelle seuls les documents crs l'aide de la fonction Creer fichier ressources et utilisant le type par dfaut sont affichs :

$vhResFile:=Ouvrir fichier ressources("";"res ") Si (OK=1) ALERTE("Vous venez d'ouvrir "+Document+".") FERMER FICHIER RESSOURCES($vhResFile) Fin de si

(5) L'exemple suivant retourne dans $vhStructureResFile le numro de rfrence du fichier de ressources de la structure de la base :

Si (Sous Windows) $vhStructureResFile:=Ouvrir fichier ressources(Remplacer chaine(Fichier structure;".4DB";".RSR")) Sinon $vhStructureResFile:=Ouvrir fichier ressources(Fichier structure) Fin de si

1454 4e Dimension - Langage

(6) L'exemple suivant retourne dans $vhApplResFile le numro de rfrence du fichier de ressources de l'application 4D :

Si (Sous Windows) $vhApplResFile:=Ouvrir fichier ressources(Remplacer chaine(Fichier application;".EXE";".RSR")) Sinon $vhApplResFile:=Ouvrir fichier ressources(Fichier application) Fin de si

Rfrence Creer fichier ressources, FERMER FICHIER RESSOURCES, Ressources. Variables et ensembles systme Si le fichier de ressources est correctement ouvert, la variable systme OK prend la valeur 1. Si le fichier de ressources n'a pas pu tre ouvert ou si l'utilisateur a cliqu sur le bouton Annuler dans la bote de dialogue standard d'ouverture de fichiers, la variable OK prend la valeur 0 (zro). Si le fichier de ressources est correctement ouvert par l'intermdiaire de la bote de dialogue standard d'ouverture de fichiers, la variable systme Document contient le chemin d'accs au fichier. Gestion des erreurs Si le fichier de ressources n'a pas pu tre ouvert la suite d'un problme de ressource ou d'E/S, une erreur est gnre. Vous pouvez intercepter cette erreur l'aide d'une mthode de gestion d'erreurs installe par la commande APPELER SUR ERREUR.

4e Dimension - Langage 1455

Creer fichier ressources

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Creer fichier ressources (resNomFichier{; typeFichier}) DocRef Paramtre resNomFichier Type Alpha Description Nom ou chemin d'accs complet du fichier de ressources ou chane vide pour afficher la bote de dialogue standard d'enregistrement de fichiers Type de fichier MacOS (chane de 4 caractres), ou extension de fichier Windows (chane de 1 3 caractres), ou fichier de ressources ("res " / .RES) si omis Numro de rfrence du fichier de ressources

typeFichier

Alpha

Rsultat

DocRef

Description La commande Creer fichier ressources cre et ouvre un nouveau fichier de ressources partir du nom ou du chemin d'accs complet que vous avez pass dans resNomFichier. Si vous passez un nom de fichier, celui-ci sera plac dans le mme dossier que le fichier de structure de la base. Passez un chemin d'accs complet pour crer un fichier de ressources dans un autre dossier. Si le fichier existe dj et n'est pas ouvert, Creer fichier ressources le remplace par le nouveau fichier de ressources vide. Si le fichier existant est ouvert, une erreur d'E/S est retourne. Si vous passez une chane vide dans resNomFichier, la bote de dialogue standard d'enregistrement de fichiers apparat, permettant l'utilisateur de choisir le nom et l'emplacement du fichier de ressources crer. Si l'utilisateur clique sur le bouton Annuler dans la bote de dialogue, aucun fichier de ressources n'est cr, Creer fichier ressources retourne une valeur nulle dans DocRef et la variable systme OK prend la valeur 0. Si le fichier de ressources est correctement cr et ouvert, Creer fichier ressources retourne son numro de rfrence de fichier de ressources et la variable OK prend la valeur 1. Si le fichier de ressources ne peut pas tre cr, une erreur est gnre. Sous MacOS, le type par dfaut d'un fichier cr avec Creer fichier ressources est "res ". Sous Windows, l'extension de fichier par dfaut est ".res". Si vous voulez crer un fichier d'un autre type : Sous MacOS, passez le type du fichier dans le paramtre optionnel typeFichier. Sous Windows, passez dans typeFichier une extension Windows de 1 3 caractres ou un type de fichier Macintosh associ l'aide de la commande ASSOCIER TYPES FICHIER.

1456 4e Dimension - Langage

N'oubliez pas d'appeler finalement FERMER FICHIER RESSOURCES pour le fichier de ressources. Notez cependant que 4D referme automatiquement tous les fichiers de ressources ouverts par l'intermdiaire de Creer fichier ressources ou Ouvrir fichier ressources lorsque vous quittez l'application ou ouvrez une autre base de donnes. Exemples (1) L'exemple suivant cre et ouvre sous Windows le fichier de ressources "MesPrefs.res" dans le dossier de la base :

$vhResFile:=Creer fichier ressources("MesPrefs")

Sous MacOS, l'exemple cre et ouvre le fichier MesPrefs. (2) L'exemple suivant cre et ouvre sous Windows le fichier de ressources "MesPrefs.rsr" dans le dossier de la base :

$vhResFile:=Creer fichier ressources("MesPrefs";"rsr")

Sous MacOS, l'exemple cre et ouvre le fichier MesPrefs. (3) L'exemple suivant affiche la bote de dialogue standard d'enregistrement de fichiers :

$vhResFile:=Creer fichier ressources("") Si (OK=1) ALERTE("Vous venez de crer "+Document+".") FERMER FICHIER RESSOURCES($vhResFile) Fin de si

Rfrence APPELER SUR ERREUR, FERMER FICHIER RESSOURCES, Ouvrir fichier ressources, Ressources. Variables et ensembles systme Si le fichier de ressources est correctement cr et ouvert, la variable systme OK prend la valeur 1. Si le fichier de ressources n'a pas pu tre ouvert ou si l'utilisateur a cliqu sur le bouton Annuler dans la bote de dialogue standard d'enregistrement de fichiers, la variable OK prend la valeur 0 (zro). Si le fichier de ressources est correctement cr et ouvert par l'intermdiaire de la bote de dialogue standard d'enregistrement de fichiers, la variable systme Document contient le chemin d'accs au fichier. Gestion des erreurs Si le fichier de ressources n'a pas pu tre cr ou ouvert la suite d'un problme de ressource ou d'E/S, une erreur est gnre. Vous pouvez intercepter cette erreur l'aide d'une mthode de gestion d'erreurs installe par la commande APPELER SUR ERREUR.

4e Dimension - Langage 1457

FERMER FICHIER RESSOURCES

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FERMER FICHIER RESSOURCES (resFichier) Paramtre resFichier Type DocRef Description Numro de rfrence de fichier de ressources

Description La commande FERMER FICHIER RESSOURCES referme le fichier de ressources dont vous avez pass le numro de rfrence dans resFichier. Mme si vous avez ouvert plusieurs fois un fichier de ressources, il vous suffit d'appeler FERMER FICHIER RESSOURCES une seule fois pour le refermer. Si vous appliquez FERMER FICHIER RESSOURCES au fichier de ressources de l'application 4D ou de la base, la commande le dtecte et ne fait rien. Si vous passez un numro de rfrence de fichier de ressources non valide, la commande ne fait rien. N'oubliez pas d'appeler finalement FERMER FICHIER RESSOURCES pour un fichier de ressources que vous avez ouvert l'aide des commandes Ouvrir fichier ressources ou Creer fichier ressources. Notez cependant que 4D referme automatiquement tous les fichiers de ressources ouverts lorsque vous quittez l'application ou ouvrez une autre base de donnes. Exemple L'exemple suivant cre un fichier de ressources, ajoute une ressource de type chane puis referme le fichier : $vhDocRef:=Creer fichier ressources("Un simple fichier") Si (OK=1) ECRIRE RESSOURCE CHAINE(20000;"Une simple chane";$vhDocRef) FERMER FICHIER RESSOURCES($vhDocRef) Fin de si

Rfrence Creer fichier ressources, Ouvrir fichier ressources. Variable et ensembles systme Aucun(e) n'est affect(e).

1458 4e Dimension - Langage

LISTE TYPES RESSOURCE

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LISTE TYPES RESSOURCE (resTypes{; resFichier}) Paramtre resTypes resFichier Type Tableau alpha DocRef Description Liste des types de ressources disponibles Numro de rfrence de fichier de ressources ou tous les fichiers de ressources ouverts (si ce paramtre est omis)

Description La commande LISTE TYPES RESSOURCE remplit le tableau resTypes avec les types des ressources prsentes dans le(s) fichier(s) de resources ouvert(s). Si vous passez un numro de rfrence de fichier de ressources valide dans le paramtre optionnel resFichier, seules les ressources prsentes dans ce fichier seront listes. Si vous ne passez pas le paramtre resFichier, toutes les ressources de tous les fichiers de ressources ouverts seront listes. Si vous ne pr-dclarez pas le tableau resTypes avant d'appeler LISTE TYPES RESSOURCE, la commande crera par dfaut un tableau de type Texte. Si vous pr-dclarez le tableau, vous pouvez lui attribuer le type Alpha ou Texte. Aprs l'appel, vous pouvez tester le nombre de types de ressources diffrents qui ont t trouvs en appliquant la commande Taille tableau au tableau resTypes. Exemples (1) L'exemple suivant remplit le tableau atResType avec les types de ressources prsents dans tous les fichiers de ressource ouverts :

LISTE TYPES RESSOURCE(atResType)

(2) L'exemple suivant vous indique si le fichier de structure MacOS que vous utilisez contient des plug-ins 4D "ancien modle", qui devront tre mis jour si vous voulez exploiter la base sous Windows :

$vhResFile:=Ouvrir fichier ressources(Fichier structure) LISTE TYPES RESSOURCE(atResType;$vhResFile) Si (Chercher dans tableau(atResType;"4DEX")>0) ALERTE("Cette base contient des plug-ins 4D bass sur l'ancien systme."+ (Caractere(13)*2)+"Vous devrez les mettre jour pour pouvoir utiliser la base sous Windows.") Fin de si

4e Dimension - Langage 1459

Note : Le fichier de structure n'est pas le seul fichier dans lequel des plug-ins "ancien modle" ont pu tre installs. La base peut galement tre associe un fichier "Routines Externes" ou "Proc.Ext". (3) La mthode projet suivante retourne le nombre de ressources prsentes dans un fichier de ressources : ` Mthode projet Compter ressources ` Compter ressources ( Heure ) -> Entier long ` Compter ressources ( DocRef ) -> Nombre de ressources C_ENTIER LONG($0) C_HEURE($1)

$0:=0 LISTE TYPES RESSOURCE($atResType;$1) Boucle ($vlElem;1;Taille tableau($atResType)) LISTE RESSOURCES($atResType{$vlElem};$alResID;$atResName;$1) $0:=$0+Taille tableau($alResID) Fin de boucle

Une fois que cette mthode est implmente dans votre base, vous pouvez crire par exemple : $vhResFile:=Ouvrir fichier ressources("") Si (OK=1) ALERTE("Le fichier "+Document+" contient "+Chaine(Compter ressources ($vhResFile))+" ressource(s).") FERMER FICHIER RESSOURCES($vhResFile) Fin de si Rfrence LISTE RESSOURCES.

1460 4e Dimension - Langage

LISTE RESSOURCES

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LISTE RESSOURCES (resType; resNums; resNoms{; resFichier}) Paramtre resType resNums resNoms resFichier Type Alpha Tableau E. long Tableau alpha DocRef Description Type de ressource (4 caractres) Numros des ressources de ce type Noms des ressources de ce type Numro de rfrence de fichier de ressources ou tous les fichiers de ressources ouverts si ce paramtre est omis

Description La commande LISTE RESSOURCES remplit les tableaux resNums et resNoms avec les numros et les noms des ressources dont vous avez pass le type dans resType. Important : Vous devez passez dans resType une chane de 4 caractres. Si vous passez un numro de rfrence de fichier de ressources valide dans le paramtre optionnel resFichier, seules les ressources prsentes dans ce fichier seront listes. Si vous ne passez pas le paramtre resFichier, toutes les ressources de tous les fichiers de ressources ouverts seront listes. Si vous ne pr-dclarez pas les tableaux resNums et resNoms avant d'appeler LISTE RESSOURCES, la commande crera par dfaut le tableau resNums avec le type Entier long et resNoms avec le type Texte. Si vous pr-dclarez les tableaux, vous devez attribuer le type Entier long resNums, mais pouvez attribuer le type Alpha ou Texte resNoms. Aprs l'appel, vous pouvez tester le nombre de ressources qui ont t trouves en appliquant la commande Taille tableau au tableau resNums ou resNoms. Exemples (1) L'exemple suivant remplit les tableaux $alResNum et $atResNom avec les numros et les noms des ressources de type Listes de chanes prsentes dans le fichier de structure de la base : Si (Sous Windows) $vhStructureResFile:=Ouvrir fichier ressources(Remplacer chaine(Fichier structure;".4DB";".RSR")) Sinon $vhStructureResFile:=Ouvrir fichier ressources(Fichier structure) Fin de si Si (OK=1) LISTE RESSOURCES("STR#";$alResNum;$atResNom;$vhStructureResFile) Fin de si 4e Dimension - Langage 1461

(2) L'exemple suivant copie dans la bibliothque d'images de la base les ressources image prsentes dans tous les fichiers de ressources ouverts :

LISTE RESSOURCES("PICT";$alResNum;$atResNom) Creer fenetre(50;50;550;120;5;"Copie des ressources PICT...") Boucle ($vlElem;1;Taille tableau($alResNum)) LIRE RESSOURCE IMAGE($alResNum{$vlElem};$vgImage) Si (OK=1) $vsNom:=$atResNom{$vlElem} Si ($vsNom="") $vsNom:="PICT resID="+Chaine($alResNum{$vlElem}) Fin de si EFFACER FENETRE POSITION MESSAGE(2;1) MESSAGE("Ajout de l'image "+$vsNom+" la bibliothque d'images de la base.") ECRIRE IMAGE DANS BIBLIOTHEQUE($vgImage;$alResNum{$vlElem};$vsNom) Fin de si Fin de boucle FERMER FENETRE

Rfrence LISTE TYPES RESSOURCE.

1462 4e Dimension - Langage

LISTE DE CHAINES VERS TABLEAU

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LISTE DE CHAINES VERS TABLEAU (resNum; chanes{; resFichier}) Paramtre resNum chanes resFichier Type Description Numrique Numro de ressource Tableau alpha Tableau texte ou alpha devant recevoir les chanes Chanes de la ressource STR# DocRef Numro de rfrence de fichier de ressources ou tous les fichiers de ressources ouverts si ce paramtre est omis

Description La commande LISTE DE CHAINES VERS TABLEAU remplit le tableau chanes avec les chanes stockes dans la ressource de type liste de chanes ("STR#") dont vous avez pass le numro d'ID dans resNum. Si la ressource n'est pas trouve, le tableau chanes reste inchang et la variable systme OK prend la valeur 0 (zro). Si vous passez un numro de rfrence de fichier de ressources valide dans resFichier, la ressource est recherche dans ce fichier uniquement. Si vous ne passez pas le paramtre resFichier, c'est la premire occurrence de la ressource rencontre dans la chane des fichiers de ressources qui sera retourne. Si vous ne pr-dclarez pas le tableau chanes avant d'appeler LISTE DE CHAINES VERS TABLEAU, la commande cre un tableau de type Texte. Si vous pr-dclarez le tableau, vous pouvez lui assigner le type Alpha ou Texte. Note : Chaque chane d'une ressource liste de chanes peut contenir jusqu' 255 caractres. Conseil : Lorsque vous utilisez des ressources listes de chanes, limitez-vous des ressources de 32 Ko maximum et quelques centaines de chanes par ressource. Exemple Reportez-vous l'exemple de la commande TABLEAU VERS LISTE DE CHAINES. Rfrence Lire chaine dans liste, Lire ressource chaine, Lire ressource texte, TABLEAU VERS LISTE DE CHAINES. Variables et ensembles systme La variable systme OK prend la valeur 1 si la ressource est trouve, sinon elle prend la valeur 0 (zro). 4e Dimension - Langage 1463

TABLEAU VERS LISTE DE CHAINES

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLEAU VERS LISTE DE CHAINES (chanes; resNum{; resFichier}) Paramtre chanes resNum resFichier Type Tableau alpha Numrique DocRef Description Tableau alpha ou texte (nouveau contenu de la ressource STR#) Numro de ressource Numro de rfrence de fichier de ressources ou fichier de ressources courant si ce paramtre est omis

Description La commande TABLEAU VERS LISTE DE CHAINES cre ou rcrit la ressource liste de chanes ("STR#") dont vous avez pass le numro dans resNum. Le contenu de la ressource est cr partir des chanes de caractres que vous avez passes dans le tableau chanes. Le tableau peut tre de type Alpha ou Texte. Si la ressource ne peut tre ajoute, la variable systme OK prend la valeur 0 (zro). Si vous passez un numro de rfrence de fichier de ressources valide dans resFichier, la ressource est ajoute dans ce fichier. Si vous ne passez pas le paramtre resFichier, la ressource est ajoute au premier des fichiers de la chane des fichiers de ressources (c'est-dire le dernier fichier de ressources ouvert). Note : Chaque chane d'une ressource liste de chanes peut contenir jusqu' 255 caractres. Conseil : Lorsque vous utilisez des ressources listes de chanes, limitez-vous des ressources de 32 Ko maximum et quelques centaines de chanes par ressource. Exemple Votre base s'appuie sur un mme ensemble de polices. Dans la Mthode base Sur fermeture, vous pouvez crire : ` Mthode base Sur fermeture Si (<>vbPolicesOK) LISTE DES POLICES($atFont) $vhResFile:=Ouvrir fichier ressources("EnsemblePolices") Si (OK=1) TABLEAU VERS LISTE DE CHAINES($atFont;15000;$vhResFile) FERMER FICHIER RESSOURCES($vhResFile) Fin de si Fin de si

1464 4e Dimension - Langage

Dans la Mthode base Sur ouverture, vous pouvez crire : ` Mthode base Sur ouverture <>vbPolicesOK:=Faux LISTE DES POLICES($atNewFont) Si (Tester chemin acces("EnsemblePolices")#Est un document) $vhResFile:=Creer fichier ressources("EnsemblePolices") Sinon $vhResFile:=Ouvrir fichier ressources("EnsemblePolices") Fin de si Si (OK=1) LISTE DE CHAINES VERS TABLEAU(15000;$atOldFont;$vhResFile) Si (OK=1) <>vbFontsAreOK:=Vrai Boucle($vlElem;1;Taille tableau($atNewFont)) Si ($atNewFont{$vlElem}#$atOldFont{$vlElem})) $vlElem:=MAXLONG <>vbPolicesOK:=Faux Fin de si Fin de boucle Sinon <>vbPolicesOK:=Vrai Fin de si FERMER FICHIER RESSOURCES($vhResFile) Fin de si Si(Non(<>vbPolicesOK)) CONFIRMER("Vous n'utilisez pas le mme ensemble de polices, OK?") Si(OK=1) <>vbPolicesOK:=Vrai Sinon QUITTER 4D Fin de si Fin de si Rfrence ECRIRE RESSOURCE CHAINE, ECRIRE RESSOURCE TEXTE, LISTE DE CHAINES VERS TABLEAU. Variables et ensembles systme La variable systme OK prend la valeur 1 si la ressource a t crite, sinon elle prend la valeur 0 (zro).

4e Dimension - Langage 1465

Lire chaine dans liste

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire chaine dans liste (resNum; strNum{; resFichier}) Alpha Paramtre resNum strNum resFichier Type Numrique Numrique DocRef Description Numro de ressource Numro de chane Numro de rfrence de fichier de ressources ou tous les fichiers de ressources ouverts si ce paramtre est omis Valeur de la chane indexe

Rsultat

Alpha

Description La commande Lire chaine dans liste retourne une des chanes stockes dans la ressource liste de chanes ("STR#") dont vous avez pass le numro d'ID dans resNum. Vous passez le numro de la chane dans strNum. Les chanes d'une ressource liste de chanes sont numrotes de 1 N. Pour rcuprer toutes les chanes (et donc leur nombre) d'une ressource liste de chanes, utilisez la commande LISTE DE CHAINES VERS TABLEAU. Si la ressource n'est pas trouve, ou si la chane n'est pas trouve l'intrieur de la ressource, une chane vide est retourne et la variable systme OK prend la valeur 0 (zro). Si vous passez un numro de rfrence de fichier de ressources valide dans resFichier, la ressource est recherche dans ce fichier uniquement. Si vous ne passez pas le paramtre resFichier, c'est la premire occurrence de la ressource rencontre dans la chane des fichiers de ressources qui sera retourne. Note : Chaque chane d'une ressource liste de chanes peut contenir jusqu' 255 caractres. Exemple Reportez-vous l'exemple de la commande Mois de. Rfrence Lire ressource chaine, Lire ressource texte, LISTE DE CHAINES VERS TABLEAU. Variables et ensembles systme OK prend la valeur 1 si la ressource est trouve, sinon elle prend la valeur 0 (zro).

1466 4e Dimension - Langage

Lire ressource chaine

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire ressource chaine (resNum{; resFichier}) Alpha Paramtre resNum resFichier Type Numrique DocRef Description Numro de ressource Numro de rfrence de fichier de ressources ou tous les fichiers de ressources ouverts si ce paramtre est omis Contenu de la ressource STR

Rsultat

Alpha

Description La commande Lire ressource chaine retourne la chane stocke dans la ressource chane ("STR ") dont vous avez pass le numro d'ID dans resNum. Si la ressource n'est pas trouve, une chane vide est retourne et la variable systme OK prend la valeur 0 (zro). Si vous passez un numro de rfrence de fichier de ressources valide dans resFichier, la ressource est recherche dans ce fichier uniquement. Si vous ne passez pas le paramtre resFichier, c'est la premire occurrence de la ressource rencontre dans la chane des fichiers de ressources qui sera retourne. Note : Une ressource chane peut contenir jusqu' 255 caractres. Exemple L'exemple suivant affiche le contenu de la ressource chane d'ID=20911 qui doit se trouver dans au moins un des fichiers de ressources ouverts :

ALERTE (Lire ressource chaine(20911))

Rfrence ECRIRE RESSOURCE CHAINE, Lire chaine dans liste, Lire ressource texte, LISTE DE CHAINES VERS TABLEAU. Variables et ensembles systme La variable systme OK prend la valeur 1 si la ressource est trouve, sinon elle prend la valeur 0 (zro).

4e Dimension - Langage 1467

ECRIRE RESSOURCE CHAINE

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRIRE RESSOURCE CHAINE (resNum; resDonnes{; resFichier}) Paramtre resNum resDonnes resFichier Type Numrique Alpha DocRef Description Numro de ressource Nouveau contenu de la ressource STR Numro de rfrence de fichier de ressources ou fichier de ressources courant si ce paramtre est omis

Description La commande ECRIRE RESSOURCE CHAINE cre ou rcrit la ressource chane ("STR ") dont vous avez pass le numro dans resNum avec la chane de caractres que vous avez passe dans resDonnes. Si la ressource ne peut tre ajoute, la variable systme OK prend la valeur 0 (zro). Si vous passez un numro de rfrence de fichier de ressources valide dans resFichier, la ressource est ajoute dans ce fichier. Si vous ne passez pas le paramtre resFichier, la ressource est ajoute au premier des fichiers de la chane des fichiers de ressources (c'est-dire le dernier fichier de ressources ouvert). Note : Une ressource chane peut contenir jusqu' 255 caractres. Rfrence ECRIRE RESSOURCE TEXTE, Lire ressource chaine. Variables et ensembles systme La variable systme OK prend la valeur 1 si la ressource a t crite, sinon elle prend la valeur 0 (zro).

1468 4e Dimension - Langage

Lire ressource texte

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire ressource texte (resNum{; resFichier}) Texte Paramtre resNum resFichier Type Numrique DocRef Description Numro de ressource Numro de rfrence de fichier de ressources ou tous les fichiers de ressources ouverts si ce paramtre est omis Contenu de la ressource TEXT

Rsultat

Texte

Description La commande Lire ressource texte retourne le texte stock dans la ressource texte ("TEXT") dont vous avez pass le numro d'ID dans resNum. Si la ressource n'est pas trouve, un texte vide est retourn et la variable systme OK prend la valeur 0 (zro). Si vous passez un numro de rfrence de fichier de ressources valide dans resFichier, la ressource est recherche dans ce fichier uniquement. Si vous ne passez pas le paramtre resFichier, c'est la premire occurrence de la ressource rencontre dans la chane des fichiers de ressources qui sera retourne. Note : Une ressource texte peut contenir jusqu' 32 000 caractres. Exemple L'exemple suivant affiche le contenu de la ressource texte d'ID=20800 qui doit se trouver dans au moins un des fichiers de ressources ouverts :

ALERTE (Lire ressource texte(20800))

Rfrence ECRIRE RESSOURCE TEXTE, Lire chaine dans liste, Lire ressource chaine, LISTE DE CHAINES VERS TABLEAU. Variables et ensembles systme OK prend la valeur 1 si la ressource est trouve, sinon elle prend la valeur 0 (zro).

4e Dimension - Langage 1469

ECRIRE RESSOURCE TEXTE

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRIRE RESSOURCE TEXTE (resNum; resDonnes{; resFichier}) Paramtre resNum resDonnes resFichier Type Numrique Alpha DocRef Description Numro de ressource Nouveau contenu de la ressource TEXT Numro de rfrence de fichier de ressources ou fichier de ressources courant si ce paramtre est omis

Description La commande ECRIRE RESSOURCE TEXTE cre ou rcrit la ressource texte ("TEXT") dont vous avez pass le numro dans resNum avec le texte ou la chane de caractres que vous avez passe dans resDonnes. Si la ressource ne peut tre ajoute, la variable systme OK prend la valeur 0 (zro). Si vous passez un numro de rfrence de fichier de ressources valide dans resFichier, la ressource est ajoute dans ce fichier. Si vous ne passez pas le paramtre resFichier, la ressource est ajoute au premier des fichiers de la chane des fichiers de ressources (c'est-dire le dernier fichier de ressources ouvert). Note : Une ressource texte peut contenir jusqu' 32 000 caractres. Rfrence ECRIRE RESSOURCE CHAINE, Lire ressource texte. Variables et ensembles systme La variable systme OK prend la valeur 1 si la ressource a t crite, sinon elle prend la valeur 0 (zro).

1470 4e Dimension - Langage

LIRE RESSOURCE IMAGE

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE RESSOURCE IMAGE (resNum; resDonnes{; resFichier}) Paramtre resNum resDonnes Type Numrique Champ | Variable Description Numro de ressource Champ ou variable image devant recevoir l'image Contenu de la ressource PICT Numro de rfrence de fichier de ressources ou tous les fichiers de ressources ouverts si ce paramtre est omis

resFichier

DocRef

Description La commande LIRE RESSOURCE IMAGE retourne dans le champ ou la variable image dsign(e) par resDonnes l'image stocke dans la ressource image ("PICT") dont vous pass le numro dans resNum. Si la ressource n'est pas trouve, resDonnes n'est pas modifi et la variable OK prend la valeur 0 (zro). Si vous passez un numro de rfrence de fichier de ressources valide dans resFichier, la ressource est recherche dans ce fichier uniquement. Si vous ne passez pas le paramtre resFichier, c'est la premire occurrence de la ressource rencontre dans la chane des fichiers de ressources qui sera retourne. Note : La taille d'une ressource image peut atteindre plusieurs mga-octets, voire davantage. Exemple Reportez-vous l'exemple de la commande LISTE RESSOURCES. Rfrence APPELER SUR ERREUR, ECRIRE RESSOURCE IMAGE, LIRE RESSOURCE ICONE. Variables et ensembles systme La variable systme OK prend la valeur 1 si la ressource est trouve, sinon elle prend la valeur 0 (zro). Gestion des erreurs S'il n'y a pas assez de mmoire disponible pour charger l'image, une erreur est gnre. Vous pouvez intercepter cette erreur l'aide d'une mthode de gestion d'erreurs installe par la commande APPELER SUR ERREUR.

4e Dimension - Langage 1471

ECRIRE RESSOURCE IMAGE

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRIRE RESSOURCE IMAGE (resNum; resDonnes{; resFichier}) Paramtre resNum resDonnes resFichier Type Numrique Image DocRef Description Numro de ressource Nouveau contenu de la ressource PICT Numro de rfrence de fichier de ressources ou fichier de ressources courant si ce paramtre est omis

Description La commande ECRIRE RESSOURCE IMAGE cre ou rcrit la ressource image ("PICT") dont vous avez pass le numro dans resNum avec l'image que vous avez passe dans resDonnes. Si la ressource ne peut tre cre, la variable systme OK prend la valeur 0 (zro). Note : Si vous passez dans resDonnes un champ ou une variable image vide (c'est--dire si sa taille est nulle), la commande ne fait rien et la variable OK prend la valeur 0 (zro). Si vous passez un numro de rfrence de fichier de ressources valide dans resFichier, la ressource est ajoute dans ce fichier. Si vous ne passez pas le paramtre resFichier, la ressource est ajoute au premier des fichiers de la chane des fichiers de ressources (c'est-dire le dernier fichier de ressources ouvert). Note : La taille d'une ressource image peut atteindre plusieurs mga-octets, voire davantage. Rfrence LIRE RESSOURCE IMAGE. Variables et ensembles systme La variable systme OK prend la valeur 1 si la ressource a t crite, sinon elle prend la valeur 0 (zro).

1472 4e Dimension - Langage

LIRE RESSOURCE ICONE

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE RESSOURCE ICONE (resNum; imageDest{; resFichier}) Paramtre resNum imageDest resFichier Type Numrique Image DocRef Description Numro de ressource icne Image rsultante Numro de rfrence de fichier de ressources ou tous les fichiers de ressources ouverts si ce paramtre est omis

Description La commande LIRE RESSOURCE ICONE retourne dans le champ ou la variable image imageDest l'icne stocke dans la ressource icne couleur ("cicn") dont vous avez pass le numro d'ID dans resNum. Si la ressource n'est pas trouve, le paramtre imageDest reste inchang et la variable systme OK prend la valeur 0 (zro). Si vous passez un numro de rfrence de fichier de ressources valide dans resFichier, la ressource est recherche dans ce fichier uniquement. Si vous ne passez pas le paramtre resFichier, c'est la premire occurrence de la ressource rencontre dans la chane des fichiers de ressources qui sera retourne. Exemple L'exemple suivant charge dans un tableau image les icnes couleur situes dans l'application 4D en cours d'utilisation : Si (Sous Windows) $vh4DResFile:=Ouvrir fichier ressources(Remplacer chaine(Fichier application;".EXE";".RSR")) Sinon $vh4DResFile:=Ouvrir fichier ressources(Fichier application) Fin de si LISTE RESSOURCES("cicn";$alResID;$asResNom;$vh4DResFile) $vlNbIcons:=Taille tableau($alResID) TABLEAU IMAGE(ag4DIcon;$vlNbIcons) Boucle ($vlElem;1;$vlNbIcons) LIRE RESSOURCE ICONE($alResID{$vlElem};ag4DIcon{$vlElem};$vh4DResFile) Fin de boucle

4e Dimension - Langage 1473

Une fois ce code excut, le tableau aura l'aspect suivant lorsqu'il sera affich dans un formulaire :

Rfrence LIRE RESSOURCE IMAGE. Variables et ensembles systme La variable systme OK prend la valeur 1 si la ressource est trouve, sinon elle prend la valeur 0 (zro).

1474 4e Dimension - Langage

LIRE RESSOURCE

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE RESSOURCE (resType; resNum; resDonnes{; resFichier}) Paramtre resType resNum resDonnes resFichier Type Alpha Numrique BLOB DocRef Description Type de ressource (4 caractres) Numro de ressource Champ ou variable BLOB devant recevoir les donnes Contenu de la ressource Numro de rfrence de fichier de ressources ou Tous les fichiers de ressources ouverts si omis

Description La commande LIRE RESSOURCE retourne dans le champ ou la variable BLOB resDonnes le contenu de la ressource dont le type et le numro sont passs dans resType et resNum. Important : Vous devez passer une chane de 4 caractres dans resType. Si la ressource n'est pas trouve, le paramtre resDonnes est laiss inchang et la variable OK prend la valeur 0 (zro). Si vous passez un numro de rfrence de fichier de ressources valide dans resFichier, la ressource sera recherche dans ce fichier seulement. Si ne passez pas le paramtre resFichier, la premire occurrence de la ressource trouve en remontant la chane des fichiers de ressources sera retourne. Note : La taille d'une ressource peut atteindre plusieurs mga-octets. Indpendance de plate-forme : Rappelez-vous que vous travaillez avec des ressources issues de MacOS. Quelle que soit la plate-forme utilise, les valeurs internes des ressources comme des entiers longs sont stockes avec l'ordre d'octets ("byte ordering") MacOS. Sous Windows, pour les donnes des ressources standard (telles que les ressources listes de chanes et les ressources images) l'ordre des octets est automatiquement invers ("byte swapping") si ncessaire. D'un autre ct, si vous crez et utilisez vos propres structures internes de donnes, c'est vous d'effectuer l'inversion d'octets des donnes lorsque vous les extrayez d'un BLOB (par exemple en passant Ordre octets Macintosh une commande telle que BLOB vers entier long). Exemple Reportez-vous l'exemple de la commande ECRIRE RESSOURCE. Rfrence Commandes du thme BLOB, ECRIRE RESSOURCE, Ressources.

4e Dimension - Langage 1475

Variables et ensembles systme Si la ressource est trouve, la variable systme OK prend la valeur 1. Sinon, elle prend la valeur 0 (zro). Gestion des erreurs S'il n'y a pas assez de mmoire disponible pour charger l'image, une erreur est gnre. Vous pouvez intercepter cette erreur l'aide d'une mthode de gestion d'erreurs installe par la commande APPELER SUR ERREUR.

1476 4e Dimension - Langage

ECRIRE RESSOURCE

Ressources version 6.0

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRIRE RESSOURCE (resType; resNum; resDonnes{; resFichier}) Paramtre resType resNum resDonnes resFichier Type Alpha Numrique BLOB DocRef Description Type de ressource (4 caractres) Numro de ressource Nouveau contenu de la ressource Numro de rfrence de fichier de ressources ou Fichier de ressources courant si omis

Description La commande ECRIRE RESSOURCE cre ou rcrit la ressource dont vous avez pass le type et le numro dans resType et resNum avec les donnes passes dans le BLOB resDonnes. Important : Vous devez passer une chane de 4 caractres dans resType. Si la ressource ne peut pas tre crite, la variable systme OK prend la valeur 0 (zro). Si vous passez un numro de rfrence de fichier de ressources valide dans resFichier, la ressource est ajoute dans ce fichier. Si vous ne passez pas le paramtre resFichier, la ressource est ajoute au premier des fichiers de la chane des fichiers de ressources (c'est-dire le dernier fichier de ressources ouvert). Note : La taille d'une ressource peut atteindre plusieurs mega-octets. Indpendance de plate-forme : Rappelez-vous que vous travaillez avec des ressources issues de MacOS. Quelle que soit la plate-forme utilise, les valeurs internes des ressources comme des entiers longs sont stockes avec l'ordre d'octets ("byte ordering") MacOS. Sous Windows, pour les donnes des ressources standard (telles que les ressources listes de chanes et les ressources images) l'ordre des octets est automatiquement invers ("byte swapping") si ncessaire. D'un autre ct, si vous crez et utilisez vos propres structures internes de donnes, c'est vous d'effectuer l'inversion d'octets des donnes lorsque vous les crivez dans un BLOB (par exemple en passant Ordre octets Macintosh une commande telle que ENTIER LONG VERS BLOB).

4e Dimension - Langage 1477

Exemple Pendant une session 4D, vous conservez des prfrences utilisateur dans des variables interprocess. Pour sauvegarder ces prfrences d'une session sur l'autre, vous pouvez : utiliser les commandes ECRIRE VARIABLES et LIRE VARIABLES pour stocker et rcuprer les variables dans des documents de variables sur disque. utiliser les commandes VARIABLE VERS BLOB, BLOB VERS DOCUMENT, DOCUMENT VERS BLOB et BLOB VERS VARIABLE pour stocker et rcuprer les variables dans des documents BLOB sur disque. utiliser les commandes VARIABLE VERS BLOB, ECRIRE RESSOURCE, LIRE RESSOURCE et BLOB VERS VARIABLE pour stocker et rcuprer les variables dans des fichiers de ressources sur disque. L'exemple suivant utilise la troisime possibilit : Dans la Mthode base Sur fermeture, vous crivez : ` Mthode base Sur fermeture Si (Tester chemin acces("DB_Prefs")#Est un document) $vhResFile:=Creer fichier ressources("DB_Prefs") Sinon $vhResFile:=Ouvrir fichier ressources("DB_Prefs") Fin de si Si (OK=1) VARIABLE VERS BLOB(vbAutoRepeat;$vxPrefData) VARIABLE VERS BLOB(vlCurTable;$vxPrefData;*) VARIABLE VERS BLOB(asDfltOption;$vxPrefData;*) ` et ainsi de suite... ECRIRE RESSOURCE("PREF";26500;$vxPrefData;$vhResFile) FERMER FICHIER RESSOURCES($vhResFile) Fin de si

Dans la Mthode base Sur ouverture, vous crivez : ` Mthode base Sur ouverture C_BOOLEEN(vbAutoRepeat) C_ENTIER LONG(vlCurTable) $vbDone:=Faux $vhResFile:=Ouvrir fichier ressources("DB_Prefs") Si (OK=1) LIRE RESSOURCE("PREF";26500;$vxPrefData;$vhResFile)

1478 4e Dimension - Langage

Si (OK=1) $vlOffset:=0 BLOB VERS VARIABLE($vxPrefData;vbAutoRepeat;$vlOffset) BLOB VERS VARIABLE($vxPrefData;vlCurTable;$vlOffset) BLOB VERS VARIABLE($vxPrefData;asDfltOption;$vlOffset) ` et ainsi de suite... $vbDone:=Vrai Fin de si FERMER FICHIER RESSOURCES($vhResFile) Fin de si Si(Non($vbDone)) vbAutoRepeat:=Faux vlCurTable:=0 TABLEAU ALPHA(127;asDfltOption;0) Fin de si Rfrence Commandes du thme BLOB, LIRE RESSOURCE. Variables et ensembles systme Si la ressource est crite, la variable systme OK prend la valeur 1. Sinon, elle prend la valeur 0 (zro).

4e Dimension - Langage 1479

Lire nom ressource

Ressources version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire nom ressource (resType; resNum{; resFichier}) Alpha Paramtre resType resNum resFichier Rsultat Type Alpha Numrique RefDoc Alpha Description Type de ressource (4 caractres) Numro de rfrence de ressource (ID) Numro de rfrence du fichier de ressource ou Tous les fichiers de ressources ouverts si omis Nom de la ressource

Description Lire nom ressource retourne le nom de la ressource dont le type est pass dans resType et le numro de rfrence (ID) dans resNum. Si vous ne passez pas le paramtre resFichier, la ressource est recherche dans tous les fichiers de ressources ouverts. Si vous passez un numro de rfrence de fichier de ressource dans le paramtre resFichier, la ressource n'est recherche que dans ce fichier. Si la ressource n'existe pas, Lire nom ressource retourne une chane vide et fixe la variable OK 0 (zro). Exemple La mthode projet suivante copie une ressource ainsi que son nom et ses attributs d'un fichier de ressources vers un autre : ` Mthode projet COPIER RESSOURCE ` COPIER RESSOURCE ( Alpha ; Entier long ; Heure ; Heure ) ` COPIER RESSOURCE ( typeRes ; IDRes ; fichierResSource ; fichierResDest ) C_ALPHA (4;$1) C_ENTIER LONG ($2) C_HEURE ($3;$4) C_BLOB ($vxResData)

1480 4e Dimension - Langage

LIRE RESSOURCE ($1;$2;$vxData;$3) Si (OK=1) ECRIRE RESSOURCE ($1;$2;$vxData;$4) Si (OK=1) ECRIRE NOM RESSOURCE ($1;$2; Lire nom ressource ($1;$2;$3);$4) ECRIRE PROPRIETES RESSOURCE ($1;$2; Lire proprietes ressource ($1;$2;$3);$4) Fin de si Fin de si

Lorsque cette mthode projet est prsente dans votre application, vous pouvez crire : ` Copier la ressource 'DATA' ID = 15000 de fichier A au fichier B COPIER RESSOURCE ("DATA";15000;$vhFichResA;$vhFichResB) Rfrence ECRIRE PROPRIETES RESSOURCE. Variables et ensembles systme La variable OK prend la valeur 0 si la ressource n'existe pas, sinon elle prend la valeur 1.

4e Dimension - Langage 1481

ECRIRE NOM RESSOURCE

Ressources version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRIRE NOM RESSOURCE (resType; resNum; resNom{; resFichier}) Paramtre resType resNum resNom resFichier Type Alpha Numrique Alpha RefDoc Description Type de ressource (4 caractres) Numro de rfrence de ressource (ID) Nouveau nom de la ressource Numro de rfrence du fichier de ressource ou Tous les fichiers de ressources ouverts si omis

Description ECRIRE NOM RESSOURCE modifie le nom de la ressource dont le type est pass dans resType et le numro de rfrence dans resNum. Si vous ne passez pas le paramtre resFichier, la ressource est recherche dans les fichiers de ressources ouverts. Si vous passez un numro de rfrence de fichier de ressource dans le paramtre resFichier, la ressource n'est recherche que dans ce fichier. Si la ressource n'existe pas, ECRIRE NOM RESSOURCE ne fait rien et la variable OK prend la valeur 0 (zro). ATTENTION : Il est dconseill de modifier les noms des ressources appartenant 4D ou aux fichiers systme. Cette opration peut provoquer des erreurs systme. Note : Les noms des ressources peuvent comprendre jusqu' 255 caractres. Ils n'tablissent pas de distinction entre les majuscules et les minuscules, mais les caractres diacritiques (, , etc.) sont respects. Exemple Rfrez-vous l'exemple de la commande Lire nom ressource. Rfrence ECRIRE PROPRIETES RESSOURCE. Variables et ensembles systme La variable systme OK prend la valeur 0 si la ressource n'existe pas, sinon elle prend la valeur 1.

1482 4e Dimension - Langage

Lire proprietes ressource

Ressources version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire proprietes ressource (resType; resNum{; resFichier}) Numrique Paramtre resType resNum resFichier Rsultat Type Alpha Numrique RefDoc Numrique Description Type de ressource (4 caractres) Numro de rfrence de ressource (ID) Numro de rfrence du fichier de ressource ou Tous les fichiers de ressources ouverts si omis Attributs de la ressource

Description Lire proprietes ressource retourne les attributs de la ressource dont le type est pass dans le paramtre resType et le numro de rfrence dans resNum. Si vous ne passez pas le paramtre resFichier, la ressource est recherche dans les fichiers de ressources ouverts. Si vous passez un numro de rfrence de fichier de ressource dans le paramtre resFichier, la ressource n'est recherche que dans ce fichier. Si la ressource n'existe pas, Lire proprietes ressource retourne 0 (zro) et la variable OK prend galement la valeur 0 (zro). La valeur numrique retourne par Lire proprietes ressource doit tre considre comme une valeur binaire dont chaque bit a une signification particulire. Pour une description des attributs des ressources et leurs effets, rfrez-vous la commande ECRIRE PROPRIETES RESSOURCE. Exemple Rfrez-vous l'exemple de la commande Lire nom ressource. Rfrence ECRIRE NOM RESSOURCE. Variables et ensembles systme La variable OK prend la valeur 0 si la ressource n'existe pas, sinon elle prend la valeur 1.

4e Dimension - Langage 1483

ECRIRE PROPRIETES RESSOURCE

Ressources version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRIRE PROPRIETES RESSOURCE (resType; resNum; resAttr{; resFichier}) Paramtre resType resNum resAttr resFichier Type Alpha Numrique Numrique RefDoc Description Type de ressource (4 caractres) Numro de rfrence de ressource (ID) Nouveaux attributs de la ressource Numro de rfrence du fichier de ressource ou Tous les fichiers de ressources ouverts si omis

Description ECRIRE PROPRIETES RESSOURCE modifie les attributs de la ressource dont le type est pass dans le paramtre resType et le numro de rfrence dans resNum. Si vous ne passez pas le paramtre resFichier, la ressource est recherche dans les fichiers de ressources ouverts. Si vous passez un numro de rfrence de fichier de ressource dans le paramtre resFichier, la ressource n'est recherche que dans ce fichier. Si la ressource n'existe pas, ECRIRE PROPRIETES RESSOURCE ne fait rien et la variable OK prend la valeur 0 (zro). La valeur numrique passe dans resAttr doit tre considre comme une valeur binaire dont chaque bit a une signification particulire. Les constantes ci-dessous sont fournies par 4e Dimension : Constante Masque ressource heap systme Bit ressource heap systme Masque ressource purgeable Bit ressource purgeable Masque ressource verrouille Bit ressource verrouille Masque ressource protge Bit ressource protge Masque ressource prcharge Bit ressource prcharge Masque ressource modifie Bit ressource modifie Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long Valeur 64 6 32 5 16 4 8 3 4 2 2 1

1484 4e Dimension - Langage

A l'aide de ces constantes, vous pouvez dfinir la valeur d'attributs de ressources que vous voulez. Rfrez-vous aux exemples proposs la fin de cette section. Les attributs de ressources et leurs effets sont dcrits ci-dessous : Heap systme Si cet attribut est utilis, la ressource sera charge dans la mmoire systme au lieu de la mmoire de 4D. Vous ne devez pas utiliser cet attribut, sauf si vous tes absolument sr de savoir trs exactement ce que vous faites. Purgeable Lorsque cet attribut est utilis, la ressource charge peut tout moment tre purge (c'est-dire supprime) de la mmoire si de la place mmoire est ncessaire pour l'allocation d'autres donnes. Comme de toute manire vous chargez des ressources dans des BLOBs 4D, nous vous conseillons de rendre purgeables toutes vos propres ressources afin d'optimiser l'utilisation de la mmoire. Notez cependant que si une ressource est frquemment appele lors d'une session de travail, il peut tre intressant de la rendre non purgeable afin de rduire les accs disque ds au rechargement de la ressource purge. Verrouille Si cet attribut est utilis, la ressource ne peut pas tre dplace lorsqu'elle est charge en mmoire. Une ressource verrouille ne peut pas tre purge mme si elle est purgeable. Le verrouillage d'une ressource a l'effet indsirable de fragmenter la mmoire. Vous ne devez pas utiliser cet attribut, sauf si vous tes absolument sr de savoir trs exactement ce que vous faites. Protge Si cet attribut est utilis, vous ne pouvez plus modifier le nom, le numro de rfrence (ID) ou le contenu de la ressource. Il n'est galement plus possible de supprimer cette ressource. Vous pouvez toutefois appeler la commande ECRIRE PROPRIETES RESSOURCE pour supprimer cet attribut, puis modifier ou supprimer la ressource. La plupart du temps, vous n'aurez pas utiliser cet attribut. Note : Cet attribut est sans effet sous Windows. Prcharge Si cet attribut est utilis, la ressource est automatiquement charge en mmoire et le fichier dans lequel elle se trouve est ouvert. Cet attribut est utile pour optimiser le chargement des ressources lors de l'ouverture d'un fichier de ressources. Cependant, la plupart du temps, vous n'aurez pas besoin de cet attribut.

4e Dimension - Langage 1485

Modifie Si cet attribut est utilis, la ressource reoit une marque signifiant doit tre sauvegarde sur disque lorsque le fichier de ressources dans lequel elle se trouve est referm. Comme la commande de 4D ECRIRE RESSOURCE gre en interne l'criture et la r-criture des ressources, vous ne devez pas utiliser cet attribut, sauf si vous tes absolument sr de savoir trs exactement ce que vous faites. En rsum, moins d'tre certain de savoir ce que vous faites, vous n'utiliserez gnralement que l'attribut purgeable, et peut-tre plus rarement les attributs prcharge et protge. ATTENTION : Il est dconseill de modifier les noms des ressources appartenant 4D ou aux fichiers systme. Cette opration peut provoquer des erreurs systmes. Exemples (1) Rfrez-vous l'exemple de la fonction Lire nom ressource. (2) L'exemple suivant rend la ressource 'STR#' ID=17000 purgeable et laisse les autres attributs inchangs :

$vlAttrRes:=Lire proprietes ressource ('STR#';17000;$vhFichierRes) ECRIRE PROPRIETES RESSOURCE('STR#';17000;$vlAttrRes ?+ Bit ressource purgeable; $vhMonFichRes)

(3) L'exemple suivant rend la ressource 'STR#' ID=17000 prcharge et non-purgeable :

ECRIRE PROPRIETES RESSOURCE('STR#';17000;Masque ressource prcharge; $vhFichierRes)

(4) L'exemple suivant rend la ressource 'STR#' ID=17000 prcharge, mais purgeable:

ECRIRE PROPRIETES RESSOURCE('STR#';17000;Masque ressource prcharge+ Masque ressource purgeable;$vhFichierRes)

Rfrence ECRIRE NOM RESSOURCE. Variables et ensembles systme La variable systme OK prend la valeur 0 si la ressource n'existe pas, sinon elle prend la valeur 1.

1486 4e Dimension - Langage

SUPPRIMER RESSOURCE

Ressources version 6.0

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER RESSOURCE (resType; resNum{; resFichier}) Paramtre resType resNum resFichier Type Alpha Numrique DocRef Description Type de ressource (4 caractres) Numro de ressource Numro de rfrence de fichier de ressources ou Fichier de ressources courant si ce paramtre est omis

Description La commande SUPPRIMER RESSOURCE supprime la ressource dont vous passez le type dans le paramtre resType et le numro dans resNum. Si vous passez un numro de rfrence de fichier de ressources dans le paramtre resFichier, 4D recherche la ressource dans ce fichier uniquement. Si vous ne passez pas le paramtre resFichier, 4D recherche la ressource dans tous les fichiers de ressources ouverts. Si la ressource n'existe pas, SUPPRIMER RESSOURCE ne fait rien et la variable OK prend la valeur 0 (zro). Si la ressource est correctement identifie et efface, la variable systme OK prend la valeur 1. ATTENTION : Ne supprimez pas de ressources appartenant 4D ou un fichier du systme. Cette opration peut provoquer l'apparition d'erreurs systme. Exemples (1) L'exemple suivant supprime la ressource "STR#" d'ID=20000: ` Notez que cet exemple supprimera la premire ressource "STR#" ID=20000 ` rencontre parmi tous les fichiers de ressources actuellement ouverts : SUPPRIMER RESSOURCE ("STR#";20000)

(2) L'exemple suivant supprime la ressource "STR#" d'ID=20000 si celle-ci est prsente dans un fichier particulier : ` Notez que cet exemple supprimera la ressource "STR#" d'ID=20000 ` seulement si elle est prsente dans le fichier de ressources dsign par $vhResFile : SUPPRIMER RESSOURCE ("STR#";20000;$vhResFile) ` Notez galement que si une ressource identique existe dans un fichier de ressources ` ouvert autre que le fichier spcifi par vhResFile, elle restera inchange

4e Dimension - Langage 1487

(3) La mthode projet SUPPRIMER RESSOURCES DE TYPE supprime du fichier de ressources spcifi par le premier paramtre toutes les ressources du type spcifi par le second paramtre : ` Mthode projet SUPPRIMER RESSOURCES DE TYPE ` SUPPRIMER RESSOURCES DE TYPE ( Heure ; Alpha ) ` SUPPRIMER RESSOURCES DE TYPE ( resFichier ; resType ) C_HEURE($1) C_ALPHA(4;$2) LISTE RESSOURCES($2;$aiResID;$asResNom;$1) Si(OK=1) Boucle($vlElem;1;Taille tableau($aiResID)) SUPPRIMER RESSOURCE($2;$aiResID{$vlElem};$1) Fin de boucle Fin de si

Une fois que cette mthode projet existe dans votre base, vous pouvez crire : ` Supprimer toutes les ressources de type "PREF" du fichier de ressources $vhResFile SUPPRIMER RESSOURCES DE TYPE ($vhResFile;"PREF") (4) La mthode projet SUPPRIMER RESSOURCE PAR NOM supprime une ressource (d'un type spcifique) dont vous connaissez le nom : ` Mthode projet SUPPRIMER RESSOURCE PAR NOM ` SUPPRIMER RESSOURCE PAR NOM ( Heure ; Alpha ; Alpha ) ` SUPPRIMER RESSOURCE PAR NOM ( resFichier ; resType ; resNom ) C_HEURE($1) C_ALPHA(4;$2) C_ALPHA(255;$3) LISTE RESSOURCES($2;$aiResID;$asResName;$1) Si(OK=1) $vlElem:=Chercher dans tableau($asResName;$3) Si($vlElem>0) SUPPRIMER RESSOURCE($2;$aiResID{$vlElem};$1) Fin de boucle Fin de si

Une fois que cette mthode projet existe dans votre base, vous pouvez crire : ` Supprimer du fichier de ressources $vhResFile la ressource "PREF" dont le nom ` est Rglages standard : SUPPRIMER RESSOURCE PAR NOM ($vhResFile;"PREF";"Rglages standard") Rfrence ECRIRE PROPRIETES RESSOURCE, LISTE RESSOURCES. Variables et ensembles systme La variable OK prend la valeur 0 si la ressource n'existe pas ; si la ressource a t supprime, OK prend la valeur 1. 1488 4e Dimension - Langage

Lire ID ressource composant

Ressources version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire ID ressource composant (nomComp; resType; resNumOriginal) Numrique Paramtre nomComp resType resNumOriginal Rsultat Type Alpha (32) Alpha (4) Numrique Numrique Description Nom du composant rfrenant la ressource Type de ressource (4 caractres), PICT ou STR# Numro original de la ressource, avant installation du composant Numro courant de la ressource

Description La commande Lire ID ressource composant permet aux dveloppeurs de composants de sassurer que leurs appels de ressources personnalises de type PICT ou STR# seront correctement effectus, mme si les numros de ces ressources ont t modifis au moment de linstallation. En effet, lorsquun composant utilisant des ressources est install par 4D Insider, le programme peut renumroter automatiquement les nouvelles ressources si des ressources de mme numro existent dj dans la base. Note : Pour plus dinfomations sur les composants dans 4e Dimension, reportez-vous la documentation de 4D Insider. La commande Lire ID ressource composant permet donc de connatre le numro courant (rel) de chaque ressource utilise par un composant, partir de son type et de son numro original. Bien entendu, la commande doit tre appele dans une mthode appartenant au composant. Passez dans le paramtre nomComp le nom du composant utilisant la ressource. Passez dans le paramtre resType le type de la ressource (imprativement compos de 4 caractres). La commande Lire ID ressource composant accepte uniquement les ressources de type PICT et STR#. Note : Les images stockes dans la bibliothque dimages de 4D ne sont PAS gres par la commande Lire ID ressource composant. Pour pouvoir utiliser des images de la Bibliothque d'images dans un composant 4D, vous devez appeler la commande LIRE IMAGE DANS BIBLIOTHEQUE et passer une chane (le nom de l'image) en tant que premier paramtre. Pour plus d'informations, reportez-vous la description de la commande LIRE IMAGE DANS BIBLIOTHEQUE. Passez dans resNumOriginal le numro original de la ressource, cest--dire celui dfini au moment de la cration du composant.

4e Dimension - Langage 1489

La fonction retourne alors le numro attribu la ressource dans lapplication courante. Si aucune ressource ne correspond resNumOriginal, Lire ID ressource composant retourne la valeur saisie dans resNumOriginal. Exemple Le code ci-dessous ne permet pas de garantir que les appels de ressources seront correctement effectus : `Si les ressources sont renumrotes, cet appel sera incorrect vNumRes := 15000 LISTE DE CHAINES VERS TABLEAU(vNumRes; tabChanes; fichierRes) Il est fortement conseill de prfrer le code suivant :

`Cet appel sera correct dans tous les cas vNumRes :=Lire ID ressource composant("MonComp";"STR#";15000) LISTE DE CHAINES VERS TABLEAU (vNumRes; tabChanes; fichierRes)

Rfrence LIRE INFORMATIONS SERIALISATION.

1490 4e Dimension - Langage

52 ________________________ Saisie

4e Dimension - Langage 1491

1492 4e Dimension - Langage

AJOUTER ENREGISTREMENT

Saisie version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

AJOUTER ENREGISTREMENT ({table}{; }{*}) Paramtre table * Type Table Description Table dans laquelle ajouter des donnes ou Table par dfaut si ce paramtre est omis Cacher les barres de dfilement

Description La commande AJOUTER ENREGISTREMENT permet l'utilisateur de crer un nouvel enregistrement dans table ou dans la table par dfaut si ce paramtre est omis. AJOUTER ENREGISTREMENT cre un nouvel enregistrement pour table, en fait l'enregistrement courant pour le process courant et l'affiche dans le formulaire entre courant. En mode Menus crs, une fois que l'utilisateur a valid le nouvel enregistrement, la slection courante est rduite ce seul enregistrement. L'cran suivant prsente un formulaire typiquement utilis pour la saisie de donnes :

4e Dimension - Langage 1493

Le formulaire est affich dans la fentre se trouvant au premier plan du process. Elle comporte des barres de dfilement et une case de contrle de taille. Si vous passez le paramtre optionnel astrisque (*), ces lments n'apparatront pas. AJOUTER ENREGISTREMENT affiche le formulaire jusqu' ce que l'utilisateur valide ou annule l'enregistrement. Si l'utilisateur ajoute plusieurs enregistrements, la commande doit tre appele pour chaque nouvel enregistrement. L'enregistrement est sauvegard si l'utilisateur clique sur un bouton du type Valider ou appuie sur la touche Entre, ou encore si la commande VALIDER est excute. L'enregistrement n'est pas sauvegard si l'utilisateur clique sur un bouton du type Annuler ou appuie sur la touche d'annulation (Echap sous Windows, Esc sous MacOS), ou encore si la commande NE PAS VALIDER est excute. Aprs un appel AJOUTER ENREGISTREMENT, la variable systme OK prend la valeur 1 si l'enregistrement est valid et 0 s'il est annul. Note : Mme lorsqu'il est annul, l'enregistrement reste en mmoire et peut tre sauvegard avec la commande STOCKER ENREGISTREMENT si celle-ci est excute avant que le pointeur d'enregistrement courant ne soit modifi. Exemples (1) L'exemple suivant est une boucle souvent utilise pour crer des enregistrements dans une base : ` Dsigner le formulaire entre de la table [Clients] FORMULAIRE ENTREE ([Clients]; "SaisieClients") Repeter ` Boucle jusqu' ce que l'utilisateur annule ` Ajouter un enregistrement dans la table [Clients] AJOUTER ENREGISTREMENT ([Clients];*) Jusque (OK = 0) ` Jusqu' ce que l'utilisateur annule

1494 4e Dimension - Langage

(2) L'exemple suivant permet de rechercher un client dans la base. Le droulement de la mthode dpend du rsultat de la recherche. Si aucun client n'a t trouv, l'utilisateur est autoris crer un nouveau client l'aide de la commande AJOUTER ENREGISTREMENT. Si au moins un client a t trouv, le premier enregistrement est affich pour modification, l'aide de la commande MODIFIER ENREGISTREMENT : LECTURE ECRITURE ([Clients]) FORMULAIRE ENTREE ([Clients]; "Entre1") ` Dsigner le formulaire entre ` On rcupre le numro du client vlClientNo:=Num(Demander ("Saisissez un numro de client :") Si (OK =1) CHERCHER ([Clients]; [Clients]ClientNo = vlClientNo) ` Recherche du client Si (Enregistrements trouves([Clients]) = 0) ` Si aucun client n'a t trouv AJOUTER ENREGISTREMENT([Clients]) `Ajout d'un nouveau client Sinon Si(Non(Enregistrement verrouille([Clients]))) MODIFIER ENREGISTREMENT([Clients]) `Modifier l'enregistrement LIBERER ENREGISTREMENT([Clients]) Sinon ALERTE("Cet enregistrement est en train d'tre modifi.") Fin de si Fin de si Fin de si

Variables et ensembles systme La variable systme OK prend la valeur 1 si l'enregistrement est valid et 0 s'il est annul. Rfrence CREER ENREGISTREMENT, MODIFIER ENREGISTREMENT, NE PAS VALIDER, STOCKER ENREGISTREMENT, VALIDER.

4e Dimension - Langage 1495

MODIFIER ENREGISTREMENT

Saisie version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

MODIFIER ENREGISTREMENT ({table}{; }{*}) Paramtre table * Type Table Description Table dans laquelle modifier des donnes ou Table par dfaut si ce paramtre est omis Cacher les barres de dfilement

Description La commande MODIFIER ENREGISTREMENT permet l'utilisateur de modifier l'enregistrement courant de table, ou de la table par dfaut si ce paramtre est omis. MODIFIER ENREGISTREMENT charge depuis le disque l'enregistrement courant pour le process en cours (s'il n'est pas dj charg par un autre utilisateur/process) et l'affiche dans le formulaire entre courant. S'il n'y a pas d'enregistrement courant, MODIFIER ENREGISTREMENT ne fait rien. MODIFIER ENREGISTREMENT ne change pas la slection courante. Le formulaire est affich dans la fentre se trouvant au premier plan du process. Elle comporte des barres de dfilement et une case de contrle de taille. Si vous passez le paramtre optionnel astrisque (*), ces lments n'apparatront pas. Pour que vous puissiez utiliser MODIFIER ENREGISTREMENT, l'enregistrement courant doit tre en Lecture/criture et ne doit pas tre verrouill. Si le formulaire comporte des boutons de navigation parmi les enregistrements de la slection, ils restent utilisables, ce qui permet l'utilisateur de modifier des enregistrements puis de se dplacer pour en modifier d'autres. L'enregistrement est sauvegard si l'utilisateur clique sur un bouton du type Valider ou appuie sur la touche Entre, ou encore si la commande VALIDER est excute. L'enregistrement n'est pas sauvegard si l'utilisateur clique sur un bouton du type Annuler ou appuie sur la touche d'annulation (Echap sous Windows, Esc sous MacOS), ou encore si la commande NE PAS VALIDER est excute. Aprs un appel MODIFIER ENREGISTREMENT, la variable systme OK prend la valeur 1 si l'enregistrement est valid, et 0 lorsqu'il est annul. Note : Mme lorsqu'il est annul, l'enregistrement reste en mmoire et peut tre sauvegard par la commande STOCKER ENREGISTREMENT si celle-ci est appele avant que le pointeur d'enregistrement courant ne soit modifi.

1496 4e Dimension - Langage

Dans le cadre d'un MODIFIER ENREGISTREMENT, si l'utilisateur n'effectue aucune modification dans l'enregistrement et le valide, l'enregistrement ne sera pas considr comme modifi et ne sera pas sauvegard une nouvelle fois. Les actions telles que le changement de la valeur d'une variable, la slection de cases cocher ou de boutons radio ne sont pas qualifies de modifications. Seule la modification de la valeur d'un champ, par le biais d'une saisie manuelle ou d'une mthode, provoque une nouvelle sauvegarde de l'enregistrement. Exemples Reportez-vous au second exemple de la commande AJOUTER ENREGISTREMENT. Variables et ensembles systme La variable systme OK prend la valeur 1 lorsque l'enregistrement est valid et 0 lorsqu'il est annul. OK ne prend une valeur qu'aprs que l'enregistrement ait t effectivement valid ou annul. Rfrence AJOUTER ENREGISTREMENT, Enregistrement modifie, Enregistrement verrouille, LECTURE ECRITURE, LIBERER ENREGISTREMENT.

4e Dimension - Langage 1497

AJOUTER SOUS ENREGISTREMENT

Saisie version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

AJOUTER SOUS ENREGISTREMENT (sousTable; formulaire{; *}) Paramtre sousTable formulaire * Type Sous-table Alpha * Description Sous-table utiliser pour la saisie des donnes Formulaire utiliser Masquer les barres de dfilement

Description AJOUTER SOUS ENREGISTREMENT permet d'ajouter un nouveau sous-enregistrement sousTable, en utilisant formulaire. AJOUTER SOUS ENREGISTREMENT cre un nouveau sousenregistrement en mmoire, en fait le sous-enregistrement courant et affiche formulaire. Il doit exister un enregistrement courant pour la table parente. S'il n'existe pas d'enregistrement de la table parente dans le process, AJOUTER SOUS ENREGISTREMENT ne fait rien. Le formulaire doit appartenir sousTable. Le sous-enregistrement reste en mmoire et sera sauvegard si l'utilisateur clique sur un bouton de validation, appuie sur la touche Entre ou si la commande VALIDER est excute. Ds que le sous-enregistrement a t ajout ou modifi, l'enregistrement parent doit tre sauvegard pour que le sous-enregistrement soit sauvegard. Le sous-enregistrement n'est pas sauvegard si l'utilisateur clique sur un bouton d'annulation, appuie sur les touches d'annulation (Echap sous Windows, Esc sous MacOS), ou si la commande NE PAS VALIDER est excute. Aprs un appel AJOUTER SOUS ENREGISTREMENT, la variable systme OK prend la valeur 1 si le sous-enregistrement a t valid, sinon elle prend la valeur 0. Le formulaire est affich dans la fentre de premier plan du process, avec des barres de dfilement et une case de redimensionnement. Si vous spcifiez le paramtre optionnel astrisque (*), la fentre sera dessine sans les barres de dfilement ni la case de redimensionnement.

1498 4e Dimension - Langage

Exemple L'exemple suivant fait partie d'une mthode. Ces lignes de code ajoutent un sousenregistrement pour un nouvel enfant dans l'enregistrement d'un employ. Les donnes pour l'enfant sont stockes dans la sous-table [Employs]Enfants. Notez que l'enregistrement de la table [Employs] doit tre sauvegard pour que le sous-enregistrement le soit galement :

AJOUTER SOUS ENREGISTREMENT ([Employs]Enfants; "AjouterEnfant") Si (OK = 1) ` Si l'utilisateur a valid le sous-enregistrement STOCKER ENREGISTREMENT ([Employs]) ` Stocker l'enregistrement parent Fin de si

Variables et ensembles systme Si le sous-enregistrement est valid, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0. Rfrence MODIFIER SOUS ENREGISTREMENT, NE PAS VALIDER, STOCKER ENREGISTREMENT, VALIDER.

4e Dimension - Langage 1499

MODIFIER SOUS ENREGISTREMENT

Saisie version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

MODIFIER SOUS ENREGISTREMENT (sousTable; formulaire{; *}) Paramtre sousTable formulaire * Type Sous-table Description Sous-table utiliser pour la saisie de donnes Formulaire utiliser pour la saisie Cacher les barres de dfilement

Description La commande MODIFIER SOUS ENREGISTREMENT affiche le sous-enregistrement courant de sousTable dans le formulaire en mode modification. La table parente doit disposer d'un enregistrement courant. S'il n'y a pas d'enregistrement parent courant pour le process, MODIFIER SOUS ENREGISTREMENT ne fait rien. De plus, s'il n'y a pas de sous-enregistrement courant, MODIFIER SOUS ENREGISTREMENT ne fait rien non plus. Le sous-enregistrement reste en mmoire et sera sauvegard si l'utilisateur clique sur le bouton OK, appuie sur la touche Entre ou si la commande VALIDER est excute. Ds que le sous-enregistrement a t ajout ou modifi, l'enregistrement parent doit tre sauvegard pour que le sous-enregistrement le soit galement. Le sous-enregistrement n'est pas sauvegard si l'utilisateur clique sur le bouton Annuler, appuie sur la touche Echap (Windows) ou Esc (MacOS), ou si la commande NE PAS VALIDER est excute. Aprs un appel MODIFIER SOUS ENREGISTREMENT, si le sous-enregistrement est valid, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0. Le formulaire est affich dans la fentre de premier plan du process avec des barres de dfilement et une case de redimensionnement. Si vous spcifiez l'astrisque optionnel (*), la fentre sera dessine sans les barres de dfilement ni la case de redimensionnement. Variables et ensembles systme Si le sous-enregistrement est valid, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0. Rfrence AJOUTER SOUS ENREGISTREMENT, NE PAS VALIDER, STOCKER ENREGISTREMENT, VALIDER.

1500 4e Dimension - Langage

DIALOGUE

Saisie version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DIALOGUE ({table; }formulaire) Paramtre table formulaire Type Table Formulaire Description Table laquelle appartient le formulaire ou Table par dfaut si ce paramtre est omis Formulaire afficher comme dialogue

Description La commande DIALOGUE prsente le formulaire l'utilisateur. Cette commande est souvent utilise pour rcuprer dans des variables des donnes fournies par l'utilisateur, ou pour lui prsenter diffrentes informations, comme un choix d'options pour effectuer une opration. Il est courant d'afficher le formulaire dans une fentre modale cre l'aide de la commande Creer fenetre. Voici un exemple typique de bote de dialogue pouvant tre affiche avec la commande DIALOGUE :

Utilisez DIALOGUE plutt que CONFIRMER, ALERTE ou Demander lorsque les informations afficher ou recueillir sont plus complexes que celles que peuvent grer ces trois autres commandes. Note : Il est possible d'interdire la saisie dans les champs dans les botes de dialogue (et donc de limiter la saisie aux seules variables) via une option des Prfrences de 4e Dimension (page Compatibilit). Cette restriction correspond au fonctionnement des anciennes versions de 4e Dimension.

4e Dimension - Langage 1501

A la diffrence d'AJOUTER ENREGISTREMENT et de MODIFIER ENREGISTREMENT, DIALOGUE n'utilise pas le formulaire entre courant. Vous devez spcifier, dans le paramtre formulaire, le formulaire utiliser. De mme, aucun ensemble de boutons n'est plac par dfaut s'ils sont omis dans le formulaire. Dans ce cas, seule la touche Echap (Windows) ou Esc (MacOS) permet de quitter le formulaire. Le dialogue est valid si l'utilisateur clique sur le bouton de validation ou appuie sur la touche Entre, ou si la commande VALIDER est excute. Le dialogue est annul si l'utilisateur clique sur le bouton d'annulation, appuie sur la touche d'annulation (Echap sous Windows, Esc sous MacOS), ou si la commande NE PAS VALIDER est excute. Aprs un appel DIALOGUE, la variable systme OK prend la valeur 1 si le dialogue est valid, et 0 sinon. Exemple L'exemple suivant illustre l'utilisation de la commande DIALOGUE pour spcifier des critres de recherche. Un formulaire personnalis contenant les variables vNom et vPays permet l'utilisateur de saisir ses critres :

Creer fenetre (10; 40; 370; 220) ` Crer une fentre modale DIALOGUE ([Socit]; "Form Recherche") ` Afficher le dialogue de recherche FERMER FENETRE ` Nous n'avons plus besoin de la fentre Si (OK = 1) ` Si le dialogue est valid CHERCHER ([Socit]; [Socit]Nom = vNom; *) CHERCHER (& [Socit]Payst = vPays) Fin de si

Variables et ensembles systme Si l'utilisateur valide le dialogue, la variable systme OK prend la valeur 1, si le dialogue est annul OK prend la valeur 0. Rfrence AJOUTER ENREGISTREMENT, Creer fenetre, NE PAS VALIDER, VALIDER.

1502 4e Dimension - Langage

Modifie

Saisie version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Modifie (champ) Boolen Paramtre champ Rsultat Type Champ Boolen Description Champ dont vous voulez tester la modification Vrai si une nouvelle valeur a t assigne au champ, sinon Faux

Description Modifie retourne Vrai si une valeur a t assigne par programmation au champ champ ou s'il a t modifi lors de la saisie de donnes. La commande Prsentation des commandes XML ne fonctionne que lorsqu'elle est appele dans le cadre d'une mthode formulaire (ou d'une sous-mthode appele par la mthode formulaire). Dans le cas de la saisie de donnes, un champ est considr comme modifi partir du moment o un utilisateur l'dite (et change ou non sa valeur originale) puis le quitte pour un autre champ ou pour cliquer sur un objet de formulaire. Notez que le fait qu'un utilisateur active puis quitte un champ l'aide de la touche Tabulation ne suffit pas en soi ce que Modifie retourne Vrai. Le champ doit avoir t rellement modifi pour que Modifie retourne Vrai. Dans le cas de l'excution d'une mthode, un champ est considr comme modifi si une valeur lui a t assigne (diffrente ou non de sa valeur prcdente). Note : La commande Prsentation des commandes XML retourne toujours Vrai aprs l'excution des commandes EMPILER ENREGISTREMENT et DEPILER ENREGISTREMENT. Dans tous les cas, pour savoir si la valeur d'un champ a t effectivement modifie, utilisez la commande Ancien. Note : Bien que la fonction Modifie puisse tre applique tout type de champ, si vous l'utilisez conjointement avec la fonction Ancien, vous devez dans ce cas tenir compte des restrictions lies cette fonction. Reportez-vous la description de Ancien.

4e Dimension - Langage 1503

Pendant la saisie de donnes, il est gnralement plus pratique d'effectuer des oprations dans des mthodes objet que d'utiliser la fonction Modifie dans des mthodes formulaires. Comme une mthode objet reoit l'vnement Sur donnes modifies chaque fois qu'un champ est modifi, utiliser une telle mthode quivaut appeler Modifie dans une mthode formulaire. Exemples (1) L'exemple suivant teste si le champ [Commandes]Quantit ou le champ [Commandes]Prix a t modifi. Si c'est le cas, le champ [Commandes]Total est recalcul :

Si ((Modifie ([Commandes]Quantit) | (Modifie ([Commandes]Prix)) [Commandes]Total := [Commandes]Quantit * [Commandes]Prix Fin de si

Notez que le mme rsultat aurait pu tre obtenu en utilisant la seconde ligne de cette mthode en tant que mthode objet des champs [Commandes]Quantit et [Commandes]Prix. (2) Vous slectionnez un enregistrement de la table [uneTable], puis vous appelez plusieurs sous-routines qui sont susceptibles de modifier le champ [uneTable]Champ important mais sans provoquer de sauvegarde de l'enregistrement. A la fin de la mthode principale, vous pouvez utiliser la commande Modifie pour dterminer si vous devez stocker l'enregistrement : ` L'enregistrement a t slectionn comme enregistrement courant ` Puis vous effectuez des actions l'aide des sous-routines FAIRE QUELQUE CHOSE FAIRE AUTRE CHOSE NE PAS OUBLIER DE FAIRE CA ` ... ` Enfin, vous testez le champ pour dterminer s'il faut stocker l'enregistrement Si (Modifie([uneTable]Champ important)) STOCKER ENREGISTREMENT([uneTable]) Fin de si

Rfrence Ancien.

1504 4e Dimension - Langage

Ancien

Saisie version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ancien (champ) Expression Paramtre champ Rsultat Type Champ Expression Description Champ dont vous voulez obtenir l'ancienne valeur Valeur originale de champ

Description La commande Ancien retourne la valeur qui tait stocke dans champ avant qu'il n'ait t modifi par programmation ou pendant la saisie de donnes. A chaque fois que vous changez d'enregistrement courant pour une table, 4D cre et maintient en mmoire un double de l'"image" du nouvel enregistrement courant au moment o il est charg (pour des raisons d'optimisation, ce fonctionnement ne s'applique pas aux champs de type Texte, Image et BLOB). Lorsque vous modifiez un enregistrement, vous travaillez avec l'image relle de l'enregistrement, et non son double. Ce double est effac lorsque que vous changez nouveau d'enregistrement courant. Ancien retourne la valeur de champ telle qu'elle est stocke dans le double de l'enregistrement. Autrement dit, pour un enregistrement existant, Ancien retourne la valeur du champ telle qu'elle avait t sauvegarde sur disque. Pour un enregistrement qui vient d'tre cr, Ancien retourne la valeur vide par dfaut correspondant au type de champ. Par exemple, si champ est de type Alpha, Ancien retourne une chane vide. Si champ est de type numrique, Ancien retourne zro (0), etc. Ancien fonctionne avec champ de la mme manire, que le champ ait t modifi par programmation ou suite des modifications effectues par un utilisateur. Ancien ne peut pas tre applique aux champs de type Texte, Image ou BLOB. La fonction accepte tous les autres types de champs, y compris les sous-champs ; noter cependant que son utilisation avec un champ de type Sous-table n'a pas de sens. Pour restaurer la valeur originale d'un champ, assignez-lui la valeur retourne par Ancien. Rfrence Modifie.

4e Dimension - Langage 1505

1506 4e Dimension - Langage

53 ________________________ Sauvegarde

4e Dimension - Langage 1507

1508 4e Dimension - Langage

SAUVEGARDER

Sauvegarde version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAUVEGARDER Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande SAUVEGARDER dclenche la sauvegarde de la base de donnes avec les paramtrages de sauvegarde courants. Aucune bote de dialogue de confirmation nest affiche. Une fentre de progression apparat lcran. Les paramtrages de sauvegarde sont dfinis dans les Prfrences de lapplication. Ils sont galement stocks dans le fichier Backup.XML situ dans le sous-dossier Preferences/Backup de la base. La commande SAUVEGARDER appelle la Mthode base Sur dmarrage sauvegarde au dbut de son excution et la Mthode base Sur arrt sauvegarde la fin de son excution. Attention, du fait de ce mcanisme, la commande ne doit PAS tre appele depuis l'une de ces mthodes base. 4D Server : Lorsquelle est appele depuis un poste client, la commande SAUVEGARDER est considre comme une procdure stocke, elle est toujours excute sur le serveur. Rfrence LIRE INFORMATION SAUVEGARDE, Mthode base Sur dmarrage sauvegarde, RESTITUER. Variables et ensembles systme Si la sauvegarde se droule correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0. Gestion des erreurs En cas dincident, une erreur est gnre, que vous pouvez intercepter laide dune mthode de gestion derreurs installe laide de la commande APPELER SUR ERREUR.

4e Dimension - Langage 1509

LIRE INFORMATION SAUVEGARDE

Sauvegarde version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE INFORMATION SAUVEGARDE (slecteur; info1; info2) Paramtre slecteur info1 info2 Type Entier long Date | Entier Heure | Chane Description Type dinformation rcuprer Valeur 1 du slecteur Valeur 2 du slecteur

Description La commande LIRE INFORMATION SAUVEGARDE permet de rcuprer des informations relatives la dernire sauvegarde effectue sur les donnes de la base. Passez dans le paramtre slecteur le type dinformation rcuprer. Vous pouvez utiliser une des constantes suivantes, places dans le thme Sauvegarde : Constante Type Valeur Date dernire sauvegarde Entier long 0 Statut dernire sauvegarde Entier long 2 Prochaine sauvegarde Entier long 4 Le type et le contenu des paramtres info1 et info2 dpendent de la valeur de slecteur. Si slecteur = 0 (Date dernire sauvegarde), info1 retourne la date et info2 lheure de la dernire sauvegarde. Si slecteur = 2 (Statut dernire sauvegarde), info1 retourne le numro et info2 le texte du statut de la dernire sauvegarde. Si slecteur = 4 (Prochaine sauvegarde), info1 retourne la date et info2 lheure de la prochaine sauvegarde prvue. Rfrence RESTITUER.

1510 4e Dimension - Langage

RESTITUER

Sauvegarde version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

RESTITUER Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande RESTITUER provoque laffichage de la page de restitution de la bote de dialogue douverture de bases de donnes de 4e Dimension :

Lutilisateur peut alors slectionner une archive restituer. Cette commande est utile dans le cadre dinterfaces personnalises pour la gestion des sauvegardes. Rfrence LIRE INFORMATION RESTITUTION, SAUVEGARDER.

4e Dimension - Langage 1511

LIRE INFORMATION RESTITUTION

Sauvegarde version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE INFORMATION RESTITUTION (slecteur; info1; info2) Paramtre slecteur info1 info2 Type Entier long Date | Entier Heure | Chane Description Type dinformation rcuprer Valeur 1 du slecteur Valeur 2 du slecteur

Description La commande LIRE INFORMATION RESTITUTION permet de rcuprer des informations relatives la dernire restitution de la base. Passez dans le paramtre slecteur le type dinformation rcuprer. Vous pouvez utiliser une des constantes suivantes, places dans le thme Sauvegarde : Constante Type Valeur Date dernire restitution Entier long 0 Statut dernire restitution Entier long 2 Le type et le contenu des paramtres info1 et info2 dpendent de la valeur de slecteur. Si slecteur = 0 (Date dernire restitution), info1 retourne la date et info2 lheure de la dernire restitution de la base. Si slecteur = 2 (Statut dernire restitution), info1 retourne le numro et info2 le texte du statut de la dernire restitution de la base. Rfrence RESTITUER.

1512 4e Dimension - Langage

Mthode base Sur dmarrage sauvegarde

Sauvegarde version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La Mthode base Sur dmarrage sauvegarde est appele chaque fois quune sauvegarde de la base est sur le point davoir lieu (sauvegarde manuelle, sauvegarde automatique priodique ou via la commande SAUVEGARDER). Tous les environnements 4D sont concerns : 4e Dimension, 4D Server, 4D Client, 4D Runtime et les bases fusionnes avec 4D Runtime Volume License. La Mthode base Sur dmarrage sauvegarde permet de contrler le dclenchement de la sauvegarde. Au sein de la mthode, vous devez retourner dans le paramtre $0 une valeur autorisant ou refusant la sauvegarde : si $0 = 0, vous autorisez la sauvegarde. si $0 # 0, vous n'autorisez pas la sauvegarde. Lopration est annule et une erreur est retourne. Vous pouvez rcuprer lerreur laide de la commande LIRE INFORMATION SAUVEGARDE. Vous pouvez utiliser cette mthode base pour contrler les conditions dexcution de la sauvegarde (utilisateur, date de la dernire sauvegarde, etc.). Note : Vous devez imprativement dclarer le paramtre $0 (entier long) dans la mthode base : C_ENTIER LONG($0). Rfrence Mthode base Sur arrt sauvegarde, SAUVEGARDER.

4e Dimension - Langage 1513

Mthode base Sur arrt sauvegarde

Sauvegarde version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La Mthode base Sur arrt sauvegarde est appele chaque fois quune sauvegarde de la base vient de se terminer. Les causes de larrt de la sauvegarde peuvent tre la fin de la copie, linterruption par lutilisateur ou une erreur. Tous les environnements 4D sont concerns : 4e Dimension, 4D Server, 4D Client, 4D Runtime et les bases fusionnes avec 4D Runtime Volume License. La Mthode base Sur arrt sauvegarde permet de vrifier que la sauvegarde sest correctement droule. Elle reoit dans le paramtre $1 une valeur indiquant le statut de la sauvegarde lissue de son excution : Si la sauvegarde sest termine normalement, $1 vaut 0. Si la sauvegarde a t interrompue la suite d'une erreur ou par l'utilisateur, $1 est diffrent de 0. Si la sauvegarde a t stoppe par la Mthode base Sur dmarrage sauvegarde ($0 # 0), $1 retourne le code effectivement retourn dans le paramtre $0. Ce principe vous permet de mettre en place un systme de gestion derreurs personnalis. Dans tous les cas, vous pouvez obtenir des informations sur l'erreur laide de la commande LIRE INFORMATION SAUVEGARDE. Note : Vous devez imprativement dclarer le paramtre $1 (entier long) dans la mthode base : C_ENTIER LONG($1) Rfrence Mthode base Sur dmarrage sauvegarde, SAUVEGARDER.

1514 4e Dimension - Langage

54 ________________________ Slections

4e Dimension - Langage 1515

1516 4e Dimension - Langage

TOUT SELECTIONNER

Slections version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TOUT SELECTIONNER {(table)} Paramtre table Type Table Description Table de laquelle vous voulez slectionner tous les enregistrements ou Table par dfaut si ce paramtre est omis

Description La commande TOUT SELECTIONNER slectionne tous les enregistrements de table pour le process courant. TOUT SELECTIONNER fait du premier enregistrement de la slection l'enregistrement courant et le charge en mmoire. TOUT SELECTIONNER retourne les enregistrements dans l'ordre par dfaut, qui est l'ordre dans lequel ils ont t stocks sur le disque. Exemple L'exemple suivant affiche tous les enregistrements de la table [Personnes] :

TOUT SELECTIONNER([Personnes]) ` Slection de tous les enregistrements de la table VISUALISER SELECTION ([Personnes]) `Affichage dans le formulaire sortie

Rfrence CHERCHER, Enregistrements dans table, Enregistrements trouves, MODIFIER SELECTION, TRIER, VISUALISER SELECTION.

4e Dimension - Langage 1517

Enregistrements trouves

Slections version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Enregistrements trouves {(table)} Numrique Paramtre table Type Table Description Table dont vous souhaitez connatre le nombre d'enregistrements de la slection courante ou Table par dfaut si ce paramtre est omis Nombre d'enregistrements dans la slection courante de table

Rsultat

Numrique

Description Enregistrements trouves retourne le nombre d'enregistrements constituant la slection courante de table (par opposition, Enregistrements dans table retourne le nombre total d'enregistrements d'une table). Exemple L'exemple suivant propose une technique de boucle couramment utilise pour se dplacer parmi les enregistrements de la slection courante. La mme opration peut tre ralise l'aide de la commande APPLIQUER A SELECTION : ` Dpart sur le premier enregistrement de la slection DEBUT SELECTION ([Personnes]) Boucle ($VElEnreg; 1; Enregistrements trouves ([Personnes])) Faire quelque chose ` Raliser une opration avec l'enregistrement ENREGISTREMENT SUIVANT ([Personnes]) ` Passage l'enregistrement suivant Fin de boucle

Rfrence Enregistrements dans table.

1518 4e Dimension - Langage

SUPPRIMER SELECTION

Slections version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER SELECTION {(table)} Paramtre table Type Table Description Table de laquelle supprimer la slection courante ou Table par dfaut si ce paramtre est omis

Description La commande SUPPRIMER SELECTION supprime la slection courante d'enregistrements de table. Si la slection courante est vide, SUPPRIMER SELECTION ne fait rien. Aprs la suppression des enregistrements, la slection courante est vide. Les enregistrements supprims pendant une transaction sont verrouills pour les autres utilisateurs et/ou process jusqu' ce que la transaction soit valide ou annule. Attention : La suppression d'une slection d'enregistrements est une opration dfinitive. Elle ne peut tre annule par la suite. L'option Suppression physique de la bote de dialogue de dfinition des Proprits des tables vous permet d'augmenter la vitesse des suppressions lors de l'utilisation de SUPPRIMER SELECTION. Exemple (1) L'exemple suivant affiche tous les enregistrements de la table [Personnes] et permet l'utilisateur de slectionner ceux qu'il souhaite effacer. L'exemple est en deux parties. La premire est la mthode affichant les enregistrements. La seconde est la mthode objet d'un bouton 'Supprimer'. Voici la premire mthode : TOUT SELECTIONNER ([Personnes]) ` Slection de tous les enregistrements ` Dfinition du formulaire listant les enregistrements FORMULAIRE SORTIE ([Personnes]; "FormSortie") VISUALISER SELECTION ([Personnes]) ` Affichage de tous les enregistrements

4e Dimension - Langage 1519

Voici la mthode objet du bouton Supprimer, apparaissant dans le pied de page du formulaire sortie. La mthode utilise les enregistrements slectionns par l'utilisateur (l'ensemble systme UserSet) pour effacer la slection (notez que si l'utilisateur ne slectionne aucun enregistrement, SUPPRIMER SELECTION ne fait rien) : ` Demander confirmation que l'utilisateur veut rellement supprimer les enregistrements CONFIRMER ("Vous avez slectionn "+Chaine(Enregistrements dans ensemble("UserSet"))+" enregistrements supprimer. "+Caractere(13)+"Cliquez sur OK pour confirmer l'opration.") Si(OK=1) UTILISER ENSEMBLE("UserSet") ` Utiliser l'ensemble dfini par l'utilisateur SUPPRIMER SELECTION([Personnes]) ` Supprimer la slection d'enregistrements Fin de si TOUT SELECTIONNER([Personnes]) ` Slection de tous les enregistrements

(2) Lorsqu'un SUPPRIMER SELECTION rencontre un enregistrement verrouill, celui-ci n'est pas supprim. Tous les enregistrements verrouills sont placs dans un ensemble systme nomm LockedSet. Aprs l'excution de SUPPRIMER SELECTION, vous pouvez tester cet ensemble afin de vrifier si des enregistrements taient verrouills. La boucle suivante s'excutera jusqu' ce que tous les enregistrements aient t supprims.

Repeter ` Rpter pour chaque enregistrement verrouill SUPPRIMER SELECTION ([CetteTable]) ` Si des enregistrements sont verrouills Si (Enregistrements dans ensemble("LockedSet")#0) UTILISER ENSEMBLE("LockedSet") ` Slectionner les enregistrements verrouills Fin de si Jusque (Enregistrements dans ensemble("LockedSet")=0) ` Jusqu' ce qu'il n'y en ait plus

Rfrence MODIFIER SELECTION, Prsentation des ensembles, Verrouillage d'enregistrements, VISUALISER SELECTION.

1520 4e Dimension - Langage

Numero dans selection

Slections version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Numero dans selection {(table)} Numrique Paramtre table Rsultat Type Table Numrique Description Table de laquelle vous voulez obtenir le numro de l'enregistrement courant dans la slection Numro dans la slection

Description Numero dans selection retourne la position de l'enregistrement courant dans la slection courante de table. Si la slection est non vide et si l'enregistrement courant en fait partie, Numero dans selection retourne une valeur comprise entre 1 et Enregistrements trouves. Si la slection est vide ou s'il n'y a pas d'enregistrement courant, Numero dans selection retourne 0. Le numro de l'enregistrement dans la slection est diffrent du numro retourn par Numero enregistrement (Numero enregistrement retourne le numro physique de l'enregistrement dans la table). Le numro de l'enregistrement dans la slection dpend de la slection courante. Pour plus de prcisions sur les numros d'enregistrements, reportez-vous la section A propos des numros d'enregistrements. Exemple L'exemple suivant stocke le numro de l'enregistrement courant de la slection dans une variable :

` Obtenir le numro de l'enregistrement dans la slection NumEnrCourant := Numero dans selection ([Personnes])

Rfrence A propos des numros d'enregistrements, ALLER DANS SELECTION, Enregistrements trouves.

4e Dimension - Langage 1521

ALLER DANS SELECTION

Slections version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ALLER DANS SELECTION ({table; }position) Paramtre table position Type Table Numrique Description Table dans laquelle aller l'enregistrement spcifi ou Table par dfaut si ce paramtre est omis Position de l'enregistrement dans la slection

Description La commande ALLER DANS SELECTION fait de l'enregistrement spcifi parmi la slection courante de table l'enregistrement courant. La slection courante n'est pas modifie. Le paramtre position n'est pas quivalent au numro retourn par Numero enregistrement. Ce paramtre reprsente la position de l'enregistrement au sein de la slection courante. Cette position dpend de la manire dont la slection a t cre et si elle a t trie. Pour plus de prcisions sur les numros d'enregistrements, reportez-vous la section A propos des numros d'enregistrements. S'il n'y a aucun enregistrement dans la slection courante ou si position n'est pas dans la slection, ALLER DANS SELECTION ne fait rien. Si vous passez 0 dans position, il ny a plus denregistrement courant dans table. Ce mcanisme permet de dslectionner tous les enregistrements dune liste, notamment dans les sous-formulaires inclus. Exemple L'exemple suivant charge les valeurs du champ [Personnes]Nom dans le tableau taNoms. Un tableau d'entiers longs, numEnr, est rempli avec des numros qui reprsenteront ceux des enregistrements slectionns. Les deux tableaux sont alors tris : ` Crer ici la slection de la table [Personnes] `... ` Rcuprer les noms SELECTION VERS TABLEAU ([Personnes]Nom; taNoms) ` Crer un tableau pour les numros d'enregistrements slectionns $vELNbEnrgs:=Taille tableau (taNoms) TABLEAU ENTIER LONG (numEnr; $vELNbEnrgs)

1522 4e Dimension - Langage

Boucle ($Enrg; 1;$vELNbEnrgs) ` Remplir le tableau avec ces numros numEnr{$Enrg} := $Enrg Fin de boucle ` Trier les deux tableaux par ordre alphabtique TRIER TABLEAU (taNoms; numEnr; >) Si le tableau taNoms est affich dans une zone de dfilement, l'utilisateur peut cliquer sur l'un des lments. Comme les deux tableaux ont t tris de manire synchronise, tout lment de numEnr fournit le numro de l'enregistrement slectionn pour lequel le nom a t stock dans l'lment de taNoms correspondant. La mthode objet de la zone de dfilement taNoms suivante slectionne le bon enregistrement dans la slection de [Personnes] en fonction de ce que l'utilisateur a choisi dans la zone de dfilement. Au cas ou : (Evenement formulaire=Sur clic) Si (taNoms#0) ALLER DANS SELECTION (numEnr{taNoms}) Fin de si Fin de cas

Rfrence Numero dans selection.

4e Dimension - Langage 1523

DEBUT SELECTION

Slections version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DEBUT SELECTION {(table)} Paramtre table Type Table Description Table de laquelle charger le premier enregistrement de la slection courante ou Table par dfaut si ce paramtre est omis

Description DEBUT SELECTION charge en mmoire le premier enregistrement de la slection courante de table et en fait l'enregistrement courant. Toutes les commandes de recherche, de slection et de tri font galement du premier enregistement l'enregistrement courant. Si la slection courante est vide ou si l'enregistrement courant est dj le premier enregistrement de la slection, DEBUT SELECTION ne fait rien. Cette commande est principalement utilise aprs un appel UTILISER ENSEMBLE, pour dbuter une boucle dans la slection d'enregistrements partir du premier enregistrement. Cependant, il est tout fait envisageable de l'appeler depuis une sous-routine lorsque vous souhaitez vous assurer que l'enregistrement est bien le premier. Exemple L'exemple suivant charge le premier enregistrement de la table [Clients] :

DEBUT SELECTION ([Clients])

Rfrence ALLER A DERNIER ENREGISTREMENT, Avant selection, ENREGISTREMENT PRECEDENT, ENREGISTREMENT SUIVANT, Fin de selection.

1524 4e Dimension - Langage

Numero de ligne affichee

Slections version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Numero de ligne affichee Entier long Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Entier long Numro de ligne en cours daffichage

Description La commande Numero de ligne affichee fonctionne uniquement dans le contexte de lvnement formulaire Sur affichage corps. Elle retourne le numro de la ligne en cours de traitement durant laffichage lcran dune liste denregistrements. Si Numero de ligne affichee est appele en-dehors de laffichage dune liste, elle retourne 0. Lorsque la ligne affiche nest pas vide (cest--dire lorsquelle est associe un enregistrement), la valeur retourne par Numero de ligne affichee est identique celle retourne par Numero dans selection. Comme Numero dans selection, Numero de ligne affichee dbute 1. Cette commande est utile lorsque vous souhaitez appliquer un traitement chaque ligne dun formulaire liste affich lcran, y compris aux lignes vides.

4e Dimension - Langage 1525

Exemple Cet exemple permet dappliquer une couleur alterne un formulaire liste affich lcran, mme pour les lignes sans enregistrement : `Mthode du formulaire liste Si (Evenement formulaire=Sur affichage corps) Si (Numero de ligne affichee % 2 = 0) `Noir sur blanc pour le texte des lignes paires FIXER COULEURS RVB([Table 1]Champ1; 0; 0x00FFFFFF); Sinon `Noir sur bleu ple pour le texte des lignes impaires FIXER COULEURS RVB([Table 1]Champ1; 0; 0x00E0E0FF) Fin de si Fin de si

Rfrence Evenement formulaire, Numero dans selection.

1526 4e Dimension - Langage

ENREGISTREMENT SUIVANT

Slections version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENREGISTREMENT SUIVANT {(table)} Paramtre table Type Table Description Table dans laquelle se placer sur l'enregistrement suivant ou Table par dfaut si ce paramtre est omis

Description La commande ENREGISTREMENT SUIVANT place le pointeur d'enregistrement courant sur l'enregistrement suivant dans la slection courante de table pour le process courant. Si la slection courante est vide, ou si Avant selection ou Fin de selection retourne Vrai, ENREGISTREMENT SUIVANT ne fait rien. Si ENREGISTREMENT SUIVANT place le pointeur d'enregistrement courant aprs la fin de la slection courante, Fin de selection retourne Vrai, et il n'y a alors plus d'enregistrement courant. Lorsque Fin de selection retourne Vrai, utilisez les commandes DEBUT SELECTION, ALLER A DERNIER ENREGISTREMENT ou ALLER DANS SELECTION pour replacer le pointeur d'enregistrement courant dans la slection courante. Exemple Reportez-vous l'exemple de la commande VISUALISER SELECTION. Rfrence ALLER A DERNIER ENREGISTREMENT, Avant selection, DEBUT SELECTION, ENREGISTREMENT PRECEDENT, Fin de selection.

4e Dimension - Langage 1527

ALLER A DERNIER ENREGISTREMENT

Slections version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ALLER A DERNIER ENREGISTREMENT {(table)} Paramtre table Type Table Description Table de laquelle vous voulez aller au dernier enregistrement ou Table par dfaut si ce paramtre est omis

Description ALLER A DERNIER ENREGISTREMENT dsigne le dernier enregistrement de la slection de table comme enregistrement courant et le charge en mmoire. Si la slection est vide, ALLER A DERNIER ENREGISTREMENT ne fait rien. Exemple L'exemple suivant dsigne le dernier enregistrement de la table [Contacts] comme enregistrement courant :

ALLER A DERNIER ENREGISTREMENT ([Contacts])

Rfrence Avant selection, DEBUT SELECTION, ENREGISTREMENT PRECEDENT, ENREGISTREMENT SUIVANT, Fin de selection.

1528 4e Dimension - Langage

ENREGISTREMENT PRECEDENT

Slections version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENREGISTREMENT PRECEDENT {(table)} Paramtre table Type Table Description Table dans laquelle se placer sur l'enregistrement prcdent de la slection courante ou Table par dfaut si ce paramtre est omis

Description ENREGISTREMENT PRECEDENT place le pointeur d'enregistrement courant sur l'enregistrement prcdent dans la slection courante de table pour le process courant. Si la slection courante est vide, ou si Avant selection ou Fin de selection renvoie Vrai, ENREGISTREMENT PRECEDENT ne fait rien. Si ENREGISTREMENT PRECEDENT place le pointeur d'enregistrement courant avant la slection courante, Avant selection retourne Vrai, et il n'y a plus d'enregistrement courant. Dans ce cas, utilisez les commandes DEBUT SELECTION, ALLER A DERNIER ENREGISTREMENT ou ALLER DANS SELECTION pour replacer le pointeur d'enregistrement courant dans la slection courante. Rfrence ALLER A DERNIER ENREGISTREMENT, Avant selection, DEBUT SELECTION, ENREGISTREMENT SUIVANT, Fin de selection.

4e Dimension - Langage 1529

Avant selection

Slections version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Avant selection {(table)} Boolen Paramtre table Rsultat Type Table Boolen Description Table pour laquelle vous testez si le pointeur se trouve avant la slection Avant slection (Vrai) sinon (Faux)

Description La fonction Avant selection retourne Vrai lorsque le pointeur d'enregistrement courant se trouve avant le premier enregistrement de la slection courante de table. Avant selection est gnralement utilise pour vrifier si la commande ENREGISTREMENT PRECEDENT a dplac le pointeur d'enregistrement courant avant le premier enregistrement. Si la slection courante est vide, Avant selection retourne Vrai. Pour replacer le pointeur d'enregistrement courant dans la slection courante, utilisez les commandes DEBUT SELECTION, ALLER A DERNIER ENREGISTREMENT ou ALLER DANS SELECTION. ENREGISTREMENT SUIVANT ne replace pas le pointeur d'enregistrement courant dans la slection courante. Avant selection retourne Vrai dans l'en-tte lorsqu'un tat est en cours d'impression l'aide de la commande IMPRIMER SELECTION ou partir de la commande de menu Imprimer. Vous pouvez utiliser le code suivant pour tester le premier en-tte et imprimer un en-tte spcial pour la premire page : ` Mthode d'un formulaire sortie utilis pour un tat $vpFormTable:=Table du formulaire courant Au cas ou ` ... : (Evenement formulaire=Sur entte) ` La zone en-tte va tre imprime Au cas ou : (Avant selection($vpFormTable->)) ` Le code pour la premire rupture d'en-tte doit tre plac ici ` ... Fin de cas Fin de cas

1530 4e Dimension - Langage

Exemple La mthode formulaire suivante est utilise pendant l'impression d'un tat. Elle dfinit une variable vTitre imprimer dans la zone d'en-tte sur la premire page : ` Mthode formulaire [Finances];"Tableau" Au cas ou ` ... : (Evenement formulaire=Sur entte) ` La zone en-tte va tre imprime Au cas ou : (Avant selection([Finances])) vTitre := "Etat des finances pour 1997" ` Titre de la premire page Sinon vTitre := "" ` Effacer le titre pour les autres pages Fin de cas Fin de cas

Rfrence DEBUT SELECTION, ENREGISTREMENT PRECEDENT, Evenement formulaire, Fin de selection, IMPRIMER SELECTION.

4e Dimension - Langage 1531

Fin de selection

Slections version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Fin de selection {(table)} Boolen Paramtre table Type Table Description Table pour laquelle tester si le pointeur d'enregistrement courant est au-del du dernier enregistrement de la slection courante ou Table par dfaut si ce paramtre est omis Oui (Vrai), Non (Faux)

Rsultat

Boolen

Description La fonction Fin de selection retourne Vrai lorsque le pointeur de l'enregistrement courant se trouve aprs le dernier enregistrement de la slection courante de table. Fin de selection est gnralement utilise pour tester si l'appel la commande ENREGISTREMENT SUIVANT place ou non le pointeur d'enregistrement courant derrire le dernier enregistrement de la slection. Si la slection courante est vide, Fin de selection retourne Vrai. Pour replacer le pointeur d'enregistrement courant dans la slection, utilisez les commandes ALLER A DERNIER ENREGISTREMENT, DEBUT SELECTION ou ALLER DANS SELECTION. ENREGISTREMENT PRECEDENT ne replace pas le pointeur dans la slection. Fin de selection retourne galement Vrai lors de l'impression du dernier pied de page d'un tat, dclenche par la commande IMPRIMER SELECTION ou le menu Imprimer. Vous pouvez utiliser l'instruction suivante pour intercepter le dernier pied de page et insrer une mention particulire : ` Mthode d'un formulaire sortie utilis pour imprimer un tat $vpFormTable:=Table du formulaire courant Au cas ou ` ... : (Evenement formulaire=Sur impression pied de page) ` Un pied Si (Fin de selection($vpFormTable->)) ` Le code pour le dernier pied de page doit tre plac ici Sinon ` Le code pour le pied de page doit tre plac ici Fin de si Fin de cas

1532 4e Dimension - Langage

Exemple La mthode formulaire de l'exemple suivant est utilise lors de l'impression d'un tat. Elle cre la variable VPied, imprimer dans le pied de page de la dernire page : ` Mthode formulaire [Finances];"Tableau" Au cas ou ` ... : (Evenement formulaire=Sur impression pied de page) Si (Fin de selection([Finances])) VPied:= "1997 SARL Dupont" ` Dfinir le pied de page de la dernire page Sinon VPied:= "" ` Effacer le pied de page pour toutes les autres pages Fin de si Fin de cas

Rfrence ALLER A DERNIER ENREGISTREMENT, Avant selection, ENREGISTREMENT SUIVANT, Evenement formulaire, IMPRIMER SELECTION.

4e Dimension - Langage 1533

VISUALISER SELECTION

Slections version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

VISUALISER SELECTION ({table}{; modeSlection}{; saisieListe}{; *}{; *}) Paramtre table modeSlection saisieListe * * Type Table Entier long Boolen Description Table laquelle appartient la slection ou Table par dfaut si ce paramtre est omis Mode de slection Autoriser saisie en liste Utiliser le formulaire sortie en cas de slection d'un seul enregistrement et masquer les barres de dfilement dans le formulaire entre Afficher les barres de dfilement dans le formulaire entre (= annuler le second effet du premier paramtre *)

Description VISUALISER SELECTION affiche, pour le process en cours, la slection courante de table dans le formulaire sortie courant. Les enregistrements sont affichs sous la forme d'une liste que l'on peut faire dfiler, semblable celle du mode Utilisation. Lorsque l'utilisateur doubleclique sur un enregistrement, par dfaut celui-ci s'affiche dans le formulaire entre courant. La liste est place dans la fentre de premier plan. Si vous souhaitez afficher une slection et pouvoir galement modifier un enregistrement dans le formulaire entre courant une fois que vous avez double-cliqu dessus (comme vous le faites dans la fentre du mode Utilisation) ou via le mode Saisie en liste utilisez MODIFIER SELECTION au lieu de VISUALISER SELECTION. Toutes les explications suivantes s'appliquent ces deux commandes, hormis la possibilit de modifier des enregistrements. Aprs qu'un VISUALISER SELECTION ait t excut, il n'y a plus d'enregistrement courant. Vous devez utiliser une commande telle que DEBUT SELECTION ou ALLER A DERNIER ENREGISTREMENT pour en rcuprer un. Le paramtre modeSlection vous permet de dfinir les possibilits de slection denregistrements dans la liste l'aide de la souris. Vous pouvez passer dans ce paramtre une des constantes du thme Options de formulaire : si vous passez Pas de slection (0), il ne sera pas possible de slectionner un enregistrement dans la liste. si vous passez Slection unique (1), seule la slection dun enregistrement la fois sera autorise.

1534 4e Dimension - Langage

si vous passez Slection multiple (2), lutilisateur pourra slectionner plusieurs enregistrements. Pour slectionner des enregistrements contigus, il suffit de cliquer sur le premier enregistrement slectionner puis d'appuyer sur la touche Majuscule avant de cliquer sur le dernier. Pour slectionner des enregistrements non adjacents, il suffit de cliquer sur chaque enregistrement en maintenant enfonce la touche Ctrl (sous Windows) ou Commande (sous MacOS). Si vous ne passez pas le paramtre modeSlection, par dfaut le mode Slection multiple est utilis. Le paramtre saisieListe vous permet dautoriser le mode Saisie en liste dans la liste affiche. Ce mode permet l'utilisateur de slectionner et de modifier directement les valeurs des enregistrements dans le formulaire sortie. Passez Vrai pour autoriser ce mode ou Faux pour ne pas lautoriser. Par dfaut, si vous ne passez pas le paramtre saisieListe, le mode Saisie en liste nest pas autoris. A noter qu'avec la commande VISUALISER SELECTION, ce paramtre permet uniquement la slection de valeurs dans la liste et non leur modification. En effet, la commande VISUALISER SELECTION place la table courante en Lecture seulement. Seule la commande MODIFIER SELECTION permet effectivement la saisie de valeurs. Note : La commande CHOIX SAISISSABLE permet dactiver ou de dsactiver le mode Saisie en liste la vole. Lorsque la slection ne contient qu'un enregistrement, et que le premier paramtre optionnel * n'est pas pass, l'enregistrement s'affichera directement dans le formulaire entre. Si le premier paramtre optionnel * est spcifi, l'enregistrement unique sera affich dans le formulaire sortie. Si le premier paramtre optionnel * est spcifi et que l'utilisateur affiche l'enregistrement dans le formulaire entre en double-cliquant dessus, les barres de dfilement du formulaire seront masques. Pour annuler ce second effet du premier paramtre optionnel *, passez le second paramtre optionnel *. Vous pouvez placer des boutons personnaliss dans la zone d'en-tte ou de pied de page du formulaire sortie pour terminer l'excution de la commande VISUALISER SELECTION. Vous pouvez utiliser des boutons automatiques Valider ou Annuler permettant de sortir de la liste ou utiliser une mthode objet qui appelle les commandes VALIDER ou NE PAS VALIDER. Lorsquun formulaire sortie appel par la commande VISUALISER SELECTION est dpourvu de boutons, seule la touche Echap (Windows) ou Esc (MacOS) permet de quitter la liste. Pendant et aprs l'excution d'un VISUALISER SELECTION, les enregistrements slectionns par l'utilisateur sont conservs dans un ensemble systme nomm UserSet. Aprs l'excution de la commande, l'ensemble UserSet est accessible pendant un VISUALISER SELECTION aux mthodes objet de boutons, aux mthodes appeles par des commandes de menu, ainsi que pour la mthode projet qui avait appel VISUALISER SELECTION.

4e Dimension - Langage 1535

Exemples (1) L'exemple suivant slectionne tous les enregistrements de la table [Personnes]. La commande VISUALISER SELECTION est alors utilise pour afficher les enregistrements et permettre l'utilisateur de dsigner ceux qu'il souhaite imprimer. Enfin, les enregistrements slectionns sont rcuprs l'aide de la commande UTILISER ENSEMBLE et imprims avec IMPRIMER SELECTION :

TOUT SELECTIONNER([Personnes]) ` Slection de tous les enregistrements VISUALISER SELECTION ([Personnes]; *)` Affichage des enregistrements UTILISER ENSEMBLE ("UserSet") ` Utiliser uniquement les enregistrements slectionns ` par l'utilisateur IMPRIMER SELECTION ([Personnes]) ` Imprimer les enregistrements slectionns

(2) Reportez-vous l'exemple n6 de la commande Evenement formulaire ; il indique tous les tests que vous pourrez avoir besoin d'effectuer pour surveiller la totalit des vnements intervenant pendant l'excution de la commande VISUALISER SELECTION. (3) Pour reproduire, par exemple, les fonctionnalits apportes par le menu Slection du mode Utilisation lorsque vous utilisez MODIFIER SELECTION ou VISUALISER SELECTION en mode Menus crs, procdez de la manire suivante : I. Dans le mode Structure, crez une barre de menus comportant les menus qui vous intressent (par exemple Tout montrer, Recherche et Trier). II. Associez cette barre de menus ( l'aide du menu Barre de menus associe dans la bote de dialogue des proprits du formulaire) au formulaire sortie utilis avec les commandes VISUALISER SELECTION ou MODIFIER SELECTION. III. Associez les mthodes projet suivantes vos commandes de menu : ` M_TOUT_MONTRER (associe la commande de menu Tout montrer) $vpCourTable:=Table du formulaire courant TOUT SELECTIONNER($vpCourTable->) ` M_Recherche (associe la commande de menu Recherche) $vpCourTable:=Table du formulaire courant CHERCHER($vpCourTable->) ` M_TRIER (associe la commande de menu Trier) $vpCourTable:=Table du formulaire courant TRIER($vpCourTable->)

1536 4e Dimension - Langage

Vous pouvez aussi utiliser d'autres commandes telles que IMPRIMER SELECTION, QR ETAT, etc. , afin de reproduire les commandes de menu "standard" chaque fois que vous affichez ou modifiez une slection en mode Menus crs. Grce la commande Table du formulaire courant, ces mthodes sont gnriques et les barres de menus auxquelles elles sont associes peuvent tre rattaches tout formulaire de sortie ou toute table. Rfrence Evenement formulaire, MODIFIER SELECTION, Prsentation des ensembles.

4e Dimension - Langage 1537

MODIFIER SELECTION

Slections version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

MODIFIER SELECTION ({table}{; modeSlection}{; saisieListe}{; *}{; *}) Paramtre table modeSlection saisieListe * * Type Table Entier long Boolen Description Table afficher et modifier ou Table par dfaut si ce paramtre est omis Mode de slection Autoriser saisie en liste Utiliser formulaire sortie pour un seul enregistrement et cacher les barres de dfilement dans le formulaire entre Afficher les barres de dfilement dans le formulaire entre (= annuler le second effet du premier paramtre *)

Description La commande MODIFIER SELECTION est quasiment identique la commande VISUALISER SELECTION. Reportez-vous la commande VISUALISER SELECTION pour une description dtaille. Les seules diffrences entre ces deux commandes sont les suivantes : 1. VISUALISER SELECTION vous permet d'afficher les enregistrements de la slection courante de table dans le formulaire sortie courant, ou dans le formulaire entre lorsque vous double-cliquez sur un enregistrement. Avec MODIFIER SELECTION, vous pouvez modifier un enregistrement dans le formulaire entre lorsque vous double-cliquez dessus (s'il n'est pas dj charg par un autre utilisateur/process) ou en mode Saisie en liste (s'il est autoris). 2. VISUALISER SELECTION place automatiquement la table en mode Lecture seulement. MODIFIER SELECTION place automatiquement la table en mode Lecture-criture. Les deux commandes restaurent l'tat prcdent de la table lorsque leur excution est termine. Rfrence Evenement formulaire, Prsentation des ensembles, VISUALISER SELECTION.

1538 4e Dimension - Langage

APPLIQUER A SELECTION

Slections version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

APPLIQUER A SELECTION ({table; }formule) Paramtre table formule Type Table Formule Description Table dans laquelle appliquer la formule ou Table par dfaut si ce paramtre est omis Ligne de code ou mthode

Description La commande APPLIQUER A SELECTION applique formule chaque enregistrement de la slection courante de table. La formule peut tre une ligne d'instructions ou une mthode (dans ce cas, le nom de la mthode doit tre saisi sans ""). Si formule entrane la modification d'un enregistrement de table, l'enregistrement modifi est sauvegard. Si formule ne modifie pas d'enregistrement, aucune sauvegarde n'est ralise. Si la slection courante est vide, APPLIQUER A SELECTION ne fait rien. La formule peut faire appel un champ d'une table lie si le lien est automatique. La commande APPLIQUER A SELECTION peut tre utilise pour rcuprer et traiter des informations sur une slection d'enregistrements (par exemple, calcul d'un total), ou pour modifier une slection (par exemple, mettre en majuscule la premire lettre d'un champ). Si cette commande est utilise l'intrieur d'une transaction, toutes les oprations ralises pourront tre annules si la transaction n'est pas valide. 4D Server : Le serveur n'excute aucune des commandes passes dans formule. Chaque enregistrement de la slection est renvoy sur le poste client pour traitement et modification. Un thermomtre de progression s'affiche pendant l'excution d'un APPLIQUER A SELECTION. Un appel pralable la commande SUPPRIMER MESSAGES permet de supprimer ce thermomtre. Lorsque le thermomtre de progression est affich, l'utilisateur peut annuler l'opration. Exemples (1) L'exemple suivant met en majuscule tous les noms de la table :

APPLIQUER A SELECTION([Emp];[Emp]Nom:= Majusc([Emp]Nom))

4e Dimension - Langage 1539

(2) Lorsque APPLIQUER A SELECTION rencontre un enregistrement verrouill et le modifie, celui-ci n'est pas sauvegard. Tous les enregistrements verrouills rencontrs par la commande sont placs dans un ensemble systme appel LockedSet. Aprs l'excution d'un APPLIQUER A SELECTION, il est recommand de tester l'ensemble LockedSet pour vrifier la prsence d'enregistrements verrouills. La boucle suivante s'excute jusqu' ce que tous les enregistrements aient t modifis :

Repeter ` Pour chaque enregistrement verrouill APPLIQUER A SELECTION ([Emp];[Emp]Nom:= Majusc([Emp]Nom)) ` Slection des enregistrements verrouills uniquement UTILISER ENSEMBLE ("LockedSet") ` Jusqu' ce qu'il n'y ait plus d'enregistrement verrouill Jusque (Enregistrements dans ensemble("LockedSet")=0)

(3) Cet exemple utilise une mthode :

TOUT SELECTIONNER([Emp]) APPLIQUER A SELECTION([Emp];Capitales)

Rfrence Prsentation des ensembles. Variables et ensembles systme Si l'utilisateur clique sur le bouton Stop dans le thermomtre de progression, la variable systme OK prend la valeur 0. Sinon, elle prend la valeur 1.

1540 4e Dimension - Langage

REDUIRE SELECTION

Slections version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

REDUIRE SELECTION ({table; }nombre) Paramtre table nombre Type Table Numrique Description Table de laquelle rduire la slection ou Table par dfaut si ce paramtre est omis Nombre d'enregistrements conserver

Description La commande REDUIRE SELECTION cre une nouvelle slection d'enregistrements pour table. La commande rduit la slection aux nombre premiers enregistrements. REDUIRE SELECTION s'applique la slection courante de table pour le process courant. Le premier enregistrement de la nouvelle slection courante devient l'enregistrement courant. Note : Si l'instruction REDUIRE SELECTION(0) est excute, il n'y a plus de slection ni d'enregistrement courants dans la table. Exemple L'exemple suivant tablit des statistiques pour une comptition mondiale parmi les revendeurs dans plus de 20 pays. Pour chaque pays, les trois meilleurs revendeurs qui ont vendu plus de 50 000 Euros de produits font partie des 100 meilleurs revendeurs dans le monde et sont recompenss. Avec peu de lignes de codes, cette requte complexe peut tre effectue en utilisant des recherches indexes : ENSEMBLE VIDE([Revendeurs];"Gagnants") ` Crer un ensemble vide SCAN INDEX([Revendeurs]Montant;100;<) ` Chercher la fin de l'index NOMMER ENSEMBLE([Revendeurs];"100 Meilleurs Revendeurs") ` Placer les enregistrements slectionns dans un ensemble Boucle ($Pays;1;Enregistrements dans table([Pays])) ` pour chaque pays ` Chercher les revendeurs dans ce pays CHERCHER([Revendeurs];[Revendeurs]Pays=NomPays;*) ` ...qui ont vendu pour plus de 50000 F CHERCHER(&;[Revendeurs];[Revendeurs]Montant vendu>=50000) ` Les placer dans un ensemble NOMMER ENSEMBLE([Revendeurs];"GagnantsRevendeurs") ` Ils doivent tre placs dans le groupe des 100 meilleurs revendeurs INTERSECTION("GagnantsRevendeurs";"100 Meilleurs Revendeurs"; "GagnantsRevendeurs") UTILISER ENSEMBLE("GagnantsRevendeurs") ` Gagnants potentiels pour le pays

4e Dimension - Langage 1541

` Trier les rsultats en ordre dcroissant TRIER([Revendeurs];[Revendeurs]Montant vendu;<) REDUIRE SELECTION([Revendeurs];3) ` Garder les trois meilleurs ` Les gagnants pour le pays NOMMER ENSEMBLE([Revendeurs];"GagnantsRevendeurs") ` Les placer dans un ensemble des gagnants mondiaux REUNION("GagnantsRevendeurs";"LesGagnants";"LesGagnants") Fin de boucle ` Nous n'avons plus besoin de cet ensemble EFFACER ENSEMBLE("100 Meilleurs Revendeurs") ` Nous n'avons plus besoin de cet ensemble non plus EFFACER ENSEMBLE("GagnantsRevendeurs") UTILISER ENSEMBLE("LesGagnants") ` Voici les gagnants EFFACER ENSEMBLE("LesGagnants") ` Nous n'avons plus besoin de cet ensemble FORMULAIRE SORTIE([Revendeurs];"Lettre des gagnants") ` Slectionner la lettre IMPRIMER SELECTION([Revendeurs]) ` Imprimer les lettres

Rfrence CHERCHER, Prsentation des ensembles, SCAN INDEX, TRIER.

1542 4e Dimension - Langage

SCAN INDEX

Slections version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SCAN INDEX (champ; nombre{; > ou <}) Paramtre champ nombre > ou < Type Champ Numrique Description Champ index avec lequel "scanner" les enregistrements Nombre d'enregistrements retourner > partir du dbut de l'index < partir de la fin de l'index

Description La commande SCAN INDEX retourne une slection de nombre d'enregistrements de table. Cette commande est extrmement rapide car elle utilise l'index. Si vous passez <, SCAN INDEX retourne nombre d'enregistrements partir de la fin de l'index (valeurs suprieures). Si vous passez >, SCAN INDEX retourne nombre d'enregistrements partir du dbut de l'index (valeurs infrieures). Si vous ne passez pas le dernier paramtre, la commande retourne nombre d'enregistrements partir du dbut de l'index (quivaut passer >). SCAN INDEX fonctionne uniquement avec des champs indexs. La commande modifie la slection courante de la table pour le process courant, mais il n'y a pas d'enregistrement courant. Si vous spcifiez un nombre d'enregistrements suprieur au nombre d'enregistrements prsents dans la table, SCAN INDEX retourne tous les enregistrements. Exemple Cet exemple envoie des lettres aux 50 plus mauvais clients puis aux 50 meilleurs clients :

SCAN INDEX([Clients]TotalD;50;<) ` Obtenir la liste des 50 plus mauvais clients TRIER([Clients]CodePostal;>) ` Trier par code postal FORMULAIRE SORTIE([Clients];"Menace") IMPRIMER SELECTION([Clients]) ` Imprimer les lettres SCAN INDEX([Clients]TotalD;50;>) ` Obtenir la liste des 50 meilleurs clients TRIER([Clients]CodePostal;>) ` Trier par code postal FORMULAIRE SORTIE([Clients];"Remerciement") IMPRIMER SELECTION([Clients]) ` Imprimer les lettres

Rfrence CHERCHER, REDUIRE SELECTION, TRIER.

4e Dimension - Langage 1543

ENREGISTREMENT SELECTION

Slections version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENREGISTREMENT SELECTION {(table)} Paramtre table Type Table Description Table de laquelle rduire la slection un enregistrement

Description La commande ENREGISTREMENT SELECTION rduit la slection courante de table l'enregistrement courant. S'il n'y a pas d'enregistrement courant, ENREGISTREMENT SELECTION ne fait rien. Note historique : A l'origine, cette commande tait utile pour "replacer" dans la slection courante un enregistrement qui avait t empil puis dpil de la pile d'enregistrements pendant que la slection de la table tait modifie. Cependant, puisque dans la version 6 de 4D, FIXER DESTINATION RECHERCHE vous permet d'effectuer une recherche sans changer la slection ni l'enregistrement courants de la table, vous n'avez plus besoin d'empiler et de dpiler un enregistrement courant pour effectuer une recherche sur sa table. Par consquent, ENREGISTREMENT SELECTION est moins utile, moins que vous ne souhaitiez expressment, pour une autre raison, rduire la slection d'une table l'enregistrement courant.

1544 4e Dimension - Langage

MARQUER ENREGISTREMENTS

Slections version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

MARQUER ENREGISTREMENTS ({table}{; nomEnsemble}{; *}) Paramtre table nomEnsemble * Type Table Alpha * Description Table de laquelle marquer les enregistrements Si omis, table du formulaire courant Ensemble denregistrements marquer ou Ensemble Userset si ce paramtre est omis Inactiver le dfilement automatique de la liste

Description La commande MARQUER ENREGISTREMENTS permet de surligner des enregistrements dans un formulaire de sortie. Cette opration est identique la slection en mode liste, par lutilisateur, denregistrement(s) laide des combinaisons Maj+clic ou Ctrl+clic (Windows) ou Commande+clic (MacOS). Les enregistrements marqus sont mis en vido inverse. La slection courante nest pas modifie. Note : Lensemble systme UserSet est mis jour aprs le redessinement des enregistrements, cest--dire aprs la fin de lexcution de toute la mthode dappel et non immdiatement aprs lexcution de la commande MARQUER ENREGISTREMENTS. Le paramtre table permet de dsigner la table de laquelle les enregistrements doivent tre marqus. Ce paramtre permet notamment de marquer les enregistrements des sousformulaires inclus nappartenant donc pas la table courante. Si vous passez un nom densemble valide dans le paramtre nomEnsemble, la commande sappliquera aux enregistrements de cet ensemble pour la table courante. Si vous omettez le paramtre nomEnsemble, la commande marquera les enregistrements de lensemble systme UserSet courant pour la table courante. Le paramtre *, sil est pass, provoque linactivation de la fonction de dfilement automatique de la liste si les enregistrements marqus ne sont pas visibles. Ce mcanisme autorise la gestion personnalise du dfilement via la commande DEFILER LIGNES.

4e Dimension - Langage 1545

Exemple Dans un formulaire en liste affich par la commande MODIFIER SELECTION, vous souhaitez que lutilisateur puisse effectuer des recherches, sans que la slection courante soit modifie. Pour cela, placez un bouton Chercher dans le formulaire et associez-lui la mthode suivante : FIXER DESTINATION RECHERCHE(Vers ensemble;"UserSet") CHERCHER FIXER DESTINATION RECHERCHE(Vers slection courante) MARQUER ENREGISTREMENTS

Lorsque lutilisateur clique sur le bouton, la bote de dialogue standard de recherche apparat. Une fois la recherche valide, les enregistrements trouvs sont surligns, sans que la slection courante ne soit modifie. Rfrence DEFILER LIGNES, LIRE ENREGISTREMENTS MARQUES.

1546 4e Dimension - Langage

LIRE ENREGISTREMENTS MARQUES

Slections version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE ENREGISTREMENTS MARQUES ({table; }nomEnsemble) Paramtre table nomEnsemble Type Table Chane Description Table de laquelle recopier lensemble UserSet Si omis, table du formulaire courant Ensemble dans lequel recopier lensemble UserSet

Description La commande LIRE ENREGISTREMENTS MARQUES recopie dans lensemble dsign par le paramtre nomEnsemble lensemble UserSet courant de la table passe en paramtre. Si le paramtre table est omis, la table du formulaire ou du sous-formulaire courant est utilise. Note : Lensemble systme UserSet dune table contient lensemble des enregistrements marqus par lutilisateur dans un formulaire sortie. Il existe un seul ensemble UserSet par table et par process. Pour plus d'informations, reportez-vous la section Prsentation des ensembles. Comme elle permet de dsigner la table de laquelle rcuprer les enregistrements marqus, la commande LIRE ENREGISTREMENTS MARQUES peut notamment grer les slections denregistrements dans les sous-formulaires inclus. En effet dans ce cas, les slections des sous-formulaires peuvent provenir de tables diffrentes. Dans les versions prcdentes de 4e Dimension, la gestion des slections effectues par lutilisateur seffectuait uniquement via lensemble UserSet et tait donc limite la table courante. La commande LIRE ENREGISTREMENTS MARQUES peut tre appele hors du contexte dun formulaire, cependant dans ce cas lensemble retourn est vide. Lensemble dsign par le paramtre nomEnsemble peut tre local/client, process ou interprocess. Exemple Cette mthode indique combien denregistrements sont slectionns dans le sousformulaire affichant les enregistrements de la table [CDs] :

LIRE ENREGISTREMENTS MARQUES ([CDs];"$highlight") ALERTE(Chaine(Enregistrements dans ensemble("$highlight"))"+" enregistrements slectionns.") EFFACER ENSEMBLE("$highlight")

Rfrence MARQUER ENREGISTREMENTS. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0. 4e Dimension - Langage 1547

1548 4e Dimension - Langage

55 ________________________ Slections Temporaires

4e Dimension - Langage 1549

1550 4e Dimension - Langage

Prsentation des Slections Temporaires

Slections Temporaires version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les slections temporaires vous permettent de manipuler plusieurs slections la fois. Une slection temporaire est une liste ordonne d'enregistrements pour une table dans un process. Cette liste ordonne d'enregistrements peut avoir un nom et est conserve en mmoire. Les slections temporaires vous fournissent un moyen facile de garder en mmoire l'ordre et l'enregistrement courant de la slection. Les commandes suivantes vous permettent de travailler avec les slections temporaires : COPIER SELECTION DEPLACER SELECTION UTILISER SELECTION EFFACER SELECTION CREER SELECTION SUR TABLEAU

Les slections temporaires sont cres par les commandes COPIER SELECTION, DEPLACER SELECTION et CREER SELECTION SUR TABLEAU. Les slections temporaires sont gnralement utilises pour travailler avec une ou plusieurs slections, effectuer une sauvegarde puis retrouver une slection ordonne. Il peut y avoir plusieurs slections temporaires pour chaque table dans un process. Pour rutiliser une slection temporaire en tant que slection courante, appelez UTILISER SELECTION. Lorsque vous en avez termin avec une slection temporaire, utilisez EFFACER SELECTION. Les slections temporaires peuvent avoir une porte (une aire d'action) process ou interprocess. Une slection temporaire est interprocess lorsque son nom est prcd des symboles (<>) le signe infrieur suivi du symbole suprieur . Note : Cette syntaxe peut tre utilise sous Windows et MacOS. Sous MacOS, vous pouvez aussi utiliser le symbole "diamant" (Option + v sur un clavier franais). La porte d'une slection temporaire interprocess est identique celle d'une variable interprocess. On peut accder une slection temporaire interprocess partir de n'importe quel process. Une slection temporaire dont le nom n'est pas prfix par les symboles (<>) est process, c'est--dire qu'elle n'est disponible que dans le process o elle a t cre.

4e Dimension - Langage 1551

Avec 4D Client et 4D Server, une slection temporaire interprocess n'est accessible que pour les process du client qui l'a cre. Une slection temporaire interprocess n'est pas accessible aux autres clients. Attention : Crer une slection temporaire ncessite l'accs la slection de la table. Comme les slections sont conserves sur le serveur et qu'un process local n'a pas accs 4D Server, ne cherchez pas utiliser des slections temporaires dans un process local. Slections temporaires et ensembles Voici les diffrences majeures entre les ensembles et les slections temporaires : Une slection temporaire est une liste ordonne d'enregistrements, ce que n'est pas un ensemble. Les ensembles sont conomes en mmoire car il n'ont besoin que d'un bit par enregistrement de la table. Les slections temporaires ont besoin de 4 octets pour chaque enregistrement dans la slection. A la diffrence des ensembles, les slections temporaires ne peuvent pas tre sauvegardes sur disque. Alors que les oprations standard Intersection, Reunion et Difference sont possibles pour les ensembles, les slections temporaires ne peuvent tre combines avec d'autres slections temporaires. Les similitudes entre les slections temporaires et les ensembles sont les suivantes : Comme un ensemble, une slection temporaire existe en mmoire. Une slection temporaire et un ensemble stockent des rfrences aux enregistrements. Si des enregistrements sont modifis ou dtruits, la slection temporaire ou l'ensemble peuvent n'tre plus valides. Comme un ensemble, une slection temporaire repre l'enregistrement courant au moment o elle est cre.

1552 4e Dimension - Langage

COPIER SELECTION

Slections Temporaires version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

COPIER SELECTION ({table; }tempo) Paramtre table tempo Type Table Alpha Description Table de laquelle il faut copier la slection ou Table par dfaut si ce paramtre est omis Nom de la slection temporaire crer

Description COPIER SELECTION copie la slection courante de table dans une slection temporaire tempo. La table par dfaut du process courant est utilise si le paramtre optionnel table n'est pas spcifi. La slection temporaire tempo contient une copie de la slection. La slection courante et l'enregistrement courant de table pour le process courant ne sont pas modifis. Une slection temporaire ne contient pas les enregistrements, mais une liste trie des rfrences aux enregistrements. Chaque rfrence un enregistrement prend 4 octets en mmoire. Ceci signifie que lorsqu'une slection est copie l'aide de la commande COPIER SELECTION, la mmoire requise est 4 octets multiplis par le nombre d'enregistrements dans la slection. Comme les slections temporaires restent en mmoire, il vous faut assez de mmoire pour la slection temporaire ainsi que la slection courante de la table pour le process. 4D Server : La slection temporaire tempo ainsi que la slection courante sont loges dans la mmoire du poste serveur. En consquence, assurez-vous que le serveur dispose de suffisamment de mmoire. Utilisez la commande EFFACER SELECTION pour librer la mmoire utilise par tempo.

4e Dimension - Langage 1553

Exemple L'exemple suivant permet de vrifier s'il y a des factures impayes dans la table [Personnes]. La slection est trie puis sauvegarde. Nous cherchons toutes les factures qui n'ont pas t payes. Ensuite, nous rutilisons la slection et effaons la slection temporaire en mmoire : TOUT SELECTIONNER([Personnes]) `Permettre l'utilisateur de trier la slection TRIER([Personnes]) ` Stocker la slection dans une slection temporaire COPIER SELECTION([Personnes];"TrieUtilisateur") ` Rechercher les factures impayes CHERCHER([Personnes];[Personnes]FactureDue=Vrai) ` Si un enregistrement a t trouv Si (Enregistrements trouves([Personnes])>0) ` Informer l'utilisateur ALERTE("Oui, quelques factures n'ont pas t rgles.") Fin de si ` Rutiliser la slection temporaire trie UTILISER SELECTION("TrieUtilisateur") ` Effacer la slection de la mmoire EFFACER SELECTION("TrieUtilisateur")

Rfrence CREER SELECTION SUR TABLEAU, DEPLACER SELECTION, EFFACER SELECTION, UTILISER SELECTION.

1554 4e Dimension - Langage

DEPLACER SELECTION

Slections Temporaires version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DEPLACER SELECTION ({table; }tempo) Paramtre table tempo Type Table Alpha Description Table de la slection ou Table par dfaut si ce paramtre est omis Nom de la slection temporaire crer

Description DEPLACER SELECTION cre la slection temporaire tempo et y place la slection courante de table. A la diffrence de COPIER SELECTION, cette commande ne copie pas la slection, mais la dplace. Aprs l'excution de cette commande, la slection courante de table dans le process courant est vide. En consquence, DEPLACER SELECTION ne doit pas tre utilise lorsqu'un enregistrement est en cours de modification. En termes d'utilisation de la mmoire, DEPLACER SELECTION est plus conomique que COPIER SELECTION. En effet, COPIER SELECTION utilise 4 octets de mmoire pour chaque enregistrement de la slection. Avec DEPLACER SELECTION, seule la rfrence la slection est dplace. Exemple La mthode suivante vide la slection courante de la table [Clients] :

DEPLACER SELECTION([Clients]; "AEffacer") EFFACER SELECTION("AEffacer")

Rfrence COPIER SELECTION, EFFACER SELECTION, UTILISER SELECTION.

4e Dimension - Langage 1555

UTILISER SELECTION

Slections Temporaires version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

UTILISER SELECTION (tempo) Paramtre tempo Type Alpha Description Nom de la slection temporaire utiliser

Description UTILISER SELECTION dsigne la slection temporaire tempo comme slection courante pour la table laquelle elle appartient. Lorsque vous crez une slection temporaire, l'enregistrement courant est aussi stock par la slection temporaire. UTILISER SELECTION rcupre la position de cet enregistrement et en fait l'enregistrement courant. L'enregistrement courant est alors charg. S'il a t modifi aprs la cration de la slection temporaire tempo, il doit tre sauvegard avant que la commande UTILISER SELECTION soit appele, afin de ne pas perdre les informations modifies. Si tempo a t cre par la commande COPIER SELECTION, la slection temporaire est utilise comme slection courante de la table laquelle elle appartient. La slection temporaire tempo existe en mmoire jusqu' ce qu'elle soit efface. Pour rcuprer l'espace mmoire occup par tempo, appelez la commande EFFACER SELECTION. Si tempo a t cre par la commande DEPLACER SELECTION, elle est utilise comme slection courante de la table laquelle elle appartient et tempo n'existe plus en mmoire. N'oubliez pas qu'une slection temporaire est la reprsentation d'une slection courante un instant donn. Si les enregistrements que la slection temporaire reprsente sont modifis, celle-ci devient obsolte. En consquence, une slection temporaire doit reprsenter une slection d'enregistrements dont le contenu est relativement stable. Diffrents vnements peuvent rendre une slection temporaire obsolte : la modification ou la suppression d'un enregistrement appartenant la slection temporaire ou la modification des critres de cration de la slection temporaire. Notez que pendant une transaction, des adresses temporaires d'enregistrements sont utilises. Si une slection temporaire est cre pendant une transaction, elle peut stocker des adresses qui ne seront plus valides lorsque la transaction sera valide ou annule. En effet, dans ce cas les enregistrements ne reoivent leur adresse finale que lorsque la transaction est valide.

1556 4e Dimension - Langage

EFFACER SELECTION

Slections Temporaires version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

EFFACER SELECTION (tempo) Paramtre tempo Type Alpha Description Nom de la slection temporaire effacer

Description EFFACER SELECTION efface tempo de la mmoire et donc libre la mmoire qu'elle utilisait. EFFACER SELECTION n'affecte pas les tables, slections courantes ou enregistrements. Comme les slections temporaires utilisent de la mmoire, il est conseill de les effacer si vous n'en avez plus besoin. Si tempo a t cre par la commande DEPLACER SELECTION puis traite l'aide de la commande UTILISER SELECTION, elle n'existe plus en mmoire. Dans ce cas, vous n'avez pas besoin d'utiliser EFFACER SELECTION. Rfrence COPIER SELECTION, DEPLACER SELECTION, UTILISER SELECTION.

4e Dimension - Langage 1557

CREER SELECTION SUR TABLEAU

Slections Temporaires version 6.7 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CREER SELECTION SUR TABLEAU (table; tabEnrg{; tempo}) Paramtre table tabEnrg Type Table Tab Entier long | Boolen Description Table de la slection Tableau de n denregistrements, ou Tableau de boolens (Vrai = lenregistrement est dans la slection, Faux = il nest pas dans la slection) Nom de la slection temporaire crer, ou Appliquer la commande la slection courante si ce paramtre est omis ou vide

tempo

Alpha

Description La commande CREER SELECTION SUR TABLEAU construit la slection temporaire tempo partir : soit du tableau de numros denregistrements absolus tabEnrg de la table table, soit du tableau de boolens tabEnrg ; dans ce cas, les valeurs du tableau indiquent lappartenance (Vrai) ou non (Faux) de chaque enregistrement de table la slection tempo. Si vous ne passez pas le paramtre tempo ou si vous passez une chane vide, la commande sappliquera la slection courante de table, qui sera donc mise jour. Lorsque vous utilisez la commande avec un tableau dentiers longs, tous les numros du tableau reprsentent la liste des numros denregistrements qui feront partie de la slection tempo. Si un numro est invalide (enregistrement non cr), lerreur -10503 est gnre. Note : Attention, vous devez veiller ce que le tableau ne contienne pas d'lments ayant la mme valeur, sinon la slection rsultante sera incorrecte. Lorsque vous utilisez la commande avec un tableau de boolens, le Nime lment du tableau reprsente lintgration (Vrai) ou non (Faux) de lenregistrement numro N dans la slection tempo. En principe, le nombre dlments du tableau doit tre gal au nombre denregistrements de table. Si le tableau est plus petit que le nombre denregistrements, seuls les enregistrements dfinis par le tableau pourront faire partie de la slection. Note : Avec un tableau de boolens, la commande utilise les lments du numro 0 au numro N-1.

1558 4e Dimension - Langage

Rfrence COPIER SELECTION, CREER ENSEMBLE SUR TABLEAU, EFFACER SELECTION, UTILISER SELECTION. Gestion des erreurs Si un numro d'enregistrement est invalide (enregistrement non cr), lerreur -10503 est gnre. Vous pouvez intercepter cette erreur l'aide d'une mthode installe par la commande APPELER SUR ERREUR.

4e Dimension - Langage 1559

1560 4e Dimension - Langage

56 ________________________ Serveur Web

4e Dimension - Langage 1561

1562 4e Dimension - Langage

Prsentation du serveur Web

Serveur Web version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension, 4D Server et 4D Client contiennent un serveur Web qui vous permet de publier des bases 4D ou tout type de page HTML sur le Web. Les principales caractristiques du moteur du serveur Web de 4D sont les suivantes : Simplicit de publication Vous pouvez tout moment lancer ou stopper la publication de la base sur le Web. Pour cela, il suffit de choisir une commande de menu ou d'excuter une commande du langage. Mode contextuel et Mode sans contexte Le serveur Web de 4D peut fonctionner dans deux modes distincts : le mode contextuel et le mode sans contexte. Vous pouvez utiliser le serveur Web 4D dans le mode que vous souhaitez : mode contextuel, mode sans contexte, et passer la vole dun mode lautre en fonction de vos besoins. - Le mode contextuel (disponible avec le serveur Web de 4e Dimension et de 4D Server uniquement) constitue une fonctionnalit unique et ingale. Dans ce mode, 4D gre les navigateurs Web comme des clients standard de la base. Votre base est directement publie sur le Web. Vous n'avez pas besoin de dvelopper une base de donnes, un site Web et ensuite une interface CGI entre les deux. Votre base de donnes est votre site Web. Toute modification effectue sur la structure ou les donnes de la base est immdiatement rpercute sur tous les navigateurs qui s'y connectent. 4D convertit la vole en HTML les barres de menus, formulaires et mthodes de votre base : il n'est pas ncessaire de connatre le HTML pour publier une base 4D sur le Web. 4D maintient automatiquement un contexte d'utilisation des donnes pour chaque navigateur Web (slections, variables, etc.). A noter qu'en contrepartie, la navigation Web en mode contextuel inclut des contraintes spcifiques. Pour plus d'informations, reportez-vous la section Utiliser le Mode contextuel. - Utilis en mode sans contexte (mode standard), le serveur Web 4D est un serveur HTTP parfaitement standard : les pages Web sont envoyes sans quil soit ncessaire de maintenir de contexte. Vous pouvez accder aux donnes de la base 4D et construire la vole des pages HTML "semi-dynamiques" comportant des donnes statiques et des donnes issues de la base, avant de les envoyer aux navigateurs Web. Vous pouvez galement envoyer des pages Web statiques ne ncessitant aucun traitement de la part du serveur Web. Mthodes base ddies La Mthode base Sur authentification Web et la Mthode base Sur connexion Web constituent les points d'entre des requtes dans le serveur Web ; elles peuvent tre utilises pour valuer et acheminer tout type de requte.

4e Dimension - Langage 1563

Utilisation de balises et d'URLs spciaux Le serveur Web de 4D propose de nombreux mcanismes permettant d'interagir avec les actions des utilisateurs, notamment : - des balises spciales peuvent tre incluses dans les pages Web afin de provoquer des traitements par le serveur Web au moment de leur envoi aux navigateurs. - des URLs spciaux permettent d'appeler 4D afin d'excuter toute action. - ces URLs peuvent galement tre utiliss comme actions de formulaire pour dclencher des traitements lorsque l'utilisateur poste des formulaires HTML. Scurit des accs Des options de configuration automatiques vous permettent d'accorder des autorisations d'accs spcifiques aux navigateurs Web ou d'utiliser le systme de mots de passe intgr de 4e Dimension. Vous pouvez dfinir un Utilisateur Web gnrique pour simplifier la gestion des accs lintrieur de la base. La Mthode base Sur authentification Web vous permet d'valuer toute requte avant qu'elle ne soit traite par le serveur Web. La dfinition dun dossier racine HTML par dfaut vous permet de verrouiller les accs aux fichiers sur le disque. Enfin, vous devez dsigner individuellement les mthodes projet pouvant tre excutes via le Web. Connexions SSL Le serveur Web 4D peut communiquer en mode scuris avec les navigateurs Web, l'aide du protocole SSL (Secured Socket Layer). Ce protocole, compatible avec la majorit des navigateurs Web, permet d'authentifier les intervenants et garantit la confidentialit et l'intgrit de l'information change. Support tendu des formats Internet Le serveur Web 4D est compatible HTTP/1.1, il peut grer des documents XML et supporte la technologie WML (Wireless Markup Language). Support des CGI Le serveur Web 4D peut trs simplement utiliser des CGI, et peut galement tre interrog par d'autres serveurs HTTP via des CGI.

1564 4e Dimension - Langage

Exploitation simultane des bases de donnes 4e Dimension et le Web Lorsqu'une base 4D est publie sur le Web avec 4e Dimension, il est possible, simultanment : - d'exploiter la base localement avec 4D - de se connecter la base avec un navigateur Web

4D Server et le Web Lorsqu'une base 4D est publie sur le Web avec 4D Server, il est possible de se connecter la base 4D et de l'utiliser simultanment : - partir de postes 4D Client - partir d'applications exploitant 4D Open - partir de navigateurs Web

4e Dimension - Langage 1565

4D Client et le Web Lorsqu'une base 4D est publie sur le Web avec 4D Client, il est possible de se connecter la base 4D et de l'utiliser simultanment : - partir de postes 4D Client - partir d'applications exploitant 4D Open - partir de navigateurs Web. Dans ce cas, si la base est galement publie avec 4D Server, les navigateurs Web peuvent se connecter la base publie via 4D Client ou via 4D Server. Ce fonctionnement permet notamment de grer des modes d'accs diffrents aux donnes (public, administration, etc.).

Les mcanismes lmentaires du serveur Web de 4D sont exploits de manire semblable par 4D Client, l'exception du mode contextuel. En effet, il n'est pas possible d'utiliser le mode contextuel avec le serveur Web de 4D Client (pour plus d'informations sur ce mode, reportez-vous la section Utiliser le mode contextuel). De mme, le fonctionnement des commandes de langage est gnralement identique, que la commande soit excute sur 4e Dimension, 4D Server ou 4D Client. Le principe est que les commandes sont appliques au site Web du poste sur lequel elles sont excutes. Vous devez grer ce principe laide des commandes Excuter sur serveur / Excuter sur Client. Rpartition de charge avec 4D Client : tout poste 4D Client pouvant tre utilis comme serveur Web, vous pouvez mettre en place un systme de serveur Web dynamique avec rpartiteur de charge. Les possibilits offertes sont vastes, notamment : - la mise en place dun systme de rpartition de charge (load balancing) afin doptimiser les performances du serveur Web 4D : une rplique du site Web tant installe sur chaque serveur Web 4D Client, un rpartiteur de charge (matriel ou logiciel) adressera les requtes aux postes clients en fonction de leur charge courante.

1566 4e Dimension - Langage

- la mise en place dun serveur Web tolrance de panne : le site Web 4D est rpliqu sur deux ou plusieurs postes 4D Client. En cas de dfaillance dun serveur Web 4D Client, un autre prend le relais. - la cration de vues diffrentes des mmes donnes, par exemple en fonction de la provenance des requtes. Dans le cadre dun rseau dentreprise, un serveur Web 4D Client protg peut servir les requtes Intranet et un autre serveur Web 4D Client, situ au-del du firewall, sert les requtes Internet. - la rpartition des tches entre les diffrents serveurs Web 4D Client : un serveur Web 4D Client peut tre charg des requtes SOAP, un autre des requtes standard, etc. Rfrence ARRETER SERVEUR WEB, ENVOYER FICHIER HTML, FIXER LIMITES AFFICHAGE WEB, FIXER PAGE ACCUEIL, FIXER RACINE HTML, FIXER TEMPORISATION WEB, Paramtrages du serveur Web, Scurit des connexions, Support des CGI, Utiliser le mode contextuel, Utiliser le protocole SSL.

4e Dimension - Langage 1567

Mise en route du serveur Web et gestion des connexions

Serveur Web version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension, 4D Server et 4D Client contiennent un serveur Web vous permettant de publier de manire transparente et dynamique les donnes de vos bases sur le Web. Cette section prsente les tapes ncessaires la publication des bases 4D et la connexion de navigateurs, ainsi que les process de gestion des connexions. Conditions de publication d'une base 4D sur le Web
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Pour pouvoir publier une base 4D sur le Web l'aide de 4e Dimension, de 4D Server ou de 4D Client, vous devez disposer des lments dcrits ci-dessous : des licences 4D Web Extension, 4D Server Web Extension ou 4D Client Web Extension qui doivent tre installes dans votre application. Pour plus d'informations sur ce point, reportez-vous au guide d'installation de 4D. les connexions Web sont effectues par le biais du protocole rseau TCP/IP. Par consquent : - le protocole TCP/IP doit tre install et correctement configur sur votre machine. Reportez-vous la documentation de votre ordinateur ou de votre systme d'exploitation pour plus d'informations sur ce point. - Si vous voulez utiliser le protocole SSL pour vos connexions, assurez-vous que les composants ncessaires sont correctement installs (reportez-vous la section Utiliser le protocole SSL). Une fois les points prcdents contrls et rgls, vous devez dmarrer le serveur Web depuis 4D. Ce point est trait plus loin dans cette section. Autorisation de publication (4D Client) Par dfaut, tout poste 4D Client peut publier sur le Web la base laquelle il est connect. Vous pouvez toutefois contrler la possibilit de publication Web de chaque 4D Client en utilisant le systme de mots de passe de 4D. En effet, les licences Web 4D Client sont considres par 4D Server comme des licences de plug-ins. Ainsi, comme pour un plug-in, vous pouvez restreindre le droit dutiliser les licences Web Server un groupe dutilisateurs spcifique. Pour cela, affichez la page Groupes dans la Bote outils depuis 4D Client (vous devez disposer des autorisations daccs adquates pour modifier ces paramtres).

1568 4e Dimension - Langage

Slectionnez une groupe dans la liste de gauche, puis cochez l'option Accs en regard de la ligne Web Server dans la zone de rpartition des plug-ins :

Ci-dessus : seuls les utilisateurs appartenant au groupe Web sont autoriss publier leur 4D Client en tant que serveur Web. Configuration spcifique sous Mac OS X
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Sous MacOS X, lutilisation des ports TCP/IP rservs la publication Web requiert des privilges daccs spcifiques : seul lutilisateur root de la machine peut lancer une application utilisant ces ports. Il sagit des ports 0 1023. Par dfaut, une base 4D est publie sur le port TCP 80 en mode standard et 443 en mode SSL.

4e Dimension - Langage 1569

Lorsque vous publiez une base 4D sur le port TCP par dfaut sans vous tre connect en tant quutilisateur root, une bote de dialogue dalerte vous le signale :

Pour pouvez utiliser le serveur Web sous MacOS X, vous disposez de quatre possibilits : Modifier les numros des ports TCP utiliss par le serveur Web 4D. Vous devez utiliser des numros de ports suprieurs 1023, par exemple 8080 pour le mode standard et 8043 pour le mode SSL. Cette opration seffectue dans la bote de dialogue des Prferences de la base (cf. section Paramtrages du serveur Web) ou laide de la commande FIXER PARAMETRE BASE. Dans ce cas, il sera ncessaire d'indiquer le numro de port derrire chaque URL de connexion la base (par exemple, http://www.mabase.fr/pages/mapage.html:8080 et https://www.mabase.fr/pages/paiement.html:8043. Se connecter en tant quutilisateur root Par dfaut, lutilisateur root nest pas actif sur un poste sous MacOS X. Vous devez dabord lactiver, puis vous connecter sous ce nom dutilisateur. Lactivation de lutilisateur root seffectue par lintermdiaire de lutilitaire Gestionnaire NetInfo (ou NetInfo Manager), fourni par Apple et install dans le dossier Applications:Utilities. Une fois lutilitaire lanc, choisissez la commande Scurit dans le menu Domaine, puis loption Activer lutilisateur root. Vous devez auparavant avoir identifi un administrateur de la machine via la commande Authentifier..., situe dans le mme menu (saisissez le nom abrg et le mot de passe dun administrateur de la machine).

1570 4e Dimension - Langage

Pour plus dinformations sur cette opration, veuillez vous reporter la documentation de MacOS X. Une fois lutilisateur root cr, vous devez fermer la session (menu Pomme) puis vous connecter sous le nom dutilisateur root. Il vous est alors possible de lancer le serveur Web sur le numro de port 80, ou un serveur Web 4D en mode scuris. Transfrer le port Cette troisime solution permet de publier une base Web 4D sous MacOS X sans quil soit ncessaire de spcifier le numro de port derrire chaque URL de connexion au serveur et sans tre lutilisateur root. Elle est base sur le transfert de port. Le principe consiste transfrer, au niveau du systme, les requtes reues sur le numro de port TCP standard (80) celui dfini dans la base 4D (devra tre suprieur 1023). Notez que cette astuce ne fonctionne pas avec les connexions scurises (le port TCP 443 nest pas modifiable). Pour effectuer lopration, vous devrez vous connecter en tant quutilisateur root, lancer le Terminal et utiliser des commandes Unix. Pour mettre en place le transfert de port sous Mac OS X (en supposant que votre adresse IP est 192.168.93.45) : 1. Ouvrez une session en tant quutilisateur root (cf. paragraphe prcdent). 2. Lancez le programme Terminal. Ce programme se trouve dans le dossier Applications:Utilities. 3. Saisissez su (compte spcial utilisateur substitut) puis le mot de passe de lutilisateur root. 4. Saisissez la commande suivante : ipfw add 400 fwd 192.168.93.45,8080 tcp from any to 192.168.93.45 80 Bien entendu, vous devez remplacer 192.168.93.45 par votre propre adresse IP. Le chiffre 400 est le numro de rfrence de cette opration. 5. Quittez le programme Terminal. 6. Lancez votre application 4D en tant quutilisateur standard. 7. Dans les Prfrences de la base, fixez le port TCP de publication Web 8080. Ds lors, Mac OSX est prt transfrer instantanment les requtes reues sur le port 80 vers le port 8080, de manire transparente pour lutilisateur. Pour supprimer ce mode de fonctionnement : 1. Lancez le programme Terminal et saisissez : ipfw delete 400 Les requtes reues sur le port 80 ne sont alors plus transfres au port 8080. Ouvrir une session root temporaire Le principe de cette solution est le suivant : le lancement initial du serveur Web de 4e Dimension seffectue dans une session root ouverte dans ce but et referme automatiquement au bout de quelques instants. Cette nouveaut fonctionne avec 4e Dimension, 4D Server, 4D Client et les applications excutables 4D Runtime.

4e Dimension - Langage 1571

Voici le dtail de la squence : 1. Lapplication 4e Dimension est excute au sein dune session utilisateur classique. 2. Lutilisateur lance le serveur sur le port standard (port 80). Une bote de dialogue dalerte informe lutilisateur que lopration est impossible. La bote de dialogue permet de saisir un nom et un mot de passe dadministrateur de la machine. 3. Lutilisateur saisit un nom et un mot de passe dadministrateur de la machine. Grce ces informations, 4e Dimension pourra modifier les privilges de lapplication et la dclarer sous lutilisateur root. 4. Lutilisateur est invit redmarrer lapplication. 5. Au lancement, lapplication 4e Dimension dmarre dans une session root. 6. Si loption Publier la base au dmarrage est coche dans Prfrences de lapplication, le serveur Web est lanc sur le port 80. Si loption Autoriser SSL pour le serveur Web est coche, le port SSL (443 par dfaut) est galement ouvert. 7. Au bout de quelques secondes, la session root est automatiquement referme et remplace par une session de lutilisateur courant. Le serveur Web reste publi et la session utilisateur se droule normalement. Linconvnient de ce mcanisme est quune fois en place, vous ne pouvez plus dmarrer et redmarrer le serveur Web volont au cours de la session. En effet, il nest pas possible de passer dune session dutilisateur standard une session root (privilges suprieurs) sans redmarrer lapplication. Ce mcanisme ne fonctionne donc quau lancement de lapplication. Dmarrer le serveur Web 4D
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le serveur Web 4D peut tre dmarr de trois manires diffrentes : par l'intermdiaire du menu Excuter de 4e Dimension et de 4D Client ou du menu Web de 4D Server. Ce menu vous permet de lancer et d'arrter le serveur Web tout moment : 4e Dimension et 4D Client :

4D Server :

1572 4e Dimension - Langage

par la publication automatique de la base chaque fois qu'elle est ouverte. Pour que la base soit automatiquement publie comme serveur Web, choisissez la commande Prfrences... dans le menu Edition de 4D. La fentre des Prfrences s'affiche. Cliquez sur le thme Web, page Configuration :

Dans la zone Publication du serveur Web, cochez la case Publier la base au dmarrage puis cliquez sur le bouton OK. La base sera dsormais automatiquement publie comme serveur Web chaque fois que vous l'ouvrirez avec 4e Dimension, 4D Server ou 4D Client. par programmation, en appelant la commande LANCER SERVEUR WEB. Note : Il n'est pas ncessaire de rouvrir votre base de donnes pour lancer ou arrter sa publication comme serveur Web. Vous pouvez interrompre et redmarrer le serveur Web autant de fois que vous voulez l'aide du menu Excuter ou en appelant les commandes LANCER SERVEUR WEB et ARRETER SERVEUR WEB.

4e Dimension - Langage 1573

Tester le serveur Web


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La commande Tester le serveur Web permet de contrler le fonctionnement du serveur Web intgr (4e Dimension et 4D Client uniquement). Cette commande est accessible dans le menu Excuter lorsque le serveur Web est lanc :

Lorsque vous slectionnez cette commande, la page daccueil du site Web publi par lapplication 4D saffiche dans une fentre de votre navigateur par dfaut :

Cette commande permet de vrifier le fonctionnement du serveur Web, laffichage de la page daccueil, etc. La page est appele via lURL Localhost, qui est le raccourci standard dsignant ladresse IP de la machine sur laquelle est excut le navigateur. La commande tient compte du numro de port TCP de publication spcifi dans les Prfrences de lapplication.

1574 4e Dimension - Langage

Connexion une base 4D publie sur le Web


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Une fois que vous avez lanc la publication d'une base 4D sur le Web, vous pouvez vous y connecter avec un navigateur Web. Pour cela : Si votre site Web dispose d'un nom d'hte enregistr (par exemple, www.bellesfleurs.com), il vous suffit d'indiquer ce nom dans la zone "Ouvrir", "Adresse" ou encore "Lieu" du navigateur puis d'appuyer sur la touche Entre pour vous connecter. Si votre site Web ne dispose pas d'un nom enregistr, indiquez l'adresse IP de la machine de la base (par exemple 123.4.567.89) dans la zone "Ouvrir", "Adresse" ou encore "Lieu" du navigateur puis appuyez sur la touche Entre. A cet instant, votre navigateur doit afficher la page d'accueil de votre site Web. Si vous avez publi une base en conservant les paramtrages standard, vous devez obtenir la page d'accueil par dfaut du serveur Web de 4e Dimension. Cette page vous permet de tester la connexion et le fonctionnement du serveur. Vous pouvez galement rencontrer une des situations dcrites ci-dessous. Note : Si votre base est protge par un systme de contrle d'accs, il se peut que vous ayez saisir un nom et un mot de passe (pour plus d'informations, reportez-vous la section Scurit des connexions). (1) La connexion choue, vous obtenez un message du type ...le serveur n'accepte pas de connexions ou est occup.... Dans ce cas, effectuez les contrles suivants : Vrifiez que le nom du serveur ou l'adresse IP que vous avez saisi(e) est correct(e). Vrifiez que 4e Dimension, 4D Server ou 4D Client est bien lanc et que le serveur Web a bien dmarr. Vrifiez que la base de donnes est bien configure pour tre publie sur le port TCP Web par dfaut, c'est--dire 80 (voir aussi point 4). Vrifiez que le protocole rseau TCP/IP est correctement configur sur la machine serveur et sur la machine du navigateur (les deux machines doivent se trouver sur le mme rseau ou sous-rseau, ou les routeurs doivent tre correctement configurs). Vrifiez les connexions physiques. Si vous ne testez pas localement votre propre site mais essayez de vous connecter une base Web publie sur Internet ou Intranet par quelqu'un d'autre, il se peut qu'en dfinitive le message dcrive une situation relle : le poste serveur peut tre teint ou occup, dans ce cas vous pouvez tenter de vous connecter ultrieurement ou contacter l'administrateur du site Web. (2) La connexion est tablie, mais vous obtenez une erreur HTTP 404, Fichier non trouv. Ce cas signifie que la page d'accueil du site n'a pu tre servie. Dans ce cas, vrifiez que la page d'accueil existe bien l'emplacement dfini dans les Prfrences de la base (cf. section Paramtrages du serveur Web) ou l'aide de la commande FIXER PAGE ACCUEIL.

4e Dimension - Langage 1575

(3) La connexion est tablie, mais vous obtenez une page Web avec le message Barre de menu/Cette base de donnes ne peut tre publie sur le Web telle quelle, vous devez dabord crer une barre de menus. Cela signifie que vous tes bien connect la base publie en mode contextuel, mais qu'aucune page d'accueil ni barre de menus n'est dfinie (en mode contextuel, 4D publie la barre de menus n1 comme page d'accueil par dfaut si aucune page HTML n'est spcifie). Pour plus d'informations, reportez-vous la section Premiers pas. (4) La connexion est tablie, mais vous n'obtenez pas la page Web que vous attendiez ! Cela peut se produire lorsque plusieurs serveurs Web sont excuts simultanment sur la mme machine. Par exemple : Vous avez lanc une seule base Web 4D, mais sur un systme Windows qui excute dj son propre serveur Web. Vous avez lanc plusieurs bases Web 4D sur la mme machine. Dans les cas dcrits ci-dessus, il vous suffit de changer les numros des ports TCP sur lesquels vos bases 4D Web sont publies. Pour cela, reportez-vous la section Paramtrages du serveur Web. Gestion des process Web
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Divers process 4D prennent en charge la publication Web des bases de donnes et la connexion des navigateurs. Ce paragraphe dcrit ces process ainsi que leurs caractristiques. Process Serveur Web Le process Serveur Web s'excute lorsque la base est publie en tant que serveur Web. Dans la page Process de l'Explorateur d'excution prsente ci-dessous, le process Server Web est le cinquime process :

1576 4e Dimension - Langage

Ce process est un process du noyau de 4D, vous ne pouvez donc pas l'arrter l'aide de la commande Tuer. De mme, vous ne pouvez pas effectuer de communication interprocess l'aide des commandes comme APPELER PROCESS. Notez que le process Serveur Web n'a pas d'lments d'interface (fentres, menus, etc.). Vous pouvez dmarrer le process Serveur Web : en choisissant Lancer le serveur Web dans le menu Web de 4D Server ou le menu Excuter de 4e Dimension/4D Client. en appelant la commande LANCER SERVEUR WEB. en ouvrant une base pour laquelle la prfrence Publier la base au dmarrage a t slectionne. Vous pouvez arrter le process Serveur Web : En choisissant Arrter le serveur Web dans le menu Web de 4D Server ou le menu Excuter de 4e Dimension/4D Client. en appelant la commande ARRETER SERVEUR WEB. en quittant une base publie comme serveur Web. Le rle du process Serveur Web est de grer les tentatives de connexion Web. Lorsque vous dmarrez le process Serveur Web, vous n'ouvrez pas de connexion Web, vous permettez aux utilisateurs Web de se connecter la base. Lorsque vous arrtez le process Serveur Web, vous ne fermez pas les process de connexion Web ouverts (s'il y en a), simplement vous ne permettez plus des utilisateurs Web de se connecter la base. Si des process de connexion Web taient ouverts au moment o vous arrtez le process Serveur Web, chacun de ces process continue s'excuter normalement. Par consquent, un dlai d'attente peut tre ncessaire avant l'arrt complet du process Serveur Web. Process Web et process Connexion Web Chaque fois qu'un navigateur Web tente de se connecter la base, la requte est gre par le process Serveur Web, qui procde de la manire suivante : D'abord, il cre un ou plusieurs process 4D locaux appels Process Web pour grer et valuer la connexion au navigateur Web. Note : Ces process grent toutes les requtes HTTP. Ils s'excutent trs rapidement puis sont tus ou endormis. En effet, des fins d'optimisation du serveur Web, une fois qu'il a trait une requte, un process de connexion Web temporaire est gel pendant quelques secondes pour tre ventuellement ractiv lorsqu'une autre requte arrive. Ce mcanisme peut tre ajust (dlai d'attente, nombre minimum et maximum de process conserver dans la "rserve" de process) l'aide de la commande FIXER PARAMETRE BASE.

4e Dimension - Langage 1577

Si la requte ne ncessite pas la cration d'un contexte, le process Web prend en charge le traitement de la requte et l'envoi de la rponse ventuelle au navigateur. Le process temporaire est alors tu ou endormi (cf. ci-dessus). Si la requte ncessite la cration d'un contexte, il vrifie alors si les ressources disponibles sont suffisantes. Si cela n'est pas le cas, il envoie au navigateur Web le message suivant : Cette base de donnes n'a pas encore t paramtre pour le Web. Si la connexion Web est correctement effectue, un process Connexion Web est cr. Ce process grera toute la session Web pour cette connexion. La liste des process, prsente cidessous, affiche le process de connexion Web Connexion Web n 235958112 dmarr la suite de la connexion du navigateur Web :

Notez que le sixime process, qui a t dmarr puis tu, a gr l'initialisation de la connexion Web. Note : Pour plus d'informations sur la gestion des contextes, reportez-vous la section Utiliser le mode contextuel. Si, au cours de la session, la connexion passe du mode contextuel au mode sans contexte, le process de connexion Web (numrot) est immdiatement tu. A l'inverse, si au cours de la session, la connexion passe du mode sans contexte au mode contextuel, un process de connexion Web numrot est cr. Rfrence ARRETER SERVEUR WEB, ENVOYER FICHIER HTML, FIXER LIMITES AFFICHAGE WEB, FIXER RACINE HTML, FIXER TEMPORISATION WEB, Utiliser le protocole SSL.

1578 4e Dimension - Langage

Premiers pas

Serveur Web version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Exemple en mode contextuel Cette section prsente un exemple simple de publication instantane d'une base de donnes en mode contextuel. Ce mode automatique peut notamment tre utilis pour les serveurs Intranet. Il permet d'illustrer les principes lmentaires de fonctionnement du serveur Web de 4D. Le fonctionnement et la structure de cette base sont classiques : la base comporte une table, un formulaire entre, un formulaire sortie et une barre de menus. La page d'accueil est personnalise. Lorsqu'un navigateur se connecte au serveur Web 4D, il obtient la page d'accueil suivante :

4e Dimension - Langage 1579

Si vous cliquez sur le lien 'Liste des enregistrements', vous obtenez l'quivalent de l'affichage d'une slection 4D sur le Web :

Vous pouvez ds lors naviguer votre convenance parmi les enregistrements. Lorsque vous cliquez sur le bouton 'Termin', vous retournez la page d'accueil du site Web. Si vous cliquez sur le lien 'Ajouter des enregistrements' dans la page d'accueil, vous obtenez l'quivalent d'un ajout d'enregistrement 4D sur le Web :

1580 4e Dimension - Langage

Vous pouvez ajouter autant d'enregistrements que vous voulez. Lorsque vous cliquez sur le bouton 'Termin' (celui avec le "X") vous retournez nouveau la page d'accueil du site Web. Si vous cliquez sur le bouton Barre de menus principale dans la page d'accueil, vous obtenez la barre de menus cre de 4D sur le Web :

Vous pouvez alors cliquer sur une commande de menu pour visualiser ou ajouter des enregistrements. Les mthodes 4D associes ces commandes de menu sont les mmes que celles qui taient utilises partir de la page d'accueil. Lorsque vous avez termin, vous quittez le navigateur. 4D terminera la connexion Web ds que le dlai d'attente avant dconnexion se sera coul. Dmarrage d'une connexion Web en mode contextuel Chaque fois qu'un navigateur Web se connecte une base 4D publie en tant que serveur Web en mode contextuel, 4D effectue par dfaut les actions suivantes : La Mthode base Sur authentification Web est excute, si elle existe. Si cette mthode base n'existe pas ou si elle retourne Vrai, la Mthode base Sur connexion Web est excute, si elle existe. Si cette mthode base n'existe pas ou si son excution est termine, 4D affiche la page d'accueil par dfaut dfinie dans les Prfrences de la base, s'il y en a une. Si aucune page d'accueil par dfaut n'est dfinie, 4D affiche la barre de menus courante (par dfaut, la barre de menus n1), si elle existe. S'il n'y a pas de page d'accueil par dfaut ni de barre de menus dfinie dans la base, 4e Dimension affiche une page de Web qui indique :Cette base n'a pas encore t configure pour le Web.

4e Dimension - Langage 1581

Cette squence est rsume dans le schma suivant :

La Mthode base Sur connexion Web peut appeler toute mthode ou tout formulaire dfini(e) dans la base, ainsi que des pages HTML. En dfinitive, cette mthode base peut grer la totalit de la session.

1582 4e Dimension - Langage

Une connexion Web 4D ou 4D Server n'est pas de mme nature qu'une connexion client/serveur. Le protocole HTTP, qui supporte HTML et le Web, n'est pas un protocole bas sur la session. C'est plutt un protocole bas sur la requte. En client/serveur, vous vous connectez, effectuez une session de travail, et finalement vous vous dconnectez du serveur. Avec HTTP, chaque fois que vous ralisez une action qui ncessite l'attention ou une action du serveur Web, une requte est envoye au serveur. Pour rsumer, une requte HTTP peut tre considre comme une squence connexion+requte+attente de rponse+dconnexion. En mode contextuel, pour maintenir une session client/serveur relle par l'intermdiaire de HTTP, par dfaut 4D gre pour vous, via un encodage transparent des URLs, des contextes qui identifient de faon unique chaque connexion Web, et en mme temps associent la connexion au process 4D qui la gre. Dans ce mode toutefois, 4D ne peut pas terminer une "session de requtes" Web de la mme manire qu'une session client/serveur standard. C'est pour cette raison que la clture de ces sessions client/serveur est gre par un systme de temporisation (timeout). Le process 4D qui gre la connexion Web est tu lorsque la priode d'inactivit maximale autorise pour la base est atteinte. Base de donnes et serveur Web la fois Une session de serveur Web 4D peut tre entirement gre l'aide des barres de menus, formulaires et mthodes 4D en mode contextuel. Dans l'exemple prcdent, la visualisation et l'ajout des enregistrements taient effectus par l'intermdiaire de mthodes et formulaires 4D simples. Si nous n'avions pas inclus de page d'accueil en HTML, la barre de menus n1 aurait t directement affiche lors de la connexion Web. Si nous mettons de ct la page HTML d'accueil, la construction d'un serveur Web qui supporte les transactions de la base client/serveur revient dvelopper une base 4D comme sous Windows ou MacOS, en mono ou multi-utilisateur. Voici la structure de la base exemple :

4e Dimension - Langage 1583

Pour visualiser les enregistrements, les formulaires entre et sortie suivants ont t crs :

Pour travailler avec les menus personnaliss et grer les connexions Web, la barre de menus n1 suivante a t cre :

Les deux mthodes projet suivantes ont t crites : `Mthode projet M_ADD_RECORDS C_TEXTE($1) ` Ce paramtre DOIT tre explicitement dclar Repeter AJOUTER ENREGISTREMENT ([Clients]) Jusque (OK=0) `Mthode projet M_LIST_RECORDS C_TEXTE($1) ` Ce paramtre DOIT tre explicitement dclar TOUT SELECTIONNER ([Clients]) MODIFIER SELECTION([Clients]) L'option Dmarrer un process a t associe chaque mthode dans l'diteur de menus.

1584 4e Dimension - Langage

Le serveur Web dmarre en mode contextuel et une page d'accueil par dfaut est dfinie dans les Prfrences de la base :

La page daccueil contient deux liens, "Ajouter des enregistrements" et "Liste des enregistrements", qui dclenchent l'excution des mthodes projet 4D M_ADD_RECORDS et M_LIST_RECORDS par l'intermdiaire de leurs URLs. La convention est simple : tout objet HTML comportant un lien peut appeler une mthode projet de votre base par l'URL "/4DMETHOD/Nom_de_votre_Mthode".

4e Dimension - Langage 1585

L'attribut Disponible via 4DACTION, 4DMETHOD et 4DSCRIPT doit tre associ chaque mthode appele via 4DMETHOD :

Une fois ces liens dfinis, 4D excute la mthode projet spcifie aprs le mot-cl /4DMETHOD/ lorsqu'un navigateur Web retourne l'URL. Ensuite, lorsque la mthode projet se termine, vous retournez la page HTML qui a lanc son excution. Notez que la mthode projet peut elle-mme appeler des formulaires 4D, d'autres pages HTML, et ainsi de suite. Votre site Web 4D peut tre un systme bas entirement sur 4D ou un mlange de formulaires 4D et de pages HTML. Si vous utilisez des pages HTML dans votre base 4D, vous bnficiez des deux environnements : 4D et HTML. Mais rappelez-vous que vous n'tes absolument pas oblig d'utiliser des pages HTML, si vous le souhaitez ! La page d'accueil HTML utilise dans l'exemple comprend galement un bouton. Il existe trois types de boutons HTML : normal, submit et reset. Un bouton "normal" peut se voir attribuer un URL qui fait rfrence une mthode 4D l'aide du mot-cl /4DMETHOD/. Les boutons "reset" ne sont gure utiles dans un dveloppement 4D : ils effacent les valeurs ventuellement saisies par l'utilisateur dans un formulaire et n'envoient pas de requte au serveur. Les boutons "submit" retournent le formulaire au serveur Web avec les valeurs ventuellement saisies par l'utilisateur. Lors de l'intgration des pages HTML dans 4D, vous utiliserez gnralement des boutons de type "normal" ou "submit". Les boutons de type "normal" servent naviguer parmi les pages et les boutons de type "submit" servent grer la saisie de valeurs partir de pages HTML lorsque vous ne souhaitez pas utiliser pour cela de formulaires 4D standard. Le code du bouton de la page d'accueil est le suivant : INPUT TYPE="SUBMIT" NAME="/4DMETHOD/GO_MAIN_MENUBAR"

1586 4e Dimension - Langage

Pour grer l'envoi du formulaire HTML du ct du serveur Web 4D, vous devez spcifier l'action POST pour la mthode 4D qui sera excute par 4D ds rception du formulaire. Pour cela, il doit contenir la ligne FORM ACTION="/4DMETHOD/GO_MAIN_MENU_BAR" METHOD="POST" La mthode projet GO_MAIN_MENU_BAR est la suivante : FIXER PAGE ACCUEIL("") Cette mthode n'a qu'un objectif : ne plus afficher la page d'accueil par dfaut, et donc envoyer la barre de menus courante. 4D affiche alors la barre de menus n1 de votre base. C'est tout ! En moins de cinq minutes, lorsque vous crez une base 4D, elle peut tre utilise localement ou comme serveur Web que vous pouvez publier sur votre rseau Intranet ou sur Internet. Rfrence ARRETER SERVEUR WEB, ENVOYER FICHIER HTML, FIXER LIMITES AFFICHAGE WEB, FIXER TEMPORISATION WEB, LANCER SERVEUR WEB.

4e Dimension - Langage 1587

Scurit des connexions

Serveur Web version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez scuriser les connexions votre serveur Web 4D l'aide des lments suivants : La combinaison du systme de gestion des mots de passe pour les accs Web et de la Mthode base Sur authentification Web, La dfinition dun Utilisateur Web gnrique, La dfinition dun dossier racine HTML par dfaut, La dfinition de la proprit Disponible via 4DACTION, 4DMETHOD et 4DSCRIPT pour chaque mthode projet de la base. Note : La scurit des informations transmises via la connexion est prise en charge par le protocole SSL. Pour plus d'informations, reportez-vous la section Utiliser le protocole SSL. Gestion des mots de passe pour les accs Web
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez dfinir, dans les Prfrences de la base, le systme de contrle daccs que vous souhaitez appliquer votre serveur Web. Dans la bote de dialogue des Prfrences, choisissez le thme Web, page Avanc :

1588 4e Dimension - Langage

Dans la zone Mots de passe, vous disposez de deux options : Utiliser les mots de passe et Inclure les mots de passe 4D. La seconde case nest active qui si la premire a t coche. Utiliser les mots de passe : permet de grer les accs au serveur Web via des mots de passe. Lorsqu'un utilisateur se connecte, une bote de dialogue lui permettant de saisir son nom et son mot de passe s'affiche sur son navigateur. Ces deux valeurs sont ensuite envoyes la Mthode base Sur authentification Web avec les autres paramtres de la connexion (adresse et port IP, URL...) pour que vous puissiez les traiter. Note : Dans ce cas, si la Mthode base Sur authentification Web nexiste pas, la connexion est rejete. Inclure les mots de passe 4D : permet dutiliser, au lieu ou en plus de votre propre systme, le systme 4D de mots de passe de la base (dfini dans 4D). Notes : - Avec le serveur Web de 4D Client, il est noter que tous les sites publis par les postes 4D Client partageront la mme table dutilisateurs. En effet, la validation des utilisateurs/mots de passe est effectue par lapplication 4D Server. - Les mots de passe saisis par les utilisateurs ne sont pas encrypts dans les requtes HTTP (mode Basic). Combinaison des mots de passe et de la Mthode base Sur authentification Web Le systme de filtrage des connexions au serveur Web de 4D dpend donc de la combinaison de deux paramtres : les options de mots de passe Web dans la bote de dialogue des Prfrences de la base, lexistence ou non de la Mthode base Sur authentification Web. Voici les diffrentes possibilits de contrle des connexions : Aucune option nest coche Note : Les nouvelles bases sont cres par dfaut avec ces paramtres. Si la Mthode base Sur authentification Web existe, elle est excute et, outre $1 et $2, seules les adresses IP du navigateur et du serveur ($3 et $4) sont renseignes, le nom dutilisateur et le mot de passe ($5 et $6) sont vides. Vous pouvez dans ce cas filtrer les connexions en fonction de ladresse IP du navigateur et/ou de ladresse IP demande du serveur. Si la Mthode base Sur authentification Web nexiste pas, la connexion est automatiquement accepte. Loption Utiliser les mots de passe est coche et loption Inclure les mots de passe de 4D nest pas coche Si la Mthode base Sur authentification Web existe, elle est excute et tous ses paramtres sont renseigns. Vous pouvez dans ce cas filtrer trs prcisment les connexions partir du nom dutilisateur, du mot de passe et/ou des adresses IP du navigateur et du serveur Web. Si la Mthode base Sur authentification Web nexiste pas, la connexion est automatiquement refuse et un message indiquant que la mthode dauthentification nexiste pas est envoy au navigateur. Note : Si le nom dutilisateur envoy est une chane vide et si la Mthode base Sur authentification Web nexiste pas, une bote de dialogue de demande de mot de passe est envoye au navigateur. 4e Dimension - Langage 1589

Les options Utiliser les mots de passe et Inclure les mots de passe de 4D sont coches Note : Les bases cres avec une version de 4D antrieure la 6.5 sont ouvertes par dfaut avec ces paramtres. Si le nom dutilisateur envoy par le navigateur existe dans la table des utilisateurs 4D et que le mot de passe est valide, la connexion est accepte (dans ce cas, pour des raisons de scurit le paramtre $6 nest alors pas renseign). Si le mot de passe est invalide, la connexion est refuse. Si le nom dutilisateur envoy par le navigateur nexiste pas dans 4D, deux cas sont alors possibles : - si la Mthode base Sur authentification Web existe, les paramtres $1, $2, $3, $4, $5 et $6 sont renseigns. Vous pouvez dans ce cas filtrer trs prcisment les connexions partir du nom dutilisateur, du mot de passe et/ou des adresses IP du navigateur et du serveur Web. - si la Mthode base Sur authentification Web nexiste pas, la connexion est refuse. Le fonctionnement du systme daccs au serveur Web 4D est rsum dans le schma suivant :

1590 4e Dimension - Langage

A propos des robots (note de scurit) Certains robots (moteurs de recherche, spiders) parcourent les serveurs Web et les pages statiques. Si vous souhaitez que les robots ne puissent pas accder la totalit de votre site, il est possible de dfinir des URL qui leur seront interdits. Pour cela, placez un fichier nomm ROBOTS.TXT la racine du serveur. Ce fichier doit tre structur de la manire suivante : User-Agent: <nom> Disallow: <URL> ou <dbut dURL> Par exemple : User-Agent: * Disallow: /4D Disallow: /%23%23 Disallow: /GIFS/ User-Agent: * signifie quil sagit de tous les robots. Disallow: /4D signifie que les robots ne doivent pas accder aux URL commenant par /4D. Disallow: /%23%23 signifie que les robots ne doivent pas accder aux URL commenant par /%23%23. Disallow: /GIFS/ signifie que les robots ne doivent pas accder au dossier /GIFS/ ni aux sous-dossiers. Autre exemple : User-Agent: * Disallow: / Dans ce cas, la totalit du site est interdite aux robots. Utilisateur Web gnrique
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez dsigner un utilisateur pralablement dfini dans la table des mots de passe de 4D comme Utilisateur Web gnrique. Dans ce cas, chaque navigateur se connectant la base bnficie des autorisations et restrictions daccs associes cet utilisateur. Vous pouvez ainsi contrler simplement laccs des navigateurs aux diffrentes parties de la base. Note : Il ne faut pas confondre cette option, permettant de restreindre les accs des navigateurs aux diffrentes parties de la base (tables, menus, etc.), avec le systme de contrle des connexions au serveur Web, gr par les mots de passe et la Mthode base Sur authentification Web. Pour dfinir un Utilisateur Web gnrique : 1. En mode Structure, crez au moins un utilisateur dans lEditeur de mots de passe. Vous pouvez lui associer ou non un mot de passe. 2. Dans les diffrents diteurs de 4D, assignez cet utilisateur les autorisations et restrictions daccs souhaites. 3. Dans la bote de dialogue des Prfrences, choisissez le thme Web, page Avanc. 4e Dimension - Langage 1591

La zone Mots de passe Web contient la liste droulante Utilisateur Web gnrique. Par dfaut, lutilisateur Web gnrique est le Super_Utilisateur : les navigateurs disposent donc dun accs libre toutes les parties de la base. 4. Choisissez lutilisateur dans la liste droulante et validez la bote de dialogue.

Tous les navigateurs Web autoriss se connecter la base bnficieront des autorisations et restrictions daccs associes lutilisateur Web gnrique (sauf lorsque loption Inclure les mots de passe 4D est coche et que lutilisateur qui se connecte existe dans la table des mots de passe 4D, cf. ci-dessous). Interaction avec le systme de mots de passe Web Loption Utiliser les mots de passe ninflue pas sur le mcanisme de lutilisateur Web gnrique : quel que soit ltat de cette option, les privilges et restrictions daccs associs lUtilisateur Web gnrique seront appliqus tous les navigateurs Web autoriss se connecter la base. En revanche, lorsque loption "Inclure les mots de passe 4D" est coche, deux cas peuvent se produire : Le nom et le mot de passe de lutilisateur nexistent pas dans la table des mots de passe de 4D. Dans ce cas, si la connexion est accepte par la Mthode base Sur authentification Web, les droits daccs de lutilisateur Web gnrique seront appliqus au navigateur. Le nom et le mot de passe de lutilisateur existent dans la table des mots de passe de 4D. Dans ce cas, le paramtre Utilisateur Web gnrique est ignor : lutilisateur se connecte avec ses propres droits daccs. Dossier racine HTML par dfaut
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Cette option des Prfrences de la base vous permet de dfinir le dossier dans lequel 4D recherchera les pages HTML statiques et semi-dynamiques, les images, etc., envoyer aux navigateurs. De plus, le dossier racine HTML dfinit, sur le disque dur du serveur Web, le niveau hirarchique au-dessus duquel les fichiers ne seront pas accessibles. Cette restriction daccs sapplique aux URLs demands par les navigateurs Web ainsi quaux commandes du serveur Web 4D telles que ENVOYER FICHIER HTML. Si un URL demand par un navigateur ou une commande 4D tente daccder un fichier situ en amont du dossier racine HTML, une erreur est retourne, indiquant que le fichier na pas t trouv. Par dfaut, 4D dfinit un dossier racine HTML intitul DossierWeb. S'il n'existe pas dj, le dossier racine HTML est cr sur le disque au premier lancement du serveur Web.

1592 4e Dimension - Langage

Si vous conservez l'emplacement par dfaut, le dossier racine est cr : avec 4e Dimension et 4D Server, au mme niveau que le fichier de structure de la base. avec 4D Client, au mme niveau que le fichier .exe de 4D Client (sous Windows) ou que le progiciel (sous MacOS). Vous pouvez modifier le nom et l'emplacement du dossier racine HTML par dfaut dans la bote de dialogue des Prfrences (thme Web, page Configuration) :

Dans la zone Racine HTML par dfaut, saisissez le nouveau chemin daccs du dossier que vous souhaitez utiliser. Le chemin daccs saisi dans cette bote de dialogue est relatif : il est tabli partir du dossier contenant la structure de la base (4e Dimension ou 4D Server) ou du dossier contenant l'application ou le progiciel 4D Client (4D Client). Afin dassurer la compatibilit multiplate-forme de vos bases, le serveur Web 4D utilise, pour dcrire les chemins daccs, des conventions dcriture particulires. Les rgles de syntaxe sont les suivantes ; les dossiers sont spars par le caractre / le chemin ne doit pas se terminer par / pour remonter dun niveau dans la hirarchie des dossiers, saisissez .. (point point) devant le nom du dossier, le chemin ne doit pas commencer par / (sauf si vous souhaitez que le dossier racine HTML soit le dossier de la base ou du 4D Client, cf. ci-dessous). Par exemple, si vous souhaitez que le dossier racine HTML soit le sous-dossier Web, plac dans le dossier Base4D, saisissez Bases4D/Web Si vous souhaitez que le dossier racine HTML soit le dossier de la base ou du 4D Client, mais que laccs aux dossiers des niveaux suprieurs soit interdit, saisissez / dans la zone. Pour que laccs aux volumes soit totalement libre, laissez la zone Racine HTML par dfaut vide. ATTENTION : Si vous ne dfinissez aucun dossier racine HTML par dfaut, le dossier contenant le fichier de structure de la base ou l'application 4D Client est utilis. Dans ce cas, il ny a pas de restrictions daccs (tous les volumes sont accessibles). Note : Lorsque le dossier racine HTML est modifi dans les Prfrences de la base, le cache est effac afin de ne pas conserver des fichiers dont laccs serait devenu restreint.

4e Dimension - Langage 1593

Prfrences et commande FIXER RACINE HTML (mode contextuel) Vous pouvez modifier le dossier racine HTML par dfaut laide de la commande FIXER RACINE HTML (en mode contextuel uniquement). Dans ce cas, la modification sapplique au process Web courant pour la session de travail. Le cache des pages HTML est alors effac. Toutefois, la commande FIXER RACINE HTML tient compte du dossier racine HTML par dfaut. Si le dossier dfini dans les Prfrences de la base est WebPages et si vous excutez linstruction FIXER RACINE HTML("Dossier"), le dossier racine HTML par dfaut devient WebPages/Dossier. Dans ce cas galement, les restrictions daccs ne sont maintenues que pour les dossiers situs en amont du dossier WebPages. Note : La commande FIXER RACINE HTML na pas deffet lors de lutilisation du serveur Web en mode sans contexte. Disponible via 4DACTION, 4DMETHOD et 4DSCRIPT
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les URLs spciaux 4DACTION (mode sans contexte) et 4DMETHOD (mode contextuel) ainsi que la balise 4DSCRIPT permettent de dclencher l'excution de toute mthode projet dune base 4D publie sur le Web. Par exemple, la requte http://www.serveur.com/4DACTION/Effacer_Tout provoque l'excution de la mthode projet Effacer_Tout, si elle existe. Ce mcanisme prsente donc un risque pour la scurit de la base, notamment si un internaute dclenche intentionnellement ou par erreur une mthode non destine une excution via le Web. Vous pouvez prvenir ce risque de trois manires : restreindre les accs aux mthodes projet via le systme de mots de passe 4D. Inconvnients : ce systme ncessite l'utilisation des mots de passe 4D et interdit tout type d'excution de la mthode (y compris via des balises HTML). filtrer les mthodes appeles via des URLs l'aide de la Mthode base Sur authentification Web. Inconvnients : si la base comporte de nombreuses mthodes, ce systme peut tre difficile grer.

1594 4e Dimension - Langage

utiliser l'option Disponible via 4DACTION, 4DMETHOD et 4DSCRIPT affiche dans la bote de dialogue des Proprits des mthodes projet :

Cette option permet de dsigner individuellement chaque mthode projet pouvant tre appele via les URLs spciaux 4DACTION, 4DMETHOD et la balise 4DSCRIPT. Lorsquelle est dslectionne, la mthode projet concerne ne peut pas tre excute via une requte HTTP contenant un URL spcial. En revanche, elle peut tre excute l'aide dautres types d'appels (formules, autres mthodes, etc.). Cette option est dslectionne par dfaut pour les bases cres avec 4e Dimension compter de la version 2003. Vous devez dsigner expressment les mthodes pouvant tre excutes via les URLs 4DACTION, 4DMETHOD ou la balise 4DSCRIPT. En revanche, pour des raisons de compatibilit, cette option est coche pour les bases cres avec une version de 4D antrieure la 2003 : toutes les mthodes projet sont par dfaut accessibles via des requtes Web. Dans l'Explorateur, les mthodes projet disponibles via 4DACTION, 4DMETHOD et 4DSCRIPT bnficient dune icne spcifique :

Rfrence Mthode base Sur authentification Web, Mthode base Sur connexion Web, Utiliser le protocole SSL.

4e Dimension - Langage 1595

Mthode base Sur authentification Web

Serveur Web version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La Mthode base Sur authentification Web est charge de grer les accs au moteur de serveur Web. Elle est automatiquement appele par 4e Dimension, 4D Server ou 4D Client lorsqu'une requte d'un navigateur Web requiert l'excution d'une mthode 4D sur le serveur (appel d'une mthode via un URL 4DACTION ou 4DCGI, une balise 4DSCRIPT, etc.). La mthode base Sur authentification Web reoit six paramtres de type Texte, passs par 4D ($1, $2, $3, $4, $5 et $6), et retourne un boolen, $0. Voici la description de ces paramtres : Paramtres $1 $2 $3 $4 $5 $6 $0 Type Texte Texte Texte Texte Texte Texte Boolen Description URL En-tte + Corps HTTP (dans la limite des 32 ko) Adresse IP du navigateur Adresse IP appele du serveur Nom dutilisateur Mot de passe Vrai = requte accepte, Faux = requte rejete

Vous devez dclarer ces paramtres de la manire suivante : ` Mthode base Sur authentification Web C_TEXTE($1;$2;$3;$4;$5;$6) C_BOOLEEN($0) ` Code pour la mthode Note : Tous les paramtres de la Mthode base Sur authentification Web ne sont pas forcment remplis. Les informations reues par la mthode base dpendent des options que vous avez slectionnes dans la bote de dialogue des Prfrences de la base. Rfrezvous la section Scurit des connexions. URL Le premier paramtre ($1) est l'URL saisi par l'utilisateur dans la zone 'Adresse' de son navigateur Web, moins l'adresse hte. Prenons l'exemple d'une connexion Intranet. Supposons que l'adresse IP de votre machine serveur Web 4D est 123.4.567.89.

1596 4e Dimension - Langage

Le tableau suivant liste les valeurs de $1 selon l'URL saisi dans le navigateur Web : URL saisi dans le navigateur Web Valeur du paramtre $1 123.4.567.89 / http://123.4.567.89 / 123.4.567.89/Clients /Clients http://123.4.567.89/Clients /Clients http://123.4.567.89/Clients/Ajouter /Clients/Ajouter 123.4.567.89/Faire_ceci/Si_OK/Faire_cela /Faire_ceci/Si_OK/Faire_cela Cas particulier : En mode sans contexte, le paramtre $1 ne dbute PAS par le caractre / dans le cas o lURL demand ne correspond ni une page existante ni un URL spcial de 4D. Par exemple, si lURL est http://123.4.567.89/Clients/Ajouter et quil nexiste pas de page Ajouter dans le dossier Clients, la Mthode base Sur authentification Web puis la Mthode base Sur connexion Web sont appeles avec la valeur "Clients/Ajouter" dans $1. En-tte et corps de la requte HTTP Le deuxime paramtre ($2) est l'en-tte et le corps de la requte HTTP envoye par le navigateur Web. Notez que ces informations sont passes telles quelles la Mthode base Sur authentification Web. Le contenu varie en fonction du type de navigateur Web qui tente de se connecter. Si votre application exploite ces informations, il est de votre ressort d'analyser l'en-tte et le corps. Note : Pour plus d'informations sur ce paramtre, reportez-vous la description de la Mthode base Sur connexion Web. Adresse IP du navigateur Le troisime paramtre ($3) reoit ladresse IP de la machine du navigateur. Cette information peut vous permettre, en particulier, de distinguer les connexions Intranet des connexions Internet. Adresse IP demande du serveur Le quatrime paramtre ($4) reoit ladresse IP demande du serveur Web 4D. En effet, 4D autorise le multi-homing, permettant dexploiter des machines disposant de plusieurs adresses IP. Pour plus dinformations sur ce point, reportez-vous la section Paramtrages du serveur Web. Nom d'utilisateur et Mot de passe Les paramtres $5 et $6 reoivent le nom dutilisateur et le mot de passe saisis par lutilisateur dans la bote de dialogue standard didentification affiche par le navigateur, le cas chant. Cette bote de dialogue apparat pour chaque connexion ds que loption Utiliser les mots de passe est coche dans les Prfrences de la base (cf. section Scurit des connexions). Note : Si le nom dutilisateur envoy par le navigateur existe dans 4D, pour des raisons de confidentialit le paramtre $6 nest alors pas rempli (il reoit une chane vide).

4e Dimension - Langage 1597

Paramtre $0 La Mthode base Sur authentification Web retourne un boolen dans $0 : Si $0 est Vrai, la connexion est accepte. Si $0 est Faux, la connexion est refuse. La Mthode base Sur connexion Web nest excute que si la connexion est accepte par Sur authentification Web. ATTENTION : Si aucune valeur nest passe dans $0, ou si $0 nest pas dfinie dans la Mthode base Sur authentification Web, la connexion sera considre comme accepte, et la Mthode base Sur connexion Web sera excute. Notes Nappelez aucun lment dinterface dans la Mthode base Sur authentification Web (ALERTE, DIALOGUE, etc.), sinon son excution sera interrompue et la connexion refuse. Il en est de mme si une erreur se produit durant son traitement. Il est possible d'interdire l'excution par 4DACTION ou 4DMETHOD de chaque mthode projet l'aide de l'option Disponible via 4DACTION dans la bote de dialogue des Proprits des mthodes. Pour plus d'informations sur ce point, reportez-vous la section Scurit des connexions. Appels de la Mthode base Sur authentification Web La Mthode base Sur authentification Web est automatiquement appele, quel que soit le mode, lorsquune requte ou un traitement ncessite l'excution d'une mthode 4D. Elle est galement appele lorsque le serveur Web reoit un URL statique invalide (par exemple, si la page statique demande n'existe pas). La Mthode base Sur authentification Web est donc appele dans les cas suivants : lorsque 4D reoit un URL dbutant par 4DACTION/ lorsque 4D reoit un URL dbutant par 4DMETHOD/ lorsque 4D reoit un URL dbutant par 4DCGI/ lorsque 4D reoit un URL demandant une page statique inexistante lorsque 4D traite une balise 4DSCRIPT dans une page semi-dynamique lorsque 4D traite une balise 4DLOOP base sur une mthode dans une page semidynamique A noter que la Mthode base Sur connexion Web n'est PAS appele lorsque le serveur reoit un URL demandant une page statique valide.

1598 4e Dimension - Langage

Exemple Cette Mthode base Sur authentification Web filtre les connexions l'aide d'une table de noms d'utilisateurs et de mots de passe : `Mthode base Sur authentification Web C_TEXTE($5;$6;$3;$4) C_TEXTE($utilisateur;$motPasse;$IPBrowser;$IPServer) C_BOOLEEN($utilisateur4D) TABLEAU TEXTE($utilisateurs;0) TABLEAU TEXTE($nums;0) C_ENTIER LONG($upos) C_BOOLEEN($0) $0:=Faux $utilisateur:=$5 $motPasse:=$6 $IPBrowser:=$3 $IPServer:=$4 `Pour des raisons de scurit, refuser les noms qui contiennent @ Si (AvecJoker($utilisateur) | AvecJoker($motPasse)) $0:=Faux `La mthode AvecJoker est dcrite ci-dessous Sinon `Vrifier si cest un utilisateur 4D LIRE LISTE UTILISATEURS($utilisateurs;$nums) $upos:=Chercher dans tableau($utilisateurs;$utilisateur) Si ($upos > 0) $utilisateur4D:=Non(Utilisateur supprime($nums{$upos})) Sinon $utilisateur4D:=Faux Fin de si Si (Non($utilisateur4D)) `Ce nest pas un utilisateur 4D, chercher dans la table des utilisateurs Web CHERCHER([WebUsers];[WebUsers]User=$utilisateur;*) CHERCHER([WebUsers]; & [WebUsers]Password=$motPasse) $0:=(Enregistrements trouves([WebUsers]) = 1) Sinon $0:=Vrai Fin de si Fin de si `Est-ce une connexion intranet ? Si (Sous chaine($IPBrowser;1;7) # "192.100.") $0:=Faux Fin de si

4e Dimension - Langage 1599

La Mthode projet AvecJoker est dcrite ci-dessous : `Mthode projet AvecJoker `AvecJoker ( Chaine ) -> Boolen `AvecJoker ( Nom ) -> Contient un joker C_ENTIER($i) C_BOOLEEN($0) C_TEXTE($1) $0:=Faux Boucle($i;1;Longueur($1)) Si (Code ascii(Sous chaine($1;$i;1)) = Code ascii("@")) $0:=Vrai Fin de si Fin de boucle Rfrence Mthode base Sur connexion Web, Prsentation des mthodes base, Scurit des connexions, URLs et actions de formulaires.

1600 4e Dimension - Langage

Mthode base Sur connexion Web

Serveur Web version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La Mthode base Sur connexion Web peut tre appele dans trois cas distincts : le serveur Web reoit une requte dbutant par l'URL 4DCGI. le serveur Web reoit une requte invalide. elle est galement appele par 4e Dimension et 4D Server chaque fois qu'un navigateur Web se connecte la base en mode contextuel ou quune requte ncessite la cration d'un contexte (ce cas n'est pas gr par 4D Client qui ne prend pas en charge le mode contextuel). Pour plus d'informations, reportez-vous ci-dessous au paragraphe Appels de la Mthode base Sur connexion Web. La requte doit auparavant avoir t "accepte" par la Mthode base Sur authentification Web (si elle existe), et la base doit tre publie en tant que serveur Web. La Mthode base Sur connexion Web reoit six paramtres de type Texte, passs par 4D ($1, $2, $3, $4, $5 et $6). Voici leur description : Paramtres $1 $2 $3 $4 $5 $6 Type Texte Texte Texte Texte Texte Texte Description URL En-tte + corps HTTP (dans la limite des 32 ko) Adresse IP du navigateur Adresse IP appele du serveur Nom dutilisateur Mot de passe

Vous devez dclarer ces six paramtres de la manire suivante : ` Mthode base Sur connexion Web C_TEXTE($1;$2;$3;$4;$5;$6) ` Code pour la mthode Donnes supplmentaires de lURL Le premier paramtre ($1) est lURL saisi par l'utilisateur dans la zone 'Adresse' de son navigateur Web, moins ladresse hte. Prenons lexemple dune connexion Intranet. Supposons que ladresse IP de votre machine serveur Web 4D est 123.4.567.89.

4e Dimension - Langage 1601

Le tableau suivant liste les valeurs de $1 selon lURL saisi dans le navigateur Web : URL saisi dans le navigateur Valeur du paramtre $1 123.4.567.89 / http://123.4.567.89 / 123.4.567.89/Clients /Clients http://123.4.567.89/Clients /Clients http://123.4.567.89/Clients/Ajouter /Clients/Ajouter 123.4.567.89/Faire_ceci/Si_OK/Faire_cela /Faire_ceci/Si_OK/Faire_cela Notez que vous tes libre d'utiliser ce paramtre votre convenance. 4D ignore simplement les valeurs passes au-del de la partie hte de lURL. Par exemple, vous pouvez tablir une convention dans laquelle la valeur "/Clients/Ajouter" signifie aller directement l'ajout d'un nouvel enregistrement dans la table [Clients]. En fournissant aux utilisateurs Web de votre base une liste des valeurs possibles et/ou des marqueurs par dfaut, vous pouvez proposer des raccourcis vers diffrentes parties de votre application. Ainsi, les utilisateurs Web peuvent accder rapidement aux ressources de votre site Web sans devoir naviguer dans toute la base chaque connexion. Cas particulier : En mode sans contexte, le paramtre $1 ne dbute PAS par le caractre / dans le cas o lURL demand ne correspond ni une page existante ni un URL spcial de 4D. Par exemple, si lURL est http://123.4.567.89/Clients/Ajouter et quil nexiste pas de page Ajouter dans le dossier Clients, la Mthode base Sur authentification Web puis la Mthode base Sur connexion Web sont appeles avec la valeur "Clients/Ajouter" dans $1. ATTENTION : Pour empcher un utilisateur d'accder directement une base l'aide d'un marqueur cr pendant une session prcdente, 4D intercepte tout URL correspondant un des URLs standard de 4D. En-tte et corps de la requte HTTP Le deuxime paramtre ($2) est l'en-tte suivi du corps de la requte HTTP envoye par le navigateur Web. Notez que ces informations sont passes telles quelles votre Mthode base Sur connexion Web. Le contenu varie en fonction du type de navigateur Web qui tente de se connecter. Avec Netscape 4.5 sous MacOS, vous recevrez un en-tte semblable celui-ci : GET / HTTP/1.0 Connection: Keep-Alive User-Agent: Mozilla/4.5 (Macintosh; I; PPC) Host: 123.45.67.89 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */* Accept-Encoding: gzip Accept-Language: fr Accept-Charset: iso-8

1602 4e Dimension - Langage

Avec Microsoft Internet Explorer 6 sous Windows, vous recevrez un en-tte semblable celui-ci : GET / HTTP/1.0 Connection: Keep-Alive User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Host: 123.45.67.89 Accept: image/gif, image/x-xbitmap, image/pjpeg, */* Accept-Language: fr Si votre application exploite ces informations, il est de votre ressort d'analyser l'en-tte et le corps. Adresse IP du navigateur Le troisime paramtre ($3) reoit ladresse IP de la machine du navigateur. Cette information peut vous permettre, en particulier, de distinguer les connexions Intranet des connexions Internet. Adresse IP demande du serveur Le quatrime paramtre ($4) reoit ladresse IP demande du serveur Web 4D. En effet, 4D autorise le multi-homing, permettant dexploiter des machines disposant de plusieurs adresses IP. Pour plus dinformations sur ce point, reportez-vous la section Paramtrages du serveur Web. Nom d'utilisateur et Mot de passe Les paramtres $5 et $6 reoivent le nom dutilisateur et le mot de passe saisis par lutilisateur dans la bote de dialogue standard didentification affiche par le navigateur, le cas chant. Cette bote de dialogue apparat pour chaque connexion ds que loption Utiliser les mots de passe est coche dans les Prfrences (cf. section Scurit des connexions). Note : Si le nom dutilisateur envoy par le navigateur existe dans 4D, pour des raisons de confidentialit le paramtre $6 nest alors pas rempli (il reoit une chane vide). Appels de la Mthode base Sur connexion Web
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La Mthode base Sur connexion Web peut tre utilise comme point d'entre dans le serveur Web 4D, soit l'aide de l'URL spcial 4DCGI, soit l'aide d'URLs de commande personnaliss. Elle joue aussi le rle de point dentre en mode contextuel (avec 4e Dimension et 4D Server). Attention : Lappel dune commande 4D affichant un lment dinterface (ALERTE, DIALOGUE...) entrane larrt du traitement de la mthode.

4e Dimension - Langage 1603

La Mthode base Sur connexion Web est donc appele dans les cas suivants : lors de la connexion dun navigateur un serveur Web 4D fonctionnant en mode contextuel. La mthode base est appele avec lURL /<action>... lorsque 4D reoit lURL /4DMETHOD. Le serveur Web passe en mode contextuel et la mthode base est appele avec lURL /4DMETHOD/NomMthode dans $1. lorsque 4D reoit lURL /4DCGI. La mthode base est appele avec lURL /4DCGI/<action> dans $1. lorsquune page Web appele avec un URL du type <chemin>/<fichier> nest pas trouve. La mthode base est appele avec lURL (*). lorsquune page Web est appele avec un URL du type <chemin>/ et quaucune page daccueil par dfaut nest dfinie. La mthode base est appele avec lURL (*). (*) Dans ces cas particuliers, lURL reu dans $1 ne dbute pas par le caractre "/". Pour connatre lorigine de lappel de la Mthode base Sur connexion Web et adapter le traitement effectuer, vous devez utiliser la fonction Contexte Web, qui retourne Vrai si elle est appele depuis le mode contextuel, et Faux sinon. Par consquent, lorsque votre serveur Web manipule le mode contextuel et le mode sans contexte, nous vous conseillons de structurer la Mthode base Sur connexion Web de la manire suivante : `Mthode base Sur connexion Web C_TEXTE($1;$2;$3;$4;$5;$6) Si (Contexte Web) `Si lon est en mode contextuel AvecContexte ($1;$2;$3;$4;$5;$6) `La mthode AvecContexte contient tout ce quil y avait dans la `mthode base Sur connexion Web en 4D 6.0.x Sinon SansContexte ($1;$2;$3;$4;$5;$6) `La mthode SansContexte effectue les traitements des requtes `non contextuelles (gnralement courts) Fin de si Exemple : implmentation des pages Home locales des clients en mode contextuel Dans l'exemple suivant, le paramtre $1, envoy la mthode base Sur connexion Web, est utilis pour implmenter les pages Home des clients dans une entreprise. Le serveur Intranet fonctionne en mode contextuel.

1604 4e Dimension - Langage

La base contient deux tables : [Clients] et [Tables]. La Mthode base Sur ouverture ci-dessous initialise les tableaux interprocess utiliss ultrieurement par la Mthode base Sur connexion Web. ` Mthode base Sur ouverture ` Liste des tables TABLEAU ALPHA(31;taTables;Nombre de tables) Boucle ($vlTable;1;Taille tableau(taTables)) taTables{$vlTable}:=Nom de la table($vlTable) Fin de boucle ` Actions Web standard la connexion TABLEAU ALPHA(31;taActions;2) taActions{1}:="Ajouter" taActions{2}:="Visualiser" Le principal objectif de la mthode base Sur connexion Web est de dchiffrer les donnes de l'URL situes aprs l'adresse de l'hte et d'agir en consquence. La mthode est la suivante : ` Mthode base Sur connexion Web C_TEXTE($1;$2;$3;$4;$5;$6) C_TEXTE($vtURL) Si (Contexte Web) ` Si nous sommes bien en mode contextuel ` Par prcaution, vrifiez que $1 est gal "/" ou "/..." Si ($1="/@") ` Copier l'URL dans une variable locale moins le premier "/" $vtURL:=Sous chaine($1;2) ` Analyser l'URL et remplir un tableau local avec les informations de l'URL ` Par exemple, si les donnes supplmentaires de l'URL sont "aaa/bbb/ccc", le ` tableau contiendra les trois lments "aaa", "bbb" et "ccc", dans cet ordre $vlElem:=0 TABLEAU TEXTE($atTokens;$vlElem) Tant que ($vtURL # "") $vlElem:=$vlElem+1 INSERER LIGNES($atTokens;$vlElem) $vlPos:=Position("/";$vtURL) Si ($vlPos>0) $atTokens{$vlElem}:=Sous chaine($vtURL;1;$vlPos-1) $vtURL:=Sous chaine($vtURL;$vlPos+1)

4e Dimension - Langage 1605

Sinon $atTokens{$vlElem}:=$vtURL $vtURL:="" Fin de si Fin tant que ` Si des donnes supplmentaires sont passes au-del de la partie hte de l'URL Si ($vlElem>0) ` Utiliser le tableau interprocess initialis dans la mthode base Sur ouverture ` Vrifier si la premire information est un nom de table $vlTableNumber:=Chercher dans tableau(taTables;$atTokens{1}) Si ($vlTableNumber>0) ` Si oui, obtenir un pointeur vers cette table $vpTable:=Table($vlTableNumber) ` Dfinir les formulaires entre et sortie FORMULAIRE ENTREE($vpTable->;"Input Web") FORMULAIRE SORTIE($vpTable->;"Output Web") ` Utiliser le tableau interprocess initialis dans la mthode base Sur dbut ` Vrifier si la deuxime information est une action standard connue $vlAction:=Chercher dans tableau(taActions;$atTokens{2}) Au cas ou ` Ajouter des enregistrements : ($vlAction=1) Repeter AJOUTER ENREGISTREMENT($vpTable->;*) Jusque (OK=0) ` Visualiser les enregistrements : ($vlAction=2) LECTURE SEULEMENT($vpTable->) TOUT SELECTIONNER($vpTable->) VISUALISER SELECTION($vpTable->;*) LECTURE ECRITURE($vpTable->) Sinon ` Ajouter ventuellement ici des actions standard supplmentaires ` implmenter Fin de cas Sinon ` Ajouter ventuellement ici d'autres actions de table standard ` implmenter Fin de si Fin de si Fin de si

1606 4e Dimension - Langage

` Dans tous les cas, poursuivre le processus standard de connexion WWW CONNEXION STANDARD Sinon ... ` Placer ventuellement ici le code grant le mode sans contexte Fin de si A ce stade, les membres de l'entreprise peuvent se connecter la base et saisissent un URL en fonction des conventions dfinies. Les utilisateurs peuvent galement crer des marqueurs Favoris s'ils ne veulent pas saisir l'URL chaque connexion. En fait, la meilleure solution consiste fournir chaque membre de l'entreprise une page HTML qu'il peut utiliser en local pour accder la base. Voici la page HTML :

Autrement dit, la page HTML Dupont_IS.HTM est la page Home du client local pour le systme d'informations de l'entreprise bas sur 4D. Si l'utilisateur clique sur le lien Crer produits, le navigateur Web se connectera l'hte dont l'URL est http://123.4.567.89/Produits/Ajout. Si l'adresse IP de l'ordinateur o se trouve la base est 123.4.567.89, la mthode base Sur connexion Web reoit les donnes d'URL supplmentaires "/Produits/Ajout" dans $1 puis lance le processus d'ajout d'enregistrements la table [Produits].

4e Dimension - Langage 1607

Enfin, les utilisateurs peuvent glisser-dposer les liens de cette page vers leur bureau pour crer une icne de raccourci Internet, telle que l'icne ci-dessous. Double-cliquer sur une de ces icnes envoie directement l'utilisateur dans la zone spcifie de votre base 4D Web.

Le code source de cette page HTML est le suivant :

Rfrence Mthode base Sur authentification Web, Prsentation des mthodes base, URLs et actions de formulaires, Utiliser le mode contextuel.

1608 4e Dimension - Langage

Associer des objets 4D des objets HTML

Serveur Web version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Cette section dcrit les moyens mis votre disposition par le serveur Web de 4D pour changer de l'information via le Web, c'est--dire pour envoyer et recevoir dynamiquement des valeurs. Les points suivants sont abords : Envoyer des valeurs dynamiques stockes dans des variables 4D Recevoir des valeurs dynamiques via des formulaires Web Utiliser la mthode projet COMPILER_WEB Grer des images interactives (server-side image mapping) Encapsuler du JavaScript Note : l'envoi et la rception de valeurs dynamiques peuvent tre effectus automatiquement en mode contextuel via les formulaires 4D convertis. Pour plus d'informations sur ce point, reportez-vous la section Utiliser le mode contextuel. Envoyer des valeurs dynamiques
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez insrer dans vos pages HTML des rfrences des variables 4D. Ces rfrences peuvent tre associes tout type d'objet HTML. Au moment de l'envoi des pages Web aux navigateurs, 4D remplacera ces rfrences par la valeur courante de la variable. Les pages reues sont alors la combinaison d'lments statiques et de valeurs issues de 4D. Ce type de page est appel page semi-dynamique. Notes : Vous devez utiliser des variables process. Comme le HTML est orient Texte, vous travaillerez gnralement avec des variables Texte. Toutefois, vous pouvez galement utiliser des variables BLOB (ce qui vous permet de vous affranchir de la limite des 32 000 caractres inhrente aux variables de type texte). Il vous suffit pour cela de gnrer des BLOBs en mode Texte sans longueur. Tout d'abord, un objet HTML peut voir sa valeur initialise par la valeur d'une variable 4D. Ensuite, lorsqu'un formulaire Web est envoy en retour, la valeur dun objet HTML peut tre retourne dans une variable 4D. Pour cela, dans le code du formulaire HTML, vous crez un objet HTML dont le nom est le mme que celui de la variable process 4D que vous voulez associer. Ce point est tudi plus loin dans le paragraphe Recevoir des valeurs dynamiques . Note : En mode sans contexte, il nest pas possible de faire rfrence des variables images 4D. Revenons au premier point. Vous pouvez donner par programmation des valeurs par dfaut aux objets HTML en incluant <!--#4DVAR NomVar--> dans, par exemple, le champ valeur de l'objet HTML ; NomVar est le nom de la variable process 4D telle qu'elle est dfinie dans le process Web courant nom que vous mettez entre <!--# -->, c'est--dire la notation standard pour les commentaires HTML.

4e Dimension - Langage 1609

Note : Certains diteurs HTML n'acceptent pas la saisie de la valeur <!--#4DVAR NomVar--> dans le champ valeur des objets HTML. Dans ce cas, vous devrez la placer directement dans le code HTML. La balise <!--#4DVAR --> permet galement d'insrer des expressions 4D dans les pages envoyes (champs, lments de tableaux, etc.). Le principe de fonctionnement de la balise avec ce type de donne est identiques celui des variables. Pour plus dinformations, reportez-vous la section Balises HTML 4D. En fait, la syntaxe <!--#4DVAR NomVar--> permet d'insrer des donnes 4D partout dans la page HTML. Si, par exemple, vous crivez : <P>Bienvenue dans <!--#4DVAR vtSiteName-->!</P> La valeur de la variable 4D vtSiteName sera insre dans la page HTML. Examinons un exemple : ` Voici le code 4D assignant "4D4D" la variable process vs4D vs4D:="4D4D" ` Puis envoyer la page HTML "AnyPage.HTM" ENVOYER FICHIER HTML("AnyPage.HTM") Le source de la page HTML AnyPage.HTM est le suivant :

1610 4e Dimension - Langage

Dans le code HTML ci-dessus, vous remarquez le type de saisie hidden dont le nom est vs4D. La valeur de cet objet est mise la valeur texte "<!--#4DVAR vs4D-->". Comme la mthode projet qui envoie le fichier HTML a pralablement dfini la variable process vs4D, 4D remplace la valeur de l'objet HTML et la met "4D4D", la valeur de la variable 4D. Vous notez aussi la fonction encapsule JavaScript Is4DWebServer qui teste la valeur de l'objet HTML vs4D. Voici l'astuce : si la page HTML est envoye par 4D, la valeur de l'objet est change en "4D4D" ; en revanche, si la page HTML est envoye par une autre application (par exemple 4D WebSTAR sur Macintosh), l'objet conserve sa valeur telle qu'elle est dfinie dans la page, c'est--dire "[vs4D]". En testant la valeur de cet objet, par JavaScript, vous pouvez dtecter l'intrieur de la page, ct navigateur Web, si cette page est ou non envoye par 4D. Ce premier exemple montre comment vous pouvez construire des pages HTML intelligentes, qui comportent des caractristiques supplmentaires lorsqu'elles sont envoyes par 4D tout en restant compatibles avec d'autres serveurs de Web. Important : Rappelons que vous ne devez associer que des variables process. De plus, vous ne pouvez pas, dans la version actuelle du programme, associer de tableau 4D un objet HTML SELECT. En revanche, chaque lment d'un objet SELECT peut se rfrer des variables 4D spares (par exemple, le premier lment V1, le second V2, et ainsi de suite). Lassociation dans le sens 4D vers navigateur Web fonctionne avec n'importe quel procd d'encapsulation (ENVOYER FICHIER HTML, ENVOYER BLOB HTML ainsi que, en mode contextuel, texte statique ou variable texte ou BLOB dans un formulaire 4D). Analyse des pages envoyes par le serveur En mode contextuel, avant l'envoi d'une page HTML (document HTML ou formulaire 4D traduit), 4D scrute toujours le source HTML pour rechercher les objets renvoyant des variables 4D. En mode sans contexte, des fins d'optimisation l'analyse du source HTML nest pas effectue par le serveur Web de 4D lorsque les pages HTML sont appeles via des URLs simples et quelles sont suffixes .HTML ou .HTM. 4D propose galement des mcanismes permettant de forcer l'analyse des pages si ncessaire (reportez-vous la section Balises HTML 4D). Insrer du code HTML dans des variables 4D Vous pouvez insrer du code HTML dans des variables 4D incluses dans des pages statiques. Lorsque la page est affiche sur le navigateur, la valeur de la variable est remplace par le code HTML, qui est alors interprt par le navigateur.

4e Dimension - Langage 1611

Pour insrer du code HTML dans des variables 4D, vous disposez de deux possibilits : Faire dbuter la variable 4D par le code ASCII 1 (par exemple vtHTML:=Caractere(1)+"...Code HTML...") et l'insrer dans la page HTML via la balise <!--#4DVAR vtHTML-->. Insrer une variable 4D standard (par exemple vtHTML:="...Code HTML...") dans la page HTML via la balise <!--#4DHTMLVAR vtHTML-->. Vous pouvez utiliser une variable de type Texte ou BLOB (gnr en mode Texte sans longueur). Pour plus d'informations, reportez-vous la section Balises HTML 4D. Recevoir des valeurs dynamiques
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Quand vous envoyez une page HTML avec ENVOYER FICHIER HTML ou ENVOYER BLOB HTML, vous pouvez aussi associer des variables 4D avec des objets HTML dans le sens "navigateur Web vers 4D". L'association fonctionne dans les deux sens : lorsquun formulaire HTML est retourn, 4D peut recopier les valeurs des objets HTML dans des variables process 4D. En vue de la compilation de la base, ces variables doivent tre dclares dans la mthode COMPILER_WEB (cf. paragraphe ci-dessous). Il est galement posssible de rcuprer les valeurs des formulaires Web envoys 4D sans connatre au pralable les champs qu'ils contiennent l'aide de la commande LIRE VARIABLES FORMULAIRE WEB. Pour plus d'informations, reportez-vous la description de cette commande. Attention : La rcupration des valeurs dans les variables process 4D n'est possible qu'avec des pages HTML envoyes avec ENVOYER FICHIER HTML ou ENVOYER BLOB HTML. Dans le cas de HTML encapsul dans un formulaire 4D en mode contextuel, la rcupration des valeurs est limite aux objets 4D effectivement placs dans ce formulaire.

1612 4e Dimension - Langage

Considrons cette page de code HTML :

4e Dimension - Langage 1613

Lorsque la page est envoye au navigateur Web par 4D, elle se prsente ainsi :

Voici les caractristiques de cette page : Elle comporte trois boutons Submit : vsbLogOn, vsbRegister et vsbInformation. Le Submit du formulaire quand vous cliquez sur LogOn est d'abord trait par la fonction JavaScript LogOn. Si aucun nom n'a t saisi, le formulaire n'est pas envoy 4D et une alerte JavaScript est affiche. Le formulaire comporte une mthode 4D POST et un script Submit (GetBrowserInformation) qui copie les proprits du Navigator dans quatre objets cachs dont les noms commencent par vtNav_App. Vous remarquez aussi l'objet vtUserName dont la valeur initiale est <!--#4DVAR vtUserName-->. Examinons maintenant la mthode 4D (nomm ici WWW Welcome) qui envoie cette page HTML l'aide de la commande ENVOYER FICHIER HTML. Cette mthode est appele par la Mthode base Sur connexion Web. ` Mthode projet WWW Welcome ` WWW Welcome -> Boolen ` WWW Welcome -> Oui = La session peut commencer C_BOOLEEN($0) $0:=Faux ` Objets de saisie HTML cachs retournant l'information sur le Navigateur C_TEXTE(vtNav_appName;vtNav_appVersion;vtNav_appCodeName;vtNav_userAgent) vtNav_appName:="" vtNav_appVersion:="" vtNav_appCodeName:="" vtNav_userAgent:=""

1614 4e Dimension - Langage

` Objet texte saisie HTML o le nom de l'utilisateur est saisi C_TEXTE(vtUserName) vtUserName:="" ` Valeurs du HTML bouton Submit C_ALPHA(31;vsbLogOn;vsbRegister;vsbInformation) Repeter ` Ne pas oublier d'initialiser les valeurs des boutons Submit! vsbLogOn:="" vsbRegister:="" vsbInformation:="" ` Envoyer la page Web ENVOYER FICHIER HTML("Welcome.HTM") ` Tester les valeurs des boutons Submit pour dtecter si l'un d'entre eux ` a reu un clic souris Au cas ou ` Le bouton Log On bouton a t cliqu : (vsbLogOn # "") CHERCHER([WWW Users];[WWW Users]User Name=vtUserName) $0:=(Enregistrements trouves([WWW Users])>0) Si ($0) WWW POST EVENT ("Log On";WWW Log information ) ` La mthode WWW POST EVENT sauvegarde l'information ` dans une table de la base Sinon CONFIRMER("Ce nom d'utilisateur est inconnu. Voulez-vous l'enregistrer?") $0:=(OK=1) Si ($0) $0:=WWW Register ` La mthode WWW Register permet un nouvel utilisateur Web ` de s'enregistrer Fin de si Fin de si ` Le bouton Register a reu un clic souris : (vsbRegister # "") $0:=WWW Register ` Le bouton Information a reu un clic souris : (vsbInformation # "") DIALOGUE([User Interface];"WWW Information") Fin de cas Jusque (Non(vbWebServicesOn) | $0)

4e Dimension - Langage 1615

Voici les caractristiques de cette mthode : Les variables 4D vtNav_appName, vtNav_appVersion, vtNav_appCodeName et vtNav_userAgent (lies aux objets HTML de mme nom) reoivent les valeurs assignes aux objets HTML par le script JavaScript GetBrowserInformation. C'est simple : initialisez les variables en chanes de caractres, et ensuite rcuprez les valeurs aprs que la page ait t soumise. Les variables 4D vsbLogOn, vsbRegister et vsbInformation sont lies aux trois boutons Submit. Notez que ces variables sont remises leur valeur vide chaque fois que la page est envoye au navigateur. Quand le submit est effectu par l'un de ces trois boutons, le navigateur retourne 4D la valeur du bouton sur lequel on a cliqu. Comme les variables 4D sont initialises chaque fois, la variable qui n'est plus gale chane vide vous indique sur quel bouton on a cliqu. Les deux autres variables sont des chanes vides, non pas parce que le navigateur a retourn des chanes vides, mais parce qu'il n'a rien dit leur sujet et, en consquence, 4D les a laisses inchanges. C'est la raison pour laquelle il est ncessaire de rinitialiser ces variables toutes les fois que la page est envoye au navigateur. C'est de cette manire que vous pouvez savoir quel bouton Submit a t activ quand plusieurs boutons Submit se trouvent sur la page Web. Notez que les boutons 4D (dans un formulaire 4D) sont des variables numriques. En revanche, en HTML, tous les objets sont des objets texte. Si vous liez une variable 4D avec un objet SELECT, vous liez aussi une variable texte. Dans 4D, pour tester quel lment d'une liste droulante a t slectionn, vous testez la valeur numrique du tableau 4D. En HTML, c'est la valeur de l'lment slectionn qui est retourne dans la variable 4D lie l'objet HTML. Quel que soit l'objet que vous associez une variable 4D, la valeur retourne est de type Texte. Donc, vous devez associer des variables 4D process de type Alpha ou Texte. Un point intressant de cet exemple (partiel) est qu'une fois que vous avez obtenu l'information sur le navigateur, vous pouvez stocker ces valeurs dans une table 4D, et l encore vous associez le Web et les capacits de base de donnes de 4D. C'est ce que ralise la mthode projet WWW POST EVENT. Elle ne poste pas un vnement, elle sauvegarde les informations de la session Web dans des tables du type de celles-ci :

1616 4e Dimension - Langage

Une fois que vous avez sauvegard ces informations dans une table, vous pouvez, avec d'autres mthodes projet, renvoyer l'information l'utilisateur Web. Pour cela, vous utilisez simplement un CHERCHER pour trouver la bonne information et un VISUALISER SELECTION pour montrer les enregistrements [WWW Log]. L'image ci-dessous prsente les informations de connexion que l'utilisateur Web peut obtenir s'il est un utilisateur enregistr du site Web :

Compte tenu des possibilits des liens 4D/HTML dans cet exemple et des informations que vous pouvez demander aux utilisateurs par des pages HTML ou des formulaires 4D, vous pouvez concevoir des capacits d'administration trs intressantes pour votre site Web. Mthode projet COMPILER_WEB Lorsque le serveur Web 4D reoit un formulaire post, il appelle automatiquement la mthode projet nomme COMPILER_WEB (si elle existe). Cette mthode doit contenir toutes les directives de typage et/ou dinitialisation des variables, en loccurrence les variables dont les noms sont ceux des champs du formulaire Web. Elle sera utilise par le compilateur en cas de compilation de la base. La mthode COMPILER_WEB est commune tous les formulaires Web. Par dfaut, la mthode COMPILER_WEB nexiste pas. Vous devez la crer explicitement. Note : Alternativement, vous pouvez utiliser la commande LIRE VARIABLES FORMULAIRE WEB, permettant de rcuprer le nom et la valeur de tous les champs inclus dans une page HTML soumise au serveur. Web Services : La mthode projet COMPILER_WEB est galement appele, si elle existe, chaque requte SOAP accepte. Vous devez utiliser cette mthode pour dclarer toutes les variables 4D associes des arguments SOAP entrants et ce, pour toutes les mthodes publies comme Web Services. En effet, lutilisation de variables process dans les mthodes Web Services ncessite leur dclaration avant lappel de la mthode. Pour plus d'informations sur ce point, reportez-vous la description de la commande DECLARATION SOAP.

4e Dimension - Langage 1617

Server-side Image Mapping Grer des images interactives


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Comme cela est dcrit dans la section Utiliser le mode contextuel, quand un formulaire 4D est utilis comme page Web, 4D peut fournir une image interactive ct serveur ("Serverside Image Mapping") au moyen de boutons invisibles placs par-dessus une image statique. Si vous envoyez un document HTML avec ENVOYER FICHIER HTML ou ENVOYER BLOB HTML, vous pouvez aussi lier une variable 4D avec des objets HTML Image interactive (INPUT TYPE="IMAGE"). Par exemple, vous crez un objet HTML Image interactive dont le nom est bImageMap (vous prenez le nom que vous voulez). Chaque fois que vous cliquez sur l'image ct navigateur, un submit avec la position du clic est renvoy au Serveur Web 4D. Pour rcuprer les coordonnes de ce clic (exprim par rapport au coin suprieur gauche de l'image), il suffit de lire la valeur des variables process 4D bImageMap_X et bImageMap_Y (de type Entier long) qui contiennent les coordonnes horizontales et verticales du clic. Ces variables doivent imprativement tre initialises dans la mthode projet COMPILER_WEB (cf. paragraphe prcdent). Dans la page HTML, vous crivez, par exemple : <P><INPUT TYPE="image" SRC="MonImage.GIF" NAME="bImageMap" BORDER=0></P> La mthode 4D qui envoie la page HTML contient simplement : ENVOYER FICHIER HTML("CettePage.HTM") Dans la mthode projet COMPILER_WEB, vous crivez : C_ENTIER LONG(bImageMap_X;bImageMap_Y) bImageMap_X:=-1 `Initialisation de la variable bImageMap_Y:=-1 `Initialisation de la variable Ensuite, dans la mthode 4D appele par l'action POST du formulaire ou dans la mthode courante une fois que la mthode d'action POST a mis un ENVOYER FICHIER HTML ("") vous rcuprez les coordonnes du clic dans les variables bImageMap_X et bImageMap_Y : Si (($bImageMap_X#-1)&($bImageMap_Y#-1)) ` Faire quelque chose en fonction de ces coordonnes Fin de si

1618 4e Dimension - Langage

Encapsuler du JavaScript
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le code source JavaScript encapsul dans les documents HTML est support par le serveur Web 4D, ainsi que l'insertion de fichiers JavaScript .js dans des documents HTML (par exemple <SCRIPT SRC="..."). Avec ENVOYER FICHIER HTML ou ENVOYER BLOB HTML en mode standard, vous envoyez une page que vous avez prpare avec un diteur HTML ou construite avec 4D et sauvegarde comme document sur disque. Dans les deux cas, vous avez tout contrle sur la page et, par exemple, vous pouvez insrer des scripts JavaScript dans la section HEAD du document et utiliser des scripts avec une balise FORM. Ainsi, dans l'exemple ci-dessus, le script renvoie le formulaire "frm" car vous avez donn un nom au formulaire. Vous pouvez galement dclencher, accepter ou rejeter la soumission du formulaire au niveau de la balise FORM. En mode contextuel, si vous encapsulez de l'HTML dans un formulaire 4D, vous n'avez pas de contrle sur la section HEAD (en-tte) ni sur la dclaration du FORM (formulaire). L'aire d'action des scripts est donc diffrente. Ainsi, vous ne pouvez pas accder au formulaire HTML par son nom. Cependant, comparez la fonction JavaScript Is4DWebServer de l'exemple ci-dessus avec celui-ci :

Les deux fonctions font la mme chose. La seconde utilise la proprit forms de l'objet HTML document pour accder l'objet par l'lment forms[0]. Le rsultat est que tout fonctionne, mme si vous ne connaissez pas le nom du formulaire que 4D a ou n'a pas donn la page HTML traduite. Note : 4D supporte le transport d'Applets Java. Rfrence Balises HTML 4D, ENVOYER BLOB HTML, ENVOYER FICHIER HTML, URLs et actions de formulaires.

4e Dimension - Langage 1619

URLs et actions de formulaires

Serveur Web version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le serveur Web 4D propose plusieurs URLs et actions de formulaires HTML spciaux vous permettant d'effectuer diffrentes actions dans votre base de donnes, en mode contextuel ou en mode sans contexte. Ces URLs sont les suivants : 4DMETHOD/, permettant de lier un objet HTML une mthode projet de votre base en mode contextuel, 4DACTION/, permettant de lier un objet HTML une mthode projet de votre base en mode sans contexte, 4DCGI/, permettant d'appeler la Mthode base Sur connexion Web depuis un objet HTML. En outre, le serveur Web 4D accepte plusieurs URLs supplmentaires : /4DSTATS, /4DHTMLSTATS, /4DCACHECLEAR et /4DWEBTEST, vous permettant dobtenir diverses informations sur le fonctionnement de votre site Web 4D. Ces URLs sont dcrits dans la section Informations sur le site Web. /4DWSDL, permettant d'accder au fichier de dclaration des Web Services publis sur le serveur. Pour plus d'informations, reportez-vous la section Commandes du thme Web Services (Serveur) et au manuel Mode Structure. URL 4DACTION/
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Syntaxe : 4DACTION/MaMthode{/Param} Mode : Sans contexte. Appel depuis le mode contextuel, provoque la fermeture du process Web et le passage en mode sans contexte. Utilisation : URL ou Action de formulaire. Cet URL vous permet de lier un objet HTML (texte, image, bouton...) une mthode projet 4D en mode sans contexte. Le lien sera du type /4DACTION/MAMETH/PARAMS o MAMETH est le nom de la mthode projet 4D excuter lorsque l'utilisateur clique sur le lien et PARAMS un paramtre optionnel de type Texte pass la mthode dans $1 (reportez-vous ci-dessous au paragraphe Paramtres Texte passs aux mthodes via des URLs). Lorsque 4D reoit une requte /4DACTION/MAMETH/PARAMS, la Mthode base Sur authentification Web (si elle existe) est appele. Si elle retourne Vrai, la mthode MAMETH est excute. 4DACTION/ peut tre associ un URL dans une page Web statique. La syntaxe de lURL sera de la forme suivante : La mthode projet MAMETH doit gnralement retourner une rponse (envoi de page HTML via ENVOYER FICHIER HTML ou ENVOYER BLOB HTML, etc.). Veillez effectuer les traitements les plus courts possibles, afin de ne pas bloquer le navigateur. Note : Une mthode appele par 4DACTION ne doit pas faire appel des lments dinterface (DIALOGUE, ALERTE...). 1620 4e Dimension - Langage

Attention : Pour quune mthode 4D puisse tre excute via lURL 4DACTION/, elle doit disposer de l'attribut Disponible via 4DACTION, 4DMETHOD et 4DSCRIPT (dslectionn par dfaut), dfini dans les proprits de la mthode. Pour plus d'informations sur ce point, reportez-vous la section Scurit des connexions. Exemple Cet exemple dcrit l'association de l'URL 4DACTION/ un objet HTML image afin d'afficher dynamiquement une image dans la page. Vous insrez dans une page HTML statique les instructions suivantes : <IMG SRC="/4DACTION/PICTFROMLIB/1000"> Le code de PICTFROMLIB est le suivant : C_TEXTE($1) `Ce paramtre doit toujours tre dclar C_IMAGE($VarImage) C_BLOB($VarBlob) C_ENTIER LONG($Numro) `On rcupre le numro dimage dans la chane $1 $Numro:=Num(Sous chaine($1;2;99)) LIRE IMAGE DANS BIBLIOTHEQUE($Numro;$VarImage) IMAGE VERS GIF($VarImage;$VarBlob) ENVOYER BLOB HTML ($VarBlob;"image/gif") 4DACTION pour poster des formulaires Le serveur Web 4D permet une facilit supplmentaire lorsque vous souhaitez utiliser des formulaires posts, cest--dire des pages HTML statiques renvoyant des donnes au serveur Web. Laction du formulaire doit imprativement dbuter par /4DACTION/NomMthode. Note : Un formulaire peut tre soumis dans deux modes (4D accepte les deux) : POST, gnralement utilis pour envoyer des donnes vers le serveur Web - dans une base de donnes. GET, gnralement utilis pour interroger le serveur Web - donnes en provenance de la base. Lorsque le serveur Web reoit un formulaire post, il appelle la mthode projet COMPILER_WEB (si elle existe), puis la Mthode base Sur authentification Web (si elle existe). Si elle retourne Vrai, la mthode NomMthode est excute. 4D analyse les champs HTML prsents dans le formulaire, rcupre leurs valeurs et remplit automatiquement des variables 4D avec leur contenu. Il suffit pour cela que les champs du formulaire et les variables 4D portent le mme nom. Vous pouvez galement utiliser la commande LIRE VARIABLES FORMULAIRE WEB, permettant de rcuprer le nom et la valeur de tous les champs inclus dans une page HTML soumise au serveur. Note : Pour plus d'informations, reportez-vous la section Associer des objets 4D des objets HTML.

4e Dimension - Langage 1621

La syntaxe HTML appliquer dans le formulaire est du type suivant : pour la dfinition de laction du formulaire : <FORM ACTION="/4DACTION/NomMthode" METHOD=POST> pour la dfinition dun champ du formulaire : <INPUT TYPE=Type de champ NAME=nom du champ VALUE="Valeur par dfaut"> Pour chaque champ du formulaire, 4D affecte la valeur du champ la variable de mme nom. Pour les options de formulaires (par exemple les cases cocher), 4D affecte la valeur 1 la variable associe sil est coch, sinon 0. Pour les saisies de type numrique, 4D effectue une conversion Alpha>Numrique de la valeur du champ. Note : Si un champ du formulaire est nomm OK (par exemple un bouton Submit), la variable systme OK de 4D est mise 1 si la valeur du champ est non vide, sinon 0. Exemple Dans une base Web 4D dmarre et utilise en mode sans contexte, nous souhaitons que les navigateurs puissent effectuer des recherches parmi les enregistrements par lintermdiaire dune page HTML statique. Cette page sintitule search.htm. La base contient dautres pages statiques, permettant par exemple dafficher le rsultat de la recherche (results.htm). Le type POST a t associ la page, ainsi que laction /4DACTION/SEARCH. Voici la page telle quelle apparat dans un diteur HTML, ici Adobe PageMill :

1622 4e Dimension - Langage

Voici le code HTML correspondant cette page : <FORM ACTION="/4DACTION/PROCESSFORM" METHOD=POST> <INPUT TYPE=TEXT NAME=VNAME VALUE=""><BR> <! Habituellement on met le nom du bouton dans VALUE, pour des raisons dinterprtation il faut mettre un nombre dans VALUE> <INPUT TYPE=CHECKBOX NAME=EXACT VALUE="1">Mot entier<BR> <! OK est un cas particulier> <INPUT TYPE=SUBMIT NAME=OK VALUE="Chercher"> </FORM> En cours dutilisation, vous tapez ABCD dans la zone de saisie, vous cochez loption et validez en cliquant sur Chercher. 4D appelle alors la mthode projet COMPILER_WEB. Voici son contenu : C_TEXTE(VNAME) VNAME:="" C_ENTIER LONG(vEXACT) vEXACT:=0 OK:=0 `cas particulier Dans lexemple, VNAME contient la chane "ABCD", vEXACT a pour valeur 1, et OK a pour valeur 1 (car on a cliqu sur un bouton dont le nom est OK). 4D appelle la Mthode base Sur authentification Web (si elle existe), puis la mthode projet PROCESSFORM, dont voici le contenu : Si (OK=1) Si (vEXACT=0) `Si loption na pas t coche vNAME:=VNAME+"@" Fin de si CHERCHER([Jockeys];[Jockeys]Nom=vNAME) vLIST:=Caractere(1) `Retourne la liste en HTML DEBUT SELECTION([Jockeys]) Tant que (Non(Fin de selection([Jockeys]))) vLIST:=vLIST+[Jockeys]Nom+" "+[Jockeys]Tl+"<BR>" ENREGISTREMENT SUIVANT([Jockeys]) Fin tant que ENVOYER FICHIER HTML(results.htm) `Envoi de la liste dans le `formulaire results.htm, qui contient une rfrence la variable vLIST, `par exemple <!4DVAR vLIST> ... Fin de si

4e Dimension - Langage 1623

URL 4DMETHOD/
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Syntaxe : 4DMETHOD/MaMthode{/Param} Mode : Contextuel. Appel depuis le mode sans contexte, provoque le passage en mode contextuel. Utilisation : URL ou Action de formulaire. Cet URL vous permet de lier un objet HTML (texte, bouton...) une mthode projet 4D en mode contextuel. Le lien sera du type /4DMETHOD/Nom_Mthode/Param o Nom_Mthode est le nom de la mthode projet 4D excuter lorsque l'utilisateur clique sur le lien et Param un paramtre optionnel de type Texte pass la mthode dans $1 (reportez-vous ci-dessous au paragraphe Les paramtres Texte passs aux mthodes via des URLs). L'envoi d'une requte HTTP dbutant par l'URL 4DACTION/ provoque l'excution de la mthode projet 4D dsigne. La mthode projet peut elle-mme afficher des formulaires 4D, d'autres pages HTML, etc. Lorsque 4D reoit une requte /4DMETHOD, la Mthode base Sur authentification Web (si elle existe) est appele. Si elle retourne Vrai, la Mthode base Sur connexion Web (si elle existe) est appele, puis la mthode Nom_Mthode est excute avec comme paramtre (dans $1) la chane /Param. Si vous affectez /4DMETHOD/Nom_Mthode en tant qu'action de formulaire une page HTML statique, la mthode est excute lorsque l'utilisateur clique sur un bouton Submit dans le formulaire HTML. Reportez-vous l'exemple de la commande ENVOYER FICHIER HTML. Lorsque vous intgrez des pages HTML dans 4D, vous utilisez gnralement des boutons de type Normal ou Submit. Pour dfinir l'action d'un formulaire, la syntaxe HTML employer est de la forme suivante : <FORM ACTION="/4DMETHOD/NomMthode" METHOD=POST> Pour plus d'informations sur les formulaires posts, reportez-vous au paragraphe prcdent. Attention : Pour quune mthode 4D puisse tre excute via lURL 4DMETHOD/, elle doit disposer de l'attribut Disponible via 4DACTION, 4DMETHOD et 4DSCRIPT (dslectionn par dfaut), dfini dans les proprits de la mthode. Pour plus d'informations sur ce point, reportez-vous la section Scurit des connexions.

1624 4e Dimension - Langage

URL 4DCGI/
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Syntaxe : 4DCGI/<action> Mode : Tous. Utilisation : URL. Lorsque le serveur Web 4D reoit lURL /4DCGI/<action>, la Mthode base Sur authentification Web (si elle existe) est appele. Si elle retourne Vrai, le serveur Web appelle la Mthode base Sur connexion Web en passant lURL tel quel dans $1. LURL 4DCGI/ ne correspond aucun fichier. Il a pour unique rle dappeler 4D via la Mthode base Sur connexion Web. Le paramtre <action> peut contenir nimporte quel type dinformation. Cet URL vous permet donc deffectuer tout type de traitement. Il vous suffit de tester la valeur de $1 dans la Mthode base Sur connexion Web ou dans une de ses sous-mthodes et deffectuer dans 4D le traitement adquat. Par exemple, vous pouvez construire des pages HTML statiques entirement personnalises dajout, de recherche ou de tri denregistrements, ou encore gnrer des images GIF la vole. Des exemples dutilisation de cet URL sont fournis dans les descriptions des commandes IMAGE VERS GIF et ENVOYER REDIRECTION HTTP. A lissue du traitement, une rponse doit tre retourne, laide dune des commandes denvoi de donnes (ENVOYER FICHIER HTML, ENVOYER BLOB HTML, etc.). ATTENTION : Veillez effectuer les traitements les plus courts possibles, afin de ne pas bloquer le navigateur. Paramtres texte passs aux mthodes 4D appeles via des URLs
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension envoie des paramtres Texte aux mthodes 4D appeles par des URLs spciaux (4DMETHOD/, 4DACTION/ et 4DCGI/), en mode contextuel et en mode sans contexte. Voici quelques remarques sur ces paramtres : Mme si vous n'utilisez pas ces paramtres, vous devez les dclarer explicitement avec la commande C_TEXTE, sinon des erreurs runtime se produiront lorsque vous accderez par le Web une base excute en mode compil. Le paramtre $1 retourne des donnes supplmentaires places la fin de l'URL, et peut tre utilis pour passer des donnes de l'environnement HTML vers l'environnement 4D.

4e Dimension - Langage 1625

Erreurs runtime en mode compil Prenons un exemple : vous excutez une mthode lie un objet HTML. Vous obtenez l'cran suivant dans votre navigateur Web :

Cette erreur runtime est provoque par l'absence de dclaration du paramtre texte $1 dans la mthode 4D appele lorsque vous avez cliqu sur le lien HTML. Comme le contexte de l'excution est la page HTML courante, l'erreur fait rfrence la ligne 0 de la mthode qui a envoy la page au navigateur Web. Pour reprendre l'exemple de la section Serveur Web, Premiers pas (Partie I), le paramtre texte $1 est dclar explicitement dans les mthodes M_ADD_RECORDS et M_LIST_RECORDS :

`Mthode projet M_ADD_RECORDS C_TEXTE($1) ` Ce paramtre DOIT tre explicitement dclar Repeter AJOUTER ENREGISTREMENT ([Clients]) Jusque (OK=0) `Mthode projet M_LIST_RECORDS C_TEXTE($1) ` Ce paramtre DOIT tre explicitement dclar TOUT SELECTIONNER ([Clients]) MODIFIER SELECTION([Clients])

Lorsque que ces dclarations sont effectues, les erreurs runtime en mode compil ne se produisent pas.

1626 4e Dimension - Langage

Paramtres dclarer explicitement dans la mthode appele Vous devez dclarer diffrents paramtres en fonction de l'origine et de la nature de l'appel de la mthode 4D. Mthode base Sur authentification Web (si elle existe) et Mthode base Sur connexion Web Vous devez dclarer les six paramtres de la connexion :

` Mthode base Sur connexion Web C_TEXTE($1;$2;$3;$4;$5;$6) ` Ces paramtres DOIVENT tre explicitement dclars

Mthode appele par l'URL 4DMETHOD/ Vous devez dclarer le paramtre $1 :

` Mthode appele par l'URL 4DMETHOD/ C_TEXTE($1) ` Ce paramtre DOIT tre explicitement dclar

Mthode appele par lURL 4DACTION/ Vous devez dclarer le paramtre $1 :

` Mthode appele par l'URL 4DACTION/ C_TEXTE($1) ` Ce paramtre DOIT tre explicitement dclar

Mthode appele par la balise 4DSCRIPT/ La mthode retourne une valeur dans $0. Vous devez dclarer les paramtres $0 et $1 :

` Mthode appele par 4DSCRIPT/ sous forme de commentaire HTML C_TEXTE($0; $1) ` Ces paramtres DOIVENT tre explicitement dclars

Rfrence Associer des objets 4D des objets HTML, LIRE VARIABLES FORMULAIRE WEB, Premiers pas, Utiliser le mode contextuel.

4e Dimension - Langage 1627

Balises HTML 4D

Serveur Web version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le serveur Web de 4D fournit diverses balises HTML spcifiques 4D, permettant d'insrer des rfrences des expressions ou variables 4D, ou diffrents types de traitements, l'intrieur des pages HTML envoyes par le serveur Web 4D, par exemple l'aide des commandes ENVOYER FICHIER HTML et ENVOYER BLOB HTML. Ces pages sont appeles pages semi-dynamiques. Ces balises doivent tre insres sous forme de commentaires HTML (<!--#LaBalise LeContenu--> en code HTML). La plupart des diteurs HTML proposent des fonctions facilitant l'insertion de commentaires dans les pages statiques. Les balises HTML 4D disponibles sont les suivantes : 4DVAR, pour insrer des variables et expressions 4D 4DHTMLVAR, semblable 4DVAR mais insrant du code HTML 4DSCRIPT, pour excuter une mthode 4D 4DINCLUDE, pour insrer une page HTML dans une autre page 4DIF, 4DELSE et 4DENDIF, pour insrer des conditions dans le code HTML 4DLOOP et 4DENDLOOP, pour insrer des boucles dans le code HTML Note de compatibilit : Dans les versions 6.0.x de 4D, l'insertion de variables 4D dans les pages statiques s'effectuait l'aide d'une notation utilisant des crochets ([NomVar]). Si vous travaillez avec une base cre avec une version prcdente de 4D et souhaitez utiliser la notation standard <!--#4DVAR NomVar-->, assurez-vous que l'option "Utiliser les commentaires 4DVAR au lieu des crochets" dans la bote de dialogue des Prfrences est bien coche (reportez-vous la section Paramtrages du serveur Web). Traitement des balises HTML 4D
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lanalyse du contenu des pages semi-dynamiques envoyes par 4D seffectue au moment de lappel ENVOYER FICHIER HTML (.htm, .html, .shtm, .shtml), ENVOYER BLOB HTML (blob de type text/html) et lors de l'envoi de pages appeles via des URLs. Toutefois en mode sans contexte, des fins d'optimisation, les pages suffixes .htm et .html ne sont PAS analyses. Pour forcer lanalyse des pages HTML dans ce cas, vous devez les suffixer .shtm ou .shtml (par exemple http://www.server.com/dir/page.shtm). Un exemple d'utilisation de ce type de page est fourni dans la description de la routine STATISTIQUES DU CACHE WEB.

1628 4e Dimension - Langage

Voici le tableau rcapitulatif des cas dans lesquels 4D analyse les balises contenues dans les pages HTML envoyes aux navigateurs Web : Conditions denvoi Analyse du contenu des pages envoyes Mode contextuel Mode sans contexte Extensions des pages (cas gnral) : .htm, .html, .shtm, .shtml (pages HTML) X X .xml, .xsl (pages XML) X X .wml (pages WML) X X Pages appeles par des URLs X X, sauf pages suffixes .htm ou .html Commande ENVOYER FICHIER HTML X X Commande ENVOYER BLOB HTML (si le X X BLOB est du type text/html) Inclusion par la balise <!--#4DINCLUDE--> X X Inclusion par la balise {mapage.htm} X En vue dune exploitation par 4D, un commentaire HTML doit toujours tre de la forme <!--#4D...-->. Attention, certains diteurs HTML ajoutent automatiquement dautres informations au sein dun commentaire, ce qui peut entraner des erreurs danalyse. La prsence dautres commentaires HTML (par exemple <!--Dbut de liste-->) est toutefois possible. Si un commentaire <!--#4D... ne se termine pas par -->, un texte de la forme <!--#4D... : --> attendu sera insr et lanalyse sera interrompue ce niveau (la page sera tout de mme envoye pour indiquer lerreur). Il est possible dimbriquer les diffrents types de commentaires. Voici par exemple une structure HTML parfaitement envisageable : <HTML> ... <BODY> <!--#4DSCRIPT/PRE_PROCESS--> (Appel de mthode) <!--#4DIF (mavar=1)--> (Si condition) <!--#4DINCLUDE banner1.html--> (Insertion dune sous page) <!--#4DENDIF--> (Fin de si) <!--#4DIF (mavar=2)--> <!--#4DINCLUDE banner2.html--> <!--#4DENDIF--> <!--#4DLOOP [TABLE]--> (Boucle sur la slection courante) <!--#4DIF ([TABLE]ValNum>10)--> (Si [TABLE]ValNum>10) <!--#4DINCLUDE subpage.html--> (Inclusion d'une sous page) <!--#4DELSE--> (Sinon) <B>Valeur : <!--#4DVAR [TABLE]ValNum--></B><BR> (Affichage dun champ) <!--#4DENDIF--> <!--#4DENDLOOP--> (Fin de boucle) </BODY> </HTML>

4e Dimension - Langage 1629

Balise 4DVAR
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Syntaxe : <!--#4DVAR NomVar--> ou <!--#4DVAR Expression4D--> La balise <!--#4DVAR NomVar--> vous permet dinsrer une rfrence une variable ou une expression 4D tout endroit d'une page HTML. Par exemple, si vous crivez : <P>Bienvenue sur <!--#4DVAR vtNomSite-->!</P> La valeur de la variable 4D vtNomSite sera insre dans la page HTML lors de son envoi. Vous pouvez galement insrer du code HTML dans une variable texte 4D. Pour cela, il vous suffit de faire dbuter la variable par le code ASCII 1 (par exemple, vtHTML:=Caractere(1)+"...code HTML..."). Un autre moyen consiste utiliser la balise 4DHTMLVAR. Il est aussi possible dinsrer des expressions 4D dans les commentaires HTML 4D laide de la balise 4DVAR. Vous pouvez par exemple insrer directement le contenu dun champ (<!--#4DVAR [nomTable]nomChamp-->) ou un lment de tableau (<!--#4DVAR tab{1}-->). La conversion de lexpression obit aux mmes rgles que la conversion dune variable. En outre, lexpression doit satisfaire aux rgles de syntaxe de 4D. Bien quune expression puisse contenir directement des appels de fonctions 4D, il est dconseill dutiliser ce mode de fonctionnement, pour des raisons de localisation. Par exemple le commentaire <!--#4DVAR Date du jour-->, bien que correctement interprt avec un 4D franais, ne sera pas trait avec un 4D anglais. Il en va de mme pour le traitement des nombres rels (car le sparateur dcimal peut varier dun pays lautre). Dans ces deux cas, il est prfrable daffecter une variable par programmation. En cas derreur dvaluation, le texte insr sera de la forme <!--#4DVAR mavar--> : ## erreur # code derreur. Notes : Vous devez utiliser des variables process. Il est possible dafficher le contenu dun champ image. En outre (en mode contextuel uniquement), vous pouvez galement afficher le contenu dune variable image. En revanche, dans les deux modes, il nest pas possible dafficher le contenu dun lment de tableau image. Comme le HTML est orient texte, vous travaillerez gnralement avec des variables Texte. Toutefois, vous pouvez galement utiliser des variables BLOB (ce qui vous permet de vous affranchir de la limite des 32 000 caractres inhrente aux variables de type texte). Il vous suffit pour cela de gnrer des BLOBs en mode Texte sans longueur. Des exemples d'utilisation de la balise 4DVAR sont fournis dans la section Associer des objets 4D des objets HTML.

1630 4e Dimension - Langage

Balise 4DHTMLVAR
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Syntaxe : <!--#4DHTMLVAR NomVar--> ou <!--#4DHTMLVAR Expression4D--> Cette balise permet dvaluer une variable ou une expression 4D et de linsrer dans une page en tant quexpression HTML. En fait, cette balise produit exactement les mmes effets que la balise <!--#4DVAR mavar-->, lorsque mavar dbute par le caractre de code ASCII 1. Par exemple, voici les rsultats de linsertion de la variable balises disponibles : Valeur de mavar Balises mavar:="<B>" <!--#4DVAR mavar--> mavar:=Caractere(1)+"<B>" <!--#4DVAR mavar--> mavar:="<B>" <!--#4DHTMLVAR mavar--> Texte 4D mavar laide des Insertion dans la page Web &lt;B&gt; <B> <B>

En cas derreur dvaluation, le texte insr sera de la forme <!--#4DHTMLVAR mavar--> : ## erreur # code derreur. Note : La variable doit tre exprime l'aide de la table de caractres ISO Latin-1 (pour plus d'informations, reportez-vous la description de la commande Mac vers ISO). Balise 4DSCRIPT/
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Syntaxe : <!--#4DSCRIPT/NomMthode/Param--> La balise 4DSCRIPT/ vous permet d'excuter des mthodes 4D au moment de l'envoi de pages HTML statiques. La prsence dans une page statique du commentaire HTML <!--#4DSCRIPT/NomMthode/Param--> provoque lexcution de la mthode NomMthode avec le paramtre Param sous forme de chane dans $1. Au chargement de la page, 4D appelle la Mthode base Sur authentification Web (si elle existe). Si elle retourne Vrai, 4D excute la mthode. La mthode retourne alors du texte dans $0. Si la chane dbute par le caractre de code ASCII 1, elle est considre comme du HTML (mme principe que pour les variables). Note : L'excution d'une mthode avec 4DSCRIPT est soumise la valeur de lattribut Disponible via 4DACTION, 4DMETHOD et 4DSCRIPT dfini dans les proprits de la mthode. Note : En mode contextuel, la mthode est excute dans le contexte. Par exemple, vous insrez dans une page statique le commentaire Nous sommes le <!--#4DSCRIPT/MAMETH/MONPARAM-->. Au chargement de la page, 4D appelle la Mthode base Sur authentification Web (si elle existe) puis la mthode MAMETH en lui passant comme paramtre (dans $1) la chane /MONPARAM. La mthode retourne du texte dans $0 (par exemple 28/10/03), lexpression Nous sommes le <!--#4DSCRIPT/MAMETH/MONPARAM--> devient alors Nous sommes le 28/10/03.

4e Dimension - Langage 1631

Le code de MAMETH est : C_TEXTE($0;$1) `Ces paramtres doivent TOUJOURS tre dclars $0:=Chaine(Date du jour) Note : Une mthode appele par 4DSCRIPT ne doit pas faire appel des lments dinterface (DIALOGUE, ALERTE...) Comme 4D excute les mthodes dans leur ordre dapparition, il est tout fait possible de faire appel une mthode qui fixe la valeur de plusieurs variables elles-mmes rfrences plus loin dans le document, quel que soit le mode utilis. Note : Vous pouvez insrer autant de commentaires <!--#4DSCRIPT...--> que vous voulez dans une page statique. Note de compatibilit : Dans les versions prcdentes de 4D, la mme balise, 4DACTION, pouvait tre utilise soit sous forme dURL (par exemple http://monserver/4DACTION/meth), soit sous forme de commentaire HTML dans une page statique (<!--#4DACTION/meth-->). Cette diversit dutilisations pouvant entraner des confusions, la balise de commentaire 4DSCRIPT permet dsormais de dissocier les deux usages. La balise 4DSCRIPT sutilise exclusivement sous forme de commentaire HTML (<!--#4DSCRIPT/meth-->) et produit exactement les mmes effets que <!--#4DACTION/meth-->. 4DACTION est dsormais rserve une utilisation en tant quURL. Balise 4DINCLUDE
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Syntaxe : <!--#4DINCLUDE chemin--> Ce commentaire permet dinclure, dans une page HTML, le corps dune autre page HTML (dsigne par le paramtre chemin). Le corps dune page HTML dsigne ce qui est compris entre les balises <BODY> et </BODY> (les balises elles-mmes ne sont pas incluses). Le commentaire <!--#4DINCLUDE --> savre particulirement utile en combinaison avec les tests (<!--#4DIF-->) ou les boucles (<!--#4DLOOP-->). Il est galement pratique pour inclure des bannires en fonction dun critre, ou de manire alatoire. Au moment de linclusion, quels que soient le mode et lextension du nom du fichier, 4D analyse la page appele puis insre son contenu ventuellement modifi dans la page do provient lappel 4DINCLUDE. Le placement dans le cache Web dune page incluse laide du commentaire <!--#4DINCLUDE --> rpond aux mmes rgles que celles des pages demandes via un URL ou envoyes par la commande ENVOYER FICHIER HTML. Passez dans chemin le chemin daccs au document inclure. Le chemin daccs est relatif au document en cours danalyse. Utilisez la barre oblique (/) comme sparateur de dossiers et les deux-points (..) pour remonter dun niveau hirarchique (syntaxe HTML).

1632 4e Dimension - Langage

Le nombre de <!--#4DINCLUDE chemin--> au sein dune page nest pas limit. Toutefois, les appels <!--#4DINCLUDE chemin--> ne peuvent seffectuer que sur 1 niveau. Cela signifie que par exemple vous ne pouvez pas insrer le commentaire <!--#4DINCLUDE mondoc3.html--> dans le corps de la page mondoc2.html, elle-mme appele par <!--#4DINCLUDE mondoc2--> insr dans mondoc1.html. En outre, 4D contrle que les inclusions ne sont pas rcursives. En cas derreur, le texte insr est de la forme "<!--#4DINCLUDE chemin--> : Le document ne peut pas tre ouvert". Note : En mode contextuel, si une page est insre dans un formulaire via un marqueur {mapage.html} insr dans une zone de texte statique, les ventuels commentaires 4DINCLUDE quelle contient seront ignors. Exemples <!--#4DINCLUDE souspage.html--> <!--#4DINCLUDE dossier/souspage.html--> <!--#4DINCLUDE ../dossier/souspage.html--> Balises 4DIF, 4DELSE et 4DENDIF
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Syntaxe : <!--#4DIF expression--> <!--#4DELSE--> <!--#4DENDIF--> Utilis en conjonction avec les commentaires <!--#4DELSE--> (optionnel) et <!--#4DENDIF-->, le commentaire <!--#4DIF expression--> offre la possibilit dexcuter du code HTML de manire conditionnelle. Le paramtre expression peut contenir toute expression 4D valide retournant une valeur boolenne. Elle doit figurer entre parenthses et respecter les rgles de syntaxe de 4D. Les blocs <!--#4DIF expression--> ... <!--#4DENDIF--> peuvent tre imbriqus sur plusieurs niveaux. Comme dans 4D, chaque <!--#4DIF expression--> doit avoir un <!--#4DENDIF--> correspondant. En cas derreur dvaluation, le texte <!--#4DIF expression--> : Une expression boolenne tait attendue est insr la place du contenu situ entre <!--#4DIF --> et <!--#4DENDIF-->. De mme, sil ny a pas autant de <!--#4DENDIF--> que de <!--#4DIF -->, le texte <!--#4DIF expression--> : 4DENDIF attendu est insr la place du contenu situ entre <!--#4DIF --> et <!--#4DENDIF-->.

4e Dimension - Langage 1633

Exemple Cet exemple de code insr dans une page HTML statique affiche un libell diffrent en fonction du rsultat de lexpression vnom#"" : <BODY> ... <!--#4DIF (vnom#"")--> Noms commenant par <!--#4DVAR vnom-->. <!--#4DELSE--> Aucun nom na t trouv. <!--#4DENDIF--> ... </BODY> Balises 4DLOOP et 4ENDLOOP
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Syntaxe : <!--#4DLOOP condition--> <!--#4DENDLOOP--> Ce commentaire permet de rpter une portion de code HTML tant que la condition est remplie. La portion est dlimite par <!--#4DLOOP--> et <!--#4DENDLOOP-->. Les blocs <!--#4DLOOP condition--> ... <!--#4DENDLOOP--> peuvent tre imbriqus. Comme dans 4D, chaque <!--#4DLOOP condition--> doit avoir un <!--#4DENDLOOP--> correspondant. Il existe trois types de conditions : <!--#4DLOOP [table]--> Cette syntaxe effectue une boucle pour chaque enregistrement de la slection courante de table dans le process en cours. La portion de code HTML situe entre les deux commentaires est rpte pour chaque enregistrement de la slection courante. Note : Lors de l'utilisation de 4DLOOP avec une table, les enregistrements sont chargs en mode Lecture seule. Lexemple de code HTML suivant : <!--#4DLOOP [Personnes]--> <!--#4DVAR [Personnes]Nom--> <!--#4DVAR [Personnes]Prenom--><BR> <!--#4DENDLOOP--> ... pourrait se traduire en langage 4D par : DEBUT SELECTION([Personnes]) Tant que(Non(Fin de selection([Personnes]))) ... ENREGISTREMENT SUIVANT([Personnes]) Fin tant que

1634 4e Dimension - Langage

<!--#4DLOOP tableau--> Cette syntaxe effectue une boucle pour chaque lment du tableau. Lindice courant du tableau est incrment chaque rptition de la portion de code HTML. Il nest pas possible dutiliser cette syntaxe avec des tableaux deux dimensions. Dans ce cas, la solution consiste combiner une mthode et des boucles imbriques. Lexemple de code HTML suivant : <!--#4DLOOP tab_noms--> <!--#4DVAR tab_noms{tab_noms}--><BR> <!--#4DENDLOOP--> ... pourrait se traduire en langage 4D par : Boucle($indice;1;Taille tableau(tab_noms)) tab_noms:=$indice ... Fin de boucle <!--#4DLOOP mthode--> Cette syntaxe effectue une boucle tant que la mthode retourne Vrai. La mthode admet un paramtre de type Entier long. Elle est appele une premire fois avec la valeur 0 pour permettre une ventuelle phase dinitialisation, puis elle est appele successivement avec les valeurs 1, 2, 3... tant quelle renvoie Vrai. Pour des raisons de scurit, la Mthode base Sur authentification Web peut tre appele, une seule fois, avant la phase dinitialisation (excution de la mthode avec 0 comme paramtre). Si lauthentification est confirme, la phase dinitialisation a lieu. Note : Lexcution d'une mthode avec 4DLOOP nest pas soumise la valeur de lattribut Disponible via 4DACTION, 4DMETHOD et 4DSCRIPT dfini dans les proprits de la mthode. En vue de la compilation de la base, il est impratif de dclarer C_BOOLEEN($0) et C_ENTIER LONG($1) au sein de la mthode. Lexemple de code HTML suivant : <!--#4DLOOP ma_methode--> <!--#4DVAR var--> <BR> <!--#4DENDLOOP--> ... pourrait se traduire en code 4D par : Si(AuthentificationWebOK) Si(ma_methode(0)) $compteur:=1 Tant que(ma_methode($compteur)) ... $compteur:=$compteur+1 Fin tant que Fin de si Fin de si 4e Dimension - Langage 1635

La mthode ma_methode pourrait avoir la forme suivante : C_ENTIER LONG($1) C_BOOLEEN($0) Si ($1=0) `Initialisation $0:=Vrai Sinon Si($1<50) ... var:= ... $0:=Vrai Sinon $0:=Faux `Arrt de la boucle Fin de si Fin de si En cas derreur dvaluation, le texte <!--#4DLOOP expression--> : descriptif est insr la place du contenu situ entre <!--#4DLOOP --> et <!--#4DENDLOOP-->. Le descriptif de lerreur peut tre lun des suivants : - Une expression de ce type ntait pas attendue (erreur gnrique). - Nom de table invalide (erreur sur le nom de la table). - Un tableau tait attendu (la variable nest pas un tableau ou est un tableau deux dimensions). - La mthode nexiste pas. - Erreur de syntaxe (lors de lexcution de la mthode). - Erreur de privilge (pas de droits suffisants pour accder la table ou la mthode). - 4DENDLOOP attendu (le nombre de <!--#4DENDLOOP--> nest pas gal celui de <!--#4DLOOP -->). Rfrence Associer des objets 4D des objets HTML, URLs et actions de formulaires, Utiliser le mode contextuel.

1636 4e Dimension - Langage

Paramtrages du serveur Web

Serveur Web version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez paramtrer le fonctionnement du serveur Web 4D l'aide de paramtres dfinis dans le thme Web des Prfrences de la base. Cette section dcrit les paramtres des pages Configuration, Avanc et Options de ce thme ainsi que la section Compatibilit Web de la page Application/Compatibilit. Page Configuration
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Publier la base au dmarrage Indique si le serveur Web doit tre dmarr ds le lancement de l'application 4D. Cette option est dtailles dans la section Mise en route du serveur Web et gestion des connexions. Port TCP Par dfaut, 4D publie une base Web sur le port TCP standard du Web, qui est le port 80. Si ce port est dj utilis par un autre service Web, vous devez changer le port TCP utilis par 4D pour votre base. La modification du port TCP permet galement de lancer le serveur Web 4D sous MacOS X sans tre l'utilisateur root de la machine (cf. section Mise en route du serveur Web et gestion des connexions). Pour cela, dans la zone de saisie Port TCP, indiquez le numro de port TCP utiliser pour cette base (c'est--dire un numro de port TCP non utilis par un autre service TCP/IP sur la machine). 4e Dimension - Langage 1637

Note : Si vous passez 0, 4D utilisera le numro de port TCP par dfaut, c'est--dire 80. Au niveau du navigateur Web, vous devez inclure ce numro de port TCP personnalis dans la description de l'adresse utilise pour vous connecter la base Web. L'adresse doit tre suivie du signe deux-points et du numro de port. Si, par exemple, vous utilisez le port TCP numro 8080, vous devrez spcifier dans le browser 123.45.67.89:8080. ATTENTION : Lorsque vous utilisez des numros de port TCP autres que les numros par dfaut (80 pour le mode standard et 443 pour le mode SSL), prenez garde ne pas spcifier de numros de port qui se trouvent tre les numros par dfaut d'autres services que vous employez simultanment. Si, par exemple, vous envisagez d'exploiter le protocole FTP sur la machine serveur Web, n'utilisez pas les numros de ports TCP 20 et 21 qui sont les ports par dfaut de ce protocole. Pour connatre les attributions standard des numros de port TCP, vous pouvez vous reporter la section Annexe B, Numros des ports TCP dans la documentation de 4D Internet Commands. Les numros de port infrieurs 256 sont rservs pour les services standard et les numros 256 1024 sont rservs pour les services spcifiques issus des plates-formes UNIX. Pour une scurit maximum, il vous suffit de spcifier un numro de port situ au-del de ces intervalles, par exemple dans les 2000 ou 3000. Adresse IP Vous pouvez dfinir ladresse IP sur laquelle le serveur Web doit recevoir les requtes HTTP. Par dfaut, le serveur rpond sur toutes les adresses IP (option Toutes). La liste droulante Adresse IP liste automatiquement toutes les adresses IP prsentes sur la machine. Lorsque vous slectionnez une adresse particulire, le serveur ne rpond quaux requtes diriges sur cette adresse. Cette fonctionnalit est destine aux serveurs Web 4D hbergs sur des machines ayant plusieurs adresses TCP/IP. Cest, par exemple, frquemment le cas chez les fournisseurs dhbergement Internet (MultiHoming). Vous pouvez donc placer plusieurs 4D ou 4D Server sur une mme machine et de rserver une adresse IP spcifique chaque base publie en Internet/Intranet. La mise en place de cette fonctionnalit ncessite une configuration adquate de la machine accueillant les diffrents serveurs Web : Configuration MultiHoming sous MacOS Pour mettre en place un systme utilisant le MultiHoming sous MacOS : 1. Vous devez disposer dOpen Transport version 1.3 minimum (le MultiHoming est intgr partir de cette version dOpen Transport). 2. Ouvrez le tableau de bord TCP/IP. 3. Slectionnez manuel dans le pop up menu Configuration. 4. Crez un fichier texte nomm "Secondary IP Addresses" et placez-le dans le sous-dossier Prfrences de votre dossier Systme. Chaque ligne du fichier "Secondary IP Addresses" doit contenir une adresse IP secondaire ainsi que, si ncessaire, un masque de sous-rseau et une adresse de routeur. Pour plus dinformations sur cette configuration, reportez-vous la documentation dOpen Transport, fournie par Apple, Inc.

1638 4e Dimension - Langage

Configuration MultiHoming sous Windows Pour mettre en place un systme utilisant le MultiHoming sous Windows : 1. Slectionnez successivement les commandes suivantes : Windows NT : Menu Dmarrer > Paramtres > Panneau de configuration > icne Rseau > onglet Protocoles > Protocole TCP/IP > bouton Proprits > bouton Avanc... Windows 2000 : Menu Dmarrer > Paramtres > Connexions rseau et accs distance > Connexion au rseau local > Bouton Proprits > Protocole Internet (TCP/IP) > Bouton Proprits > Bouton Avanc... Windows XP : Menu Dmarrer > Panneau de configuration > Connexions rseau et Internet > Connexions rseau > Connexion au rseau local (Proprits) > Protocole Internet (TCP/IP) > Bouton Proprits > Bouton Avanc... La bote de dialogue de configuration "Paramtres TCP/IP avancs" s'affiche. 2. Cliquez sur le bouton Ajouter... dans la zone "Adresses IP" et ajoutez les adresses IP supplmentaires. Vous pouvez dfinir jusqu' 5 adresses IP diffrentes. Pour cette opration, il se peut que vous ayez besoin de lassistance dun administrateur rseau. Autoriser SSL pour le serveur Web Indique si le serveur Web doit ou non accepter les connexions scurises. Cette option est dcrite dans la section Utiliser le protocole SSL. Numro de port HTTPS Permet de modifier le numro du port TCP/IP utilis par le serveur Web pour les connexions HTTP scurises via SSL (protocole HTTPS). Par dfaut, le numro du port HTTPS est 443 (valeur standard). Vous pouvez souhaiter modifier ce numro pour deux raisons principales : par souci de scurit en effet, les attaques des pirates contre les serveurs Web se concentrent gnralement sur les ports TCP standard, cest--dire 80 et 443. sous MacOS X, pour permettre aux utilisateurs standard de lancer le serveur Web en mode scuris en effet, sous MacOS X, lutilisation des ports TCP/IP rservs la publication Web (0 1023) requiert des privilges daccs spcifiques : seul lutilisateur root peut lancer une application utilisant ces ports. Pour que les utilisateurs autres que root puissent lancer le serveur Web, une solution consiste modifier le numro du port TCP/IP du serveur Web (cf. section Mise en route du serveur Web et gestion des connexions). Vous pouvez passer toute valeur valide (pour viter les restrictions daccs sous MacOS X, il est ncessaire de passer une valeur suprieure 1023). Pour plus d'informations sur les numros de port TCP, reportez-vous ci-dessus au paragraphe Port TCP. Racine HTML par dfaut Permet de dfinir l'emplacement par dfaut des fichiers du site Web et indique le niveau hirarchique sur le disque au-dessus duquel aucune requte ne pourra accder. Cette option est dcrite dans la section Scurit des connexions. Page daccueil par dfaut Cette option permet de dsigner la page daccueil (page Home) par dfaut pour tous les navigateurs se connectant la base, quel que soit le mode (avec ou sans contexte) dfini pour le dmarrage des sessions Web. Cette page peut tre statique ou semi-dynamique.

4e Dimension - Langage 1639

Par dfaut, lors du premier dmarrage du serveur Web, 4D cre une page daccueil nomme index.html et la place dans le dossier racine HTML. Si vous ne modifiez pas ce paramtrage, tout navigateur se connectant au serveur Web obtient la page suivante :

Pour modifier la page daccueil par dfaut, vous pouvez simplement la remplacer par votre propre page index.html dans le dossier racine de la base ou saisir dans la zone le chemin daccs relatif de la page que vous souhaitez dfinir. Le chemin daccs doit tre tabli relativement au dossier racine HTML par dfaut. Afin dassurer la compatibilit multi-plateforme de vos bases, le serveur Web 4D utilise, pour dcrire les chemins daccs, des conventions dcriture particulires. Les rgles de syntaxe sont les suivantes ; les dossiers sont spars par le caractre / le chemin ne doit pas se terminer par / pour remonter dun niveau dans la hirarchie des dossiers, saisissez .. (point point) devant le nom du dossier le chemin ne doit pas commencer par /. Par exemple, si vous souhaitez que la page daccueil par dfaut soit la page MyHome.htm, place dans le dossier Web (lui-mme situ dans le dossier racine HTML par dfaut de la base), saisissez Web/MyHome.htm Note : Vous pouvez galement dfinir une page daccueil par dfaut pour chaque process Web laide de la routine FIXER PAGE ACCUEIL. Si vous ne spcifiez pas de page daccueil par dfaut, le fonctionnement du serveur Web diffre suivant le mode de dmarrage : Si le serveur Web dmarre en mode sans contexte (mode standard), la Mthode base Sur connexion Web est appele. Il vous revient alors de traiter la requte par programmation. Si le serveur Web dmarre en mode contextuel, la barre de menus courante par dfaut, la barre de menus n 1 est envoye en tant que page daccueil.

1640 4e Dimension - Langage

Mode de dmarrage Permet de dfinir le mode dans lequel le serveur Web doit dmarrer. Cette option est dcrite dans la section Utiliser le mode contextuel. Rutilisation des contextes temporaires (visible uniquement avec 4D Client) Permet doptimiser le fonctionnement du serveur Web de 4D Client en recyclant les process Web crs pour le traitement de requtes Web prcdentes. En effet, le serveur Web de 4D Client a besoin dun process Web spcifique pour le traitement de chaque requte Web ; lorsque cela savre ncessaire, ce process se connecte au poste 4D Server afin daccder aux donnes et au moteur de base de donnes. Il gnre alors un contexte temporaire utilisant ses propres variables, slections, etc. Une fois la requte traite, le process est tu. Lorsque loption Rutilisation des contextes temporaires est coche, 4D maintient les process Web spcifiques crs sur 4D Client et les rutilise pour les requtes suivantes. Ltape de cration du process tant supprime, les performances du serveur Web sont alors amliores. En contrepartie, vous devez veiller dans ce cas initialiser systmatiquement les variables utilises dans les mthodes 4D afin de ne pas risquer dobtenir des rsultats fausss. De mme, il est ncessaire deffacer les slections ou enregistrements courants ventuellement dfinis au cours de la requte prcdente. Page Avanc
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension - Langage 1641

Mmoire cache Le serveur Web 4D dispose dun cache permettant de charger en mmoire les pages statiques, les images GIF, les images JPEG (<100 ko) et les feuilles de styles (fichiers .css), au fur et mesure quelles sont demandes. Lutilisation dun cache permet daugmenter de manire significative les performances du serveur Web en ce qui concerne lenvoi de pages statiques. Le cache est commun tous les process Web. Par dfaut, le cache des pages statiques nest pas activ. Pour l'activer, il suffit de cocher l'option Utiliser le cache Web de 4D. Vous pouvez ventuellement modifier la taille du cache dans la zone Taille du cache des pages. La valeur fixer dpend du nombre et de la taille des pages statiques de votre site Web, ainsi que des ressources dont dispose la machine hte. Note : Au cours de lutilisation de votre base Web, vous pourrez contrler les performances du cache laide de la routine STATISTIQUES DU CACHE WEB. Si par exemple vous constatez que le taux dutilisation du cache est proche de 100%, vous pouvez envisager daugmenter la taille qui lui est alloue. Les URL particuliers /4DSTATS et /4DHTMLSTATS vous permettent galement dobtenir des informations sur ltat du cache. Reportez-vous la section Informations sur le site Web. Une fois le cache activ, lorsquune page est demande par un navigateur, le serveur Web 4D la cherche dabord dans le cache. Si elle sy trouve, elle est immdiatement envoye, sinon le programme charge la page depuis le disque et la place dans le cache. Lorsque le cache est plein et que de la place supplmentaire est requise, 4D dcharge les pages les moins utilises, par ordre danciennet. Vider le cache Vous pouvez tout moment vider le cache des pages et des images quil contient (par exemple si vous avez effectu des modifications sur une page statique et souhaitez quelle soit recharge dans le cache). Pour cela, il vous suffit de cliquer sur le bouton Vider cache. Le cache est alors immdiatement vid. Dure de conservation des process Web inactifs Permet de dfinir le dlai avant fermeture (timeout) des process de connexion Web (mode contextuel uniquement). Cette option est dcrite dans la section Utiliser le mode contextuel. Process Web simultans maxi Cette option indique la limite strictement suprieure du nombre de process Web de tout type (contextuels, non contextuels ou appartenant la rserve de process) pouvant tre simultanment ouverts sur le serveur. Ce paramtre permet de prvenir la saturation du serveur Web 4D pouvant se produire lors dun envoi massif de requtes ou dune demande excessive de cration de contextes. Par dfaut, le nombre est de 32 000 (autrement dit, jusqu 31 999 process Web peuvent tre crs simultanment). Vous pouvez passer toute valeur incluse entre 10 et 32 000. Lorsque ce nombre maximum (moins un) de process Web concurrents est atteint, 4D ne cre plus de nouveau process et retourne le message Serveur non disponible (statut HTTP 503 - Service Unavailable) toute nouvelle requte.

1642 4e Dimension - Langage

Note : Le nombre maximum de process Web peut galement tre dfini laide de la commande FIXER PARAMETRE BASE. Comment dterminer la valeur passer ? En thorie, le nombre maximum de process Web est le rsultat de la division Mmoire disponible / Taille de la pile dun process Web. Une autre solution consiste visualiser les informations sur les process Web affiches dans lExplorateur dexcution : le nombre courant de process Web et le nombre maximum atteint depuis le dmarrage du serveur Web sont indiqus. A propos de la rserve de process Web La rserve de process Web permet daugmenter la ractivit du serveur Web en mode sans contexte. Cette rserve est dimensionne par un minimum (0 par dfaut) et un maximum (10 par dfaut) de process recycler. Ces valeurs peuvent tre modifies laide de la commande FIXER PARAMETRE BASE. Lors du changement du nombre maximum de process Web, si celui-ci est infrieur la limite suprieure de la rserve, cette limite est alors abaisse au nombre maximum de process Web. Utiliser Javascript pour les contrles de saisie Lorsque cette option est coche, en mode contextuel une partie des contrles de saisie peut tre effectue sur les navigateurs via des scripts Java automatiques. Sur le navigateur, les contrles de saisie et les types de donnes (champs ou variables) auxquels ils peuvent sappliquer sont les suivants : valeur minimale (numriques) ; valeur maximale (numriques) ; valeur obligatoire (numriques et alphas). Les scripts Java gnrs, de petite taille, ont pour but dafficher les botes de dialogue dalerte adquates sans rellement empcher la validation (celle-ci reste du ressort de 4D). En effet, si une zone de saisie contient une valeur incorrecte, un message dalerte est affich sur le navigateur lorsque lutilisateur clique sur un bouton (de validation, dannulation, etc.). Une fois la bote de dialogue dalerte valide, si lutilisateur clique une seconde fois sur le bouton, laction de celui-ci sera prise en compte. Le contrle complet de la saisie est effectu sur le serveur Web, en mode Utilisation ou en Menus crs. Enregistrer requtes dans fichier (logweb.txt) Cette option vous permet de gnrer sous forme de fichier texte au format CLF un historique des requtes adresses au serveur Web. Cette option est dcrite dans la section Informations sur le site Web. Zone Mots de passe Paramtrage du systme de protection des accs au site Web via des mots de passe. Cette option est dcrite dans la section Scurit des connexions.

4e Dimension - Langage 1643

Page Options
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Envoyer directement les caractres tendus Par dfaut, le serveur Web 4D convertit les caractres ASCII tendus prsents dans les pages Web (dynamiques et statiques) au normes HTML avant de les envoyer. Ils sont ensuite interprts par les navigateurs. Vous pouvez paramtrer le serveur Web de manire ce que les caractres ASCII tendus soient envoys tel quels, sans conversion en entits HTML. Cette option permet un gain de vitesse important sur des systmes trangers (principalement japonais). Pour cela, il suffit de cocher l'option Envoyer directement les caractres tendus. Jeux de caractres La liste droulante Jeu standard vous permet de dfinir le jeu de caractres utilis par le serveur Web 4D. Vous pouvez galement dfinir un jeu de caractres personnalis en modifiant les tables de conversion des caractres ASCII (filtres Web) dentre et de sortie. Pour cela, cochez le bouton radio Dfini par l'utilisateur. Ce paramtre quivaut slectionner le jeu de caractres x-user-defined. Les boutons associs aux libells Editer filtre de saisie et Editer filtre de sortie sont alors actifs. Le filtre de saisie interprte les caractres envoys par le navigateur au serveur Web 4D. Le filtre de sortie interprte les caractres envoys par le serveur Web 4D au navigateur.

1644 4e Dimension - Langage

Cliquez sur le bouton correspondant au filtre que vous souhaitez modifier. La bote de dialogue ddition des filtres Web apparat :

Dans la zone de dfilement, recherchez et cliquez sur le caractre Mac que vous souhaitez filtrer puis, dans la zone de saisie Code ASCII, saisissez le nouveau code ASCII du caractre. Rptez lopration pour chaque caractre filtrer. Si vous le souhaitez, cliquez sur le bouton Enregistrer pour sauvegarder le filtre. Vous pourrez le charger par la suite l'aide du bouton Charger. Cliquez sur le bouton Utiliser. Le filtre de saisie et/ou de sortie Web est alors actif. Autoriser 4D WebSTAR se connecter via 4D Connect Cette option a pour effet dinterdire (non coche) ou dautoriser (coche) les connexions des plug-ins 4D Connect au serveur Web 4D. 4D Connect est un plug-in pour le serveur Web 4D WebSTAR, lui permettant dinterroger un serveur Web 4D. Pour des raisons de scurit, loption Autoriser 4D WebSTAR se connecter via Connect nest pas coche par dfaut. En fonction de votre configuration Web, 4D S.A. recommande les paramtrages suivants : Si votre serveur Web 4D nest pas connect un serveur 4D WebSTAR via le plug-in 4D Connect, laissez cette option non coche. Si votre serveur Web 4D est connect un serveur 4D WebSTAR via le plug-in 4D Connect, vous devez cocher cette option pour que le mcanisme fonctionne. Dans cette configuration, il est conseill de placer le serveur Web 4D derrire un pare-feu (firewall) et de filtrer, laide de ce dernier, les requtes qui sont adresses 4D. Connexions persistantes Le serveur Web de 4e Dimension peut utiliser des connexions persistantes (keep-alive). Loption keep-alive permet de maintenir ouverte une seule connexion TCP pour lensemble des changes effectus par un navigateur et le serveur afin dconomiser les ressources et doptimiser les changes. L'option Utiliser les connexions persistantes permet d'activer ou d'inactiver les connexions TCP persistantes pour le serveur Web. Cette option est coche par dfaut. Dans la plupart des cas, il est conseill de conserver cette option coche car elle permet dacclrer les changes. Si le navigateur Web ne prend pas en charge les connexions keepalive, le serveur Web 4D bascule automatiquement en HTTP/1.0.

4e Dimension - Langage 1645

La fonction keep-alive du serveur Web de 4e Dimension concerne toutes les connexions TCP/IP (HTTP, HTTPS), en mode contextuel et en mode sans contexte. A noter toutefois que les connexions persistantes ne sont pas systmatiquement utilises pour tous les process Web 4D. Dans certains cas, dautres mcanismes doptimisation du serveur Web sont mis en oeuvre. Les connexions persistantes sont principalement efficaces lors de lenvoi de pages statiques. Deux options permettent de rgler le mcanisme des connexions persistantes : Nombre de requtes par connexion : permet de dfinir le nombre maximum de requtes pouvant transiter dans une mme connexion persistante. Limiter le nombre de requtes par connexion permet dviter les risques de saturation du serveur via lenvoi massif de requtes (technique utilise par les pirates). La valeur par dfaut (100) peut tre rduite ou augmente en fonction des ressources de la machine hbergeant le serveur Web 4D. Dlai avant dconnexion (timeout) : cette valeur dfinit le dlai maximal (en secondes) pendant lequel le serveur Web maintient ouverte une connexion TCP tant quaucune nouvelle requte nest reue de la part du navigateur. A lissue de ce dlai, le serveur referme la connexion. Si le navigateur envoie une requte aprs la fermeture de la connexion, une nouvelle connexion TCP est automatiquement cre. Ce fonctionnement est transparent pour lutilisateur. Compatibilit Web
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La page Compatibilit du thme Application des Prfrences comporte des options permettant de rgler le fonctionnement du serveur Web :

1646 4e Dimension - Langage

Utiliser les commentaires 4DVAR au lieu des crochets Cette option vous permet de dfinir la notation utiliser pour linsertion de variables 4D dans les pages statiques. Lorsque loption est coche (par dfaut), la syntaxe employer est la notation HTML standard : <!--#4DVAR MAVAR--> (lespace entre 4DVAR et le nom de la variable est impratif). Lorsque loption nest pas coche, la syntaxe employer est la notation avec des crochets ([MAVAR]) solution propritaire utilise dans les anciennes versions du serveur Web 4D. Utiliser nouveau rfrencement des contextes Lorsque cette option est coche (valeur par dfaut), en mode contextuel le serveur Web place le numro de contexte courant dans lURL de base des documents envoys aux navigateurs. Avec le systme prcdent (option dslectionne), le serveur Web 4D envoie au navigateur le numro du contexte pour chaque lment d'une page, ce qui ralentit les traitements. Cette option peut tre dslectionne pour des raisons de compatibilit. Notez qu'aprs l'avoir modifie, vous devez redmarrer la base afin que le nouveau fonctionnement soit effectif. Supprimer "/" sur les URLs inconnus Dans les versions prcdentes de 4e Dimension, les URLs inconnus (URLs ne correspondant aucune page ni URLs spcial) taient retourns dans les mthodes bases Sur authentification Web et Sur connexion Web ($1) sans dbuter par le caractre /. Cette particularit a t supprime compter de 4e Dimension 2004. Toutefois, si vous avez mis en place des mcanismes bass sur cette particularit et souhaitez conserver le fonctionnement prcdent, vous pouvez cocher loption Supprimer / sur les URLs inconnus. Par dfaut, cette option est coche pour les bases de donnes converties et non coche pour les nouvelles bases. Rfrence FIXER PAGE ACCUEIL, FIXER PARAMETRE BASE, Scurit des connexions, Utiliser le mode contextuel.

4e Dimension - Langage 1647

Informations sur le site Web

Serveur Web version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez obtenir diverses informations sur le fonctionnement de votre site Web 4D : Vous pouvez contrler le site par lintermdiaire dURL particuliers (/4DSTATS, /4DHTMLSTATS, /4DCACHECLEAR et /4DWEBTEST). Vous pouvez gnrer un historique des requtes. Vous pouvez visualiser la charge du serveur Web dans la page "Evaluation" de l'Explorateur d'excution de 4D. URLs de gestion du serveur Web
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le serveur Web 4D accepte quatre URLs particuliers : /4DSTATS, /4DHTMLSTATS, /4DCACHECLEAR et /4DWEBTEST. /4DSTATS, /4DHTMLSTATS et /4DCACHECLEAR sont accessibles uniquement au Super_Utilisateur et lAdministrateur de la base. Si la base ne comporte pas de systme de mots de passe 4D, ces URLs sont accessibles tout utilisateur. /4DWEBTEST est toujours accessible. /4DSTATS LURL /4DSTATS renvoie sous forme texte pur : le nombre de hits (connexions bas niveau), le nombre de contextes crs, le nombre de contextes nayant pas pu tre crs, le nombre derreurs de mots de passe, le nombre de pages stockes dans le cache, le pourcentage du cache utilis, la liste des pages et des fichiers GIF ou JPEG stocks dans le cache des pages statiques (*). (*) Pour plus dinformations sur le cache des pages statiques et des images, reportez-vous la section Paramtrages du serveur Web. Ces informations peuvent vous permettre de contrler le fonctionnement de votre serveur et ventuellement dadapter les paramtres correspondants. Note : La commande STATISTIQUES DU CACHE WEB vous permet galement dobtenir des informations sur lutilisation du cache pour les pages statiques. /4DHTMLSTATS LURL /4DHTMLSTATS renvoie, sous forme de texte pur galement, les mmes informations que lURL /4DSTATS, la diffrence prs que, dans la dernire rubrique (contenu du cache), seule la liste des pages HTML donc sans les fichiers .GIF et .JPEG prsentes dans le cache est fournie.

1648 4e Dimension - Langage

/4DCACHECLEAR LURL /4DCACHECLEAR provoque leffacement immdiat du cache des pages statiques et des images. Il permet donc de forcer la mise jour de pages ayant t modifies. /4DWEBTEST L'URL /4DWEBTEST permet de contrler le statut du serveur Web. Lorsque cet URL est appel, 4D retourne un fichier texte contenant les champs HTTP suivants : Date : date du jour au format RFC 822 Exemple : Date: Fri, 7 Feb 2003 13:12:50 GMT Server : 4D WebStar_D/numro de version interne Exemple : 4D WebStar_D/7.0 User-Agent : nom et version @ adresse IP du client Exemple : Mozilla/4.08 (Macintosh; I; PPC, Nav) @ 192.193.00.00 Historique des requtes
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4D vous permet de gnrer un historique des requtes. Lhistorique se prsente sous la forme dun fichier texte, nomm logweb.txt, au format CLF (Common LogFile Format) ou format NCSA, reconnu par la plupart des outils danalyse des sites Web. Le fichier logweb.txt est automatiquement plac : avec 4e Dimension et 4D Server, ct du fichier de structure de la base. avec 4D Client, ct du fichier .exe de l'application (Windows) ou du progiciel (MacOS). Chaque ligne du fichier reprsente une requte sous la forme : hte rfc931 utilisateur [JJ/MMM/AAAA:HH:MM:SS] "requte" statut longueur Chaque champ est spar par un espace, chaque ligne se termine par la squence CR/LF (caractre 13, caractre 10). hte : adresse IP du client (ex. 192.100.100.10) rfc931 : information non gre par 4D, cest toujours - (signe moins) utilisateur : nom de lutilisateur tel quil sest authentifi, sinon - (signe moins). Si le nom de lutilisateur contient des espaces, ils sont remplacs par des _ (tiret bas). JJ : jour, MMM : mois abrg en 3 lettres et toujours en anglais (Jan, Feb, ...), AAAA : anne, HH : heure, MM : minutes, SS : secondes La date et lheure sont locales au serveur requte : requte envoye par le client (ex. GET /index.htm HTTP/1.0) statut : rponse donne par le serveur. longueur : taille des donnes renvoyes (hors en-tte HTTP) ou 0. Note : Pour des raisons de performances, les oprations sont conserves dans une mmoire tampon par paquets de 1Ko avant dtre crites sur disque. Les oprations sont galement crites sur disque en cas dabsence de requte pendant 5 secondes.

4e Dimension - Langage 1649

Les valeurs de statut possibles sont : 200 : OK 204 : Pas de contenu 302 : Redirection 400 : Mauvaise requte 401 : Authentification requise 404 : Non trouv 500 : Erreur interne Exemples de lignes gnres par lhistorique des requtes : 192.100.100.10 - - [25/Jan/2003:12:54:06] "GET /index.htm" 200 6524 Le client Web ladresse 192.100.100.10 ne sest pas authentifi. Il a demand la page index.htm, qui a t servie (elle contient 6524 octets). 192.100.101.25 - - [25/Jan/2003:12:54:09] "GET /123456.htm" 404 125 Le client Web ladresse 192.100.101.25 ne sest pas authentifi. Il a demand la page 123456.htm, qui na pas t trouve (4D a envoy un message de 125 octets). 192.100.101.31 - - [25/Jan/2003:12:54:10] "GET /secret.htm" 401 0 Le client Web ladresse 192.100.101.31 ne sest pas authentifi. Il a demand la page secret.htm, le serveur a requis lauthentification. 192.100.101.31 - ZZZZ [25/Jan/2003:12:54:11] "GET /secret.htm" 401 0 Le client Web ladresse 192.100.101.31 sest authentifi comme ZZZZ. Il a demand la page secret.htm, le nom dutilisateur est inconnu. 192.100.101.31 - 4D [25/Jan/2003:12:54:12] "GET /secret.htm" 200 2543 Le client Web ladresse 192.100.101.31 sest authentifi comme 4D. Il a demand la page secret.htm, qui a t servie (elle contient 2543 octets). ATTENTION : Lhistorique peut tre import dans un tableur ou dans 4D. Toutefois, il faut imprativement arrter le serveur Web avant de procder l'import. Par dfaut, le fichier dhistorique des requtes nest pas gnr. Pour demander la gnration de lhistorique des requtes Web, vous devez cocher loption Enregistrer requtes dans fichier (logweb.txt) dans le thme Web, page Configuration des prfrences.

1650 4e Dimension - Langage

Informations fournies par l'Explorateur d'excution de 4D


________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La page Evaluation (rubrique Informations) de lExplorateur dexcution affiche diffrentes informations concernant le fonctionnement du serveur Web 4D : Occupation du cache Web : indique le nombre de pages prsentes dans le cache Web ainsi que son pourcentage dutilisation. Cette information nest disponible que si le serveur Web est actif et si la taille du cache est diffrente de 0. Temps dactivit du serveur Web : indique la dure de fonctionnement (au format heures:minutes:secondes) du serveur Web. Cette information nest disponible que si le serveur Web est actif. Nombre de requtes http : indique le nombre total de requtes HTTP reues depuis le dmarrage du serveur Web, ainsi que le nombre instantan de requtes par secondes (mesure prise entre deux mises jour de lExplorateur dexcution). Cette information nest disponible que si le serveur Web est actif. Rfrence Paramtrages du serveur Web, STATISTIQUES DU CACHE WEB.

4e Dimension - Langage 1651

Utiliser le mode contextuel

Serveur Web version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le serveur Web de 4D peut fonctionner dans deux modes distincts : le mode sans contexte (mode standard) et le mode contextuel. Cette section prsente ces deux modes et dtaille les particularits du mode contextuel. Attention : Le mode contextuel peut tre utilis avec 4e Dimension et 4D Server uniquement. Le serveur Web de 4D Client ne prend pas en charge ce mode. Note : La section Premiers pas prsente un exemple complet de publication d'une base en mode contextuel. Mode sans contexte et mode contextuel
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

A compter de la version 2003 de 4e Dimension, le serveur Web de 4D utilise par dfaut le mode sans contexte (mode dconnect). Dans ce mode, le fonctionnement du serveur Web 4D est comparable celui des serveurs Web standard : lorsqu'il reoit une requte HTTP d'un navigateur (URL, formulaire post, etc.), le serveur traite la requte puis retourne ventuellement une rponse (envoi d'une page Web par exemple). Aucune connexion spcifique n'est maintenue par la suite entre le serveur et le navigateur. En mode sans contexte, le serveur Web peut envoyer des pages statiques ou des pages semi-dynamiques. Les pages semi-dynamiques permettent d'accder aux donnes de la base ou d'effectuer tout type de traitement via des balises 4D spciales, values au moment de l'envoi de la page. Les pages semi-dynamiques vous permettent de construire, grer et envoyer des pages Web dont le contenu est en totalit ou en partie issu dun traitement effectu par 4D. Le mode sans contexte permet gnralement de rpondre la plupart des besoins de dveloppement de sites Web. En mode contextuel, la connexion d'un navigateur Web provoque la cration d'un contexte, dans lequel il dispose de sa propre slection courante, de ses variables, etc. En quelque sorte, chaque navigateur est considr comme un 4D Client se connectant la base en menus crs. Le contexte est pris en charge par un process de connexion Web spcifique. Ce mode permet de publier instantanment une base 4D sur le Web, sans qu'il soit ncessaire de crer des pages Web : 4D gnre et envoie au navigateur des pages dynamiques, issues de la conversion automatique en HTML des barres de menus et des formulaires de votre base. En mode contextuel, il reste toutefois possible d'envoyer des pages semi-dynamiques ou des pages statiques. Il est galement parfaitement possible d'insrer du code HTML ou Javascript dans les formulaires 4D afin d'ajouter des fonctions aux pages affiches sur le Web.

1652 4e Dimension - Langage

En outre, dans ce mode 4D gre automatiquement les accs simultans au donnes : lorsqu'un navigateur ou un poste 4D Client charge un enregistrement, 4D le verrouille de manire transparente pour les autres utilisateurs, qu'ils soient navigateurs ou postes 4D Client. De plus, 4D vous permet d'effectuer la saisie de donnes au sein d'une transaction avec un navigateur Web, comme avec 4e Dimension ou 4D Client. Ce systme permet au serveur Web 4D de contrler parfaitement les actions des navigateurs et de garantir lintgrit des donnes. En contrepartie de cette facilit de publication, le mode contextuel inclut quelques contraintes : - les navigateurs Web permettent de surfer d'une page Web une autre, d'un site un autre, etc. Avec une base de donnes en client/serveur, cette navigation doit tre contrle afin de respecter la logique des transactions de la base. Chaque saisie effectue par un utilisateur dans un enregistrement doit tre valide ou annule afin de ne pas rester dans un tat incertain. Le moteur de serveur Web 4D contient des mcanismes automatiques de gestion des sessions et des contextes de la base. Ces mcanismes empchent l'utilisation de certaines fonctions standard des navigateurs (Recharger, Page prcdente, etc., cf. paragraphe suivant). - le process de connexion charg de maintenir le contexte reste actif jusqu ce que la priode dinactivit (timeout) du navigateur spcifie dans les Prfrences de la base soit atteinte. Si par exemple le navigateur a quitt le site entre-temps, le contexte est alors gaspill. Ces contraintes destinent plutt le mode contextuel une utilisation en Intranet ou dans le cadre d'applications Internet spcifiques. Le principe de fonctionnement du serveur Web 4D est rsum dans le schma suivant :

4e Dimension - Langage 1653

Choix du mode Le choix du mode de fonctionnement du serveur Web de 4D seffectue soit : au dmarrage du serveur, via l'option Mode de dmarrage des Prfrences, au cours de l'utilisation du serveur Web, en fonction des URLs envoys ou des commandes excutes. En effet, certains URLs spciaux et certaines commandes 4D provoquent le changement du mode. Le principe est que le mode courant reste utilis tant qu'aucun URL ou aucune commande 4D ne provoque un changement de mode. Dfinir le mode contextuel au dmarrage Par dfaut, le serveur Web dmarre en mode sans contexte. Vous pouvez dmarrer le serveur Web directement en mode contextuel. Cela signifie que lorsquun utilisateur se connecte la base, un contexte est automatiquement gnr. Pour dfinir le mode sans contexte au dmarrage, cochez l'option Mode contextuel (contexte permanent) dans le thme Web, page Configuration de la fentre des Prfrences de la base :

Commandes et URLs provoquant le changement de mode Au cours de lexploitation de la base, vous pouvez changer de mode lors de lappel des lments suivants : Passage en mode sans contexte : ENVOYER BLOB HTML en passant Vrai dans le paramtre optionnel sansContexte ENVOYER TEXTE HTML en passant Vrai dans le paramtre optionnel sansContexte ENVOYER REDIRECTION HTTP URL dbutant par /4DACTION Passage en mode contextuel : URL dbutant par /4DMETHOD/MaMthode. Lorsque l'URL /4DMETHOD/MaMthode est envoy, le serveur Web 4D cre un nouveau contexte et effectue les oprations suivantes : - la Mthode base Sur authentification Web est excute (si elle existe), - la Mthode base Sur connexion Web est excute (si elle existe) dans ce cas particulier, $1 est gal /4DMETHOD/MaMthode au lieu de / (barre oblique), - enfin, la mthode demande est excute dans le contexte nouvellement cr.

1654 4e Dimension - Langage

Connatre le nombre de contextes gnrs En fonction des actions quils effectuent, certains process Web utilisent des contextes Web, dautres nen utilisent pas. Vous pouvez connatre le nombre de contextes gnrs, laide de la commande INFORMATIONS PROCESS : pour tout process Web, cette commande indique dans le paramtre origine sil utilise un contexte (-11, Process web avec contexte) ou non (-3, Process web sans contexte). Gestion des contextes et de la navigation
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Numro de contexte Le numro du process de la connexion Web s'appelle le numro de contexte. C'est un nombre, gnr alatoirement, qui identifie chaque connexion Web. Le numro de contexte est gr par 4D et par le navigateur pendant toute la connexion Web. Dans l'exemple ci-dessous, le numro de contexte est 1738227136. Dans la fentre de votre navigateur Web, le numro de contexte apparat dans l'URL affich dans la zone de destination :

Les URLs sont automatiquement grs par 4D pendant toute la session Web en mode contextuel. Chaque fois qu'une requte HTTP est reue via TCP/IP, 4D extrait le numro de contexte de l'URL, et peut donc racheminer la requte au bon process de connexion Web. Les numros de contexte permettent 4D : de grer les sessions Web et celles de la base de donnes, de grer de faon transparente plusieurs connexions Web simultanes, d'viter des connexions indsirables futures utilisant des marqueurs Favoris, car un numro de contexte diffrent est gnr chaque connexion.

4e Dimension - Langage 1655

Synchronisation des sessions Web et de la base : numro de sous-contexte de la connexion Web Dans la fentre prcdente, vous pouvez constater que le numro de contexte est suivi d'un point et d'un autre chiffre. Ce second chiffre s'appelle le numro de sous-contexte. 4D gre et incrmente automatiquement ce numro chaque fois qu'une nouvelle page HTML issue de 4D est envoye au navigateur en mode contextuel. Le numro de souscontexte est essentiel la gestion de la session de la base. Gnralement, un navigateur Web dispose de contrles de navigation comme des boutons du type 'Page prcdente' ou 'Page suivante', des fentres d'historique, etc. Ces contrles sont utiles lorsque vous consultez des documents, des notes d'information, des listes, etc. Ils sont moins efficaces lorsque vous effectuez une transaction partir de la base. Par exemple, si un utilisateur Web ajoute un enregistrement une table, il faut savoir si la saisie des donnes a t valide, c'est--dire si l'utilisateur Web a cliqu sur le bouton Annuler ou Valider dans le formulaire 4D. Si, ce stade, l'utilisateur Web appelle d'autres pages HTML, la saisie reste dans un tat incertain. Pour cela, 4D utilise le numro de souscontexte afin de synchroniser la session Web ct 4D. Lorsqu'un formulaire est soumis au navigateur ou qu'une requte HTTP est envoye 4D par le navigateur, si une dsynchronisation des sessions du Web et de la base est dtecte, 4D envoie le message En utilisant les contrles de navigation du navigateur, vous n'avez pas valid les donnes d'un formulaire. 4e Dimension va revenir sur ce formulaire afin que vous le validiez ou l'annuliez. 4D retourne alors la page Web de saisie l'aide du numro de sous-contexte. La synchronisation est galement essentielle pour le process de connexion Web. L'excution d'une commande telle que, par exemple, AJOUTER ENREGISTREMENT ([...]) doit s'achever correctement pour que l'on puisse continuer utiliser la base. La synchronisation est slective. Si la page Web courante affiche dans le navigateur est un formulaire 4D (AJOUTER ENREGISTREMENT, VISUALISER SELECTION, DIALOGUE, etc.), les contrles de synchronisation se manifesteront le cas chant. Si la page Web courante est une page HTML statique issue d'un lien prsent dans une autre page Web (et envoye l'aide de la commande ENVOYER FICHIER HTML), vous pouvez naviguer librement parmi ces pages. Considrons les lignes de code 4D suivantes : AJOUTER ENREGISTREMENT ([Clients]) ENVOYER FICHIER HTML ("Page.HTM") VISUALISER SELECTION ([Produits])

1656 4e Dimension - Langage

Le schma suivant dcrit ce qui se passe sur 4D et sur le navigateur Web lors de l'excution de ce code : les lignes rouges signalent les diffrentes transmissions du formulaire 4D. les lignes bleues signalent le transfert entre les pages HTML bases sur 4D et celles qui ne le sont pas. les lignes vertes indiquent des pages HTML qui ne sont pas bases sur 4D.

Description des tapes (1) La commande AJOUTER ENREGISTREMENT est appele. 4D traduit le formulaire entre courant de la table en une page HTML et l'envoie au navigateur Web. Si le formulaire contient plusieurs pages, les boutons de navigation standard de 4D permettent de naviguer parmi les pages du formulaire. La navigation est implmente et effectue par 4D de faon transparente (via la soumission de formulaire Web).

4e Dimension - Langage 1657

(2) Pendant la saisie des donnes (donc dans l'appel AJOUTER ENREGISTREMENT), l'utilisateur Web clique sur un bouton. La mthode objet du bouton appelle la commande ENVOYER FICHIER HTML. (3) A la suite de l'appel ENVOYER FICHIER HTML, si la page HTML contient des liens, l'utilisateur peut naviguer parmi diffrentes pages. Finalement, lorsque l'instruction ENVOYER FICHIER HTML("") est excute, le mode HTML est termin. (4) L'excution de la mthode objet du bouton sur lequel l'utilisateur a cliqu et de la saisie des donnes lie AJOUTER ENREGISTREMENT reprennent. Notez que les tapes (2) et (3) peuvent tre rptes plusieurs fois pendant la saisie des donnes. (5) Enfin, la saisie des donnes est soit valide soit annule et le process de connexion Web est excut. (6) L'appel suivant est ENVOYER FICHIER HTML. (7) Cet tape est semblable l'tape 3. Si la page HTML contient des liens, il est possible de naviguer parmi plusieurs pages. Lorsque finalement la commande ENVOYER FICHIER HTML("") est appele, le mode HTML est termin. (8) Le process de connexion Web est excut. (9) La commande VISUALISER SELECTION est appele. 4D traduit le formulaire sortie courant de la table en page HTML et l'envoie au navigateur Web. Pendant le VISUALISER SELECTION, 4D permet de naviguer de faon transparente entre la page de slection et l'affichage spar de chaque enregistrement. 4D peut galement utiliser MODIFIER SELECTION pour grer la saisie des donnes et le verrouillage des enregistrements, par l'intermdiaire des formulaires Web. (10) Pendant qu'il navigue parmi les enregistrements de la slection, l'utilisateur clique sur un bouton dans la zone de pied de page du formulaire. La mthode objet du bouton appelle la commande ENVOYER FICHIER HTML. (11) Cette tape est semblable aux tapes 3 et 7. Si la page HTML contient des liens, il est possible de naviguer parmi plusieurs pages. Lorsque finalement la commande ENVOYER FICHIER HTML("") est appele, le mode HTML est termin. (12) L'excution de la mthode objet du bouton sur lequel l'utilisateur a cliqu et l'affichage de la slection lie AJOUTER ENREGISTREMENT reprennent. Notez que les tapes (10) et (11) peuvent tre rptes plusieurs fois pendant la navigation dans la slection. (13) Enfin, l'affichage de la slection est termin et le process de connexion Web est excut. Et ainsi de suite...

1658 4e Dimension - Langage

La navigation Web libre (lorsque par exemple vous cliquez sur les boutons Suivant ou Prcdent) est possible au sein de tout appel ENVOYER FICHIER HTML (les zones vertes dans le schma ci-dessus). En revanche, toute page HTML base sur 4D (saisie des donnes, affichage de la slection..., y compris les botes de dialogue standard telles que celles qui sont affiches par les commandes CONFIRMER ou Demander) chappe aux contrles standard du navigateur. A l'issue de la navigation, 4D va, si ncesssaire, synchroniser les sessions Web avec celles de la base en revenant la page Web dont le numro de souscontexte correspond celui de la commande en cours d'excution dans le process de connexion Web. Process de connexion Web et session Web De son point de vue, l'utilisateur pilote la session Web travers ses actions dans le navigateur Web. Du point de vue de la programmation, c'est le process de connexion Web qui pilote la session Web, et non l'inverse. Le navigateur Web affiche les pages envoyes par le process de connexion Web qui : soit excute du code 4D, soit attend du navigateur le retour de la page Web courante. Du point de vue du mode Structure, le process de connexion Web doit tre considr comme un process 4D dont le domaine d'excution est 4e Dimension ou 4D Server, mais dont l'interface utilisateur est situe sur le navigateur Web distant. En consquence, tenez toujours compte de la dualit du process de connexion Web lorsque vous dveloppez des applications pour le Web en mode contextuel. Par exemple : Lors de la saisie de tout type de donnes, la barre de menus principale est celle du navigateur, pas celle de 4D. Dans un formulaire, ne comptez pas sur la barre de menus de 4D ; elle apparat sur la machine du serveur Web, mais pas sur la machine du navigateur Web. Lorsque vous crez des formulaires destination du navigateur Web, rappelez-vous que les fonctionnalits du formulaire 4D sont restreintes celles du HTML (avec cependant quelques possibilits supplmentaires lies 4D). Il n'est donc pas possible d'employer toutes les fonctionnalits des formulaires de 4D (par exemple, tous les types d'objets ou tous les vnements formulaires). Pour plus d'informations sur ce point, rfrez-vous cidessous au paragraphe Conversion HTML automatique. En ce qui concerne la communication interprocess, la commande APPELER PROCESS n'a pas d'effet lorsqu'elle est applique un process de connexion Web, car le formulaire actif est affich sur le navigateur Web. En revanche, un process de connexion Web peut excuter un APPELER PROCESS destination d'un autre process 4D. De plus, la communication interprocess peut s'tablir indiffremment dans les deux sens, par l'intermdiaire des commandes LIRE VARIABLE PROCESS et ECRIRE VARIABLE PROCESS, qui ne ncessitent pas la prsence d'une interface utilisateur pour le process.

4e Dimension - Langage 1659

Dure de conservation des process Web inactifs (Timeout) Comme dcrit prcdemment, un process de connexion Web en mode contextuel soit excute du code 4D, soit attend le retour de la page Web en cours d'affichage sur le navigateur. Dans ce second cas, le process de connexion Web accordera au navigateur un dlai de rponse gal la valeur de l'option Dure de conservation des process Web inactifs, que vous fixez soit dans le thme Web, page Avanc de la fentre des Prfrences de la base, soit l'aide de la commande FIXER TEMPORISATION WEB. La porte de ce paramtrage est la session de la base. Tous les process de connexion Web contextuels sont assujettis cette valeur ; ils sont immdiatement affects lorsque le paramtrage est modifi. La valeur par dfaut est 5 minutes. Note : La commande FIXER TEMPORISATION WEB vous permet de dfinir une valeur de timeout par process Web. Vous pouvez augmenter ou rduire cette valeur votre convenance. Par exemple, vous pouvez augmenter la temporisation si votre application permet aux utilisateurs Web de naviguer vers d'autres sites Web via des liens HTML dans les pages de votre base. En augmentant la temporisation, vous permettez aux utilisateurs de naviguer plus longtemps parmi d'autres sites Web sans fermer les connexions votre base. ATTENTION : Il n'est pas possible de stopper par programmation le process de connexion Web. Si vous spcifiez une temporisation longue, le process attendra ce dlai mme si l'utilisateur Web s'est dconnect de la base depuis un certain temps. Si vous cochez l'option Ouverte en permanence, les process de connexion Web ne s'arrteront que lorsque vous quitterez la base. A noter toutefois qu'un process de connexion Web est automatiquement tu ds que le serveur Web passe en mode sans contexte. A la diffrence du process serveur Web, les process de connexion Web peuvent tre tus l'aide de la commande Tuer (disponible dans l'Explorateur d'excution de 4e Dimension lorsque la page Process est affiche). Conversion HTML automatique
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ce paragraphe prcise les lments, objets et mcanismes pris en charge automatiquement lors de la conversion de la base en HTML par 4e Dimension en mode contextuel. Barres de menus Chaque barre de menus est transcrite dans une page HTML. Chaque menu apparat comme du texte seul et les commandes de menu associes des mthodes 4D apparaissent comme des liens vers ces mthodes 4D. Les commandes de menu uniquement associes des actions automatiques apparaissent comme du texte seul. Cliquer sur une commande de menu dans le navigateur Web dclenche, dans le process de connexion Web, l'excution de la mthode 4D associe. Note : Lorsque la proprit Dmarrer un process est associe une commande de menu, la mthode associe est excute par le serveur Web de 4D dans un nouveau process de connexion Web, l'aide de l'URL 4DMETHOD. Dans ce cas, la mthode du menu doit disposer de l'attribut Disponible via 4DACTION, 4DMETHOD et 4DSCRIPT (non coch par 1660 4e Dimension - Langage

Champs Lorsqu'un formulaire 4D est converti en page HTML, les champs sont traduits de la manire suivante : Type champ 4D Objet HTML Balise HTML Alphanumrique Champ texte (*) <INPUT Type="text" ...> Texte Champ texte (*) <TEXTAREA ...> (**) <INPUT Type="text" ...> (***) Rel Champ texte (*) <INPUT Type="text" ...> Entier Champ texte (*) <INPUT Type="text" ...> Entier long Champ texte (*) <INPUT Type="text" ...> Date Champ texte (*) <INPUT Type="text" ...> Heure Champ texte (*) <INPUT Type="text" ...> Boolen Bouton radio ou <INPUT Type="radio" ...> case cocher (*) <INPUT Type="checkbox" ...> Image Image (toujours non-saisissable) <IMG SRC="..." ...> Sous-table Pas de support HTML Aucune BLOB Pas de support HTML Aucune (*) ou Texte seul si non-saisissable (**) si la valeur de type Texte se compose de plusieurs lignes (***) si la valeur de type Texte ne se compose que d'une ligne ou est vide Note : Les variables saisissables se comportent comme les champs du mme type. Objets de formulaires Lorsqu'un formulaire 4D est converti en page HTML, les objets de formulaire sont traduits de la manire suivante : Objet 4D Ligne Rectangle Ovale Rectangle arrondi Image statique Zone de groupe Texte statique Bouton Bouton par dfaut Bouton radio Case cocher Pop up/Liste droulante Combo Box Objet HTML quivalent Ligne horizontale (1) Rectangle Pas de support HTML Pas de support HTML Image ou Image interactive (2) Texte Texte Bouton "submit" Bouton "submit" Bouton radio (3) Case cocher Liste droulante Liste droulante Balise HTML <HR> Gr par les CSS1 Aucune Aucune <IMG SRC="..."> <INPUT Type="image" ...> Texte avec balises si ncessaire Texte avec balises si ncessaire <INPUT Type="submit" ...> <INPUT Type="submit" ...> <INPUT Type="radio" ...> <INPUT Type="checkbox" ...> <SELECT ...>...</SELECT> <SELECT ...>...</SELECT>

4e Dimension - Langage 1661

Zone de dfilement Onglet Bouton invisible Bouton invers Bouton 3D Grille de boutons Graphe Plug-in

Zone de dfilement (4) Liste d'URLs (5) Rfrez-vous la note 2 Rfrez-vous la note 2 Rfrez-vous la note 2 Rfrez-vous la note 2 Image (non-saisissable) Texte, Image ou Image interactive (6)

<SELECT ...>...</SELECT> <A HREF="/4DTAB/ 4DVar.Onglet...">

<IMG SRC="..." ...> Texte avec balises si ncessaire <IMG SRC="..." ...> <INPUT Type="image" ...>

Les objets suivants ne sont pas convertis en HTML et sont donc ignors : Liste hirarchique, Menu droulant hirarchique, Sous-formulaire, Bouton radio image, Thermomtre, Rgle, Cadran, Menu image, Bouton image, Case cocher 3D, Bouton radio 3D, Sparateur. Notes 1. Les lignes non horizontales ne sont pas supportes par le HTML ; elles sont donc ignores. 2. Les boutons non-visibles sont des objets de type Bouton invisible, Bouton invers, Bouton 3D et Grille de boutons. Lorsqu'une image statique ne chevauche aucun bouton nonvisible, elle est traduite comme une image statique. Si elle chevauche au moins un bouton non-visible, elle est traduite comme une "image interactive" gre sur le serveur (Server-side Image Map). Sur le navigateur Web, l'image est traite comme une Server-side Image Map. Du ct de 4D, lorsque le formulaire est reu, 4D recalcule la position du clic pour gnrer un vnement Sur clic pour le bouton correspondant, comme si l'utilisateur avait rellement cliqu sur le bouton. Grer des boutons non-visibles est donc trs simple, dans la mesure o ils recouvrent ou sont recouverts par des images statiques. Vous contrlez ces boutons dans la mthode formulaire ou dans leurs mthodes objets, tout comme vous le faites pour l'interface 4D standard. C'est aussi un moyen simple de grer l'interactivit des images Web (Web Image Mapping). Si un bouton non-visible ne chevauche aucune image statique, il est ignor lors de la conversion. 3. Le regroupement des boutons radio est maintenu lors de la conversion. 4. Les zones de dfilement groupes ne sont pas supportes par le HTML. 4D les traduit en tant que zones de dfilement indpendantes situes sur la mme ligne.

1662 4e Dimension - Langage

5. Les onglets (de type tableau ou crs laide de valeurs par dfaut dfinies dans les Proprits de lobjet) sont convertis sous forme de listes dURL :

Si les valeurs sont des chanes vides, 4D affiche 1, 2, 3... sur le navigateur. 6. Les zones de plug-ins sont publiables sur le Web, tant au pralable converties en HTML, en Image ou en Image Map. Cette dernire solution permet de grer les clics souris lintrieur de la zone de plug-in (par exemple, la zone _AP External clock de 4D_Pack est publie en Image, le plug-in intgr 4D Chart est publi en Image Map). La manire dont une zone de plug-in incluse dans un formulaire est publie sur le Web dpend des spcifications de lditeur du plug-in. Visualiser slection / Modifier slection Le mcanisme UserSet n'est pas support. Un mcanisme de slection automatique de pages est fourni par 4D. Pour plus d'informations, reportez-vous la description de la commande FIXER LIMITES AFFICHAGE WEB. Commandes 4D Lorsque vous dveloppez une base 4D pour le Web, vous pouvez vous demander ce qui va se produire lorsque telle ou telle commande sera appele. La commande produira-t-elle un effet sur la machine du serveur Web ou sur celle du navigateur Web ? Le process de connexion Web s'excute sur la machine du serveur Web, mais l'interface utilisateur est affiche distance sur le navigateur Web connect.

4e Dimension - Langage 1663

Par consquent, pour le dveloppement d'une base Web, les commandes 4D peuvent tre classes de la manire suivante : Les commandes qui ne sont pas affectes par leur excution dans un process de connexion Web Une commande telle que CREER ENREGISTREMENT fonctionne dans le process courant ; dans ce cas, elle cre un enregistrement depuis le process de connexion Web. Le mme principe est valable pour les commandes telles que Largeur ecran, qui retourne la largeur de l'cran de la machine du serveur Web (la machine sur laquelle le process est excut). Les commandes qui comportent des fonctionnalits intgres supplmentaires pour le support transparent du Web Nom de la commande AJOUTER ENREGISTREMENT ALERTE CONFIRMER DIALOGUE VISUALISER SELECTION MODIFIER ENREGISTREMENT MODIFIER SELECTION Commentaires Conversion automatique du formulaire, gestion des formulaires multi-pages Conversion automatique de la bote de dialogue Conversion automatique de la bote de dialogue Conversion automatique du formulaire, gestion des formulaires multi-pages Conversion automatique du formulaire Mcanisme intgr de pagination de la slection Le mcanisme UserSet n'est pas gr Conversion automatique du formulaire, gestion des formulaires multi-pages Conversion automatique du formulaire Mcanisme intgr de pagination de la slection Le mcanisme UserSet n'est pas gr Bote de dialogue standard de recherche gre Conversion automatique du formulaire, gestion des formulaires multi-pages Conversion automatique de la bote de dialogue Support de l'vnement formulaire Sur minuteur Mise jour du formulaire affich sur le navigateur

CHERCHER CHERCHER PAR EXEMPLE Demander FIXER MINUTEUR REDESSINER

Les commandes utiliser avec prcaution Les commandes suivantes s'excutent localement sur la machine du serveur Web. Par exemple, vous pouvez demander l'impression d'une slection partir du navigateur Web. Cependant, l'impression sera effectue sur la machine du serveur Web.

1664 4e Dimension - Langage

De plus, lorsqu'un lment d'interface est appel, il s'affiche sur la machine du serveur Web, par exemple Ouvrir document(""), par opposition Ouvrir document("Ce document"). Vous devrez viter ce genre d'appel car le navigateur Web attendra une rponse jusqu' ce que la bote de dialogue soit referme sur la machine du serveur Web. En revanche, il est tout fait possible d'appeler ces routines lorsqu'aucune bote de dialogue n'est requise. Nom de la commande Ajouter a document BEEP Creer document AFFICHER ENREGISTREMENT ECRITURE DIF ECRITURE SYLK ECRITURE ASCII LECTURE DIF LECTURE SYLK LECTURE ASCII CHARGER ENSEMBLE LIRE VARIABLES MESSAGE Ouvrir document Creer fenetre externe Ouvrir fichier ressources Creer fenetre JOUER SON IMPRIMER LIGNE IMPRIMER ETIQUETTES IMPRIMER ENREGISTREMENT IMPRIMER SELECTION QUITTER 4D STOCKER ENSEMBLE ECRIRE VARIABLES FIXER HISTORIQUE REGLER SERIE TRACE Commentaires OK, si aucune bote de dialogue de fichier n'est appele Emet un bip sur la machine du serveur Web OK, si aucune bote de dialogue de fichier n'est appele Ne fait rien OK, si aucune bote de dialogue de fichier n'est appele OK, si aucune bote de dialogue de fichier n'est appele OK, si aucune bote de dialogue de fichier n'est appele OK, si aucune bote de dialogue de fichier n'est appele OK, si aucune bote de dialogue de fichier n'est appele OK, si aucune bote de dialogue de fichier n'est appele OK, si aucune bote de dialogue de fichier n'est appele OK, si aucune bote de dialogue de fichier n'est appele Les messages s'affichent sur la machine du serveur Web OK, si aucune bote de dialogue de fichier n'est appele La fentre s'ouvre sur la machine du serveur Web OK, si aucune bote de dialogue de fichier n'est appele La fentre s'ouvre sur la machine du serveur Web Le son est jou sur la machine du serveur Web OK, si aucune bote de dialogue d'impression n'est appele OK, si aucune bote de dialogue d'impression n'est appele OK, si aucune bote de dialogue d'impression n'est appele OK, si aucune bote de dialogue d'impression n'est appele Gr, vous pouvez quitter le serveur Web distance OK, si aucune bote de dialogue de fichier n'est appele OK, si aucune bote de dialogue de fichier n'est appele OK, si aucune bote de dialogue de fichier n'est appele OK, si aucune bote de dialogue de fichier n'est appele (documents) La fentre de dbogage s'affiche sur la machine du serveur Web

4e Dimension - Langage 1665

Les commandes qui ne sont pas supportes par les process de connexion Web Commentaires N'appelez PAS cette commande dans un process de connexion Web. Cette commande n'est pas adapte au Web. AJOUTER SOUS ENREGISTREMENT N'appelez PAS cette commande dans un process de connexion Web. Cette commande n'est pas adapte au Web. CHANGER UTILISATEUR N'appelez PAS cette commande dans un process de connexion Web. Cette commande n'est pas adapte au Web. CHANGER PRIVILEGES N'appelez PAS cette commande dans un process de connexion Web. La fentre des mots de passe s'affiche sur la machine de 4D. Le navigateur attendra jusqu' ce que la fentre soit ferme. GRAPHE SUR SELECTION N'appelez PAS cette commande dans un process de connexion Web. Cette commande n'est pas adapte au Web. MODIFIER SOUS ENREGISTREMENT N'appelez PAS cette commande dans un process de connexion Web. Cette commande n'est pas adapte au Web. TRIER Gestion sous forme programme seulement La bote de dialogue de Tri n'est pas adapte au Web. PARAMETRES IMPRESSION N'appelez PAS cette commande dans un process de connexion Web. Les botes de dialogue d'impression s'affichent sur la machine de 4D. Le navigateur attendra jusqu' ce que les botes de dialogue soient fermes. QR ETAT N'appelez PAS cette commande dans un process de connexion Web. La fentre de l'diteur d'Etats semiautomatiques s'affiche sur la machine de 4D. Le navigateur attendra jusqu' ce que la fentre soit ferme. Encapsulation de HTML
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Nom de la commande AJOUTER SEGMENT DE DONNEES

Vous pouvez personnaliser le contenu des formulaires 4D convertis en HTML en encapsulant du code HTML (ou du Javascript) dans le formulaire. Le formulaire qui en rsulte, ct navigateur Web, est la combinaison d'objets HTML et d'objets 4D.

1666 4e Dimension - Langage

Insrer une page HTML via un objet texte statique Un objet texte statique de formulaire 4D contenant par exemple la chane "{page.HTM}", insre le document HTML "page.HTM" dans le formulaire 4D l'endroit o se trouve l'objet texte. Vous insrez un document dans son intgralit (en fait, tout ce qui est compris entre les balises <BODY> et </BODY>). Vous pouvez soit utiliser un document HTML existant, soit construire par le langage un document que vous sauvegardez sur disque et auquel vous vous rfrez par la suite. Note : Dans certains cas, la conversion HTML de formulaires 4D crs en version 6.0.x contenant une rfrence un document HTML ({mapage.htm}) peut ne pas donner le rsultat escompt avec 4D version 6.7 et suivantes. Dans ce cas, il est possible de modifier le mode de conversion des formulaires l'aide de la commande FIXER PARAMETRE BASE. Insrer du code HTML Toute variable texte 4D peut encapsuler du code HTML dans un formulaire 4D, si son premier caractre a le code ASCII 1 (par exemple, vtHTML:=Caractere(1)+"...Code HTML..."). Vous insrez ainsi des morceaux de code. Vous pouvez dans ce cas construire le code HTML en mmoire. Rfrences de fichiers et URLs
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Pour assurer la maintenance du contexte de la base et le numro d'identification du souscontexte, 4D recalcule automatiquement les rfrences de fichiers et les URLs. Par exemple, toutes les rfrences IMG et HREF des fichiers locaux sont recalcules. Si vous insrez votre propre code HTML dans un formulaire 4D avec une variable Texte, vous devez employer la syntaxe dcrite plus bas. Les fichiers locaux GIF sont par exemple recalculs en "/4DBin/_/GIF_file_pathname" o GIF_file_pathname est le nom de chemin complet en HTML vers un fichier GIF, compte tenu de la racine du volume o le fichier est situ. Une petite mthode 4D comme celle qui suit retourne les rfrences recalcules pour le nom de chemin d'accs reu en paramtre : ` Mthode projet WWW Local GIF URL ` WWW Local GIF URL ( Texte ) ` WWW Local GIF URL ( Chemin d'accs natif ) -> URL vers fichier GIF local C_TEXTE($0;$1) $0:="/4DBin/_/"+HTML Pathname ($1) Note : Reportez-vous aux exemples de la commande Mac vers ISO pour plus de dtails sur la mthode HTML Pathname.

4e Dimension - Langage 1667

Insrer une page HTML via un objet texte statique Un objet texte statique de formulaire 4D contenant par exemple la chane "{page.HTM}", insre le document HTML "page.HTM" dans le formulaire 4D l'endroit o se trouve l'objet texte. Vous insrez un document dans son intgralit (en fait, tout ce qui est compris entre les balises <BODY> et </BODY>). Vous pouvez soit utiliser un document HTML existant, soit construire par le langage un document que vous sauvegardez sur disque et auquel vous vous rfrez par la suite. Note : Dans certains cas, la conversion HTML de formulaires 4D crs en version 6.0.x contenant une rfrence un document HTML ({mapage.htm}) peut ne pas donner le rsultat escompt avec 4D version 6.7 et suivantes. Dans ce cas, il est possible de modifier le mode de conversion des formulaires l'aide de la commande FIXER PARAMETRE BASE. Insrer du code HTML Toute variable texte 4D peut encapsuler du code HTML dans un formulaire 4D, si son premier caractre a le code ASCII 1 (par exemple, vtHTML:=Caractere(1)+"...Code HTML..."). Vous insrez ainsi des morceaux de code. Vous pouvez dans ce cas construire le code HTML en mmoire. Rfrences de fichiers et URLs
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Pour assurer la maintenance du contexte de la base et le numro d'identification du souscontexte, 4D recalcule automatiquement les rfrences de fichiers et les URLs. Par exemple, toutes les rfrences IMG et HREF des fichiers locaux sont recalcules. Si vous insrez votre propre code HTML dans un formulaire 4D avec une variable Texte, vous devez employer la syntaxe dcrite plus bas. Les fichiers locaux GIF sont par exemple recalculs en "/4DBin/_/GIF_file_pathname" o GIF_file_pathname est le nom de chemin complet en HTML vers un fichier GIF, compte tenu de la racine du volume o le fichier est situ. Une petite mthode 4D comme celle qui suit retourne les rfrences recalcules pour le nom de chemin d'accs reu en paramtre : ` Mthode projet WWW Local GIF URL ` WWW Local GIF URL ( Texte ) ` WWW Local GIF URL ( Chemin d'accs natif ) -> URL vers fichier GIF local C_TEXTE($0;$1) $0:="/4DBin/_/"+HTML Pathname ($1) Note : Reportez-vous aux exemples de la commande Mac vers ISO pour plus de dtails sur la mthode HTML Pathname.

1668 4e Dimension - Langage

Ensuite, quand vous insrez le code HTML dans un formulaire 4D au moyen d'une variable Texte, vous pouvez crire : vtHTML:=Caractere(1)+"<P><IMG SRC="+Caractere(34)+ WWW Local GIF URL("F:.HTM"+Caractere(34)+ " ALIGN=MIDDLE></P>"+Caractere(13) Cette mthode insrera le document GIF dans le formulaire 4D l'endroit o la variable 4D vtHTML est place. Important : Vous devez crire ce type de code uniquement si vous insrez du code HTML dans un formulaire 4D. Si vous envoyez simplement une page HTML avec ENVOYER FICHIER HTML ou ENVOYER BLOB HTML, ou encore si vous utilisez une commande telle que AJOUTER ENREGISTREMENT, souvenez-vous que 4D effectue automatiquement la traduction et le recalcul pour vous. Le recalcul ne change pas les liens pour les protocoles suivants : http: ftp: mailto: news: gopher: javascript: telnet: nntp: wais: prospero: Rfrence FIXER PARAMETRE BASE, Mthode base Sur authentification Web, Mthode base Sur connexion Web.

4e Dimension - Langage 1669

Utiliser le protocole SSL

Serveur Web version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le serveur Web 4D peut communiquer en mode scuris via le protocole SSL (Secured Socket Layer). Quest-ce que le protocole SSL ?
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le protocole SSL a pour but de scuriser les communications entre deux applications gnralement un serveur Web et un navigateur. Ce protocole est largement rpandu et compatible avec la plupart des navigateurs Web. Au niveau de larchitecture rseau, le protocole SSL sinsre entre la couche TCP/IP (bas niveau) et le protocole de haut niveau HTTP, pour lequel il est principalement destin. Architecture rseau utilisant SSL :

Note : Le protocole SSL peut galement tre utilis pour scuriser les connexions client/serveur classiques de 4D Server. Pour plus dinformations, reportez-vous la section Crypter les connexions client/serveur dans le manuel de rfrence de 4D Server. Le protocole SSL permet de garantir lidentit de lmetteur et du rcepteur, ainsi que la confidentialit et lintgrit des informations changes : Identification des intervenants : lidentit de lmetteur et du rcepteur sont confirmes. Confidentialit des informations changes : les donnes envoyes sont cryptes afin de les rendre inintelligibles pour les tiers non autoriss. Intgrit des informations changes : les donnes reues nont pas t altres, frauduleusement ou accidentellement. Les principes de scurisation utiliss par SSL sont bass sur lemploi dun algorithme de cryptage utilisant une paire de cls : une cl prive et une cl publique. La cl prive est utilise pour crypter les donnes. Elle est conserve par lmetteur (le site Web). La cl publique est utilise pour dcrypter les donnes. Elle est diffuse auprs des rcepteurs (les navigateurs Web), via le certificat. Lemploi du SSL dans le cadre dInternet requiert en effet lentremise dun oprateur de certification tel que, par exemple, Verisign. Moyennant une participation financire du site Web demandeur, cet organisme dlivre un certificat, garantissant lidentit du serveur et contenant la cl publique permettant la communication en mode scuris. Note : Pour plus dinformations sur les principes gnraux de cryptage et demploi de cls publiques/cls prives, reportez-vous la description de la commande CRYPTER BLOB. 1670 4e Dimension - Langage

Obtenir un certificat SSL La mise en place dun serveur Web 4D fonctionnant en SSL ncessite un certificat numrique dlivr par un oprateur de certification. Ce certificat renferme diverses informations dont la carte didentit du site ainsi que la cl publique utilise pour communiquer avec lui. Il est transmis aux navigateurs Web se connectant au site. Une fois quil est accept, la communication en mode scuris stablit. Note : Pour quun navigateur accepte les certificats dune autorit de certification, celle-ci doit tre rpertorie dans ses Proprits.

Le choix de lautorit de certification dpend de plusieurs facteurs. Plus lautorit est connue, plus le nombre de navigateurs acceptant les certificats quelle dlivre sera important, mais plus le prix payer sera lev. Verisign est une des autorits de certifications les plus utilises. Pour obtenir un certificat SSL : 1. Gnrez une cl prive laide de la commande GENERER CLES CRYPTAGE. Attention : Pour des raisons de scurit, la cl prive ne doit JAMAIS tre diffuse sur un rseau. En fait, elle ne doit pas quitter le poste serveur Web. Le fichier Key.pem doit tre plac dans le dossier de la structure de la base. 2. Etablissez une demande de certificat laide de la commande GENERER DEMANDE CERTIFICAT. 3. Envoyez la demande de certificat lautorit de certification que vous avez choisie. Pour remplir la demande de certificat, il vous sera peut-tre ncessaire de contacter lautorit de certification. Les autorits de certification vrifient la ralit des informations qui leur ont t transmises. La demande de certificat est gnre dans un BLOB encrypt au format PKCS. Ce format autorise le copier-coller des cls sous forme de texte et leur envoi par E-mail en toute scurit, sans risque daltration de leur contenu. Vous pouvez donc par exemple sauvegarder le BLOB contenant la demande de certificat dans un document texte ( laide de BLOB VERS DOCUMENT), puis louvrir et copier-coller son contenu dans un E-mail ou un formulaire Web destin lautorit de certification. 4. Une fois que vous avez reu votre certificat, crez un fichier texte que vous nommerez Cert.pem et copiez dans ce fichier le contenu du certificat. Vous pouvez recevoir votre certificat sous plusieurs formes (gnralement via un E-mail ou un formulaire HTML). Le serveur Web 4D accepte la plupart des formats de texte (MacOS, PC, Linux...) pour les certificats. En revanche, le certificat doit tre au format PKCS.

4e Dimension - Langage 1671

5. Placez le fichier cert.pem dans le dossier contenant la structure de la base. Le serveur Web peut ds lors fonctionner en mode SSL. La dure de validit dun certificat varie gnralement entre six mois et un an. Installation et activation du SSL dans 4D
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Pour que vous puissiez utiliser le protocole SSL avec le serveur Web de 4D, plusieurs lments doivent tre prsents sur le serveur, diffrents emplacements : 4DSLI.DLL : interface de la couche scurise (Secured Layer Interface) ddie la gestion du SSL. Ce fichier doit se trouver dans le dossier [4D Extensions] de lapplication 4D qui publie la base sur le Web. key.pem : document contenant la cl de cryptage prive. - avec 4e Dimension ou 4D Server, ce fichier doit se trouver dans le dossier de la base. - avec 4D Client, ce fichier doit se trouver dans le dossier de l'application 4D Client. cert.pem : document contenant le certificat. - avec 4e Dimension ou 4D Server, ce fichier doit se trouver dans le dossier de la base. - avec 4D Client, ce fichier doit se trouver dans le dossier de l'application 4D Client. Emplacement des fichiers ncessaires au fonctionnement de SSL avec le serveur Web 4D (4e Dimension et 4D Server) :

Emplacement des fichiers ncessaires au fonctionnement de SSL avec le serveur Web 4D (4D Client) :

Note : La prsence du composant 4DSLI.DLL est galement ncessaire pour lutilisation des commandes de cryptage des donnes CRYPTER BLOB et DECRYPTER BLOB. 1672 4e Dimension - Langage

L'installation de ces lments rend possible l'utilisation du SSL dans les connexions au serveur Web 4D. Toutefois, pour que les connexions SSL soient acceptes par le serveur Web 4D, vous devez activer SSL. Ce paramtre est accessible dans la page Configuration, thme Web des Prfrences :

Par dfaut, les connexions SSL sont autorises. Vous pouvez dslectionner cette option si vous ne souhaitez pas exploiter les fonctionnalits SSL avec votre serveur Web, ou si un autre serveur Web autorisant les connexions scurises fonctionne sur le mme poste. Le port TCP utilis pour les connexions SSL est par dfaut le 443. Ce numro de port peut tre modifi dans la zone Numro de port HTTPS afin, par exemple, de renforcer la scurit du serveur Web (pour plus d'informations sur ce point, reportez-vous la section Paramtrages du serveur Web). Le port TCP dfini dans cette page de Prfrences est utilis pour les connexions du serveur Web en mode standard. Note : Les autres Prfrences de gestion du serveur Web 4D (mots de passe, dlai avant dconnexion, taille du cache, etc.) restent appliques, que le serveur fonctionne en mode SSL ou non.

4e Dimension - Langage 1673

Connexion des navigateurs en SSL


________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Pour quune connexion Web seffectue en mode scuris, il suffit simplement que lURL envoy par le navigateur dbute par https (au lieu de http). Dans ce cas, une bote de dialogue dalerte apparat sur le navigateur. Une fois la bote de dialogue valide, le certificat est envoy au navigateur par le serveur Web.

Les deux parties ngocient alors lalgorithme de cryptage qui va tre utilis pour la connexion. Le serveur Web 4D dispose de plusieurs algorithmes de cryptage symtriques (RC2, RC4, DES...). Lalgorithme commun le plus puissant est utilis. Attention : Le niveau de cryptage autoris est soumis la lgislation en vigueur dans le pays dutilisation. Les niveaux de cryptage proposs par le serveur Web 4D dpendent de la version de la bibliothque systme de cryptage utilise. Par dfaut, 4D SA fournit une version Export de la bibliothque, dont les algorithmes symtriques sont limits 40 bits. Contrle du mode de connexion Lutilisation de SSL dans le serveur Web 4D ne ncessite pas de configuration systme particulire. Toutefois, vous devez tenir compte du fait quun serveur Web SSL peut galement fonctionner en mode non scuris. Le changement de mode de connexion peut seffectuer si le navigateur en fait la demande (il suffit lutilisateur, dans la zone dURL du navigateur, de remplacer HTTPS par HTTP). Il revient au dveloppeur dinterdire ou de rediriger les requtes effectues en mode non scuris la routine Connexion Web securisee permet de connatre le mode de connexion courant. Rfrence Connexion Web securisee, CRYPTER BLOB, DECRYPTER BLOB, GENERER CLES CRYPTAGE, GENERER DEMANDE CERTIFICAT, Paramtrages du serveur Web.

1674 4e Dimension - Langage

Support de XML et de WML

Serveur Web version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

WML Le serveur Web 4D supporte la technologie WML (Wireless Markup Language). Cette fonctionnalit autorise la consultation et la saisie dinformations dans des bases 4D laide dun tlphone mobile ou dun assistant lectronique personnel (PDA). Note : Le langage WML, associ au protocole WAP (Wireless Application Protocol), est dvelopp conjointement par plusieurs socits. Le WAP propose un ensemble doutils de communication rseau, destin permettre aux tlphones mobiles et aux PDA de visualiser du texte publi dans des pages Web. La technologie WML est ouverte et libre de droits. Pour plus dinformations sur les spcifications du WML, veuillez consulter le site Web de Phone.com : http://www.phone.com/ La visualisation et la saisie dinformations seffectuent par lintermdiaire de pages WML utilisant le mcanisme des balises 4DVAR ou 4DSCRIPT. Voici la liste des documents WML accepts par le serveur Web 4D Extension .wml .wmls .wmlc .wmlsc .wbmp Type MIME text/vnd.wap.wml text/vnd.wap.wmlscript application/vnd.wap.wmlc application/vnd.wap.wmlscript image/vnd.wap.wbmp Description Pages WML (toujours analyses par 4D*) Scripts WML (ct client) Pages WML binaires Scripts WML binaires Images bitmap destines aux mobiles (parfois non prises en charge)

* Permet linsertion dynamique de donnes via les balises 4DVAR et 4DSCRIPT. XML Le serveur Web 4D accepte les documents .xml, .xsl et .dtd. Ces documents sont respectivement envoys avec le type MIME text/xml, text/xsl et text/xml. Quel que soit le mode (contextuel ou sans contexte) depuis lequel ces documents sont envoys, 4D analyse leur contenu et traite les ventuelles balises de type 4DVAR ou 4DSCRIPT quils contiennent, afin de gnrer du XML dynamique. Note : Il nest pas possible denvoyer du XML depuis lintrieur mme dun formulaire 4D en mode contextuel en utilisant une balise du type {mapage.xml} insre dans un texte statique. Rfrence Associer des objets 4D des objets HTML.

4e Dimension - Langage 1675

Support des CGI

Serveur Web version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le serveur Web 4D permet de tirer parti des CGI (Common Gateway Interface). Les CGI sont aux pages Web ce que les plug-ins sont aux mthodes 4D. Appel par le serveur Web, le CGI excute une tche et retourne une rponse une page Web complte ou du code HTML venant sinsrer dans une page envoye par le serveur. Des CGI sont frquemment utiliss pour afficher les compteurs daccs, grer les livres dor (guestbook), recevoir le rsultat dun formulaire (form to mail), etc. Une multitude de CGI sont aujourdhui disponibles. La plupart dentre eux sont dans le domaine public. Note : Le terme CGI dsigne, lorigine, la norme dfinissant linterfaage des applications externes avec les serveurs HTTP. Par extension, CGI est aujourdhui utilis pour dsigner ces applications externes elles-mmes. 4D peut utiliser des CGI de deux manires : le serveur Web 4D peut excuter des CGI en mode automatique ou en mode manuel le serveur Web 4D peut tre interrog par tout serveur HTTP via des extensions de type CGI et ISAPI (Windows uniquement). Excuter des CGI depuis le serveur Web 4D
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4D prend en charge tous les types de CGI, sous MacOS X et sous Windows. Un CGI se prsente sous la forme dun programme excutable, dun script PERL ou dune DLL sinterfaant avec un serveur Web. - des excutables (.EXE) utilisant la console et les variables denvironnement. Le code source est gnralement multi-plate-forme (Windows et Unix). Leurs noms sont de la forme nnnn.exe ou nph-nnnn.exe. Pour plus dinformations sur ce type de CGI, veuillez consulter le site http://hoohoo.ncsa.uiuc.edu/cgi/. - des scripts PERL utilisant la console et les variables denvironnement. Ces CGI ncessitent la prsence dun interprteur permettant de les excuter. Ils prsentent lavantage dtre entirement multi-plate-forme (Windows, Unix et MacOS). Leurs noms sont de la forme nnnn.pl, nph-nnnn.pl, nnnn.cgi ou encore nph-nnnn.cgi. Pour plus dinformations sur ce type de CGI, veuillez consulter le site http://www.perl.com/. - des DLL ISAPI, cest--dire des extensions pour IIS (Internet Information Server). Leurs noms sont de la forme nnnn.dll ou nph-nnnn.dll. Pour des raisons de performances, les DLL appeles de la sorte ne sont dcharges qu larrt du serveur Web. Pour plus dinformations sur ce type de CGI, veuillez consulter le site http://www.microsoft.com/iis/. Excuter des CGIs en mode automatique Lappel automatique dun CGI seffectue par lintermdiaire dun URL, dune action de formulaire ou dune balise HTML insr(e) dans une page, en fonction de la tche effectue par le CGI. Dans tous les cas, la chane HTML doit contenir /cgi-bin/ suivi du nom du CGI et ventuellement dun chemin daccs (utilisant la syntaxe HTML) ainsi que dune chane dinterrogation. 1676 4e Dimension - Langage

Par exemple, lURL http://195.1.2.3/cgi-bin/search.exe provoquera lexcution du CGI search.exe. De mme, si vous placez la balise <IMG SRC="/special/cgi-bin/counter.exe"> au sein dune page HTML, le CGI counter.exe sera excut lors de lenvoi de la page. Pour pouvoir tre appels, les CGI doivent obligatoirement tre placs la racine dun dossier nomm cgi-bin. Ce dossier doit lui-mme tre situ la racine du serveur Web ou dans un sous-dossier. Il peut y avoir plusieurs dossiers cgi-bin par serveur. Ce dossier peut contenir dautres fichiers que des excutables, mais seuls ces derniers peuvent tre appels depuis un client Web. Exemple d'installation avec un CGI appel Count.exe:

Voici des exemples demplacements et les URL pouvant tre appels : Emplacement des lments (racine du serveur Web) Dossier [mabase] + mabase.4db (structure) Dossier [cgi-bin] + compteur.exe Dossier [Divers] + Dossier [cgi-bin] ++ script.pl URLs correspondants

(http://195.1.2.3/) (http://195.1.2.3/cgi-bin/compteur.exe) (http://195.1.2.3/Divers/cgi-bin/script.pl)

Excuter des CGIs en mode manuel L'appel de CGIs en mode manuel requiert l'utilisation de la commande FIXER EXECUTABLE CGI. Cette commande permet notamment dexcuter un CGI sans que celui-ci soit visible pour lutilisateur Web dans lURL. Pour plus d'informations sur ce point, reportez-vous la description de cette commande.

4e Dimension - Langage 1677

Interaction entre le serveur Web 4D et les CGI Lappel dun CGI ne modifie jamais lenvironnement de 4D (slections, variables...). 4D nimpose aucune limite de taille de la rponse. Cependant, la dure maximum de traitement alloue au CGI est fixe 30 secondes. Au-del de ce dlai, le serveur Web retournera une erreur. Un CGI est toujours excut hors contexte, quel que soit le mode depuis lequel il a t appel. A noter toutefois quen mode contextuel, il est conseill de ne pas utiliser de CGI qui renvoie du code HTML, car il y a dans ce cas risque de dsynchronisation du contexte. Erreurs renvoyes par 4D lors dun appel CGI Lorsque lappel dun CGI gnre une erreur, 4D retourne une des rponses suivantes, sous forme de page HTML standard : Non trouv : le CGI na pu tre localis par 4D, ou bien linterprteur PERL nest pas install Interdit : le client Web demande autre chose qu'un excutable dans un dossier [cgi-bin] Timeout : le CGI na pu traiter la requte en 30 secondes Mauvaise rponse : la rponse du CGI na pu tre traite par 4D ou la DLL ISAPI a caus une exception Erreur interne : mmoire sature, etc. Note : Lorsqu'un CGI ne fonctionne pas, vrifiez que les privilges d'excution du CGI sont suffisants et que les retours la ligne dans le script CGI sont corrects. Informations destination des dveloppeurs de CGI Ce paragraphe est principalement destin aux programmeurs souhaitant dvelopper des CGI pour leur bases 4D. Variables denvironnement 4D dfinit les variables denvironnement en conformit avec les spcifications CGI/1.1, avec les prcisions suivantes : GATEWAY_INTERFACE : toujours CGI/1.1 SERVER_SOFTWARE : toujours de la forme 4D WebStar_D/version SERVER_PROTOCOL : toujours HTTP/1.0 SERVER_PORT_SECURE : contient 1 si la connexion HTTP est scurise, sinon 0. PATH_TRANSLATED : contient le chemin daccs complet de la racine HTML du serveur, auquel est ajout la portion de chemin qui suit le nom du CGI. Par scurit, la portion de chemin ne peut contenir les squences // ou .. Exemple : Racine du serveur C:/web Pour un appel CGI du type /cgi-bin/cgi.exe/path, PATH_TRANSLATED vaut C:/web/path. Pour un appel CGI du type /cgi-bin/cgi.exe/../path, 4D renvoie lerreur Interdit. REMOTE_IDENT : nom dutilisateur, sinon non dfinie HTTP_AUTHORIZATION, HTTP_CONTENT_LENGTH et HTTP_CONTENT_TYPE : non dfinies ALL_HTTP et URL sont dfinies dans le cas dappels de DLL ISAPI. CERT_xxx et HTTPS_xxx sont dfinies si la connexion est scurise (pour les DLL uniquement). Note : La commande FIXER VARIABLE ENVIRONNEMENT permet de dfinir ces variables.

1678 4e Dimension - Langage

En plus des variables denvironnement standard, 4D ajoute des variables texte du type FORMVAR_nomvariable : - si la requte est envoye avec la mthode "POST", ces variables correspondent aux zones de saisie du formulaire (par exemple FORMVAR_NOM, FORMVAR_PRENOM...) lexception des champs binaires (INPUT TYPE="FILE"). Ce systme peut tre utilis avec les formulaires encods www/url-encoded et multipart/form-data. - si la requte est envoye avec la mthode "GET", ces variables correspondent aux valeurs passes par la chane dinterrogation (par exemple, dans le cas de lURL .../cgi.exe?nom=martin&code=75, FORMVAR_NOM vaudra martin et FORMVAR_CODE vaudra 75). Ce fonctionnement prsente lavantage de faciliter le traitement des formulaires (il nest pas ncessaire danalyser les chanes a=1&b=2&...), mais rend le CGI spcifique 4D. Traitement des rponses retournes par les CGI Si le nom du CGI (excutable Windows ou script PERL) dbute par nph- (No Parsing Header), 4D retourne la rponse telle quelle au client Web. Dans ce cas, il revient au CGI de respecter la norme HTTP. En ce qui concerne les DLL ISAPI, 4D nanalyse jamais la rponse, que le prfixe nph- soit prsent ou non. Si ce nest pas le cas, 4D se charge de renvoyer len-tte HTTP : - si Content-Type nest pas spcifi par le CGI, 4D renvoie systmatiquement ContentType: text/html, - si Location est spcifi, 4D ignore les autres lments de la rponse et effectue une redirection HTTP, - si Status nest pas spcifi, 4D renvoie HTTP/1.0 200 OK. 4D accepte tout type de changement de ligne (Windows-CRLF, MacOS-CR, Unix-LF) dans len-tte de la rponse HTTP et se charge de la reformater. Dans le cas des DLL ISAPI, 4D accepte les traitements asynchrones (HttpExtensionProc retourne HSE_STATUS_PENDING). Lappel ServerSupportFunction (HSE_REQ_DONE_WITH_SESSION) doit avoir lieu dans les 30 secondes. Si la fonction TerminateExtension est dfinie, elle est toujours appele avec la valeur HSE_TERM_MUST_UNLOAD. Interroger le serveur Web 4D via des CGI (Windows uniquement)
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension est accompagn de deux extensions, 4DISAPI.DLL et NPH-CGI4D.EXE. Le but de ces extensions est de permettre un serveur HTTP de transmettre des requtes au serveur Web 4D. Avec ces extensions, 4D peut tre interrog par tout autre serveur HTTP. Ce mcanisme autorise par exemple le dveloppement de systmes dans lesquels un serveur Web 4D non scuris peut tre interrog via un autre serveur HTTP, tournant lui en mode scuris. Note : Ces deux extensions sont disponibles sous Windows uniquement.

4e Dimension - Langage 1679

Lextension 4DISAPI.DLL respecte les spcifications dfinies par ISAPI (Internet Services Application Programming Interface). La technologie ISAPI a t dveloppe lorigine par Microsoft pour le serveur IIS, mais a t depuis rendue compatible avec de nombreux serveurs HTTP tels que Netscape, Apache ou Sambar. Lextension NPH-CGI4D.EXE respecte les spcifications des CGI (Common Gateway Interface) et peut tre utilise avec lensemble des serveurs compatibles CGI. Le fonctionnement de ces deux extensions est identique. La compatibilit CGI est plus largement rpandue parmi les serveurs HTTP, toutefois les performances des extensions CGI sont gnralement infrieures celles des extensions ISAPI. Principe de fonctionnement Le principe de fonctionnement de ces extensions est le suivant : un serveur HTTP A publie des pages sur Internet, et un autre serveur HTTP, B, est par exemple un 4D Server utilis en Intranet. Afin que les deux serveurs puissent communiquer, il vous suffit dajouter une extension 4DISAPI ou NPH-4DCGI dans le rpertoire [Scripts] du serveur A. Lorsquun navigateur Web envoie une requte au serveur A, celui-ci la retransmet au serveur B via lextension 4D ISAPI ou NPH-4DCGI, par lintermdiaire de lURL. La rponse est ensuite achemine au navigateur en sens inverse. Le corps de la requte ou de la rponse HTTP nest jamais modifi par les extensions. La requte initiale envoye au serveur A peut tre effectue en clair ou en mode scuris (SSL). La communication entre les deux serveurs HTTP et lextension 4DISAPI.DLL seffectue en clair. Note : Les extensions 4DISAPI et NPH-4DCGI ne sont pas compatibles avec le mode contextuel du serveur Web 4D. Le schma suivant illustre ce principe :

Les extensions reconnaissent les mthodes GET, HEAD et POST, elles grent les diffrents statuts renvoys par 4D (200 OK, 302 Moved Temporarely, 404 Not Found...). 1680 4e Dimension - Langage

Il nest pas possible de procder une authentification au niveau HTTP via lextension 4DISAPI ou NPH-CGI4D. Pour cela, il est ncessaire dutiliser un formulaire HTML (ce qui est parfaitement envisageable en connexion scurise). Note : Les extensions sont avant tout destines tre utilises pour recevoir et renvoyer des donnes dynamiques, et en particulier pour poster des donnes. Le simple service de pages Web noffre pas des performances optimales en cas de transit via des extensions ISAPI ou CGI. Installation et configuration Linstallation des extensions 4DISAPI et NPH-CGI4D seffectue par simple copie des fichiers 4DISAPI.DLL ou NPH-CGI4D.EXE dans le dossier [Scripts] du serveur HTTP. Chaque extension installe doit tre accompagne dun fichier de configuration (de type *.INI). Le fichier .INI doit porter le mme nom que lextension (par exemple 4DISAPI.INI). Lextension et son fichier de configuration doivent tre placs dans le mme dossier. Vous pouvez configurer un serveur HTTP de manire ce quil puisse cibler plusieurs autres serveurs HTTP. Dans ce cas, placez dans le dossier [Scripts] du serveur HTTP autant dextensions que de serveurs-cibles. Il vous suffit de les renommer (par exemple 4DISAPI2.DLL, 4DISAPI3.DLL, etc.). Veillez insrer un fichier de configuration par extension, et le renommer en consquence (4DISAPI2.INI, 4DISAPI3.INI, etc.). Le fichier .INI est constitu dune seule section : [Forward]. Cette section accepte les commandes suivantes : TargetServer = Nom ou adresse IP du serveur Web cibler (par exemple monserveur.net ou 192.193.194.195). Laisser la chane vide pour reprer le serveur par son adresse si la rsolution par nom nest pas disponible Le nom localhost est reconnu comme tant ladresse 127.0.0.1. Par dfaut, ladresse 127.0.0.1 est utilise. TargetPort = Port sur lequel le serveur-cible coute (par exemple 81). Par dfaut, le port 8080 est utilis. Timeout = Dlai maximum dattente de la rponse du serveur (exprim en secondes). La valeur par dfaut est de 30 secondes. Allowed = Liste des URL autoriss, spars par des virgules. Par exemple : /pages, /img pour nautoriser que les URL commenant par /pages et /img. Pour autoriser la totalit du site, inscrivez une barre oblique seule / (paramtrage par dfaut). Forbidden = Liste des URL interdits, spars par des virgules. Par exemple : /4dmethod, /pages2 pour interdire les URL commenant par /4dmethod et /pages2. Pour ne rien interdire, ne saisissez rien dans la liste (paramtrage par dfaut).

4e Dimension - Langage 1681

Compte tenu des exemples dautorisations et dexclusions fournis ci-dessus, les URL suivants du serveur-cible seront accessibles ou non : /pages/document.html accessible /pages1/onepage.html accessible /www/image.gif inaccessible /pages2/mypage.html inaccessible /4dmethod/myproc inaccessible Si un URL dclar interdit est sollicit, lextension retourne directement lerreur HTTP/1.0 403 Forbidden. Utilisation Les extensions 4DISAPI et NPH-CGI4D acceptent les URLs suivants : Appel de 4D (4D ne reoit que la portion de chemin qui suit le nom de lextension) : http://adresse-serveur/cgi-bin/4disapi.dll/[chemin d'accs] http://adresse-serveur/cgi-bin/nph-cgi4d.exe/[chemin d'accs] Test de fonctionnement de lextension (cho de la requte) : http://adresse-serveur/cgi-bin/4disapi.dll/~~echo http://adresse-serveur/cgi-bin/nph-cgi4d.exe/~~echo Informations sur lextension (support technique) : http://adresse-serveur/cgi-bin/4disapi.dll/~~info http://adresse-serveur/cgi-bin/nph-cgi4d.exe/~~info Les informations suivantes sont retournes : - nom et version de lextension, par exemple "Script name: 4disapi.dll (6.7.0b1.2)" - nom et version du serveur appelant lextension, par exemple "Server software: 4D_WebStar_D/6.7" - version du protocole HTTP, par exemple "Server protocol: HTTP/1.0" - version du protocole CGI, par exemple "Gateway interface: CGI/1.1" Test du serveur cible (est-il joignable ?) : http://adresse-serveur/cgi-bin/4disapi.dll/~~target http://adresse-serveur/cgi-bin/nph-cgi4d.exe/~~target La rponse est soit : "Good: target server reached." : le serveur cible a rpondu (quel que soit le contenu de la rponse). soit "Bad: target server not reached." : le serveur est injoignable ou na pas rpondu. Dans ce cas, la raison de lchec peut tre : - pas de fichier de configuration ; - ladresse ou le port cible est incorrect ; - le serveur cible nest pas en service ; - le serveur a trait la requte mais est incapable de rpondre. Note sur 4D WebSTAR : 4D WebSTAR est un des serveurs Web les plus rpandus sur la plate-forme MacOS. Diverses possibilits d'interactions directes sont possibles entre 4D WebSTAR et 4e Dimension l'aide des plug-ins 4D Connect et 4D Link pour 4D WebSTAR. Pour plus d'informations, veuillez consulter la documentation de 4D WebSTAR. Rfrence FIXER EXECUTABLE CGI, FIXER VARIABLE ENVIRONNEMENT.

1682 4e Dimension - Langage

LANCER SERVEUR WEB

Serveur Web version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LANCER SERVEUR WEB Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande LANCER SERVEUR WEB dmarre le serveur Web de l'application 4e Dimension sur laquelle elle a t excute (4e Dimension, 4D Server ou 4D Client). La base est alors publie sur votre rseau Intranet ou sur Internet. Si le serveur Web a t correctement lanc, la variable systme OK prend la valeur 1, sinon si par exemple le protocole rseau TCP/IP n'est pas correctement configur OK prend la valeur 0 (zro). Rfrence ARRETER SERVEUR WEB. Ensembles et variables systme Si le serveur Web est correctement dmarr, OK prend la valeur 1, sinon OK prend la valeur 0 (zro).

4e Dimension - Langage 1683

ARRETER SERVEUR WEB

Serveur Web version 2003 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ARRETER SERVEUR WEB Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande ARRETER SERVEUR WEB stoppe le serveur Web de l'application 4e Dimension sur laquelle elle a t excute (4e Dimension, 4D Server ou 4D Client). Si le serveur Web tait lanc, toutes les connexions Web sont interrompues et tous les process Web sont arrts. Si le serveur Web n'tait pas lanc, la commande ne fait rien. Rfrence LANCER SERVEUR WEB.

1684 4e Dimension - Langage

FIXER TEMPORISATION WEB

Serveur Web version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER TEMPORISATION WEB (timeout) Paramtre timeout Type Numrique Description Dlai de fermeture de la connexion Web exprim en secondes

Description La commande FIXER TEMPORISATION WEB dfinit le timeout (dlai d'attente maximum avant la dconnexion automatique du client Web) pour les process de connexion Web en mode contextuel. La valeur du timeout par dfaut est de 5 minutes. Vous pouvez augmenter ou rduire cette valeur en passant dans le paramtre timeout une nouvelle valeur, exprime en secondes. La commande prend effet immdiatement et a pour porte la session de travail. Si la commande FIXER TEMPORISATION WEB est appele depuis un process Web, la valeur de timeout ne sapplique qu ce process. Si la commande est appele en-dehors dun process Web, la valeur de timeout sapplique tous les process Web crs par la suite. Rfrence Paramtrages du serveur Web, Utiliser le mode contextuel.

4e Dimension - Langage 1685

FIXER RACINE HTML

Serveur Web version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER RACINE HTML (chemAccsHTML) Paramtre chemAccsHTML Type Alpha Description Chemin d'accs HTML au rpertoire par dfaut des fichiers HTML

Description La commande FIXER RACINE HTML permet de modifier le dossier par dfaut dans lequel 4D ira rechercher les fichiers HTML passs comme paramtres ENVOYER FICHIER HTML. Important : La commande FIXER RACINE HTML ne fonctionne qu'en mode contextuel. Si vous souhaitez dfinir un rpertoire racine spcifique en mode sans contexte, vous devez utiliser l'option "Dossier racine HTML par dfaut" des Prferences de la base. Gnralement, il est plus judicieux, pour des raisons de performances, de dfinir le rpertoire racine HTML dans la bote de dialogue des Prferences, quel que soit le mode d'excution du serveur Web. Le chemin d'accs au nouveau rpertoire doit tre exprim en syntaxe HTML, c'est--dire que les noms de rpertoires ou de dossiers doivent tre spars par une barre oblique ("/"), quelle que soit la plate-forme que vous utilisez. Pour plus d'informations sur les chemins d'accs et la syntaxe HTML, nous vous conseillons de vous reporter la partie Programmation de tout manuel sur le langage HTML disponible en librairie. Si vous passez un chemin d'accs invalide, une erreur lie la gestion de fichiers du systme d'exploitation est gnre. Vous pouvez intercepter l'erreur l'aide d'une mthode installe par la commande APPELER SUR ERREUR. Si la mthode affiche une bote de dialogue d'alerte ou de message, celle-ci apparat sur l'cran du navigateur. Note : La commande FIXER RACINE HTML tient compte du dossier racine HTML par dfaut dfini dans les Prfrences de la base. Pour plus d'informations sur ce dossier, reportez-vous la section Scurit des connexions. Rfrence APPELER SUR ERREUR.

1686 4e Dimension - Langage

FIXER LIMITES AFFICHAGE WEB

Serveur Web version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER LIMITES AFFICHAGE WEB (nombreEnr{; nombrePages{; imageRf}}) Paramtre nombreEnr nombrePages imageRf Type Numrique Numrique Numrique Description Nombre maximum d'enregistrements afficher dans chaque page HTML Nombre maximum de rfrences de pages en bas de chaque page HTML Numro de rfrence d'image pour l'icne du bouton d'affichage pleine page d'un enregistrement

Description La commande FIXER LIMITES AFFICHAGE WEB modifie la manire dont 4e Dimension affiche une slection d'enregistrements dans un navigateur Web lorsque vous utilisez les commandes VISUALISER SELECTION ou MODIFIER SELECTION. Cette commande fonctionne en mode contextuel uniquement. Lorsque vous affichez une slection d'enregistrements avec 4e Dimension, le programme ne charge pas tous les enregistrements de la slection, mais uniquement ceux qui sont visibles dans la fentre. Ainsi, mme si des milliers d'enregistrements sont slectionns, leur affichage reste rapide : seuls les enregistrements visibles simultanment sont chargs du disque. Ensuite, si vous faites dfiler la liste d'enregistrements ou redimensionnez la fentre, 4D charge en consquence les enregistrements. Avec le Web, 4D dcoupe en pages la slection d'enregistrements afficher. En fait, sans systme de pagination, l'affichage d'une slection de milliers d'enregistrements signifierait la circulation de milliers d'enregistrements sur votre rseau Intranet ou sur Internet et leur affichage dans une seule page Web. Non seulement cela prendrait un certain temps pour tlcharger tous les enregistrements mais, de plus, votre navigateur Web serait rapidement court de mmoire. Par dfaut, 4e Dimension affiche les 20 premiers enregistrements (s'ils existent) de la slection et insre la fin de chaque page HTML 20 liens vers les 20 premires pages (si elles existent) de la slection. Cela signifie que par dfaut, vous pouvez accder aux 400 premiers enregistrements (s'ils existent) de la slection en cliquant sur le lien de page plac la fin de chaque page de la slection. Notez que ce systme de pagination ne ncessite aucune ligne de code, il se met automatiquement en place lors de l'excution des commandes VISUALISER SELECTION ou MODIFIER SELECTION.

4e Dimension - Langage 1687

FIXER LIMITES AFFICHAGE WEB vous permet de modifier ces paramtrages. Dans nombreEnr, vous indiquez le nombre maximum d'enregistrements qui doivent tre affichs par page de la slection. Dans nombrePages, vous indiquez le nombre maximum de liens vers d'autres pages de la slection qui doivent tre affichs en bas de chaque page de la slection. Si, par exemple, vous disposez d'une slection de 10 000 enregistrements et voulez pouvoir naviguer parmi la totalit de ces enregistrements dans une seule slection, vous pouvez passer 100 dans les paramtres nombreEnr et nombrePages. Rappelez-vous toutefois que les donnes vont circuler sur le rseau ou sur Internet ; en particulier dans le cas d'Internet, la rapidit est un facteur surveiller en cas de modification des paramtres d'affichage de la slection. Enfin, FIXER LIMITES AFFICHAGE WEB vous permet de remplacer l'icne par dfaut du bouton d'affichage d'un enregistrement en pleine page. Pour cela, passez dans le paramtre imageRf le numro de rfrence de l'image, stocke dans la librairie d'images de la base, que vous souhaitez utiliser comme nouvelle icne. FIXER LIMITES AFFICHAGE WEB n'affecte que les appels ultrieurs aux commandes VISUALISER SELECTION et MODIFIER SELECTION et sa porte est locale au process courant. Exemple Dans l'exemple suivant, un VISUALISER SELECTION ou un MODIFIER SELECTION est excut pour la table [Codes amricains]. Au niveau du navigateur Web, 4D affiche par dfaut les enregistrements de la manire suivante :

Notez que vous pouvez naviguer parmi les 400 premiers enregistrements.

1688 4e Dimension - Langage

Si l'image suivante est place dans la bibliothque d'images de la base :

Si, galement, la mthode projet qui affiche la slection excute l'instruction suivante avant d'appeler VISUALISER SELECTION ou MODIFIER SELECTION :

FIXER LIMITES AFFICHAGE WEB (50;100;15586)

Alors, au niveau du navigateur Web, la slection des enregistrements apparatra ainsi :

Vous pouvez donc naviguer parmi les 5 000 premiers enregistrements de la slection. Rfrence MODIFIER SELECTION, Utiliser le mode contextuel, VISUALISER SELECTION.

4e Dimension - Langage 1689

FIXER PAGE ACCUEIL

Serveur Web version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER PAGE ACCUEIL (homePage) Paramtre homePage Type Alpha Description Nom de page ou chemin daccs HTML la page ou "" pour ne pas envoyer de page daccueil personnalise

Description La commande FIXER PAGE ACCUEIL vous permet de modifier la page daccueil (page Home) personnalise pour le process Web courant. La page dfinie est lie au process Web, vous pouvez donc dfinir des pages daccueil diffrentes en fonction, par exemple, de lutilisateur connect. Cette page peut tre statique ou semi-dynamique. Vous passez dans le paramtre homePage le nom de la page HTML daccueil ou le chemin daccs HTML complet la page. Pour ne plus envoyer homePage comme page daccueil pour le process Web courant, appelez de nouveau la commande FIXER PAGE ACCUEIL en passant une chane vide ("") dans homePage. Note : Vous pouvez galement dfinir une page daccueil par dfaut dans les Prfrences de l'application. Dans ce cas, la page sapplique par dfaut toutes les connexions Web, quel que soit le mode de dmarrage (contextuel ou sans contexte) du serveur Web. Rfrence Paramtrages du serveur Web.

1690 4e Dimension - Langage

ENVOYER FICHIER HTML

Serveur Web version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENVOYER FICHIER HTML (fichierHTML) Paramtre fichierHTML Type Alpha Description Chemin d'accs HTML au fichier HTML ou Chane vide pour terminer ENVOYER FICHIER HTML en mode contextuel

-->

Description La commande ENVOYER FICHIER HTML envoie au navigateur Web la page Web stocke dans le document HTML dont vous passez le chemin d'accs dans fichierHTML. Par dfaut, 4e Dimension recherche le document HTML l'intrieur du dossier racine HTML, dfini dans les Prfrences de l'application. Cette commande accepte en paramtre un chemin daccs exprim en syntaxe HTML uniquement : les noms de rpertoires ou de dossiers doivent tre spars par une barre oblique ("/"), quelle que soit la plate-forme que vous utilisez. Si vous passez un chemin d'accs HTML invalide, une erreur lie la gestion de fichiers de votre systme d'exploitation est gnre. Vous pouvez intercepter l'erreur l'aide d'une mthode installe par la commande APPELER SUR ERREUR. Si la mthode affiche une bote de dialogue d'alerte ou de message, celle-ci apparat sur le poste du navigateur. La syntaxe ENVOYER FICHIER HTML("") (vous passez une chane vide dans le paramtre fichierHTML) permet, en mode contextuel, d'achever l'appel la commande ENVOYER FICHIER HTML ayant dmarr le mode HTML.

4e Dimension - Langage 1691

Ce principe est illustr dans le schma suivant :

(1) En mode contextuel, une mthode 4D (projet, objet ou base) excute un ENVOYER FICHIER HTML, envoyant un document HTML au navigateur. (2) La page Web initiale envoye au navigateur peut comporter des liens HTML vers d'autres pages Web ou peut rfrencer elle-mme des mthodes 4D appelant ENVOYER FICHIER HTML pour envoyer d'autres pages Web. Ces autres pages peuvent galement comporter des liens ou rfrencer des mthodes 4D pour permettre d'accder d'autres pages, etc. Pendant que vous naviguez parmi les pages Web, vous pouvez galement utiliser les outils de navigation du navigateur, comme le bouton Prcdent. (3) N'importe laquelle des pages Web peut contenir une rfrence une mthode 4D qui excute l'instruction ENVOYER FICHIER HTML(""). Cette instruction termine l'appel ENVOYER FICHIER HTML qui a lanc le processus et permet de retourner l'excution de la mthode 4D ayant initialement dmarr la navigation Web libre. Une fois que l'instruction ENVOYER FICHIER HTML a t excute, la variable systme OK est mise jour : si le fichier envoyer existe et si le timeout nest pas dpass, la variable OK prend la valeur 1. Dans le cas contraire, elle prend la valeur 0. Note : Si vous appelez ENVOYER FICHIER HTML depuis un process qui n'est pas un process Web, la commande ne fait rien. Aucune erreur n'est retourne, l'appel est simplement ignor. Les ventuelles rfrences aux variables 4D et aux balises de type 4DSCRIPT dans la page sont toujours analyses, quel que soit le mode.

1692 4e Dimension - Langage

Exemples (1) Le dossier racine HTML de la base est le dossier WebDocs. Il contient les lments suivants : ..\WebDocs\HTM\MaPage.HTM L'envoi de la page Web "MaPage.HTM" doit tre effectu de cette manire :

ENVOYER FICHIER HTML ("HTM/MaPage.HTM")

(2) Exemple en mode contextuel : pendant une session Web 4D, vous ajoutez des enregistrements l'aide d'un formulaire 4D. Dans ce formulaire se trouve un bouton bAide dont la mthode objet est la suivante :

` Mthode objet du bouton bAide ENVOYER FICHIER HTML ("Aide.HTM")

A partir du document Aide.HTM, vous pouvez librement naviguer parmi diffrentes pages HTML qui implmentent un systme d'aide en ligne pour votre site Web. Dans chaque page, vous placez un bouton "submit" dont le titre est Fin, permettant de retourner la saisie de donnes. Pour cela, chaque document HTML doit comporter cette dfinition pour le bouton "submit" : <!bTermin bouton submit> <P><INPUT TYPE="submit" NAME="bFin" VALUE="Done"></P> ainsi que cette dfinition de l'action FORM POST : <! Execution de la mthode 4D htm_Aide_Fin si clic sur un bouton submit> <FORM action="/4DMETHOD/htm_Aide_Fin" method="POST"> Du ct de 4D, la mthode projet htm_Aide_Fin termine l'appel ENVOYER FICHIER HTML, initi par le bouton bAide :

` Mthode projet htm_Aide_Fin ENVOYER FICHIER HTML ("")

L'appel ENVOYER FICHIER HTML est la dernire ligne de la mthode objet du bouton bAide ; la mthode s'achve alors et vous retournez la saisie de donnes. Variables et ensembles systme Si le fichier envoyer existe et si le timeout nest pas dpass, la variable OK prend la valeur 1. Dans le cas contraire, elle prend la valeur 0. Rfrence Associer des objets 4D des objets HTML, ENVOYER BLOB HTML, Premiers pas.

4e Dimension - Langage 1693

ENVOYER BLOB HTML

Serveur Web version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENVOYER BLOB HTML (blob; type{; sansContexte}) Paramtre blob type sansContexte Type BLOB Alpha Boolen Description BLOB envoyer au browser Type de donnes du BLOB Vrai = Passer en mode sans contexte, Faux ou omis = Conserver mode courant

Description La commande ENVOYER BLOB HTML permet denvoyer le BLOB blob au navigateur. Le type de donnes contenues dans le BLOB est indiqu par le paramtre type. Ce paramtre peut contenir les valeurs suivantes : type = Chane vide ("") : dans ce cas, vous ne fournissez aucune information sur le BLOB. Le navigateur tentera alors dinterprter lui-mme le contenu du BLOB. type = Extension de fichier (ex. : .HTM, .GIF, .JPEG, etc.) : dans ce cas, vous fournissez au navigateur, par lintermdiaire de son extension, le type MIME des donnes contenues dans le BLOB. Le BLOB sera interprt en fonction de cette extension. Toutefois, lextension doit tre standard afin que le navigateur puisse linterprter correctement. Une liste des types MIME les plus courants et de leurs extensions est fournie ci-dessous. type = Mime/Type (ex. : text/html, image/tiff, etc.) : dans ce cas, vous fournissez directement au navigateur le type MIME des donnes contenues dans le BLOB. Cette solution est celle qui vous offre le plus de latitude. En effet, outre les types standard, vous pouvez passer un type MIME personnalis pour envoyer des documents propritaires en Intranet. Il vous suffit pour cela de configurer les navigateurs afin quils reconnaissent le type envoy et, par exemple, excutent lapplication correspondante. La valeur passer dans le paramtre type est, dans ce cas application/x-[NomDuType]). Dans les navigateurs des postes clients, vous rfrencez ce type et lui associez laction Excuter lapplication. La commande ENVOYER BLOB HTML vous permet alors denvoyer des documents de tout type, les clients Intranet ouvrant automatiquement lapplication associe. Note : Si le BLOB est de type text/html ( .htm, .html, .shtm, .shtml), il est traduit et analys comme un fichier HTML. Dans ce cas, lorsqu'elle est utilise en mode contextuel, ENVOYER BLOB HTML fonctionne exactement comme ENVOYER FICHIER HTML. En particulier, une rfrence une mthode 4D qui excute l'instruction ENVOYER BLOB HTML("") doit tre prsente dans les pages reues par le navigateur, afin de terminer l'appel ENVOYER BLOB HTML et de retourner l'excution de la mthode 4D d'appel. Pour plus d'informations sur ce mcanisme, reportez-vous la description de la commande ENVOYER FICHIER HTML.

1694 4e Dimension - Langage

Voici une liste des types MIME les plus courants : Extension .htm .html .shtml .shtm .css .pdf .rtf .ps .eps .hqx .js .txt .text .gif .jpg .jpeg .jpe .jfif .pic .pict .tif .tiff .mpeg .mpg .mov .moov .aif .aiff .wav .ram .sit .bin .z .zip .gz .tar Mime/Type text/html text/html text/html text/html text/css application/pdf application/rtf application/postscript application/postscript application/mac-binhex40 application/javascript text/plain text/plain image/gif image/jpeg image/jpeg image/jpeg image/jpeg image/pict image/pict image/tiff image/tiff video/mpeg video/mpeg video/quicktime video/quicktime audio/aiff audio/aiff audio/wav audio/x-pn-realaudio application/x-stuffit application/x-stuffit application/x-zip application/x-zip application/x-gzip application/x-tar

Note : Pour plus d'informations sur ce point, veuillez consulter la section Protocol Numbers and Assignment Services sur le site http://www.iana.org. Le paramtre sansContexte vous permet dindiquer au serveur Web 4D que vous souhaitez passer du mode contextuel au mode sans contexte. Dans ce cas, passez Vrai dans le paramtre sansContexte. Si ce paramtre est omis ou sil contient Faux, lenvoi du BLOB est effectu dans le mode courant.

4e Dimension - Langage 1695

Les ventuelles rfrences aux variables 4D et balises de type 4DSCRIPT dans la page sont toujours analyses, quel que soit le mode. Exemple Reportez-vous lexemple de la routine IMAGE VERS GIF. Rfrence ENVOYER FICHIER HTML.

1696 4e Dimension - Langage

ENVOYER TEXTE HTML

Serveur Web version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENVOYER TEXTE HTML (texteHTML{; sansContexte}) Paramtre texteHTML sansContexte Type Texte Boolen Description Champ ou variable texte au format HTML envoyer au navigateur Vrai = Passage en mode sans contexte Faux ou omis = Conserver mode courant

Description La commande ENVOYER TEXTE HTML permet denvoyer directement des donnes texte formates en HTML. Le paramtre texteHTML contient les donnes envoyer. 4D neffectue aucun contrle sur le contenu de ce paramtre, vous devez donc veiller ce que le codage HTML soit correct. Le texte doit tre encod en ISO Latin-1. Note : Cette commande quivaut strictement lenvoi dun BLOB ayant le type text/html laide de la commande ENVOYER BLOB HTML. Le paramtre sansContexte vous permet dindiquer au serveur Web 4D que vous souhaitez passer du mode contextuel au mode sans contexte. Dans ce cas, passez Vrai dans sansContexte. Pour conserver le mode courant, passez Faux dans sansContexte ou omettez ce paramtre. Les ventuelles rfrences aux variables 4D et balises de type 4DSCRIPT dans le texte sont toujours analyses, quel que soit le mode. Exemple La mthode suivante : TEXTE VERS BLOB("<html><head></head><body>"+Chaine(Heure courante)+ "</body></html>";$blob;Texte sans longueur) ENVOYER BLOB HTML ($blob;"text/html") ... peut tre remplace par :

ENVOYER TEXTE HTML ("<html><head></head><body>"+Chaine(Heure courante)+ "</body></html>")

Rfrence ENVOYER BLOB HTML, Mac vers ISO, Utiliser le mode contextuel.

4e Dimension - Langage 1697

TRAITER BALISES HTML

Serveur Web version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TRAITER BALISES HTML (donnesEntre; donnesSortie) Paramtre donnesEntre donnesSortie Type Texte | BLOB Texte | BLOB Description Donnes contenant des balises HTML traiter Donnes traites

Description La commande TRAITER BALISES HTML provoque le traitement par 4e Dimension des balises HTML 4D contenues dans le paramtre donnesEntre (champ ou variable de type Texte ou BLOB) et retourne les donnes rsultantes dans donnesSortie. Cette commande permet deffectuer un traitement sur du code HTML balis sans quil soit ncessaire que le serveur Web envoie une page HTML via une commande du type ENVOYER BLOB HTML ou quune page suffixe .shtml soit demande via un URL. Il nest mme pas ncessaire que le serveur Web de 4e Dimension soit dmarr. Passez les donnes contenant les balises traiter dans le paramtre donnesEntre. Ce paramtre peut tre un champ ou une variable de type Texte ou BLOB. A noter quen gnral, le type BLOB est prfrable car il nest pas limit en nombre de caractres (le type Texte est en revanche limit 32000 caractres). Toutes les balises HTML de 4D sont prises en charge (4DVAR, 4DSCRIPT, 4DLOOP, etc.), quel que soit le mode de fonctionnement du serveur Web (contextuel ou sans contexte) et mme sil nest pas lanc. Note : En cas dutilisation de la balise 4DINCLUDE hors du cadre du serveur Web (process Web) : avec 4e Dimension et 4D Server, le dossier par dfaut est le dossier contenant le fichier de structure de la base, avec 4D Client, le dossier par dfaut est le dossier contenant lapplication 4D Client. Aprs lexcution de la commande, le paramtre donnesSortie reoit les donnes du paramtre donnesEntre ainsi que le rsultat du traitement des balises HTML 4D quil contenait, le cas chant. Si donnesEntre ne contenait pas de balises HTML 4D, le contenu de donnesSortie est identique celui de donnesEntre. Le paramtre donnesSortie peut tre un champ ou une variable, il doit simplement tre du mme type que le paramtre donnesEntre.

1698 4e Dimension - Langage

Cette commande rend possible le stockage dans la base de valeurs issues dun traitement de balises HTML avant quelles ne soient envoyes. Elle permet galement danalyser des balises HTML 4D en-dehors de lutilisation du serveur Web. En particulier, vous pouvez lemployer pour envoyer via 4D Internet Commands des courriels au format HTML contenant des traitements et/ou des rfrences des donnes contenues dans la base. Exemple Cet exemple illustre le fonctionnement de la commande : C_BLOB($in) C_BLOB($out) C_TEXTE($in_text) C_TEXTE(Var) C_TEXTE(VarHTML) Var:="<B>" $in_text:="<p><!--#4DVAR Var</p>" TEXTE VERS BLOB($in_text;$in;Texte sans longueur ) TRAITER BALISES HTML($in;$out) VarHTML:=BLOB vers texte($out;Texte sans longueur ) ` VarHTML contient <p>&lt;B&gt;</p>

Rfrence Balises HTML 4D.

4e Dimension - Langage 1699

LIRE VARIABLES FORMULAIRE WEB

Serveur Web version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE VARIABLES FORMULAIRE WEB (tabNoms; tabValeurs) Paramtre tabNoms tabValeurs Type Tableau Texte Tableau Texte Description Noms des variables du formulaire Web Valeurs des variables du formulaire Web

Description La commande LIRE VARIABLES FORMULAIRE WEB remplit les tableaux texte tabNoms et tabValeurs avec, respectivement, les noms et les valeurs des variables contenues dans un formulaire Web soumis (cest--dire envoy) au serveur Web. Cette commande rcupre la valeur de toutes les variables pouvant tre incluses dans des pages HTML : zones de saisie, boutons, cases cocher, boutons radio, pop up menus, listes doptions... Note : Dans le cas des cases cocher, le nom de la variable et sa valeur (ON) ne sont retourns que si la case est effectivement coche. La commande fonctionne en mode sans contexte ou en mode contextuel, quel que soit le type dURL ou de formulaire (mthode POST ou GET) envoy au serveur Web. Cette commande peut tre appele, selon les besoins, dans la Mthode base Sur connexion Web ou toute autre mthode 4D qui rsulte de la soumission dun formulaire. Prcisions sur les formulaires Web et les actions associes Un formulaire est compos de zones de saisie (zones de texte, boutons, cases cocher), chacune ayant un nom. Lorsquun formulaire est soumisau serveur Web (une requte est envoye au serveur), la requte comporte, entre autres, la liste des zones de saisie et leurs valeurs respectives. Il y a deux mthodes pour soumettre un formulaire (4D accepte indiffremment lune ou lautre) : POST, gnralement utilise pour linsertion de donnes dans le serveur Web vers une base de donnes, GET, gnralement utilise pour linterrogation du serveur Web donnes en provenance dune base de donnes. Exemple Un formulaire contient deux champs, vNOM et vVILLE, qui reoivent les valeurs MARTIN et PARIS. Laction associe au formulaire est /4DACTION/WEBFORM. Si la mthode du formulaire est POST (cas le plus souvent utilis), les donnes saisies ne seront pas visibles dans lURL (cest--dire http://127.0.0.1/4DACTION/WEBFORM). Si la mthode du formulaire est GET, les donnes seront visibles dans lURL (cest--dire http://127.0.0.1/4DACTION/WEBFORM?vNOM=MARTIN&vVILLE=PARIS).

1700 4e Dimension - Langage

La mthode WEBFORM peut tre de la forme suivante : TABLEAU TEXTE($tnoms;0) TABLEAU TEXTE($tvaleurs;0) LIRE VARIABLES FORMULAIRE WEB($tnoms;$tvaleurs) On obtient alors : $tnoms{1} = "vNOM" $tnoms{2} = "vVILLE" $tvaleurs{1} = "MARTIN" $tvaleurs{2} = "PARIS" Rfrence Associer des objets 4D des objets HTML, URLs et actions de formulaires.

4e Dimension - Langage 1701

Contexte Web

Serveur Web version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Contexte Web Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Vrai = Mode contextuel Faux = Mode sans contexte

Description La commande Contexte Web doit tre appele depuis un process Web. Elle retourne un boolen indiquant si la connexion Web seffectue (Vrai) ou non (Faux) en mode contextuel. Note : La commande Contexte Web retourne toujours Faux lorsqu'elle est : appele depuis un process autre quun process Web, excute sur un 4D Client. Lutilisation de cette fonction est prconise dans la Mthode base Sur connexion Web. Exemple Voici la structure typique de la Mthode base Sur connexion Web :

Si (Contexte Web) AvecContexte ($1;$2;$3;$4;$5;$6) Sinon SansContexte ($1;$2;$3;$4;$5;$6) Fin de si

Rfrence INFORMATIONS PROCESS, Mthode base Sur connexion Web, Utiliser le mode contextuel.

1702 4e Dimension - Langage

FIXER ENTETE HTTP

Serveur Web version 6.8 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER ENTETE HTTP (entte|tabChamps{; tabValeurs}) Paramtre entte|tabChamps tabValeurs Type Texte|Tab Texte Tab Texte Description Champ ou variable contenant l'en-tte HTTP de la requte ou Tableau des champs de l'en-tte HTTP Contenu des champs de len-tte HTTP

Description La commande FIXER ENTETE HTTP permet de fixer les champs de len-tte HTTP de la rponse faite au navigateur Web par 4D. Elle na deffet que dans un process Web en mode sans contexte. Cette commande vous permet, en particulier, de grer des cookies. FIXER ENTETE HTTP admet deux syntaxes : Premire syntaxe : FIXER ENTETE HTTP (entte) Vous passez dans le paramtre entte, de type variable ou champ texte, les champs de lentte HTTP que vous souhaitez fixer. Les champs doivent tre spars entre eux par un retour chariot ou une squence cr/lf (retour chariot/retour la ligne), sous Windows et MacOS, 4D se charge du formatage de la rponse. Voici un exemple de cookie personnalis : C_TEXTE($vTcookie) $vTcookie:="SET-COOKIE: USER="+Chaine(Abs(Hasard))+"; PATH=/" FIXER ENTETE HTTP($vTcookie)

Note : Il n'est pas possible de passer une constante texte littrale directement dans le paramtre entte. Vous devez utiliser une variable ou un champ intermdiaire. Pour plus dinformations sur la syntaxe appliquer dans les en-ttes HTTP, veuillez consulter sur Internet les R.F.C (Request For Comments) ladresse http://www.w3c.org. Deuxime syntaxe : FIXER ENTETE HTTP (tabChamps; tabValeurs) Len-tte HTTP est dfini laide de deux tableaux texte, tabChamps et tabValeurs. Len-tte sera crit de la manire suivante : tabChamps{1}:="X-VERSION" tabChamps{2}:="X-STATUS" tabChamps{3}:="Set-Cookie"

4e Dimension - Langage 1703

tabValeurs{1}:="HTTP/1.0" * tabValeurs{2}:="200 OK" * tabValeurs{3}:="C=HELLO" * Ces deux premiers lments constituent la premire ligne de la rponse. Lorsquils sont saisis, ils doivent imprativement tre les lments 1 et 2 des tableaux. Il est toutefois possible de les omettre et dcrire seulement 4D se chargeant de formater len-tte : tabChamps{1}:="Set-Cookie" tabValeurs{1}:="C=HELLO" Si vous ne spcifiez pas de statut, celui-ci est automatiquement HTTP/1.0 200 OK. Conformment la norme HTTP, les noms des champs HTTP sont toujours libells en anglais. Note : Si plusieurs appels FIXER ENTETE HTTP ont lieu dans le mme process Web, seul le dernier appel est pris en compte. Les champs Content-Length, Server et Date sont toujours fixs par 4D. Rfrence LIRE ENTETE HTTP.

1704 4e Dimension - Langage

LIRE ENTETE HTTP

Serveur Web version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE ENTETE HTTP (entte|tabChamps{; tabValeurs}) Paramtre entte|tabChamps tabValeurs Type Texte|Tab Texte Tab Texte Description En-tte HTTP de la requte ou Champs de len-tte HTTP Contenu des champs de len-tte HTTP

Description La commande LIRE ENTETE HTTP retourne, soit sous forme de chane, soit sous forme de deux tableaux, len-tte HTTP de la requte en cours de traitement. Cette commande fonctionne uniquement en mode sans contexte. Elle peut tre appele depuis toute mthode (Mthode base Sur connexion Web, Mthode base Sur authentification Web, mthode appele par "/4DACTION"...) excute dans un process Web en mode sans contexte. Appele en mode contextuel, LIRE ENTETE HTTP retourne des chanes vides. Premire syntaxe : LIRE ENTETE HTTP (entte) Lorsque vous utilisez cette syntaxe, le rsultat retourn dans la variable entte est du type suivant : "GET /page.html HTTP\1.0"+Caractere(13)+Caractere(10)+"User-Agent: browser"+Caractere(13)+Caractere(10)+"Cookie: C=HELLO" Chaque champ den-tte est spar par une squence CR+LF (Retour chariot+Retour la ligne), sous Windows et MacOS. Seconde syntaxe : LIRE ENTETE HTTP (tabChamps; tabValeurs) Lorsque vous utilisez cette syntaxe, les rsultats retourns dans les tableaux tabChamps et tabValeurs sont du type suivant : tabChamps{1} tabChamps{2} tabChamps{3} tabChamps{4} tabChamps{5} = = = = = "X-METHOD" "X-URL" "X-VERSION" "User-Agent" "Cookie" tabValeurs{1} = "GET" * tabValeurs{2} = "/page.html" * tabValeurs{3} = "HTTP/1.0" * tabValeurs{4} = "browser" tabValeurs{5} = "C=HELLO"

* Ces trois premiers lments ne correspondent pas des champs HTTP. Ils constituent la premire ligne de la requte. Conformment la norme HTTP, les noms des champs sont toujours libells en anglais.

4e Dimension - Langage 1705

A titre indicatif, voici une liste non exhaustive des champs HTTP pouvant tre prsents dans une requte : Accept : ce que le navigateur est susceptible daccepter comme contenu. Accept-Language : la ou les langue(s) accepte(s) par le navigateur (pour information). Permet de choisir une page daccueil en fonction de la langue prfre du navigateur. Cookie : liste des cookies. From : adresse e-mail de lutilisateur du navigateur. Host : nom ou adresse du serveur (par exemple, dans le cas de lURL http://monserveurweb/mapage.html, Host prend la valeur "monserveurweb"). Permet de grer les cas o plusieurs noms pointent vers la mme adresse IP (virtual hosting). Referer : provenance de la requte (par exemple http://monserveurweb/mapage1.html), cest--dire la page que lutilisateur affiche sil clique sur le bouton Prcdent de son navigateur. User-Agent : nom et version du navigateur ou du proxy. Exemple Cette mthode permet de rcuprer le contenu de tout champ den-tte de requte HTTP : ` Mthode projet GetHTTPField ` GetHTTPField ( Texte ) -> Texte ` GetHTTPField ( Nom en-tte HTTP ) -> Contenu en-tte HTTP C_TEXTE($0;$1) C_ENTIER LONG($vlElem) TABLEAU TEXTE($noms;0) TABLEAU TEXTE($valeurs;0) $0:="" LIRE ENTETE HTTP ($noms;$valeurs) $vlElem:=Chercher dans tableau($noms;$1) Si ($vlElem>0) $0:=$valeurs{$vlElem} Fin de si

Une fois que cette mthode projet est crite, vous pouvez lappeler ainsi : ` Contenu de len-tte Cookie $cookie:=GetHTTPField("Cookie")

1706 4e Dimension - Langage

Vous pouvez galement envoyer des pages diffrentes en fonction de la langue du navigateur (par exemple dans la Mthode base Sur connexion Web) : $langue:=GetHTTPField("Accept-Language") Au cas ou :($langue="@fr@") `Franais (cf. liste ISO 639) ENVOYER FICHIER HTML("index_fr.html") :($langue="@es@") `Espagnol (cf. liste ISO 639) ENVOYER FICHIER HTML("index_es.html") Sinon ENVOYER FICHIER HTML("index.html") Fin de cas Note : Les navigateurs Web permettent de dfinir plusieurs langues par dfaut. Elles sont listes dans le champ Accept-Language, spares par des ";". Leur priorit est dfinie par leur position au sein de la chane ; il peut donc tre utile de tester la position des langues dans la chane. Exemple de gestion des htes virtuels (par exemple dans la Mthode base Sur connexion Web). Les trois noms home_site.com, home_site1.com et home_site2.com pointent vers la mme adresse IP, par exemple 192.1.2.3. $host:=GetHTTPField("Host") Au cas ou :($host="www.site1.com") ENVOYER FICHIER HTML("home_site1.com") :($host="www.site2.com") ENVOYER FICHIER HTML("home_site2.com") Sinon ENVOYER FICHIER HTML("home_site.com") Fin de cas Rfrence FIXER ENTETE HTTP, LIRE CORPS HTTP.

4e Dimension - Langage 1707

LIRE CORPS HTTP

Serveur Web version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE CORPS HTTP (corps) Paramtre corps Type BLOB | Texte Description Champ corps (Body) de la requte HTTP

Description La commande LIRE CORPS HTTP retourne le corps (body) de la requte HTTP en cours de traitement. Le corps HTTP est retourn tel quel, sans traitement ni analyse. Cette commande fonctionne uniquement en mode sans contexte. Elle peut tre appele depuis la Mthode base Sur authentification Web, la Mthode base Sur connexion Web ou toute mthode Web excute en mode sans contexte. Vous pouvez passer dans le paramtre corps une variable ou un champ de type BLOB ou Texte. A noter quen gnral, le type BLOB est prfrable car il nest pas limit en nombre de caractres. Le type Texte, quant lui, est limit 32 000 caractres ; en cas de dpassement, les donnes reues seront tronques. Cette commande permet par exemple deffectuer des recherches dans le corps des requtes. Elle permet galement aux utilisateurs avancs de mettre en place un serveur WebDAV au sein dune base 4e Dimension. Exemple Dans cet exemple, une requte simple est envoye au serveur Web de 4e Dimension et le contenu du champ HTTP corps est visualis dans le dbogueur. Voici le formulaire envoy au serveur Web de 4e Dimension, ainsi que le code HTML correspondant :

1708 4e Dimension - Langage

Voici la mthode Test4D2004 : C_BLOB($requete) C_TEXTE($texteRequete)

LIRE CORPS HTTP($requete) $texteRequete:=BLOB vers texte($requete;Texte sans longueur) ENVOYER FICHIER HTML("page.html")

Note : Cette mthode a t dclare Disponible via 4DACTION, 4DMETHOD et 4DSCRIPT dans ses proprits. Lorsque le formulaire est soumis au serveur Web, la variable $texteRequete reoit le texte du champ body de la requte HTTP, soit "vnom=Dupont". Rfrence LIRE ENTETE HTTP.

4e Dimension - Langage 1709

ENVOYER DONNEES HTTP

Serveur Web version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENVOYER DONNEES HTTP (donnes{; *}) Paramtre donnes * Type BLOB * Description Donnes HTTP envoyer Envoi morcel (chunked)

Description La commande ENVOYER DONNEES HTTP permet au serveur Web 4D denvoyer des donnes HTTP brutes, pouvant tre morceles. Elle fonctionne uniquement en mode sans contexte. Le paramtre donnes contient les deux parties standard dune rponse HTTP, cest--dire len-tte et le corps (header et body). Les donnes sont envoyes sans formatage pralable par le serveur. Toutefois, 4e Dimension effectue un contrle lmentaire sur len-tte et le corps de la rponse afin quelle soit valide : Si len-tte est incomplet ou non conforme aux spcifications du protocole HTTP, 4e Dimension le modifie en consquence. Si la rponse HTTP est incomplte, 4e Dimension ajoute les informations manquantes. Si, par exemple, vous souhaitez effectuer une redirection, vous devez crire : HTTP/1.1 302 Location : http://... Si vous passez uniquement : Location : http://... 4e Dimension compltera la rponse en ajoutant HTTP/1.1 302. Le paramtre optionnel * permet de dclarer que la rponse sera envoye sous forme morcele (chunked). Le dcoupage des rponses peut tre utile lorsque le serveur envoie une rponse sans connatre sa longueur totale (par exemple si la rponse na pas encore t gnre). Tous les navigateurs compatibles HTTP/1.1 acceptent les rponses morceles. Si vous passez le paramtre *, le serveur Web inclura automatiquement le champ transferencoding: chunked dans len-tte de la rponse, si ncessaire (vous pouvez grer manuellement len-tte de la rponse si vous le souhaitez). Le reste de la rponse sera galement format en respectant la syntaxe de loption chunked. Les rponses morceles comportent un seul en-tte et un nombre indfini de corps. Toutes les instructions ENVOYER DONNEES HTTP suivant lexcution de ENVOYER DONNEES HTTP(donnes;*) au sein de la mme mthode seront considres comme partie de la rponse (quelles contiennent ou non le paramtre *). Le serveur met un terme lenvoi morcel la fin de lexcution de la mthode.

1710 4e Dimension - Langage

Note : Si le client Web ne prend pas en charge le protocole HTTP/1.1, 4e Dimension convertira automatiquement la rponse au format compatible HTTP/1.0 (lenvoi ne sera pas morcel). Dans ce cas toutefois, il est possible que le rsultat ne corresponde pas vos attentes. Il est donc recommand de tester si le navigateur est compatible HTTP/1.1 et denvoyer une rponse adapte. Pour cela, vous pouvez utiliser une mthode de ce type : C_BOOLEEN($0) TABLEAU TEXTE(tabChamps;0) TABLEAU TEXTE(tabValeurs;0) LIRE ENTETE HTTP(tabChamps;tabValeurs) $0:=Faux Si (Taille tableau(tabValeurs)>=3) Si (Position("HTTP/1.1";tabValeurs{3})>0) $0:=Vrai ` Le navigateur est compatible HTTP/1.1, on retourne Vrai dans $0 Fin de si Fin de si Combine la commande LIRE CORPS HTTP et aux autres commandes du thme Serveur Web, cette commande complte la gamme doutils mis la disposition des dveloppeurs 4D pour traiter de manire entirement personnalise les connexions HTTP entrantes et sortantes. Ces diffrents outils sont prsents dans le schma suivant :

4e Dimension - Langage 1711

Exemple Cet exemple illustre lemploi de loption chunked avec la commande ENVOYER DONNEES HTTP. Les donnes (une suite de chiffres) sont envoyes en 100 morceaux gnrs la vole dans une boucle. A noter que len-tte de la rponse nest pas explicitement dfini : la commande ENVOYER DONNEES HTTP lenverra automatiquement et y insrera le champ transfer-encoding: chunked car le paramtre * est utilis. C_ENTIER LONG($cpt) C_BLOB($mon_blob) C_TEXTE($output) Boucle ($cpt;1;100) $output:="["+Chaine($cpt)+"]" TEXTE VERS BLOB($output;$mon_blob;Texte sans longueur) ENVOYER DONNEES HTTP($mon_blob;*) Fin de boucle

Rfrence LIRE CORPS HTTP, LIRE ENTETE HTTP.

1712 4e Dimension - Langage

ENVOYER REDIRECTION HTTP

Serveur Web version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENVOYER REDIRECTION HTTP (url{; *}) Paramtre url * Type Alpha * Description Nouvel URL Si spcifi = lURL nest pas traduit, Si omis = lURL est traduit

Description La commande ENVOYER REDIRECTION HTTP permet de transformer un URL en un autre. Le paramtre url contient le nouvel URL qui permet de rediriger la requte. Si ce paramtre est un url vers un fichier, il doit contenir la rfrence ce fichier, par exemple : ENVOYER REDIRECTION HTTP ("/MaPage.HTM"). Lorsque cette commande est appele depuis le mode contextuel, le process Web est tu juste aprs son excution. Elle prvaut sur les commandes denvoi de donnes (ENVOYER FICHIER HTML, ENVOYER BLOB HTML, etc.) ventuellement places dans la mme mthode. Cette commande permet galement de rediriger une requte vers un autre serveur Web. 4D encode automatiquement les caractres spciaux de lURL. Si vous passez le caractre *, 4D ne traduira pas les caractres spciaux de lURL. Exemple Vous pouvez utiliser cet URL pour effectuer, laide de pages statiques, des recherches personnalises dans 4D. Imaginez que vous ayez plac dans une page HTML statique les lments suivants :

Laction POST /4dcgi/rech a t associe la zone de texte et aux boutons OK et Annuler.

4e Dimension - Langage 1713

Dans la partie (ou la sous-mthode) de la Mthode base Sur connexion Web grant le mode sans contexte, placez les instructions suivantes : Au cas ou : ($1="/4dcgi/rech") `Lorsque 4D reoit cet URL `Si le bouton OK a t utilis et le champ nom contient une valeur Si ((bOK="OK") & (nom # "")) `Transformer lURL afin dexcuter le code de la recherche, plac plus `loin dans la mme mthode ENVOYER REDIRECTION HTTP("/4dcgi/rech?"+nom) Sinon `Sinon retourner la page de dpart ENVOYER REDIRECTION HTTP("/page1.htm") Fin de si ... : ($1="/4dcgi/rech?@") `Si lURL a t redirig ... `Placez ici le code de la recherche Fin de cas

1714 4e Dimension - Langage

STATISTIQUES DU CACHE WEB

Serveur Web version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

STATISTIQUES DU CACHE WEB (pages; hits; usage) Paramtre pages hits usage Type Tab Texte Tab Entier long Numrique Description Noms des pages les plus consultes Nombre de hits pour chaque page Pourcentages du cache utilis

Description La commande STATISTIQUES DU CACHE WEB vous permet dobtenir des informations sur les pages les plus consultes, charges dans le cache du serveur Web. Par consquent, ces statistiques concernent uniquement les pages statiques, les images GIF, les images JPEG <100 ko et les feuilles de style (.css). Note : Pour plus dinformations sur le paramtrage du cache du serveur Web 4D, reportezvous la section Paramtrages du Serveur Web. La commande remplit le tableau texte pages avec les noms des pages les plus consultes. Le tableau entier long hits reoit le nombre de hits pour chaque page. La variable numrique usage reoit le pourcentage du cache Web utilis par chaque page. Exemple Vous souhaitez gnrer une page semi-dynamique affichant les statistiques dutilisation du cache Web. Pour cela, dans une page HTML statique appele stats.shtm, vous placez la balise <!4DACTION/STATS>. Vous placez ensuite des rfrences aux variables vPages et vUsage. Dans la mthode projet STATS, crivez le code suivant : C_TEXTE($1) TABLEAU TEXTE (pages;0) TABLEAU ENTIER LONG (hits;0) C_ENTIER LONG (vUsage)

STATISTIQUES DU CACHE WEB(pages;hits;vUsage) vPages:=Caractere(1) Boucle ($i;1;Taille tableau(pages)) `Pour chaque page prsente dans le cache vPages:=vPages+pages{$i}+"&nbsp;&nbsp;&nbsp;"+Chaine(hits{$i})+"<br>" `Insertion du nom de la page et du code HTML Fin de boucle ENVOYER FICHIER HTML("stats.shtm") `Le contenu des pages suffixes .shtm est automatiquement analys

Rfrence Informations sur le site Web, Paramtrages du serveur Web. 4e Dimension - Langage 1715

Connexion Web securisee

Serveur Web version 6.7

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Connexion Web securisee Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Vrai = la connexion Web est scurise Faux = la connexion Web nest pas scurise

Description La commande Connexion Web securisee retourne un boolen indiquant si la connexion au serveur Web 4D seffectue en mode scuris via SSL (la requte dbute par https: au lieu de http:). Si la connexion est effectue en SSL, la fonction retourne Vrai. Si la connexion est effectue en mode classique (non scuris), la fonction retourne Faux. Cette commande permet par exemple, le cas chant, de refuser les tentatives de connexion en mode non scuris. Pour plus dinformations sur ce point, reportez-vous la section Utiliser le protocole SSL. Rfrence GENERER DEMANDE CERTIFICAT, Utiliser le protocole SSL.

1716 4e Dimension - Langage

FIXER EXECUTABLE CGI

Serveur Web version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER EXECUTABLE CGI (url1{; url2}) Paramtre url1 url2 Type Chane Chane Description URL daccs URL daccs

Description La commande FIXER EXECUTABLE CGI permet dexcuter un CGI sans que celui-ci soit visible pour lutilisateur Web dans lURL. Cette commande peut notamment tre utilise dans la Mthode base Sur authentification Web, afin de dterminer par exemple le CGI excuter. Elle fonctionne sous MacOS X et sous Windows. Note : Pour plus d'informations sur les CGI, reportez-vous la section Support des CGI. Passez dans le paramtre url1 lURL daccs au CGI excuter. Par exemple, si vous crivez FIXER EXECUTABLE CGI("/myfile.pl"), le serveur Web 4D excutera le CGI myfile.pl cette application doit se trouver dans le dossier racine par dfaut du serveur Web. Si vous passez une chane vide ("") dans url1, 4e Dimension excutera directement le CGI dfini dans lURL envoy par le navigateur, le cas chant. Passez dans le paramtre facultatif url2 lURL daccs un fichier devant tre trait par le CGI. Par exemple, si vous crivez FIXER EXECUTABLE CGI("cgi-bin/Perl2.cgi";"Perl2.pl"), le serveur Web excutera le CGI Perl2.cgi (situ dans le dossier cgi-bin) en lui passant le fichier Perl2.pl. Si vous passez une chane vide ("") dans url2, 4e Dimension passera au CGI pour traitement le fichier dfini dans lURL envoy par le navigateur. Ce mcanisme est utilis notamment par PHP. Exemple : FIXER EXECUTABLE CGI("/cgi-bin/php";""). Si lURL daccs spcifi par la commande est incorrect, le navigateur affichera la page derreur Fichier non trouv. A noter que la commande FIXER EXECUTABLE CGI ne retourne pas directement derreur. Cette commande dfinit uniquement une valeur courante qui est utilise ultrieurement, lorsque le CGI sera appel. En cas dappels multiples de cette commande, seule la valeur dfinie par le dernier appel sera utilise. Exemple Dans cet exemple, le fichier example.php, non situ dans le dossier cgi-bin, est trait par le CGI Perl2.cgi, situ dans ce dossier :

FIXER EXECUTABLE CGI("/cgi-bin/Perl2.cgi";"example.php")

Rfrence Support des CGI. 4e Dimension - Langage 1717

OUVRIR URL WEB

Serveur Web version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

OUVRIR URL WEB (url{; *}) Paramtre url * Type Alpha * Description URL de dmarrage Si spcifi = lURL nest pas traduit, Si omis = lURL est traduit

Description La commande OUVRIR URL WEB lance votre navigateur Web par dfaut et louvre avec lURL pass dans le paramtre url. Sil ny a pas de navigateur sur les volumes connects lordinateur, la commande ne fait rien. 4D encode automatiquement les caractres spciaux de lURL. Si vous passez le caractre *, 4D ne traduira pas les caractres spciaux de lURL. Cette option permet daccder ou de renvoyer des URL du type "http://www.server.net/page.htm?q=quelquechose". Note : Cette commande ne fonctionne pas dans le cadre dun process Web. Exemples (1) Une fois linstruction suivante excute, le navigateur Web est lanc et lURL est traduit par "file:///D%3A/web%20fichier.htm":

OUVRIR URL WEB("file:///D:/web fichier.htm")

(2) Une fois linstruction suivante excute, le navigateur Web est lanc et lURL reste "file:///D:/web fichier.htm" :

OUVRIR URL WEB("file:///D:/web fichier.htm";*)

(3) Dans le cadre de l'ouverture de fichiers en local, il est possible d'utiliser des sparateurs systme dans le paramtre url : $ref:=Ouvrir document("";"";Lire chemin accs) FERMER DOCUMENT($ref) OUVRIR URL WEB("file:///"+document;*)

(4) Linstruction suivante lance le navigateur et le connecte la page daccueil du site Web de 4D :

OUVRIR URL WEB("http://www.4D.fr/")

1718 4e Dimension - Langage

57 ________________________ Source de donnes externes

4e Dimension - Langage 1719

1720 4e Dimension - Langage

ODBC LOGIN

Source de donnes externes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ODBC LOGIN ({nomSource{; utilisateur{; motDePasse}}}) Paramtre nomSource utilisateur motDePasse Type Chane Chane Chane Description Nom de la source de donnes dans le gestionnaire ODBC Nom dutilisateur enregistr dans la source de donnes Mot de passe de lutilisateur

Description La commande ODBC LOGIN vous permet douvrir une connexion avec une source de donnes ODBC externe. Note : Le standard ODBC (Open DataBase Connectivity) dfinit une librairie de fonctions standard. Ces fonctions permettent une application telle que 4e Dimension daccder via le langage SQL tout systme de gestion de donnes compatible ODBC (bases de donnes, tableurs, etc.). Le paramtre nomSource contient le nom de la source de donnes telle quelle a t dfinie dans le gestionnaire du pilote ODBC. Le paramtre utilisateur contient le nom de lutilisateur autoris se connecter la source de donnes externe. Par exemple, avec Oracle, ce nom dutilisateur peut tre Scott. Le paramtre motDePasse contient le mot de passe de lutilisateur autoris se connecter. Par exemple, avec Oracle, ce mot de passe peut tre tiger.

4e Dimension - Langage 1721

Tous ces paramtres sont facultatifs. Si aucun paramtre nest pass, la commande provoquera laffichage de la bote de dialogue du gestionnaire ODBC, permettant de dsigner manuellement la source de donnes laquelle se connecter :

La porte de cette commande est le process. Autrement dit, si vous souhaitez ouvrir deux connexions distinctes, vous devez crer deux process et ouvrir chaque connexion dans chaque process. Exemples (1) Cette instruction provoque laffichage de la bote de dialogue du gestionnaire ODBC :

ODBC LOGIN

(2) Cette instruction provoque la connexion la source de donnes ODBC MonOracle avec les identifiants Scott et tiger :

ODBC LOGIN("MonOracle";"Scott";"tiger")

Rfrence ODBC LOGOUT. Variables et ensembles systme Si la connexion est correctement tablie, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0.

1722 4e Dimension - Langage

ODBC LOGOUT

Source de donnes externes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ODBC LOGOUT Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande ODBC LOGOUT referme la connexion avec une source ODBC ouverte dans le process courant (le cas chant). Sil ny a pas de connexion ouverte, la commande ne fait rien. Rfrence ODBC LOGIN. Variables et ensembles systme Si la connexion a t correctement referme, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0. Vous pouvez intercepter les ventuelles erreurs laide dune mthode installe par la commande APPELER SUR ERREUR.

4e Dimension - Langage 1723

ODBC FIXER OPTION

Source de donnes externes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ODBC FIXER OPTION (option; valeur) Paramtre option valeur Type Entier long Entier long Description Numro doption dfinir Nouvelle valeur de loption

Description La commande ODBC FIXER OPTION permet de modifier la valeur de loption passe dans le paramtre option. Vous pouvez passer dans option lune des constantes suivantes, places dans le thme Source de donnes externes : Constante Description et valeurs possibles OBDC Asynchrone (1) 0 = connexion synchrone (valeur par dfaut), 1 (ou valeur diffrente de 0) = connexion asynchrone ODBC Nombre maxi lignes (2) Nombre maximum de lignes dans lensemble rsultant (utilis pour les prvisualisations) ODBC Longueur maxi donnes (3) Longueur maximale des donnes retournes ODBC Timeout requte (4) Dure maximale dattente de la rponse lors de lexcution de la commande ODBC EXECUTER. Valeurs : dure en secondes Par dfaut : pas de timeout ODBC Timeout connexion (5) Dure maximale dattente lors de lexcution de la commande ODBC LOGIN Cette valeur doit tre fixe avant louverture de la connexion pour tre prise en compte Valeurs possibles : dure en secondes Par dfaut : pas de timeout Rfrence ODBC LIRE OPTION. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK retourne 1, sinon elle retourne 0.

1724 4e Dimension - Langage

ODBC LIRE OPTION

Source de donnes externes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ODBC LIRE OPTION (option; valeur) Paramtre option valeur Type Entier long Entier long Description Numro doption Valeur de loption

Description La commande ODBC LIRE OPTION retourne la valeur courante de loption passe dans le paramtre option. Pour plus dinformations sur les diffrentes options et leurs valeurs associes, reportez-vous la description de la commande ODBC FIXER OPTION. Rfrence ODBC FIXER OPTION. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK retourne 1, sinon elle retourne 0.

4e Dimension - Langage 1725

ODBC EXECUTER

Source de donnes externes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ODBC EXECUTER (instructionSQL{; objetLi}{; objetLi2; ...; objetLiN}) Paramtre instructionSQL objetLi Type Texte Var | Champ Description Commande SQL excuter Rception du rsultat (si ncessaire)

Description La commande ODBC EXECUTER permet dexcuter une commande SQL et dassocier le rsultat des objets 4D (tableaux, variables ou champs) lis. Pour que la commande puisse tre excute, une connexion valide doit tre ouverte dans le process courant. Le paramtre instructionSQL contient la commande SQL excuter. Le paramtre objetLi reoit les rsultats. Les objets sont lis dans lordre de la colonne, ce qui signifie que les ventuelles colonnes distantes supplmentaires sont ignores. Si des champs 4e Dimension sont passs dans le(s) paramtre(s) objetLi, la commande crera des enregistrements et les sauvegardera automatiquement. Les champs doivent appartenir la mme table (il nest pas possible de passer un champ de la table 1 et un champ de la table 2 dans le mme appel). Si des champs de tables diffrentes sont passs, une erreur est gnre. Si vous passez des tableaux ou des variables 4D dans le(s) paramtre(s) objetLi, il est conseill de les dclarer pralablement lappel de la commande afin de contrler le type de donnes traites. Les tableaux sont redimensionns automatiquement si ncessaire. Dans le cas dune variable 4D, un seul enregistrement est rcupr la fois. Exemples (1) Dans cet exemple, nous rcuprons la colonne ename de la table emp dans la source de donnes externe. Le rsultat est stock dans le champ 4D [Employs]Nom. Les enregistrements 4e Dimension seront crs automatiquement :

SQLStmt:="SELECT ename FROM emp" ODBC EXECUTER(SQLStmt;[Employs]Nom) ODBC CHARGER ENREGISTREMENT(ODBC Tous les enregistrements)

(2) Pour mieux contrler la cration des enregistrements, il est possible dinclure le code au sein dune transaction et de ne la valider que si le droulement de lopration sest avr satisfaisant : ODBC LOGIN("mysql";"root";"")

1726 4e Dimension - Langage

SQLStmt:="SELECT alpha_field FROM app_testTable" DEBUT TRANSACTION ODBC EXECUTER(SQLStmt;[Table 2]Champ1) Tant que(Non(ODBC Fin de selection)) ODBC CHARGER ENREGISTREMENT ... `Placer ici le code de validation des donnes Fin tant que VALIDER TRANSACTION `Validation de la transaction

(3) Dans cet exemple, nous rcuprons la colonne ename de la table emp dans la source de donnes externe. Le rsultat est stock dans le tableau tNoms. Nous rcuprons les enregistrements 10 par 10. TABLEAU ALPHA(30;tNoms;20) SQLStmt:="SELECT ename FROM emp" ODBC EXECUTER(SQLStmt;tNoms) Tant que(Non(ODBC Fin de selection)) ODBC CHARGER ENREGISTREMENT(10) Fin tant que

(4) Dans cet exemple, nous rcuprons les colonnes ename et job de la table emp pour un ID spcifique (clause WHERE) de la source de donnes externe. Le rsultat est stock dans les variables 4D vNom and vJob. Seul le premier enregistrement est rcupr.

SQLStmt:="SELECT ename, job FROM emp WHERE id = 3" ODBC EXECUTER(SQLStmt;vName;vJob) ODBC CHARGER ENREGISTREMENT

(5) Dans cet exemple, nous rcuprons la colonne Champ_Blob de la table Test dans la source de donnes externe. Le rsultat est stock dans une variable BLOB dont la valeur est mise jour chaque chargement denregistrement. C_BLOB(MonBlob) ODBC LOGIN ODBC EXECUTER("SELECT Champ_Blob FROM Test";MonBlob) Tant que(Non(ODBC Fin de selection)) `On parcourt le rsultat ODBC CHARGER ENREGISTREMENT `La valeur de MonBlob est mise jour chaque appel Fin tant que

Rfrence ODBC CHARGER ENREGISTREMENT. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK retourne 1, sinon elle retourne 0.

4e Dimension - Langage 1727

ODBC Fin de selection

Source de donnes externes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ODBC Fin de selection Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Limites de lensemble de recherche atteintes

Description La commande ODBC Fin de selection indique si les limites de lensemble rsultat ont t atteintes. Exemple Le code ci-dessous se connecte une source de donnes externe (Oracle) laide des paramtres suivants :

C_TEXTE(vName) ODBC LOGIN("TestOracle";"scott";"tiger") Si (OK=1) ODBC EXECUTER("SELECT ename FROM emp";vName) Tant que(Non(ODBC Fin de selection)) ODBC CHARGER ENREGISTREMENT Fin tant que ODBC LOGOUT Fin de si

Cet exemple retournera dans la variable 4D vName les noms (ename) stocks dans la table nomme emp.

1728 4e Dimension - Langage

ODBC CHARGER ENREGISTREMENT

Source de donnes externes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ODBC CHARGER ENREGISTREMENT {(nombreEnr)} Paramtre nombreEnr Type Entier Description Nombre denregistrements charger

Description La commande ODBC CHARGER ENREGISTREMENT rcupre dans 4e Dimension un ou plusieurs enregistrement(s) provenant de la source ODBC ouverte dans la connexion courante. Le paramtre facultatif nombreEnr permet de dfinir le nombre denregistrements rcuprer : Si vous omettez ce paramtre, la commande rcuprera lenregistrement courant dans la source de donnes. Ce principe correspond la rcupration des donnes dans une boucle o un enregistrement est reu la fois. Si vous passez une valeur entire dans nombreEnr, la commande rcuprera nombreEnr enregistrements. Si vous passez la constante ODBC Tous les enregistrements (ou la valeur -1), la commande rcuprera tous les enregistrements de la table. Note : Ces deux derniers paramtrages nont de sens que si les donnes rcupres sont associes des tableaux ou des champs 4D. Rfrence ODBC ANNULER CHARGEMENT, ODBC EXECUTER. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK retourne 1, sinon elle retourne 0.

4e Dimension - Langage 1729

ODBC ANNULER CHARGEMENT

Source de donnes externes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ODBC ANNULER CHARGEMENT Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande ODBC ANNULER CHARGEMENT met fin la requte SELECT courante et initialise les paramtres du curseur. Cette commande permet dexcuter plusieurs requtes SELECT au sein dune mme connexion (cest--dire un mme curseur) initie par la commande ODBC LOGIN. Exemple Dans cet exemple, deux requtes sont excutes dans la mme connexion : C_BLOB(Monblob) C_TEXTE(MonTexte) ODBC LOGIN("mysql";"root";"") SQLStmt:="SELECT blob_field FROM app_testTable" ODBC EXECUTER(SQLStmt;Monblob) Tant que(Non(ODBC Fin de selection)) ODBC CHARGER ENREGISTREMENT Fin tant que

`Rinitialisation du curseur ODBC ANNULER CHARGEMENT SQLStmt:="SELECT Name FROM Employee" ODBC EXECUTER(SQLStmt;MonTexte) Tant que(Non(ODBC Fin de selection)) ODBC CHARGER ENREGISTREMENT Fin tant que

Rfrence ODBC CHARGER ENREGISTREMENT, ODBC LOGIN. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK retourne 1, sinon elle retourne 0.

1730 4e Dimension - Langage

ODBC FIXER PARAMETRE

Source de donnes externes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ODBC FIXER PARAMETRE (objet; typeParam) Paramtre objet typeParam Type Objet 4D Entier long Description Objet 4D utiliser (variable, tableau ou champ) Type du paramtre

Description La commande ODBC FIXER PARAMETRE permet dutiliser la valeur dune variable, dun tableau ou dun champ 4D dans les requtes ODBC. Utiliser des objets 4e Dimension dans les requtes ODBC 4e Dimension propose deux modes dinsertion des objets 4D dans les requtes ODBC : lassociation directe et la dfinition de paramtres via ODBC FIXER PARAMETRE. Association directe : dans ce mode, il suffit simplement dinsrer le nom de lobjet 4D utiliser (variable, tableau ou champ) entre les caractres << et >> dans le texte de la requte. Par exemple : INSERT INTO emp (empno,ename) VALUES (<<vEmpno>>,<<vEname>>) Dans cet exemple, les valeurs des variables 4D vEmpno et vEname seront substitues aux paramtres lors de lexcution de la requte. Cette solution fonctionne galement avec les champs et les tableaux 4D. Cette syntaxe, simple dutilisation, prsente toutefois linconvnient de ntre pas conforme la norme SQL et de ne pas permettre lutilisation de paramtres de sortie. Pour y remdier, vous pouvez utiliser la commande ODBC FIXER PARAMETRE (second mode). Dfinition de paramtres : dans ce mode, vous utilisez la commande ODBC FIXER PARAMETRE pour dfinir les objets 4D que vous souhaitez utiliser dans la requte ODBC. - passez dans le paramtre objet lobjet 4D (variable, tableau ou champ) utiliser dans la requte. - passez dans le paramtre typeParam le type SQL du paramtre. Vous pouvez passer une valeur ou utiliser lune des constantes suivantes, places dans le thme Source de donnes externes : Constante Type Valeur OBDC Paramtre entre Entier long 1 OBDC Paramtre entre sortie Entier long 2 OBDC Paramtre sortie Entier long 4 La valeur de lobjet 4D est substitue au caractre ? dans la requte SQL (syntaxe standard). Si la requte comporte plusieurs caractres ?, plusieurs appels ODBC FIXER PARAMETRE seront ncessaires. Les valeurs des objets 4D seront affectes squentiellement dans la requte, dans lordre dexcution des commandes.

4e Dimension - Langage 1731

Exemples (1) Cet exemple permet dexcuter une requte ODBC faisant directement appel des variables 4D associes : C_TEXTE(MonTexte) C_ENTIER LONG(MonEntierLong) ODBC LOGIN("mysql";"root";"") SQLStmt:="insert into app_testTable (alpha_field, longint_field) VALUES (<<MonTexte>>, <<MonEntierLong>>)" Boucle (vCounter;1;10) MonTexte:="Texte"+Chaine(vCounter) MonEntierLong:=vCounter ODBC EXECUTER(SQLStmt) Fin de boucle (2) Mme exemple que le prcdent, mais en utilisant la commande ODBC FIXER PARAMETRE : C_TEXTE(MonTexte) C_ENTIER LONG(MonEntierLong) ODBC LOGIN("mysql";"root";"") SQLStmt:="insert into app_testTable (alpha_field, longint_field) VALUES (?,?)" Boucle (vCounter;1;10) MonTexte:="Texte"+Chaine(vCounter) MonEntierLong:=vCounter ODBC FIXER PARAMETRE(MonTexte;ODBC Paramtre entre ) ODBC FIXER PARAMETRE(MonEntierLong;ODBC Paramtre entre) ODBC EXECUTER(SQLStmt) Fin de boucle

(3) Cet exemple permet dexcuter une requte ODBC utilisant directement des tableaux 4D associs : TABLEAU TEXTE(MonTabTexte;10) TABLEAU ENTIER LONG(MonTabLong;10) Boucle (vCounter;1;Taille tableau(MonTabTexte)) MonTabTexte{vCounter}:="Texte"+Chaine(vCounter) MonTabLong{vCounter}:=vCounter Fin de boucle ODBC LOGIN("mysql";"root";"") SQLStmt:="insert into app_testTable (alpha_field, longint_field) VALUES (<<MonTabTexte>>, <<MonTabLong>>)" ODBC EXECUTER(SQLStmt)

1732 4e Dimension - Langage

(4) Cet exemple permet dexcuter une requte ODBC utilisant directement des champs 4D associs : TOUT SELECTIONNER([Table 2]) ODBC LOGIN("mysql";"root";"") SQLStmt:="insert into app_testTable (alpha_field, longint_field) VALUES (<<[Table 2]Champ1>"+">, <<[Table 2]Champ2>)" ODBC EXECUTER(SQLStmt) Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK retourne 1, sinon elle retourne 0.

4e Dimension - Langage 1733

ODBC LIRE DERNIERE ERREUR

Source de donnes externes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ODBC LIRE DERNIERE ERREUR (errCode; errTexte; errODBC; errSQLServer) Paramtre errCode errTexte errODBC errSQLServer Type Entier long Texte Texte Texte Description Code de lerreur Texte de lerreur Code derreur ODBC Code derreur native SQL server

Description La commande ODBC LIRE DERNIERE ERREUR retourne des informations relatives la dernire erreur rencontre lors de lexcution dune commande ODBC. Lerreur peut provenir de lapplication 4e Dimension, du rseau, de la source ODBC, etc. Cette commande doit gnralement tre appele dans le contexte dune mthode de gestion des erreurs installe laide de la commande APPELER SUR ERREUR. Le paramtre errCode retourne le code de lerreur. Le paramtre errTexte retourne le libell de lerreur. Les deux derniers paramtres ne sont remplis que si lerreur provient de la source ODBC. Dans le cas contraire, ils sont retourns vides. Le paramtre errODBC retourne le code derreur ODBC (SQL state). Le paramtre errSQLServer retourne le code de lerreur native SQL server. Rfrence APPELER SUR ERREUR.

1734 4e Dimension - Langage

ODBC IMPORTER

Source de donnes externes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ODBC IMPORTER (tableSource{; projet}{; *}) Paramtre tableSource projet * Type Chane BLOB * Description Nom de la table dans la source de donnes ODBC Contenu du projet dimportation Nouveau contenu du projet (si * est pass) Affichage de la bote de dialogue dimportation et mise jour du projet

Description La commande ODBC IMPORTER permet dimporter des donnes depuis la table tableSource dune source ODBC externe. Les paramtres de connexion (nom de la source, utilisateur et mot de passe) sont inclus dans le BLOB projet. Notes : Le projet contient tous les paramtres de limportation, notamment la source de donnes et les tables et champs darrive. Vous dfinissez ces paramtres dans la bote de dialogue dimportation ODBC, puis vous pouvez ventuellement les sauvegarder dans un fichier sur disque. Pour plus dinformations, reportez-vous au manuel Mode Utilisation. Les projets gnrs dans la bote de dialogue dimportation ODBC ne sont pas compatibles avec les commandes ou la bote de dialogue dimportation standard de 4D. Si vous ne passez pas le paramtre facultatif projet, ODBC IMPORTER provoque laffichage de la bote de dialogue de slection de la source de donnes ODBC : Windows

4e Dimension - Langage 1735

MacOS

Une fois la source slectionne, la bote de dialogue dimportation ODBC de 4e Dimension apparat, permettant lutilisateur de configurer lopration. Si lutilisateur clique sur le bouton Annuler dans lune des botes de dialogue, lexcution est stoppe et la variable systme OK prend la valeur 0. Si vous passez dans le paramtre projet un BLOB contenant un projet dimport ODBC valide, limportation seffectue directement, sans intervention de lutilisateur. Pour cela, il vous suffit de charger un projet pralablement sauvegard sur disque dans le champ ou la variable BLOB que vous passez dans le paramtre projet, laide de la commande DOCUMENT VERS BLOB. Vous pouvez galement utiliser la commande ODBC IMPORTER avec un paramtre projet vide et le paramtre optionnel *, puis stocker le paramtre projet dans un champ BLOB (cf. ci-dessous). Cette solution permet, dune part, de le conserver avec le fichier de donnes et dautre part dviter la phase de chargement dans un BLOB depuis le disque. Note : Reportez-vous la commande EXPORTER DONNEES pour un exemple de dfinition de projet vide. Le paramtre optionnel *, sil est spcifi, provoque laffichage de la bote de dialogue dimportation de donnes de 4e Dimension avec les paramtrages ventuellement dfinis dans le projet. Ce fonctionnement permet dutiliser un projet prdfini tout en ayant la possibilit de modifier un ou plusieurs paramtres. En outre, dans ce cas le paramtre projet contient, aprs la fermeture de la bote de dialogue, les paramtres du nouveau projet. Vous pouvez alors le stocker dans un champ BLOB, dans un fichier disque, etc. Rfrence ODBC EXPORTER. Variables et ensembles systme Si lutilisateur clique sur le bouton Annuler dans une des botes de dialogue (de slection de source de donnes ou de paramtrage d'import), la variable systme OK prend la valeur 0. Si limportation se droule correctement, la variable systme OK prend la valeur 1.

1736 4e Dimension - Langage

ODBC EXPORTER

Source de donnes externes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ODBC EXPORTER (tableSource; projet; *) Paramtre tableSource projet * Type Chane BLOB * Description Nom de la table dans la source de donnes ODBC Contenu du projet dexportation Nouveau contenu du projet (si * est pass) Affichage de la bote de dialogue dexportation et mise jour du projet

Description La commande ODBC EXPORTER permet dexporter des donnes dans la table tableSource dune source ODBC externe. Les paramtres de connexion (nom de la source, utilisateur et mot de passe) sont inclus dans le BLOB projet. Notes : Le projet contient tous les paramtres de lexportation, notamment la source de donnes et les tables et champs exports. Vous dfinissez ces paramtres dans la bote de dialogue dexportation ODBC, puis vous pouvez ventuellement les sauvegarder dans un fichier sur disque. Pour plus dinformations, reportez-vous au manuel Mode Utilisation. Les projets gnrs dans la bote de dialogue dexportation ODBC ne sont pas compatibles avec les commandes ou la bote de dialogue dexportation standard de 4D. Si vous ne passez pas le paramtre facultatif projet, ODBC EXPORTER provoque laffichage de la bote de dialogue de slection de la source de donnes ODBC : Windows

4e Dimension - Langage 1737

MacOS

Une fois la source slectionne, la bote de dialogue dexportation ODBC de 4e Dimension apparat, permettant lutilisateur de configurer lopration. Si lutilisateur clique sur le bouton Annuler dans lune des deux botes de dialogue, lexcution est stoppe et la variable systme OK prend la valeur 0. Si vous passez dans le paramtre projet un BLOB contenant un projet dexport ODBC valide, lexportation seffectue directement, sans intervention de lutilisateur. Pour cela, il vous suffit de charger un projet pralablement sauvegard sur disque dans le champ ou la variable BLOB que vous passez dans le paramtre projet, laide de la commande DOCUMENT VERS BLOB. Vous pouvez galement utiliser la commande ODBC EXPORTER avec un paramtre projet vide et le paramtre optionnel *, puis stocker le paramtre projet dans un champ BLOB (cf. ci-dessous). Cette solution permet, dune part, de le conserver avec le fichier de donnes, et dautre part dviter la phase de chargement dans un BLOB depuis le disque. Note : Reportez-vous la commande EXPORTER DONNEES pour un exemple de dfinition de projet vide. Le paramtre optionnel *, sil est spcifi, provoque laffichage de la bote de dialogue de paramtrage dexportation ODBC avec les paramtrages ventuellement dfinis dans le projet. Ce fonctionnement permet dutiliser un projet prdfini tout en ayant la possibilit de modifier un ou plusieurs paramtres. En outre, dans ce cas le paramtre projet contient, aprs la fermeture de la bote de dialogue, les paramtres du nouveau projet. Vous pouvez alors le stocker dans un champ BLOB, sur disque, etc. Rfrence ODBC IMPORTER. Variables et ensembles systme Si lutilisateur clique sur le bouton Annuler dans une des botes de dialogue (de slection de source de donnes ou de paramtrage de lexport), la variable systme OK prend la valeur 0. Si lexportation se droule correctement, la variable systme OK prend la valeur 1. 1738 4e Dimension - Langage

58 ________________________ Sous-enregistrements

4e Dimension - Langage 1739

1740 4e Dimension - Langage

CREER SOUS ENREGISTREMENT

Sous-enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CREER SOUS ENREGISTREMENT (sousTable) Paramtre sousTable Type Sous-table Description Sous-table dans laquelle vous voulez crer un sous-enregistrement

Description CREER SOUS ENREGISTREMENT cre un nouveau sous-enregistrement dans sousTable et en fait le sous-enregistrement courant. Ce nouveau sous-enregistrement n'est sauvegard que lorsque l'enregistrement parent est lui-mme sauvegard. L'enregistrement parent peut tre sauvegard par une commande telle que STOCKER ENREGISTREMENT ou lorsque l'utilisateur le valide. S'il n'y a pas d'enregistrement courant, CREER SOUS ENREGISTREMENT ne fait rien. Pour ajouter un nouveau sous-enregistrement dans un formulaire de saisie de sous-enregistrements, utilisez AJOUTER SOUS ENREGISTREMENT. Exemple L'exemple suivant est la mthode objet d'un bouton. Lorsqu'elle est excute (lorsque l'utilisateur clique sur le bouton), elle cre de nouveaux sous-enregistrements pour des enfants. La boucle Repeter permet l'utilisateur d'ajouter plusieurs enfants, jusqu' ce qu'il clique sur Annuler. Le formulaire fait apparatre les enfants dans un sous-formulaire, mais ne permet pas d'y saisir directement des donnes car l'option "Saisissable" a t dsactive : Repeter ` Rpter jusqu' ce que l'utilisateur clique sur Annuler vEnfant := Demander("Prnom (annuler si termin) :") Si (OK = 1) ` Cration d'un nouveau sous-enregistrement pour un enfant CREER SOUS ENREGISTREMENT([Personnes]Enfants) ` Assignation du prnom de l'enfant au sous-champ [Personnes]Enfants'Prnom := vEnfant Fin de si Jusque (OK = 0)

Rfrence AJOUTER SOUS ENREGISTREMENT, STOCKER ENREGISTREMENT, SUPPRIMER SOUS ENREGISTREMENT.

4e Dimension - Langage 1741

SUPPRIMER SOUS ENREGISTREMENT

Sous-enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER SOUS ENREGISTREMENT (sousTable) Paramtre sousTable Type Sous-table Description Sous-table de laquelle supprimer le sous-enregistrement courant

Description SUPPRIMER SOUS ENREGISTREMENT supprime le sous-enregistrement courant de sousTable. S'il n'y a pas de sous-enregistrement courant, SUPPRIMER SOUS ENREGISTREMENT ne fait rien. Aprs la suppression, la sous-slection courante de sousTable est vide. En consquence, la commande SUPPRIMER SOUS ENREGISTREMENT ne peut pas tre utilise pour parcourir une sous-slection et supprimer des sous-enregistrements slectionns. La suppression d'un sous-enregistrement n'est pas dfinitive tant que l'enregistrement parent n'est pas valid. La suppression d'un enregistrement parent entrane automatiquement la suppression de tous ses sous-enregistrements. Pour supprimer une sous-slection, vous devez d'abord crer la sous-slection, puis supprimer le premier sous-enregistrement, recrer la sous-slection puis supprimer de nouveau le premier enregistrement, etc. Exemples (1) L'exemple suivant supprime tous les sous-enregistrements d'une sous-table : TOUS LES SOUS ENREGISTREMENTS([Personnes]Enfants) Tant que (Sous enregistrements trouves([Personnes]Enfants)>0) SUPPRIMER SOUS ENREGISTREMENT([Personnes]Enfants) TOUS LES SOUS ENREGISTREMENTS([Personnes]Enfants) Fin tant que

1742 4e Dimension - Langage

(2) L'exemple suivant supprime de la sous-table [Personnes]Enfants tous les sousenregistrements dans lesquels l'ge des enfants est suprieur ou gal 12 ans : TOUT SELECTIONNER([Personnes]) ` Slection de tous les enregistrements ` Pour chaque enregistrement Boucle ($vELEnrg;1;Enregistrements trouves([Personnes])) ` Recherche de tous les enregistrements ayant des sous-enregistrements ` correspondant aux critres CHERCHER SOUS ENREGISTREMENTS([Personnes]Enfants; [Personnes]Enfants'Age>=12) ` Boucle jusqu' ce que la recherche ne trouve plus d'enregistrement Tant que (Sous enregistrements trouves([Personnes]Enfants)>0) ` Supprimer le sous-enregistrement SUPPRIMER SOUS ENREGISTREMENT([Personnes]Enfants) ` On poursuit la recherche CHERCHER SOUS ENREGISTREMENTS([Personnes]Enfants; [Personnes]Enfants'Age>=12) Fin tant que STOCKER ENREGISTREMENT([Personnes]) ` Sauvegarde de l'enregistrement parent ENREGISTREMENT SUIVANT([Personnes]) Fin de boucle

Rfrence CHERCHER SOUS ENREGISTREMENTS, Sous enregistrements trouves, STOCKER ENREGISTREMENT, TOUS LES SOUS ENREGISTREMENTS.

4e Dimension - Langage 1743

TOUS LES SOUS ENREGISTREMENTS

Sous-enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TOUS LES SOUS ENREGISTREMENTS (sousTable) Paramtre sousTable Type Sous-table Description Sous-table dans laquelle slectionner tous les sous-enregistrements

Description TOUS LES SOUS ENREGISTREMENTS fait de tous les sous-enregistrements de sousTable la sous-slection courante. S'il n'existe aucun enregistrement parent courant, TOUS LES SOUS ENREGISTREMENTS ne fait rien. Lorsqu'un enregistrement parent est charg depuis le disque, la sous-slection courante contient tous les sous-enregistrements. Une sousslection peut ne plus contenir tous les sous-enregistrements aprs un appel aux commandes AJOUTER SOUS ENREGISTREMENT, CHERCHER SOUS ENREGISTREMENTS, ou SUPPRIMER SOUS ENREGISTREMENT. Exemple Dans l'exemple suivant, on slectionne tous les sous-enregistrements afin d'tre sr qu'ils soient tous inclus dans le total :

TOUS LES SOUS ENREGISTREMENTS ([Stats]Ventes) VentesTotales := Somme ([Stats]Ventes'Francs)

Rfrence CHERCHER SOUS ENREGISTREMENTS, Sous enregistrements trouves.

1744 4e Dimension - Langage

Sous enregistrements trouves

Sous-enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Sous enregistrements trouves (sousTable) Numrique Paramtre sousTable Rsultat Type Sous-table Numrique Description Sous-table dont vous voulez connatre le nombre de sous-enregistrements Nombre de sous-enregistrements de la sous-slection courante

Description Sous enregistrements trouves retourne le nombre de sous-enregistrements de la sousslection courante de sousTable. Cette fonction s'applique uniquement aux sousenregistrements de l'enregistrement courant. Elle est en quelque sorte l'quivalent de la fonction Enregistrements trouves pour les sous-enregistrements. Le rsultat retourn est indfini s'il n'existe pas d'enregistrement parent. Exemple L'exemple suivant slectionne tous les sous-enregistrements puis affiche le nombre d'enfants pour l'enregistrement parent : ` Slection de tous les enfants, puis affichage de leur nombre TOUS LES SOUS ENREGISTREMENTS ([Personnes]Enfants) ALERTE ("Le nombre d'enfants est : "+Chaine(Sous enregistrements trouves ([Personnes]Enfants)))

Rfrence CHERCHER SOUS ENREGISTREMENTS, TOUS LES SOUS ENREGISTREMENTS.

4e Dimension - Langage 1745

APPLIQUER A SOUS SELECTION

Sous-enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

APPLIQUER A SOUS SELECTION (sousTable; formule) Paramtre sousTable formule Type Sous-table Formule Description Sous-table laquelle appliquer la formule Ligne de code ou mthode

Description APPLIQUER A SOUS SELECTION applique formule chaque sous-enregistrement de la sousslection courante de sousTable. formule peut tre une ligne d'instructions ou une mthode. Si formule entrane la modification d'un sous-enregistrement, le sousenregistrement modifi n'est sauvegard que lorsque l'enregistrement parent est sauvegard. Si la sous-slection courante est vide, APPLIQUER A SOUS SELECTION ne fait rien. APPLIQUER A SELECTION peut tre utilis pour rcuprer et traiter des informations d'une sous-slection d'enregistrements ou pour modifier une sous-slection. Exemple L'exemple suivant met une lettre capitale aux prnoms du champ [Personnes]Enfants.

TOUT SELECTIONNER ([Personnes]Enfants) APPLIQUER A SOUS SELECTION([Personnes]Enfants;[Personnes]Enfants'Nom:= Majusc(Sous chaine([Personnes]Enfants'Nom;1;1))+ Minusc(Sous chaine([Personnes]Enfants'Nom;2)))

Note : La formule doit tre crite sur une seule ligne dans l'diteur de mthodes de 4D. Rfrence CHERCHER SOUS ENREGISTREMENTS, STOCKER ENREGISTREMENT, TOUS LES SOUS ENREGISTREMENTS.

1746 4e Dimension - Langage

DEBUT SOUS ENREGISTREMENT

Sous-enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DEBUT SOUS ENREGISTREMENT (sousTable) Paramtre sousTable Type Sous-table Description Sous-table de laquelle charger le premier sous-enregistrement de la slection courante

Description DEBUT SOUS ENREGISTREMENT charge le premier sous-enregistrement de la slection courante de sousTable et en fait le sous-enregistrement courant. Toutes les commandes de recherche, de slection et de tri font galement du premier sous-enregistrement le sousenregistrement courant. Si la sous-slection courante est vide, DEBUT SOUS ENREGISTREMENT ne fait rien. Exemple L'exemple suivant met bout bout les prnoms et les noms des enfants stocks dans une sous-table, puis les copie dans un tableau, nomm ttNoms : ` Cration d'un tableau pour recevoir les noms TABLEAU TEXTE (ttNoms; Sous enregistrements trouves ([Personnes]Enfants)) ` Commenons au premier sous-enregistrement DEBUT SOUS ENREGISTREMENT ([Personnes]Enfants) Boucle ($vlS; 1; Sous enregistrements trouves ([Personnes]Enfants)) ` Effectuons une boucle par enfant ttNoms{$vlS} := [Personnes]Enfants'Prnom+ " " + [Personnes]Enfants'Nom SOUS ENREGISTREMENT SUIVANT ([Personnes]Enfants) Fin de boucle

Rfrence ALLER A DERNIER SOUS ENREGISTREMENT, SOUS ENREGISTREMENT PRECEDENT, SOUS ENREGISTREMENT SUIVANT.

4e Dimension - Langage 1747

ALLER A DERNIER SOUS ENREGISTREMENT

Sous-enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ALLER A DERNIER SOUS ENREGISTREMENT (sousTable) Paramtre sousTable Type Sous-table Description Sous-table dans laquelle aller au dernier sous-enregistrement

Description ALLER A DERNIER SOUS ENREGISTREMENT slectionne le dernier sous enregistrement de la sous-slection courante de sousTable et en fait le sous-enregistrement courant. Si la sousslection courante est vide, ALLER A DERNIER SOUS ENREGISTREMENT ne fait rien. Exemple L'exemple suivant concatne le prnom et le nom de famille de chaque enfant dans la sous-table. Les noms sont copis dans un tableau, taNoms. Cet exemple ressemble celui de la commande DEBUT SOUS ENREGISTREMENT mais celui-ci va du dernier sousenregistrement au premier : ` Crer un tableau pour contenir les noms TABLEAU TEXTE (taNoms; Sous enregistrements trouves ([Personnes]Enfants)) ALLER A DERNIER SOUS ENREGISTREMENT ([Personnes]Enfants) ` Commencer au dernier sous enregistrement et boucler pour chaque enfant Boucle ($EL; 1; Sous enregistrements trouves ([Personnes]Enfants)) Noms{$EL} := [Personnes]Enfants'Prnom + " " + [Personnes]Enfants'Nom SOUS ENREGISTREMENT PRECEDENT ([Personnes]Enfants) Fin de boucle

Rfrence DEBUT SOUS ENREGISTREMENT, SOUS ENREGISTREMENT PRECEDENT, SOUS ENREGISTREMENT SUIVANT.

1748 4e Dimension - Langage

SOUS ENREGISTREMENT SUIVANT

Sous-enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SOUS ENREGISTREMENT SUIVANT (sousTable) Paramtre sousTable Type Sous-table Description Sous-table dans laquelle se placer sur le sousenregistrement suivant de la slection courante

Description SOUS ENREGISTREMENT SUIVANT place le pointeur de sous-enregistrement courant sur le sous-enregistrement suivant de la sous-slection courante de sousTable. Si SOUS ENREGISTREMENT SUIVANT place le pointeur de sous-enregistrement courant aprs le dernier sous-enregistrement, Fin sous enregistrement retourne VRAI, et il n'y a plus de sousenregistrement courant. Lorsque Fin sous enregistrement retourne VRAI, utilisez DEBUT SOUS ENREGISTREMENT ou ALLER A DERNIER SOUS ENREGISTREMENT pour replacer le pointeur de sous-enregistrement courant dans la sous-slection courante. Si la sous-slection courante est vide, ou si Avant sous enregistrement retourne VRAI, SOUS ENREGISTREMENT SUIVANT ne fait rien. Exemple Reportez-vous l'exemple de la commande DEBUT SOUS ENREGISTREMENT. Rfrence ALLER A DERNIER SOUS ENREGISTREMENT, DEBUT SOUS ENREGISTREMENT, SOUS ENREGISTREMENT PRECEDENT.

4e Dimension - Langage 1749

SOUS ENREGISTREMENT PRECEDENT

Sous-enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SOUS ENREGISTREMENT PRECEDENT (sousTable) Paramtre sousTable Type Sous-table Description Sous-table dans laquelle se placer sur le sousenregistrement prcdent de la slection courante

Description SOUS ENREGISTREMENT PRECEDENT place le pointeur de sous-enregistrement courant sur le sous-enregistrement prcdent dans la sous-slection courante de sousTable. Si SOUS ENREGISTREMENT PRECEDENT place les pointeur avant le premier sous-enregistrement, Avant sous enregistrement retourne Vrai, et il n'y a plus de sous-enregistrement courant. Dans ce cas, utilisez DEBUT SOUS ENREGISTREMENT ou ALLER A DERNIER SOUS ENREGISTREMENT pour replacer le pointeur dans la sous-slection courante. Si la sous-slection courante est vide ou si Fin sous enregistrement retourne Vrai, SOUS ENREGISTREMENT PRECEDENT ne fait rien. Exemple Reportez-vous l'exemple de la commande ALLER A DERNIER SOUS ENREGISTREMENT. Rfrence ALLER A DERNIER SOUS ENREGISTREMENT, DEBUT SOUS ENREGISTREMENT, SOUS ENREGISTREMENT SUIVANT.

1750 4e Dimension - Langage

Avant sous enregistrement

Sous-enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Avant sous enregistrement (sousTable) Boolen Paramtre sousTable Rsultat Type Sous-table Boolen Description Sous-table pour laquelle vous testez si le pointeur se trouve avant la sous-slection Avant la sous-slection (Vrai), sinon (Faux)

Description Avant sous enregistrement retourne Vrai lorsque le pointeur de sous-enregistrement courant se trouve avant le premier sous-enregistrement de sousTable. Avant sous enregistrement est utilis pour vrifier si la commande SOUS ENREGISTREMENT PRECEDENT a dplac le pointeur avant le premier sous-enregistrement. Si la sous-slection courante est vide, Avant sous enregistrement retourne Vrai. Exemple L'exemple est la mthode objet d'un bouton. Lorsque l'utilisateur clique sur le bouton, le pointeur se place sur le sous-enregistrement prcdent. Si le pointeur se trouve avant le premier sous-enregistrement, il est replac sur le dernier sous-enregistrement : ` Aller au sous-enregistrement prcdent SOUS ENREGISTREMENT PRECEDENT ([Personnes]Enfants) Si (Avant sous enregistrement ([Personnes]Enfants) ` Si on y est dj ALLER A DERNIER SOUS ENREGISTREMENT ([Personnes]Enfants) ` Aller au dernier sous-enregistrement Fin de si

Rfrence SOUS ENREGISTREMENT PRECEDENT.

4e Dimension - Langage 1751

Fin sous enregistrement

Sous-enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Fin sous enregistrement (sousTable) Boolen Paramtre sousTable Type Sous-table Description Sous-table pour laquelle tester si le pointeur de sous-enregistrement courant est plac audel du dernier sous-enregistrement slectionn Oui (Vrai) ou Non (Faux)

Rsultat

Boolen

Description Fin sous enregistrement retourne VRAI lorsque le pointeur de sous-enregistrement courant se trouve aprs la fin de la sous-slection courante de sousTable. Fin sous enregistrement a pour rle de tester si l'utilisation de la commande SOUS ENREGISTREMENT SUIVANT place ou non le pointeur derrire le dernier sous-enregistrement de la slection. Si la sousslection courante est vide, Fin sous enregistrement retourne Vrai. Exemple L'exemple suivant est la mthode objet d'un bouton. Lorsque l'utilisateur clique sur le bouton, le pointeur se place sur le sous-enregistrement suivant. Si le pointeur se retrouve derrire le dernier sous-enregistrement, il est replac sur le premier sous-enregistrement : ` Aller au sous-enregistrement suivant SOUS ENREGISTREMENT SUIVANT ([Personnes]Enfants) Si (Fin sous enregistrement ([Personnes]Enfants)) ` Si nous sommes alls trop loin ` Aller au premier sous-enregistrement DEBUT SOUS ENREGISTREMENT ([Personnes]Enfants) Fin de si

Rfrence SOUS ENREGISTREMENT SUIVANT.

1752 4e Dimension - Langage

TRIER SOUS ENREGISTREMENTS

Sous-enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TRIER SOUS ENREGISTREMENTS (sousTable; sousChamp{; direction}{; sousChamp2; direction2; ...; sousChampN; directionN}) Paramtre sousTable sousChamp direction Type Sous-table Sous-champ > ou < Description Sous-table contenant le(s) sous-champ(s) trier Sous-champ sur lequel effectuer le tri > tri croissant ou < tri dcroissant

Description TRIER SOUS ENREGISTREMENTS trie la sous-slection courante de sousTable. Seule la sousslection de sousTable contenue dans l'enregistrement parent courant est trie. Le paramtre direction dfinit le sens du tri de sousChamp : ascendant ou descendant. Si direction a pour valeur le symbole suprieur (>), les sous-enregistrements sont tris dans l'ordre ascendant. Si direction a pour valeur le symbole infrieur (<), les sousenregistrements sont tris dans l'ordre descendant. direction peut tre omis (dans le cadre d'un tri sur un seul niveau) ; le tri est alors ascendant. Vous pouvez spcifier plusieurs niveaux de tris en incluant autant de sous-champs et de symboles de tris que vous voulez. Une fois le tri termin, le premier sous-enregistrement de la sous-slection trie devient le sous-enregistrement courant. Le tri des sous-enregistrements est une opration dynamique. Les sous-enregistrements ne sont jamais sauvegards dans l'ordre o ils se trouvent aprs un tri. S'il n'y a pas d'enregistrement courant ou de sous-enregistrement, TRIER SOUS ENREGISTREMENTS ne fait rien. Si un formulaire contient un sous-formulaire dont l'impression est "limite par le cadre", la commande n'a besoin d'tre appele qu'une seule fois avant l'impression, pendant l'vnement formulaire Sur chargement de la mthode formulaire parente. Exemple L'exemple suivant trie la sous-table [Stats]Ventes dans un ordre croissant, sur la base du sous-champ VentesDollars :

TRIER SOUS ENREGISTREMENTS ([Stats]Ventes; [Stats]VentesDollars; >)

Rfrence CHERCHER SOUS ENREGISTREMENTS.

4e Dimension - Langage 1753

CHERCHER SOUS ENREGISTREMENTS

Sous-enregistrements version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHERCHER SOUS ENREGISTREMENTS (sousTable; formule) Paramtre sousTable formule Type Sous-table Boolen Description Sous-table dans laquelle effectuer la recherche Formule de recherche

Description CHERCHER SOUS ENREGISTREMENTS effectue une recherche dans sousTable et cre une nouvelle sous-slection courante. CHERCHER SOUS ENREGISTREMENTS est la seule commande qui permet d'effectuer une recherche parmi des sous-enregistrements et qui retourne une slection de sous-enregistrements. formule est applique chaque sousenregistrement de sousTable. Lorsque la formule est Vraie, le sous-enregistrement est ajout la nouvelle sous-slection. Une fois que l'excution de la formule est termine, le premier sous-enregistrement de la sous-slection devient le sous-enregistrement courant de sousTable. N'oubliez pas que CHERCHER SOUS ENREGISTREMENTS effectue une recherche parmi les sous-enregistrements de la sous-table pour l'enregistrement parent courant uniquement, et non parmi tous les sous-enregistrements associs aux enregistrements de la table parente. CHERCHER SOUS ENREGISTREMENTS ne modifie pas l'enregistrement parent courant. Typiquement, formule compare un sous-champ une variable ou une constante, l'aide d'un oprateur relationnel. formule peut comprendre plusieurs tests relis par des oprateurs de type ET (&) ou de type OU ( | ). formule peut galement tre ou contenir une fonction. Le caractre Joker (@) peut tre utilis avec les arguments de type chane. S'il n'y a pas d'enregistrement ni de sous-enregistrement courant, CHERCHER SOUS ENREGISTREMENTS ne fait rien. Exemple L'exemple suivant recherche les enfants gs de plus de 10 ans :

CHERCHER SOUS ENREGISTREMENTS ([Personnes]Enfants; [Personnes]Enfants'Age>10)

Rfrence Sous enregistrements trouves, TOUS LES SOUS ENREGISTREMENTS, TRIER SOUS ENREGISTREMENTS.

1754 4e Dimension - Langage

59 ________________________ Table

4e Dimension - Langage 1755

1756 4e Dimension - Langage

TABLE PAR DEFAUT

Table version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLE PAR DEFAUT (table) Paramtre table Type Table Description Table dfinir comme table par dfaut

Description TABLE PAR DEFAUT dfinit table comme la table par dfaut pour le process courant. Un process n'a pas de table par dfaut tant que la commande TABLE PAR DEFAUT n'a pas t excute. Aprs qu'une table par dfaut ait t dsigne, toute commande pour laquelle le paramtre table n'a pas t dfini s'appliquera la table par dfaut. Considrez par exemple l'instruction suivante : FORMULAIRE ENTREE ([Table];"Formulaire") Si [Table] a pralablement t dfinie comme table par dfaut, la mme instruction pourrait s'crire : FORMULAIRE ENTREE ("Formulaire") Une des raisons pour lesquelles vous pouvez dfinir une table par dfaut est l'criture de code qui ne soit pas li une table. Cela permet au mme code d'tre appliqu diffrentes tables. Vous pouvez aussi utiliser des pointeurs vers des tables pour crire du code non li aux tables. Pour plus d'informations sur cette technique, reportez-vous la description de la commande Nom de la table. TABLE PAR DEFAUT ne permet pas d'omettre les noms de tables lorsque vous vous rfrez des champs. Par exemple : [MaTable]MonChamp := "Une chane" ` OK ne peut pas s'crire : TABLE PAR DEFAUT ([MaTable]) MonChamp := "Une chane" ` Incorrect ... simplement parce qu'une table par dfaut a t dfinie. Toutefois, vous pouvez omettre le nom de la table lorsque vous vous rfrez des champs dans des triggers, des formulaires et des objets appartenant la table.

4e Dimension - Langage 1757

Dans 4e Dimension, toutes les tables sont ouvertes et prtes tre utilises. TABLE PAR DEFAUT n'ouvre pas de table, ne dfinit pas de table courante et ne prpare pas de table pour la saisie ou l'affichage. TABLE PAR DEFAUT est simplement une facilit de programmation propose pour acclrer la saisie du code et le rendre plus facile lire. Conseil : Bien que l'appel de TABLE PAR DEFAUT et l'omission du nom de la table rendent le code plus lisible, la plupart des programmeurs estiment que l'utilisation de cette commande apporte plus d'inconvnients que d'avantages. Exemple L'exemple suivant prsente la mme mthode avec et sans la commande TABLE PAR DEFAUT. Le code est une boucle souvent utilise pour crer de nouveaux enregistrements dans une base. Les commandes FORMULAIRE ENTREE et AJOUTER ENREGISTREMENT ncessitent le nom d'une table comme premier paramtre : FORMULAIRE ENTREE ([Clients]; "Ajout Enrg") Repeter AJOUTER ENREGISTREMENT ([Clients]) Jusque (OK = 0) Voici le rsultat lorsqu'une table par dfaut est dfinie :

TABLE PAR DEFAUT ([Clients]) FORMULAIRE ENTREE ("Ajout Enrg") Repeter AJOUTER ENREGISTREMENT Jusque (OK = 0)

Rfrence Table par defaut courante.

1758 4e Dimension - Langage

Table par defaut courante

Table version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Table par defaut courante Pointeur Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Pointeur Pointeur vers la table par dfaut

Description Table par defaut courante retourne un pointeur vers la table qui a t passe au dernier appel de la commande TABLE PAR DEFAUT pour le process courant. Exemple La ligne de code suivante inscrit le nom de la table courante par dfaut dans le titre de la fentre :

CHANGER TITRE FENETRE(Nom de la table(Table par defaut courante))

Rfrence Nom de la table, Table, TABLE PAR DEFAUT.

4e Dimension - Langage 1759

Table du formulaire courant

Table version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Table du formulaire courant Pointeur Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Pointeur Pointeur vers la table laquelle appartient le formulaire actuellement affich

Description La fonction Table du formulaire courant retourne un pointeur vers la table laquelle appartient le formulaire affich l'cran ou imprim dans le process courant. S'il n'y a pas de formulaire affich ou en cours d'impression dans le process courant, la fonction retourne Nil. Si plusieurs fentres sont ouvertes simultanment dans le process courant (ce qui signifie que la dernire fentre ouverte est la fentre courante active), la fonction retourne un pointeur vers la table du formulaire affich dans la fentre active. Si le formulaire affich est le formulaire dtaill d'une zone de sous-formulaire (c'est--dire que pendant la saisie de donnes, l'utilisateur a double-cliqu sur un enregistrement ou un sous-enregistrement dans une zone de sous-formulaire "double-cliquable"), la fonction retourne : un pointeur vers la table de la zone de sous-formulaire, si cette dernire affiche une table. un pointeur non significatif si la zone de sous-formulaire affiche une sous-table.

1760 4e Dimension - Langage

Exemple Dans votre application, vous utilisez la convention suivante : au moment de l'affichage d'un enregistrement, la variable vsEnrCourant, si elle est prsente dans un formulaire, affiche "Nouvel enregistrement" si vous crez un nouvel enregistrement, ou par exemple "56 parmi 5200" si vous ouvrez le 56e enregistrement d'une slection en comportant 5200. Pour cela, vous pouvez crer une fois la variable vsEnrCourant et lui associer la mthode objet dcrite ci-dessous, puis la copier et la coller dans tous les formulaires que vous voulez : ` Mthode objet de la variable non saisissable vsEnrCourant Au cas ou : (Evenement formulaire =Sur chargement) C_ALPHA (31;vsEnrCourant) C_POINTEUR ($vpTableParente) C_ENTIER LONG ($vlNumEnr) $vpTableParente:=Table du formulaire courant $vlNumEnr:=Numero enregistrement ($vpTableParente->) Au cas ou : ($vlNumEnr=-3) vsEnrCourant:="Nouvel enregistrement" : ($vlNumEnr=-1) vsEnrCourant:="Pas d'enregistrement" : ($vlNumEnr>=0) vsEnrCourant:=Chaine (Numero dans selection ($vpTableParente->))+ " parmi "+Chaine (Numero dans selection ($vpTableParente->)) Fin de cas Fin de cas

Rfrence DIALOGUE, FORMULAIRE ENTREE, FORMULAIRE SORTIE, IMPRIMER SELECTION.

4e Dimension - Langage 1761

1762 4e Dimension - Langage

60 ________________________ Tableaux

4e Dimension - Langage 1763

1764 4e Dimension - Langage

Prsentation des tableaux

Tableaux version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Un tableau est une srie ordonne de variables de mme type. Chaque variable est appele un lment du tableau. La taille d'un tableau est le nombre d'lments qu'il contient. La taille du tableau doit tre dfinie au moment de sa cration ; vous pouvez ensuite la modifier aussi souvent que ncessaire en ajoutant, insrant, ou supprimant des lments, ou en appelant de nouveau la commande que vous avez utilise pour crer le tableau. Vous crez un tableau au moyen de l'une des commandes de dclaration de tableau. Pour plus d'informations, reportez-vous la section Crer des tableaux. Les lments sont numrots de 1 N, o N est la taille du tableau. Un tableau a toujours un lment zro, auquel vous pouvez accder tout comme vous accdez n'importe quel autre lment du tableau, mais cet lment n'est pas affich lorsqu'un tableau est plac dans un formulaire. Rien ne vous empche cependant de l'utiliser avec le langage. Pour plus d'informations sur l'lment zro, reportez-vous la section Utiliser l'lment zro d'un tableau. Les tableaux sont des variables 4D. Comme toute variable, un tableau a une porte dfinie et suit les rgles du langage 4D, bien qu'il existe quelques diffrences spcifiques. Pour plus d'informations, reportez-vous aux sections Les tableaux et le langage 4D et Tableaux et Pointeurs. Les tableaux sont des objets du langage : vous pouvez crer et utiliser des tableaux qui n'apparatront jamais l'cran. Mais les tableaux sont galement des objets d'interface utilisateur. Pour plus d'informations sur l'interaction entre les tableaux et les objets de formulaire, reportez-vous aux sections Tableaux et objets de formulaire et Zones de dfilement groupes. Les tableaux doivent tre utiliss pour manipuler une certaine quantit de donnes pendant une priode brve. En contrepartie, comme les tableaux rsident en mmoire, ils sont d'une utilisation rapide et facile. Pour plus d'informations, reportez-vous la section Tableaux et mmoire.

4e Dimension - Langage 1765

Crer des tableaux

Tableaux version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous crez un tableau au moyen de l'une des commandes de dclaration de tableau dcrites dans ce chapitre. Voici la liste des commandes de dclaration de tableau : Commande TABLEAU ENTIER TABLEAU ENTIER LONG TABLEAU REEL TABLEAU TEXTE TABLEAU ALPHA TABLEAU DATE TABLEAU BOOLEEN TABLEAU IMAGE TABLEAU POINTEUR Cre ou redimensionne un tableau de : Entiers (sur 2 octets) Entiers (sur 4 octets)* Rels Textes (de 0 32.000 caractres par lment)** Alphanumriques (de 0 255 caractres par lment)** Dates Boolens Images Pointeurs

Chaque commande de dclaration de tableau peut crer ou redimensionner des tableaux une ou deux dimensions. Pour plus d'informations sur les tableaux deux dimensions, reportez-vous la section Tableaux deux dimensions. (*) Les tableaux de type Entier long vous permettent de manipuler les donnes de type Heure. Pour afficher dans un formulaire un tableau sous forme d'heures, appliquez l'objet affichant le tableau le format d'affichage &/x, o x reprsente le numro d'ordre du format souhait dans la liste de formatage des heures. Par exemple, &/4 correspond au format Heure:Minute. (**) La diffrence entre les tableaux de type Texte et les tableaux de type Alphanumrique est la nature de leurs lments. Dans ces deux types de tableaux, les lments peuvent prendre des valeurs de texte (des caractres). Cependant : Dans un tableau Texte, chaque lment est de longueur variable et stocke ses caractres dans des parties diffrentes de la mmoire. Dans un tableau Alpha, tous les lments ont la mme longueur fixe (la longueur dfinie lors de la cration du tableau). Tous les lments sont stocks les uns la suite des autres dans la mme partie de la mmoire. Cette diffrence structurelle rend les tableaux Alpha plus rapides que les tableaux Texte. Rappelez-vous cependant qu'un lment de tableau Alpha ne peut dpasser 255 caractres. Cette ligne de code cre (dclare) un tableau d'entiers de 10 lments : TABLEAU ENTIER(aiUnTableau;10)

1766 4e Dimension - Langage

Ensuite, cette ligne de code redimensionne le mme tableau 20 lments : TABLEAU ENTIER(aiUnTableau;20) Enfin, cette ligne de code redimensionne le mme tableau 0 lment : TABLEAU ENTIER(aiUnTableau;0) Vous rfrencez les lments d'un tableau en utilisant des accolades ({} ). Un nombre entre accolades donne accs l'adresse d'un lment particulier. Ce nombre est appel numro de l'lment. L'exemple ci-dessous place cinq noms dans le tableau nomm atNoms et les affiche ensuite dans une fentre d'alerte : TABLEAU TEXTE (atNoms;5) atNoms{1} := "Richard" atNoms{2} := "Sarah" atNoms{3} := "Pierre" atNoms{4} := "Martine" atNoms{5} := "Jean" Boucle ($vlElem;1;5) ALERTE ("L'lment #"+Chaine($vlElem)+" est gal : "+atNoms{$vlElem} ) Fin de boucle Notez la syntaxe atNoms{$vlElem}. Au lieu de spcifier un nombre littral comme atNoms{3}, vous pouvez utiliser une variable numrique indiquant quel lment d'un tableau vous accdez. Si vous utilisez les itrations permises par les structures rptitives (Boucle...Fin de boucle, Repeter...Jusque ou Tant que...Fin tant que), vous pouvez accder tout ou partie des lments d'un tableau avec trs peu de code. Les tableaux et les autres commandes du langage 4D Il existe d'autres commandes 4D qui permettent de crer ou de manipuler des tableaux. En particulier : Pour travailler avec des tableaux et des slections d'enregistrements, utilisez les commandes SELECTION LIMITEE VERS TABLEAU, SELECTION VERS TABLEAU, TABLEAU VERS SELECTION et VALEURS DISTINCTES. Les objets de type List box sont bass sur les tableaux ; plusieurs des commandes du thme List box manipulent des tableaux, par exemple INSERER LIGNE LISTBOX. Vous pouvez crer des graphes partir de valeurs stockes dans des tables, sous-tables, et des tableaux. Pour plus d'informations, reportez-vous la commande GRAPHE.

4e Dimension - Langage 1767

Bien que la version 6 apporte un jeu complet de commandes fonctionnant avec les listes hirarchiques, les commandes ENUMERATION VERS TABLEAU et TABLEAU VERS ENUMERATION (de la version prcdente de 4D) ont t conserves pour des raisons de compatibilit. De nombreuses commandes peuvent construire des tableaux en un appel, par exemple LISTE DES POLICES, LISTE FENETRES, LISTE DES VOLUMES, LISTE DES DOSSIERS, LISTE DES DOCUMENTS, LIRE CORRESPONDANCE PORT SERIE, SAX LIRE ELEMENT XML, etc. Rfrence Prsentation des tableaux, TABLEAU ALPHA, TABLEAU BOOLEEN, TABLEAU DATE, TABLEAU ENTIER, TABLEAU ENTIER LONG, TABLEAU IMAGE, TABLEAU POINTEUR, TABLEAU REEL, TABLEAU TEXTE, Tableaux deux dimensions.

1768 4e Dimension - Langage

Tableaux et objets de formulaire

Tableaux version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les tableaux sont des objets de langage vous pouvez crer et utiliser des tableaux qui n'apparatront jamais l'cran. Cependant, les tableaux sont aussi des objets d'interface utilisateur. Voici les types d'objets de formulaire grs par des tableaux : Pop-up/Liste droulante Combo Box Zone de dfilement Onglet List box Si vous pouvez prdfinir ces objets dans l'diteur de formulaires en utilisant le bouton des valeurs par dfaut de la Liste des proprits (hormis les List box), vous pouvez galement les dfinir par programmation, en utilisant les commandes de tableaux. Dans les deux cas, l'objet formulaire est gr par un tableau, cr par vous ou par 4D. En utilisant ces objets, vous pouvez dtecter quel lment de l'objet a t slectionn (ou a reu un clic souris) en testant l'lment slectionn du tableau. Inversement, vous pouvez slectionner un lment de l'objet en dsignant l'lment de tableau correspondant. Quand un tableau est utilis pour grer un objet de formulaire, il a une nature double ; il est la fois un objet de langage et un objet d'interface utilisateur. Par exemple, crez un formulaire, dans lequel vous placez une zone de dfilement :

4e Dimension - Langage 1769

Le nom de la variable associe, ici taNoms, est le nom du tableau que vous utilisez pour crer et grer la zone de dfilement. Notes : Vous ne pouvez pas afficher des tableaux deux dimensions ni des tableaux de pointeurs. La gestion des objets de type List box (pouvant contenir plusieurs tableaux) revt de nombreux aspects particuliers. Ces spcificits sont traites dans la section Gestion programme des list box. Exemple : cration d'une liste droulante
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

L'exemple suivant montre comment remplir un tableau et l'afficher dans une liste droulante. Un tableau arSalaires est cr au moyen de la commande TABLEAU REEL. Il contient tous les salaires des personnes dans une entreprise amricaine. Lorsque l'utilisateur slectionne un lment dans la liste droulante, le champ [Personnel]Salaire reoit la valeur choisie dans le mode Utilisation ou Menus crs. Cration de la liste droulante arSalaires dans un formulaire Crez une liste droulante et nommez-la arSalaires. Le nom de la liste droulante doit tre le mme que celui du tableau.

1770 4e Dimension - Langage

Initialisation du tableau Initialisez le tableau arSalaires en spcifiant l'vnement Sur chargement pour l'objet. Pour cela, n'oubliez pas d'activer cet vnement dans la Liste des proprits, comme illustr cidessous :

Cliquez sur le bouton Mthode objet... et crivez la mthode suivante :

4e Dimension - Langage 1771

Les lignes : TABLEAU REEL(arSalaires;10) Boucle($vlElem;1;10) arSalaires{$vlElem}:=2000+($vlElem*500) Fin de boucle ... crent le tableau numrique 2500, 3000... 7000, correspondant aux salaires annuels allant de $30 000 $84 000, avant impts. Les lignes : arSalaires:=Chercher dans tableau(arSalaires;[Employs]Salaire) Si (arSalaires=-1) arSalaires:=0 Fin de si ... grent la fois la cration d'un nouvel enregistrement et la modification d'un enregistrement existant. Si vous crez un nouvel enregistrement, le champ [Employs]Salaire est initialement gal zro. Dans ce cas, Chercher dans tableau ne trouve pas la valeur dans le tableau et retourne -1. Le test Si (arSalaires=-1) remet arSalaires zro, indiquant qu'aucun lment n'est slectionn dans la liste droulante. Si vous modifiez un enregistrement existant, Chercher dans tableau rcupre la valeur dans le tableau et affecte l'lment slectionn de la liste droulante la valeur courante du champ. Si la valeur pour un employ n'est pas dans la liste, le test Si (arSalaires=-1) dslectionne tous les lments de la liste. Note : Pour plus d'informations concernant l'lment de tableau slectionn, lisez les paragraphes suivants. Assignation de la valeur slectionne au champ [Employs]Salaire Pour reporter la valeur slectionne dans la liste droulante arSalaires, il vous suffit de grer l'vnement Sur clic de l'objet. Le numro de l'lment slectionn est la valeur du tableau arSalaires. En consquence, l'expression arSalaires{arSalaires} retourne la valeur choisie dans la liste droulante. Compltez ainsi la mthode de l'objet arSalaires : Au cas ou : (Evenement formulaire=Sur chargement) TABLEAU REEL(arSalaires;10) Boucle($vlElem;1;10) arSalaires{$vlElem} :=2000+($vlElem*500)

1772 4e Dimension - Langage

Fin de boucle arSalaires:=Chercher dans tableau(arSalaires;[Employs]Salaire) Si (arSalaires=-1) arSalaires:=0 Fin de si : (Evenement formulaire=Sur clic) [Employs]Salaire:=arSalaires{arSalaires} Fin de cas En mode Utilisation ou Menus crs, la liste droulante se prsente comme suit :

Les paragraphes suivants dcrivent les oprations lmentaires que vous pouvez effectuer sur les tableaux lorsque vous les utilisez comme objets de formulaire. Obtenir la taille d'un tableau
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez obtenir la taille courante d'un tableau au moyen de la commande Taille tableau. Si on reprend l'exemple prcdent, la ligne de code qui suit affichera 5: ALERTE ("La taille du tableau taNoms est: "+Chaine(Taille tableau(taNoms)))

4e Dimension - Langage 1773

Trier (rordonner) les lments du tableau


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez rordonner les lments d'un tableau au moyen de la commande TRIER TABLEAU ou de plusieurs tableaux l'aide de la commande TABLEAU MULTI TRI. Si on reprend l'exemple prcdent, et tant entendu que le tableau est affich comme une liste droulante, vous pourrez voir ceci :

(a) Sur la gauche, la liste telle qu'elle se prsente initialement. (b) Au centre, la liste telle qu'elle se prsente aprs l'excution de la ligne de code suivante : TRIER TABLEAU(taNoms;>) (c) Sur la droite, la liste telle qu'elle se prsente aprs l'excution de la ligne de code suivante : TRIER TABLEAU(taNoms;<) Ajouter et supprimer des lments
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez ajouter, insrer, ou supprimer des lments de tableau au moyen des commandes AJOUTER A TABLEAU, INSERER LIGNES et SUPPRIMER LIGNES. Gestion des clics dans un tableau : test de l'lment slectionn
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Si on reprend l'exemple prcdent, tant entendu que le tableau est affich en tant que liste droulante, vous pouvez grer les clics souris de la manire suivante : ` Mthode objet liste droulante taNoms Au cas ou : (Evenement formulaire=Sur chargement) ` Initialiser le tableau (comme vu prcdemment) TABLEAU TEXTE (taNoms;5) ` ...

1774 4e Dimension - Langage

: (Evenement formulaire=Sur libration) ` Nous n'avons plus besoin du tableau EFFACER VARIABLE(taNoms) : (Evenement formulaire=Sur clic) Si (taNoms#0) vtInfo:="Vous avez cliqu sur : "+taNoms{taNoms} Fin de si : (Evenement formulaire=Sur double clic) Si (taNoms#0) ALERTE ("Vous avez double-cliqu sur : "+taNoms{taNoms}) Fin de si Fin de cas Note : Les vnements doivent avoir t activs dans les proprits de l'objet. Alors que la syntaxe taNoms{$vlElem} vous permet de travailler sur un lment particulier du tableau, la syntaxe taNoms retourne le numro de l'lment slectionn dans le tableau. Ainsi, la syntaxe taNoms{taNoms} signifie la valeur de l'lment slectionn dans le tableau taNoms. Si aucun lment n'est slectionn, taNoms est gal 0 (zro). Le test Si (taNoms#0) dtecte si un lment est effectivement slectionn ou non. Dsigner l'lment slectionn
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez changer par programmation l'lment slectionn en assignant une valeur au tableau. Exemples: ` Slectionner le premier lment (si le tableau n'est pas vide) taNoms:=1 ` Slectionner le dernier lment (si le tableau n'est pas vide) taNoms:=Taille tableau(taNoms) ` Dselectionner l'lment slectionn (s'il y en a un), aucun lment n'est alors slectionn taNoms:=0 Si ((0<taNoms)&(taNoms<Taille tableau(taNoms)) ` Si possible, slectionner l'lment suivant l'lment slectionn taNoms:=taNoms+1 Fin de si

4e Dimension - Langage 1775

Si (1<taNoms) ` Si possible, slectionner l'lment prcdent l'lment slectionn taNoms:=taNoms-1 Fin de si Recherche d'une valeur dans le tableau
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La commande Chercher dans tableau recherche une valeur particulire dans un tableau. Si nous reprenons l'exemple prcdent, voici le code qui slectionnera l'lment dont la valeur est Richard, si c'est ce que vous saisissez dans la bote de dialogue de demande : $vsNom:=Demander("Saisissez un prnom :") Si (OK=1) $vlElem:=Chercher dans tableau (taNoms;$vsNom) Si ($vlElem>0) taNoms:=$vlElem Sinon ALERTE ("Il n'y a pas de "+$vsName+" dans cette liste de prnoms.") Fin de si Fin de si Les pop-up menus, listes droulantes, zones de dfilement et les onglets peuvent gnralement tre grs de la mme manire. Bien entendu, aucun code supplmentaire n'est ncessaire pour le redessinement des objets l'cran chaque fois que vous modifiez la valeur d'un lment, en ajoutez ou en supprimez. Note : Pour crer et utiliser des onglets avec des icnes ainsi que des onglets activs ou dsactivs, vous devez utiliser une liste hirarchique comme objet de gestion associ l'onglet. Pour plus d'informations, reportez-vous l'exemple de la commande Nouvelle liste. Gestion des combo boxes
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Alors que vous pouvez grer au moyen des algorithmes dcrits dans la section prcdente les pop-up menus, les listes droulantes, les zones de dfilement et les onglets, vous devez grer les combo boxes diffremment. Une combo box est en ralit une zone de texte saisissable laquelle est rattache une liste de valeurs prdfinies (les lments d'un tableau). L'utilisateur peut choisir une valeur dans cette liste, et ensuite diter le texte. En consquence, pour une combo box, la notion d'lment slectionn ne s'applique pas.

1776 4e Dimension - Langage

Avec les combo boxes, il n'y a jamais d'lment slectionn. A chaque fois que l'utilisateur slectionne une des valeurs attaches la zone, cette valeur est place dans l'lment zro du tableau. Ensuite, si l'utilisateur modifie le texte, la valeur modifie est aussi place dans cet lment zro. Exemple : ` Mthode objet Combo Box asCouleurs Au cas ou : (Evenement formulaire=Sur chargement) TABLEAU ALPHA(31;asCouleurs;3) asCouleurs{1} :="Bleu" asCouleurs{2} :="Blanc" asCouleurs{3} :="Rouge" : (Evenement formulaire=Sur clic) Si (asCouleurs{0} #"") ` L'objet change automatiquement de valeur ` L'utilisation de l'vnement Sur clic avec une Combo Box ` n'est requise que pour prendre en compte des actions supplmentaires Fin de si : (Evenement formulaire=Sur donnes modifies) ` Chercher dans tableau ignore l'lment 0, et donc retourne -1 ou >0 Si (Chercher dans tableau(asCouleurs;asCouleurs{0} )<0) ` La valeur saisie n'est pas une des valeurs attaches l'objet ` Ajouter la valeur la liste pour la prochaine fois AJOUTER A TABLEAU(asCouleurs;asCouleurs{0}) Sinon ` La valeur entre est une des valeurs attaches l'objet Fin de si Fin de cas Rfrence Prsentation des tableaux, Zones de dfilement groupes.

4e Dimension - Langage 1777

Zones de dfilement groupes

Tableaux version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Note de compatibilit : Les zones de dfilement groupes sont toujours utilisables dans 4e Dimension, toutefois compter de la version 2004 du programme elles peuvent tre avantageusement remplaces par des objets de type List box. Pour plus d'informations sur ce point, reportez-vous la section Prsentation des List box. Vous pouvez grouper des zones de dfilement pour l'affichage dans un formulaire. Lorsque plusieurs zones de dfilement sont groupes, elles se comportent comme une seule zone de dfilement. Chaque zone peut disposer de ses propres police et taille de caractres ; cependant, nous vous recommandons d'utiliser la mme hauteur de police dans chaque colonne. Lors de la saisie de donnes, seule la zone de dfilement situe au premier plan affiche une barre de dfilement. Voici trois zones de dfilement groupes en mode Structure, dans l'diteur de formulaires :

Voici quelques conseils pour la cration de zones de dfilement groupes : Assurez-vous que tous les tableaux ont la mme taille (nombre d'lments). Utilisez la mme taille de caractres dans chaque zone. Veillez ce toutes les zones aient la mme hauteur. Alignez toutes les zones sur le haut. Assurez-vous que les zones ne se chevauchent pas. Assurez-vous que la zone de droite est au premier plan, car la barre de dfilement apparat sur la zone de premier plan. Groupez les zones (au moyen de la commande de menu Grouper) pour qu'elles fonctionnent comme s'il s'agissait d'une seule zone de dfilement.

1778 4e Dimension - Langage

Cette mthode projet remplit les trois tableaux et les affiche l'cran : TOUT SELECTIONNER(Employs) SELECTION VERS TABLEAU([Employs]Nom de Famille;asNom;[Employs]Fonction; asFonction;[Dpartements]Nom;asDpartement) DIALOGUE([Dpartements];"Exemple Zones groupes") Cette mthode utilise les donnes des champs de la table [Employs] et de la table [Dpartements]. Voici ces tables :

Note : La table [Dpartements] peut tre utilise condition qu'il y ait un lien automatique allant de [Employs] [Dpartements]. Voici le rsultat :

4e Dimension - Langage 1779

Notez qu'une seule barre de dfilement est affiche. Quand l'utilisateur clique sur une ligne, les trois zones sont slectionnes simultanment. La variable associe chaque zone de dfilement prend le numro de la ligne ayant reu le clic souris ; seule la mthode objet de la zone clique est excute. Par exemple, si l'utilisateur clique sur le nom Bentley, asNom, asFonction, et asDpartement prennent la valeur 2, mais seule la mthode objet de asNom est excute. Les tableaux peuvent tre tris au moyen de la commande TRIER TABLEAU. Par exemple : TRIER TABLEAU(asFonction;asNom;asDpartement;>) Voici le rsultat du tri :

Notez que les tableaux ont t tris sur la base du premier argument de la commande TRIER TABLEAU ; les deux autres tableaux ont t dsigns pour assurer la synchronisation entre les lignes. La commande TRIER TABLEAU trie toujours les tableaux (s'il y en a plusieurs) sur les valeurs du premier argument et assure la synchronisation des autres tableaux. Note : La commande TRIER TABLEAU ne permet pas de trier les tableaux sur plusieurs niveaux. Pour afficher un tableau similaire au tableau ci-dessus tout en ayant un tri sur plusieurs niveaux (par exemple par dpartement, puis par fonction, puis par nom), utilisez un sous-formulaire dans lequel vous affichez la table et utilisez la commande TRIER. Rfrence Prsentation des tableaux, Tableaux et objets de formulaire.

1780 4e Dimension - Langage

Les tableaux et le langage 4D

Tableaux version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les tableaux sont des variables 4D. Comme toute variable, un tableau a une porte (une aire d'action) et suit les rgles du langage 4D, certaines diffrences prs. Tableaux locaux, process et interprocess
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez crer des tableaux locaux, process ou interprocess, par exemple : ` Ceci cre un tableau local de 100 valeurs entires sur 2 octets TABLEAU ENTIER ($aiCodes;100) ` Ceci cre un tableau process de 100 valeurs entires sur 2 octets TABLEAU ENTIER (aiCodes;100) ` Ceci cre un tableau interprocess de 100 valeurs entires sur 2 octets TABLEAU ENTIER (<>aiCodes;100) La porte de ces tableaux est identique celle des autres variables locales, process et interprocess. Tableaux locaux Vous dclarez un tableau local lorsque son nom commence par le signe dollar ($). La porte d'un tableau local est la mthode dans laquelle il est cr. Le tableau est effac lorsque la mthode est termine. Des tableaux locaux de mme nom peuvent avoir des types diffrents dans deux mthodes diffrentes, car ce sont en ralit des variables diffrentes n'ayant pas la mme porte. Lorsque vous crez un tableau local dans une mthode formulaire ou objet, ou dans une mthode projet appele comme sous-routine par l'un des deux types de mthodes prcdents, le tableau est cr puis effac chaque fois que la mthode formulaire ou la mthode objet est utilise. En d'autres termes, le tableau est cr puis effac pour chaque vnement formulaire. Par consquent, vous ne pouvez pas utiliser de tableaux locaux dans des formulaires, ni pour l'affichage ni pour l'impression. Comme dans le cas des variables locales, il est prfrable d'utiliser les tableaux locaux chaque fois que c'est possible. Vous rduisez ainsi la quantit de mmoire ncessaire pour votre application.

4e Dimension - Langage 1781

Tableaux process Vous dclarez un tableau process lorsque le nom du tableau dbute par une simple lettre. La porte d'un tableau process est le process dans lequel il a t cr. Le tableau est effac lorsque le process se termine ou est tu. Un tableau process dispose d'une instance cre automatiquement pour chaque process. Par consquent, le tableau est du mme type pour tous les process. En revanche, son contenu est particulier chaque process. Tableaux interprocess Vous dclarez un tableau interprocess lorsque son nom commence par <> (sous Windows et MacOS) ou par le symbole diamant (sous MacOS uniquement Option+v sur un clavier franais). La porte d'un tableau interprocess est la totalit des process pendant la session de travail. Il convient de ne les utiliser que pour partager des donnes ou transfrer des informations entre les process. Astuce : Quand vous savez d'avance qu'un tableau interprocess sera utilis par plusieurs process, ce qui peut provoquer des conflits, protgez l'accs ce tableau par un smaphore. Pour plus d'informations, reportez-vous l'exemple de la commande Semaphore. Note : Vous pouvez utiliser des tableaux process et interprocess dans des formulaires pour crer des objets de formulaire tels que des zones de dfilement, des listes droulantes, etc. Passer un tableau comme paramtre
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez passer un tableau en tant que paramtre une commande 4D ou une routine d'un plug-in 4D. Cependant, vous ne pouvez pas passer un tableau comme paramtre une mthode utilisateur. La solution dans ce cas est de passer un pointeur vers le tableau comme paramtre cette mthode. Pour plus de dtails, reportez-vous la section Tableaux et pointeurs. Affecter un tableau un autre tableau
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Contrairement ce que vous pouvez faire avec des variables de type Texte ou Chane, vous ne pouvez pas affecter un tableau un autre tableau. Pour copier (affecter) un tableau un autre, utilisez la fonction COPIER TABLEAU. Rfrence Prsentation des tableaux, Tableaux et pointeurs.

1782 4e Dimension - Langage

Tableaux et pointeurs

Tableaux version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Vous pouvez passer un tableau comme paramtre une commande 4D ou une routine d'un Plug-in 4D. Cependant, vous ne pouvez pas passer un tableau comme paramtre dans une mthode utilisateur. La solution consiste passer un pointeur vers le tableau comme paramtre de la mthode. Note : Vous pouvez passer des tableaux process et des tableaux interprocess comme paramtres, mais pas des tableaux locaux. Voici quelques exemples. Prenons le cas suivant : Si ((0<atNoms)&(atNoms<Taille tableau(atNoms)) ` Si possible, slectionner l'lment suivant l'lment slectionn atNoms:=atNoms+1 Fin de si Si vous avez besoin de faire la mme chose pour 50 tableaux diffrents, vous pouvez vous viter d'crire 50 fois la mme chose, en utilisant la mthode projet suivante : ` Mthode projet SELECTIONNER ELEMENT SUIVANT ` SELECTIONNER ELEMENT SUIVANT ( Pointeur ) ` SELECTIONNER ELEMENT SUIVANT ( -> Tableau ) C_POINTEUR ($1) Si ((0<$1->)&($1-><Taille tableau($1->)) $1->:=$1->+1 ` Si possible, slectionner l'lment suivant l'lment slectionn Fin de si Ensuite, vous pouvez crire : SELECTIONNER ELEMENT SUIVANT (->atNoms) ` ... SELECTIONNER ELEMENT SUIVANT (->asCodesPostaux) ` ... SELECTIONNER ELEMENT SUIVANT (->alEnrgsIDs) ` ... et ainsi de suite.

4e Dimension - Langage 1783

La mthode projet suivante retourne la somme de tous les lments d'un tableau numrique (Entier, Entier long, ou Rel) : ` Somme Tableau ` Somme Tableau ( Pointeur ) ` Somme Tableau ( -> Tableau ) C_REEL ($0) $0:=0 Boucle ($vlElem;1;Taille tableau($1->)) $0:=$0+$1->{$vlElem} Fin de boucle Ensuite, vous pouvez crire : $vlSomme:=Somme Tableau (->arSalaires) ` ... $vlSomme:=Somme Tableau (->aiDefectCounts) ` .. $vlSomme:=Somme Tableau (->alPopulations) Cette mthode met une majuscule tous les lments d'un tableau Alpha ou Texte : ` MAJUSCULE TABLEAU ` MAJUSCULE TABLEAU ( Pointeur ) ` MAJUSCULE TABLEAU ( -> Tableau ) Boucle ($vlElem;1;Taille tableau($1->)) Si ($1->{$vlElem} #"") $1->{$vlElem} :=Majusc($1->{$vlElem} [[1]])+ Minusc(Sous chaine($1->{$vlElem} ;2)) Fin de si Fin de boucle Ensuite, vous pouvez crire : MAJUSCULE TABLEAU (->atSujets ) ` ... MAJUSCULE TABLEAU (->asNomsFamille ) La combinaison de tableaux, pointeurs et boucles telles que Boucle...Fin de boucle vous permet d'crire un grand nombre de petites mthodes projet trs utiles pour grer les tableaux. Rfrence Les tableaux et le langage 4D, Prsentation des tableaux.

1784 4e Dimension - Langage

Utiliser l'lment zro d'un tableau

Tableaux version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Un tableau a toujours un lment zro. Mme si l'lment zro n'est pas affich lorsqu'un tableau est utilis pour remplir un objet de formulaire, vous pouvez l'utiliser sans rserve dans le langage. Un exemple possible d'utilisation de l'lment zro est le cas de la combo box examin dans la section Tableaux et objets de formulaire. Voici deux autres exemples : (1) Si vous voulez excuter une action seulement lorsque vous cliquez sur un lment autre que l'lment pralablement slectionn, vous pouvez garder la trace de chaque lment slectionn. Une faon de le faire est d'utiliser une variable process dans laquelle vous conservez le numro de l'lment slectionn. Une autre manire consiste utiliser l'lment zro du tableau : ` Mthode objet zone de dfilement atNoms Au cas ou : (Evenement formulaire=Sur chargement) ` Initialisons le tableau TABLEAU TEXTE (atNoms;5) ` ... ` Initialiser l'lment zro avec le numro ` de l'lment courant slectionn sous sa forme alphanumrique ` Ici vous commencez sans lment slectionn atNoms{0} :="0" : (Evenement formulaire=Sur libration) ` Nous n'avons plus besoin du tableau EFFACER VARIABLE(atNoms) : (Evenement formulaire=Sur clic) Si (atNoms#0) Si (atNoms#Num(atNoms{0} )) vtInfo:="Vous avez cliqu sur : "+atNoms{atNoms} +" qui n'tait pas prcdemment slectionn." atNoms{0} :=Chaine(atNoms) Fin de si Fin de si

4e Dimension - Langage 1785

: (Evenement formulaire=Sur double clic) Si (atNoms#0) ALERTE ("Vous avez double-cliqu sur : "+atNoms{atNoms}) Fin de si Fin de cas (2) Lorsque 4D envoie des caractres vers un document ou le port srie, ou bien en reoit, vous avez la possibilit de filtrer les codes ASCII entre les plates-formes et systmes dont les tables ASCII diffrent les commandes UTILISER FILTRE, Mac vers ISO, ISO vers Mac, Mac vers Windows et Windows vers Mac. Dans certains cas, vous pouvez souhaiter contrler intgralement la traduction des codes ASCII. Pour cela, vous pouvez utiliser un tableau d'entiers de 255 lments, dans lequel le Nime lment est la traduction ASCII du caractre dont le code ASCII d'origine est N. Par exemple, si le code ASCII 187 doit devenir 156, vous crivez <>tiFiltreAsciiExport{187}:=156 et <>tiFiltreAsciiImport{156}:=187 dans la mthode qui initialise les tableaux interprocess utiliss dans la base. Vous pouvez alors envoyer une suite de caractres en utilisant une mthode projet telle que celle-ci : ` X ENVOYER PAQUET ( Texte { ; Heure } ) Boucle ($vlChar;1;Longueur($1)) $1[[vlChar]]:=Caractere(<>tiFiltreAsciiExport{Code ascii($1[[vlChar]])} ) Fin de boucle Si (Nombre de parametres>=2) ENVOYER PAQUET ($2;$1) Sinon ENVOYER PAQUET ($1) Fin de si ` X Recevoir paquet ( Texte { ; Heure } ) -> Texte Si (Nombre de parametres>=2) RECEVOIR PAQUET ($2;$1) Sinon RECEVOIR PAQUET ($1) Fin de si $0:=$1 Boucle ($vlChar;1;Longueur($1)) $0[[vlChar]]:=Caractere(<>tiFiltreAsciiImport{Code ascii($0[[vlChar]])} ) Fin de boucle Dans cet exemple, si une suite de caractres contenant des caractres NULL (code ASCII zro) est envoye ou reue, l'lment zro des tableaux <>tiFiltreAsciiExport et <>tiFiltreAsciiImport jouera son rle comme n'importe lequel des 255 lments du tableau.

1786 4e Dimension - Langage

Tableaux deux dimensions

Tableaux version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Chaque commande de dclaration de tableau permet de crer ou de redimensionner des tableaux une ou deux dimensions. Exemple : ` Crer un tableau texte compos de 100 lignes de 50 colonnes TABLEAU TEXTE (atTopics;100;50) Les tableaux deux dimensions sont essentiellement des objets de langage ; vous ne pouvez ni les afficher ni les imprimer. Dans l'exemple prddent : atTopics est un tableau deux dimensions. atTopics{8} {5} est le 5e lment (5e colonne...) de la 8e ligne. atTopics{20} est la 20e ligne et est elle-mme un tableau une dimension. Taille tableau(atTopics) retourne 100, qui est le nombre de lignes Taille tableau(atTopics{17}) retourne 50, qui est le nombre de colonnes de la 17e ligne Dans l'exemple suivant, un pointeur vers chaque champ de chaque table de la base est stock dans un tableau deux dimensions : ` Crer autant de lignes vides qu'il y a de tables TABLEAU POINTEUR (<>apChamps;Nombre de tables;0) ` Pour chaque table Boucle ($vlTable;1;Taille tableau(<>apChamps)) ` Redimensionner la ligne avec autant de colonnes qu'il y a de champs ` dans la table INSERER LIGNES (<>apFields{$vlTable} ;1;Nombre de champs($vlTable)) ` Donner la valeur des lments Boucle ($vlChamp;1;Taille tableau(<>apChamps{$vlTable} )) <>apChamps{$vlTable} {$vlChamp} :=Champ($vlTable;$vlChamp) Fin de boucle Fin de boucle

4e Dimension - Langage 1787

Dans la mesure o le tableau deux dimensions a t initialis, vous pouvez obtenir ainsi les pointeurs vers les champs d'une table de votre choix : ` Obtenir les pointeurs vers les champs pour la table affiche l'cran: COPIER TABLEAU (<>apChamps{Table(Table du formulaire courant)}; $apMesChampsdeTravail) ` Initialiser les champs boolens et date Boucle ($vlElem;1;Taille tableau($apMesChampsdeTravail)) Au cas ou : (Type($apMesChampsdeTravail{$vlElem} ->)=Is Date) $apMesChampsdeTravail{$vlElem} ->:=Date du jour : (Type($apMesChampsdeTravail{$vlElem} ->)=Is Boolean) $apMesChampsdeTravail{$vlElem} ->:=Vrai Fin de cas Fin de boucle Note : Comme le montre cet exemple, les lignes des tableaux deux dimensions peuvent tre ou non de la mme taille, indiffremment. Rfrence Prsentation des tableaux.

1788 4e Dimension - Langage

Tableaux et mmoire

Tableaux version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

A la diffrence des donnes que vous stockez sur disque lorsque vous utilisez des tables ou des enregistrements, un tableau rside toujours en mmoire dans son intgralit. Par exemple, si tous les codes postaux amricains taient saisis dans une table [Codes Postaux], celle-ci contiendrait environ 100 000 enregistrements. De plus, cette table comporterait plusieurs champs : le code postal lui-mme ainsi que la ville, le comt et l'tat correspondants. Si vous ne slectionnez que les codes postaux de Californie, 4D cre la slection d'enregistrements correspondante l'intrieur de la table [Codes Postaux], et ensuite ne charge les enregistrements que lorsque vous en avez besoin (par exemple, pour les afficher ou les imprimer). En d'autres termes, vous travaillez avec une srie ordonne de valeurs (du mme type pour chaque champ) partiellement charge du disque en mmoire. Procder de la mme manire avec les tableaux serait laborieux, pour les raisons suivantes : Pour maintenir les quatre types d'information (code postal, ville, comt, tat), vous auriez besoin de quatre grands tableaux en mmoire. Comme un tableau rside en mmoire dans son intgralit, vous seriez oblig de garder tous les codes postaux en mmoire pendant toute la session de travail, mme si les donnes n'taient pas utilises en permanence. Toujours parce qu'un tableau rside en mmoire dans son intgralit, les quatre tableaux devraient tre chargs ou sauvegards sur le disque chaque fois que vous dmarreriez ou quitteriez l'application, quand bien mme les donnes ne seraient d'aucune utilit pour la session de travail. Conclusion : Les tableaux ont pour rle de manipuler une certaine quantit de donnes pendant une priode brve. En contrepartie, comme ils rsident en mmoire, ils sont d'une utilisation rapide et facile.

4e Dimension - Langage 1789

Cependant, dans certaines circonstances, vous pouvez avoir besoin de tableaux contenant des centaines ou des milliers d'lments. Voici les formules appliquer pour calculer la quantit de mmoire utilise pour chaque type de tableau: Type de Tableau Boolen Date Alpha Entier Entier long Image Pointeur Rel Texte Deux dimensions Calcul de la quantit de mmoire en octets (31+nombre d'lments)/8 (1+nombre d'lments) * 6 (1+nombre d'lments) * longueur dclare (+1 si impair, +2 si pair) (1+nombre d'lments) * 2 (1+nombre d'lments) * 4 (1+nombre d'lments) * 4 + somme de la taille de chaque image (1+nombre d'lments) * 16 (1+nombre d'lments) * 8 (1+nombre d'lments) * 6 + somme de la taille de chaque texte (1+nombre d'lments) * 12 + somme de la taille de chaque tableau

Note : Quelques octets supplmentaires sont requis pour le reprage de l'lment, le nombre d'lments et le tableau lui-mme. Lorsque vous travaillez avec de trs grands tableaux, la meilleure faon de grer d'ventuels problmes de saturation de la mmoire est d'accompagner la cration de tableau d'une mthode projet APPELER SUR ERREUR. Exemple : ` Vous allez lancer une opration batch fonctionnant toute la nuit ` qui requiert la cration de grands tableaux. Pour viter ` des erreurs en pleine nuit, crez les tableaux au dbut de ` l'opration et testez les erreurs au mme moment : gError:=0 ` Initialisation ` Installation de la mthode de gestion d'erreurs APPELER SUR ERREUR ("GESTION ERREUR") TABLEAU ALPHA (63;asCeTableau;50000) ` Environ 3125 Ko TABLEAU REEL (arCetAutreTableau;50000) ` 488 Ko APPELER SUR ERREUR ("") ` Il n'est plus ncessaire d'intercepter les erreurs Si (gError=0) ` Les tableaux ont pu tre crs ` poursuivons l'opration Sinon ALERTE ("Cette opration requiert davantage de mmoire !") Fin de si ` Dans tous les cas, nous n'avons plus besoin des tableaux EFFACER VARIABLE (asCeTableau) EFFACER VARIABLE (arCetAutreTableau)

1790 4e Dimension - Langage

La mthode projet GESTION ERREUR est la suivante : ` Mthode projet GESTION ERREUR gError:=Error ` Retourner le code d'erreur Rfrence APPELER SUR ERREUR, Prsentation des tableaux.

4e Dimension - Langage 1791

TABLEAU ENTIER

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLEAU ENTIER (nomTableau; taille{; taille2}) Paramtre nomTableau taille taille2 Type Tableau Numrique Numrique Description Nom du tableau Nombre d'lments du tableau ou Nombre de tableaux si taille2 est spcifi Nombre d'lments des tableaux deux dimensions

Description La commande TABLEAU ENTIER cre et/ou redimensionne un tableau d'lments de type Entier (2 octets) en mmoire. Le paramtre nomTableau est le nom du tableau. Le paramtre taille est le nombre d'lments du tableau. Le paramtre taille2 est optionnel. Si vous le spcifiez, cette commande cre un tableau deux dimensions. Dans ce cas, taille spcifie le nombre de lignes et taille2 spcifie le nombre de colonnes de chaque tableau. Chaque ligne dans un tableau deux dimensions peut tre traite la fois comme un lment et comme un tableau. Cela signifie que vous pouvez insrer et supprimer des tableaux entiers dans un tableau deux dimensions, par l'intermdiaire des autres commandes de ce thme, lorsque vous travaillez avec la premire dimension du tableau. Lorsque vous appliquez la commande TABLEAU ENTIER un tableau existant : Si vous agrandissez sa taille, les lments existants ne sont pas modifis, les nouveaux lments sont initialiss 0. Si vous rduisez sa taille, les lments du "bas" du tableau sont supprims et perdus. Exemples (1) Cet exemple cre un tableau process contenant 100 lments de type Entier :

TABLEAU ENTIER (tabEntiers; 100)

(2) Cet exemple cre un tableau local de 100 lignes contenant chacune 50 lments de type Entier :

TABLEAU ENTIER ($tabEntiers;100;50)

1792 4e Dimension - Langage

(3) Cet exemple cre un tableau interprocess de 50 lments de type Entier et affecte chaque lment son numro :

TABLEAU ENTIER (<>tabEntiers; 50) Boucle($vElem;1;50) <>tabEntiers{$vElem}:=$vElem Fin de boucle

Rfrence TABLEAU ENTIER LONG, TABLEAU REEL.

4e Dimension - Langage 1793

TABLEAU ENTIER LONG

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLEAU ENTIER LONG (nomTableau; taille{; taille2}) Paramtre nomTableau taille taille2 Type Tableau Numrique Numrique Description Nom du tableau Nombre d'lments du tableau ou Nombre de tableaux si taille2 est spcifi Nombre d'lments des tableaux deux dimensions

Description La commande TABLEAU ENTIER LONG cre et/ou redimensionne un tableau d'lments de type Entier long (4 octets) en mmoire. Le paramtre nomTableau est le nom du tableau. Le paramtre taille est le nombre d'lments du tableau. Le paramtre taille2 est optionnel. Si vous le spcifiez, cette commande cre un tableau deux dimensions. Dans ce cas, taille spcifie le nombre de lignes et taille2 spcifie le nombre de colonnes de chaque tableau. Chaque ligne dans un tableau deux dimensions peut tre traite la fois comme un lment et comme un tableau. Cela signifie que vous pouvez insrer et supprimer des tableaux entiers dans un tableau deux dimensions, par l'intermdiaire des autres commandes de ce thme, lorsque vous travaillez avec la premire dimension du tableau. Lorsque vous appliquez la commande TABLEAU ENTIER LONG un tableau existant : Si vous agrandissez sa taille, les lments existants ne sont pas modifis, les nouveaux lments sont initialiss 0. Si vous rduisez sa taille, les lments du "bas" du tableau sont supprims et perdus. Exemples (1) Cet exemple cre un tableau process contenant 100 lments de type Entier long :

TABLEAU ENTIER LONG (tabEntiersLongs; 100)

(2) Cet exemple cre un tableau local de 100 lignes contenant chacune 50 lments de type Entier long :

TABLEAU ENTIER LONG ($tabEntiersLongs;100;50)

1794 4e Dimension - Langage

(3) Cet exemple cre un tableau interprocess de 50 lments de type Entier long et affecte chaque lment son numro :

TABLEAU ENTIER LONG (<>tabEntiersLongs; 50) Boucle($vElem;1;50) <>tabEntiersLongs{$vElem}:=$vElem Fin de boucle

Rfrence TABLEAU ENTIER, TABLEAU REEL.

4e Dimension - Langage 1795

TABLEAU REEL

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLEAU REEL (nomTableau; taille{; taille2}) Paramtre nomTableau taille taille2 Type Tableau Numrique Numrique Description Nom du tableau Nombre d'lments du tableau ou Nombre de tableaux si taille2 est spcifi Nombre d'lments des tableaux deux dimensions

Description La commande TABLEAU REEL cre et/ou redimensionne un tableau d'lments de type Rel (numrique) en mmoire. Le paramtre nomTableau est le nom du tableau. Le paramtre taille est le nombre d'lments du tableau. Le paramtre taille2 est optionnel. Si vous le spcifiez, cette commande cre un tableau deux dimensions. Dans ce cas, taille spcifie le nombre de lignes et taille2 spcifie le nombre de colonnes de chaque tableau. Chaque ligne dans un tableau deux dimensions peut tre traite la fois comme un lment et comme un tableau. Cela signifie que vous pouvez insrer et supprimer des tableaux entiers dans un tableau deux dimensions, par l'intermdiaire des autres commandes de ce thme, lorsque vous travaillez avec la premire dimension du tableau. Lorsque vous appliquez la commande TABLEAU REEL un tableau existant : Si vous agrandissez sa taille, les lments existants ne sont pas modifis, les nouveaux lments sont initialiss 0. Si vous rduisez sa taille, les lments du "bas" du tableau sont supprims et perdus. Exemples (1) Cet exemple cre un tableau process contenant 100 lments de type Rel :

TABLEAU REEL (tabRel; 100)

(2) Cet exemple cre un tableau local de 100 lignes contenant chacune 50 lments de type Rel :

TABLEAU REEL ($tabRel; 100;50)

1796 4e Dimension - Langage

(3) Cet exemple cre un tableau interprocess de 50 lments de type Rel et affecte chaque lment son numro :

TABLEAU REEL (<>tabRel; 50) Boucle($vElem;1;50) <>tabRel{$vElem}:=$vElem Fin de boucle

Rfrence TABLEAU ENTIER, TABLEAU ENTIER LONG.

4e Dimension - Langage 1797

TABLEAU ALPHA

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLEAU ALPHA (longueurChane; nomTableau; taille{; taille2}) Paramtre longueurChane nomTableau taille taille2 Type Numrique Tableau Numrique Numrique Description Longueur de la chane (1..255) Nom du tableau Nombre d'lments du tableau ou Nombre de tableaux si taille2 est spcifi Nombre d'lments des tableaux deux dimensions

Description La commande TABLEAU ALPHA cre et/ou redimensionne un tableau d'lments de type Chane alphanumrique en mmoire. Le paramtre longueurChane dfinit le nombre maximum de caractres que chaque lment du tableau peut contenir. Cette longueur doit tre comprise entre 1 et 255 caractres. Le paramtre nomTableau est le nom du tableau. Le paramtre taille est le nombre d'lments du tableau. Le paramtre taille2 est optionnel. Si vous le spcifiez, cette commande cre un tableau deux dimensions. Dans ce cas, taille spcifie le nombre de lignes et taille2 spcifie le nombre de colonnes de chaque tableau. Chaque ligne dans un tableau deux dimensions peut tre traite la fois comme un lment et comme un tableau. Cela signifie que vous pouvez insrer et supprimer des tableaux entiers dans un tableau deux dimensions, par l'intermdiaire des autres commandes de ce thme, lorsque vous travaillez avec la premire dimension du tableau. Lorsque vous appliquez la commande TABLEAU ALPHA un tableau existant : Si vous agrandissez sa taille, les lments existants ne sont pas modifis, les nouveaux lments sont initialiss "" (chane vide). Si vous rduisez sa taille, les lments du "bas" du tableau sont supprims et perdus. Exemples (1) Cet exemple cre un tableau process comportant 100 lments. Chaque lment est une chane de 31 caractres :

TABLEAU ALPHA (31;tabAlpha;100)

1798 4e Dimension - Langage

(2) Cet exemple cre un tableau local de 100 lignes. Chaque ligne comporte 50 lments, chaque lment est une chane de 63 caractres :

TABLEAU ALPHA (63;$tabAlpha;100;50)

(3) Cet exemple cre un tableau interprocess comportant 50 lments. Chaque lment est une chane de 255 caractres. La valeur "Elment No" suivie du numro de l'lment est affecte chaque lment :

TABLEAU ALPHA (255;<>tabAlpha;50) Boucle ($vlElem;1;50) <>tabAlpha{$vlElem}:="Elment No" + Chaine($vlElem) Fin de boucle

Rfrence TABLEAU TEXTE.

4e Dimension - Langage 1799

TABLEAU TEXTE

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLEAU TEXTE (nomTableau; taille{; taille2}) Paramtre nomTableau taille taille2 Type Tableau Numrique Numrique Description Nom du tableau Nombre d'lments du tableau ou Nombre de tableaux si taille2 est spcifi Nombre d'lments des tableaux deux dimensions

Description La commande TABLEAU TEXTE cre et/ou redimensionne un tableau d'lments de type Texte en mmoire. Le paramtre nomTableau est le nom du tableau. Le paramtre taille est le nombre d'lments du tableau. Le paramtre taille2 est optionnel. Si vous le spcifiez, cette commande cre un tableau deux dimensions. Dans ce cas, taille spcifie le nombre de lignes et taille2 spcifie le nombre de colonnes de chaque tableau. Chaque ligne dans un tableau deux dimensions peut tre traite la fois comme un lment et comme un tableau. Cela signifie que vous pouvez insrer et supprimer des tableaux entiers dans un tableau deux dimensions, par l'intermdiaire des autres commandes de ce thme, lorsque vous travaillez avec la premire dimension du tableau. Lorsque vous appliquez la commande TABLEAU TEXTE un tableau existant : Si vous agrandissez sa taille, les lments existants ne sont pas modifis, les nouveaux lments sont initialiss "" (chane vide). Si vous rduisez sa taille, les lments du "bas" du tableau sont supprims et perdus. Exemples (1) Cet exemple cre un tableau process contenant 100 lments de type Texte :

TABLEAU TEXTE (tabTexte; 100)

(2) Cet exemple cre un tableau local de 100 lignes contenant chacune 50 lments de type Texte :

TABLEAU TEXTE ($tabEntiersLongs;100;50)

1800 4e Dimension - Langage

(3) Cet exemple cre un tableau interprocess de 50 lments de type Texte et affecte chaque lment la valeur "Elment No" suivie du numro de l'lment :

TABLEAU TEXTE (<>tabTexte; 50) Boucle($vElem;1;50) <>tabTexte{$vElem}:="Elment n"+ Chaine ($vElem) Fin de boucle

Rfrence TABLEAU ALPHA.

4e Dimension - Langage 1801

TABLEAU DATE

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLEAU DATE (nomTableau; taille{; taille2}) Paramtre nomTableau taille taille2 Type Tableau Numrique Numrique Description Nom du tableau Nombre d'lments du tableau ou Nombre de tableaux si taille2 est spcifi Nombre d'lments des tableaux deux dimensions

Description La commande TABLEAU DATE cre et/ou redimensionne un tableau d'lments de type Date en mmoire. Le paramtre nomTableau est le nom du tableau. Le paramtre taille est le nombre d'lments du tableau. Le paramtre taille2 est optionnel. Si vous le spcifiez, cette commande cre un tableau deux dimensions. Dans ce cas, taille spcifie le nombre de lignes et taille2 spcifie le nombre de colonnes de chaque tableau. Chaque ligne dans un tableau deux dimensions peut tre traite la fois comme un lment et comme un tableau. Cela signifie que vous pouvez insrer et supprimer des tableaux entiers dans un tableau deux dimensions, par l'intermdiaire des autres commandes de ce thme, lorsque vous travaillez avec la premire dimension du tableau. Lorsque vous appliquez la commande TABLEAU DATE un tableau existant : Si vous agrandissez sa taille, les lments existants ne sont pas modifis, les nouveaux lments sont initialiss la valeur de date nulle (!00/00/00!). Si vous rduisez sa taille, les lments du "bas" du tableau sont supprims et perdus. Exemples (1) Cet exemple cre un tableau process contenant 100 lments de type Date :

TABLEAU DATE (tabDates; 100)

(2) Cet exemple cre un tableau local de 100 lignes contenant chacune 50 lments de type Date :

TABLEAU DATE ($tabDates;100;50)

1802 4e Dimension - Langage

(3) Cet exemple cre un tableau interprocess de 50 lments de type Date et affecte chaque lment la date du jour + un nombre de jours gal au numro de l'lment :

TABLEAU DATE (<>tabDates;50) Boucle($vElem;1;50) <>tabDates{$vElem}:=Date du jour+$vElem Fin de boucle

4e Dimension - Langage 1803

TABLEAU BOOLEEN

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLEAU BOOLEEN (nomTableau; taille{; taille2}) Paramtre nomTableau taille taille2 Type Tableau Numrique Numrique Description Nom du tableau Nombre d'lments du tableau ou Nombre de tableaux si taille2 est spcifi Nombre d'lments des tableaux deux dimensions

Description La commande TABLEAU BOOLEEN cre et/ou redimensionne un tableau d'lments de type Boolen en mmoire. Le paramtre nomTableau est le nom du tableau. Le paramtre taille est le nombre d'lments du tableau. Le paramtre taille2 est optionnel. Si vous le spcifiez, cette commande cre un tableau deux dimensions. Dans ce cas, taille spcifie le nombre de lignes et taille2 spcifie le nombre de colonnes de chaque tableau. Chaque ligne dans un tableau deux dimensions peut tre traite la fois comme un lment et comme un tableau. Cela signifie que vous pouvez insrer et supprimer des tableaux entiers dans un tableau deux dimensions, par l'intermdiaire des autres commandes de ce thme, lorsque vous travaillez avec la premire dimension du tableau. Lorsque vous appliquez la commande TABLEAU BOOLEEN un tableau existant : Si vous agrandissez sa taille, les lments existants ne sont pas modifis, les nouveaux lments sont initialiss Faux. Si vous rduisez sa taille, les lments du "bas" du tableau sont supprims et perdus. Astuce : Dans certaines circonstances, l'utilisation d'un tableau d'Entiers dans lequel chaque lment diffrent de zro signifie "vrai" et chaque lment gal zro signifie "faux" est une alternative l'utilisation d'un tableau de Boolens. Exemples (1) Cet exemple cre un tableau process contenant 100 lments de type Boolen :

TABLEAU BOOLEEN (tabBoolens; 100)

1804 4e Dimension - Langage

(2) Cet exemple cre un tableau local de 100 lignes contenant chacune 50 lments de type Boolen :

TABLEAU BOOLEEN ($tabBoolens;100;50)

(3) Cet exemple cre un tableau interprocess de 50 lments de type Boolen et affecte chaque lment pair la valeur Faux :

TABLEAU BOOLEEN (<>tabBoolens;50) Boucle($vElem;1;50) <>tabBoolens{$vElem}:=(($vElem%2)=0) Fin de boucle

Rfrence TABLEAU ENTIER.

4e Dimension - Langage 1805

TABLEAU IMAGE

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLEAU IMAGE (nomTableau; taille{; taille2}) Paramtre nomTableau taille taille2 Type Tableau Numrique Numrique Description Nom du tableau Nombre d'lments du tableau ou Nombre de tableaux si taille2 est spcifi Nombre d'lments des tableaux deux dimensions

Description La commande TABLEAU IMAGE cre et/ou redimensionne un tableau d'lments de type Image en mmoire. Le paramtre nomTableau est le nom du tableau. Le paramtre taille est le nombre d'lments du tableau. Le paramtre taille2 est optionnel. Si vous le spcifiez, cette commande cre un tableau deux dimensions. Dans ce cas, taille spcifie le nombre de lignes et taille2 spcifie le nombre de colonnes de chaque tableau. Chaque ligne dans un tableau deux dimensions peut tre traite la fois comme un lment et comme un tableau. Cela signifie que vous pouvez insrer et supprimer des tableaux entiers dans un tableau deux dimensions, par l'intermdiaire des autres commandes de ce thme, lorsque vous travaillez avec la premire dimension du tableau. Lorsque vous appliquez la commande TABLEAU IMAGE un tableau existant : Si vous agrandissez sa taille, les lments existants ne sont pas modifis, les nouveaux lments sont initialiss une image vide (ce qui signifie que la fonction Taille image applique l'un de ces lments retourne 0). Si vous rduisez sa taille, les lments du "bas" du tableau sont supprims et perdus. Exemples (1) Cet exemple cre un tableau process contenant 100 lments de type Image :

TABLEAU IMAGE (tabImages; 100)

(2) Cet exemple cre un tableau local de 100 lignes contenant chacune 50 lments de type Image :

TABLEAU IMAGE ($tabImages;100;50)

1806 4e Dimension - Langage

(3) Cet exemple cre un tableau interprocess d'lments de type Image. La taille du tableau est gale au nombre de ressources 'PICT' dont le nom commence par "Utilisateur Intf/" disponibles dans la base. Chaque image est charge dans un lment du tableau :

LISTE RESSOURCES ("PICT";$aiResIDs;$asResNoms) TABLEAU IMAGE (<>tabImages;Taille tableau($aiResIDs)) $vlPictElem:=0 Boucle ($vlElem;1;Taille tableau(<>tabImages)) Si ($asResNoms="Utilisateur Intf/@") $vlPictElem:=vlPictElem+1 LIRE RESSOURCE IMAGE("PICT";$aiResIDs{$vlElem};$vgImage) <>tabImages{$vlPictElem}:=$vgImage Fin de si Fin de boucle TABLEAU IMAGE (<>tabImages;$vlPictElem)

4e Dimension - Langage 1807

TABLEAU POINTEUR

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLEAU POINTEUR (nomTableau; taille{; taille2}) Paramtre nomTableau taille taille2 Type Tableau Numrique Numrique Description Nom du tableau Nombre d'lments du tableau ou Nombre de tableaux si taille2 est spcifi Nombre d'lments des tableaux deux dimensions

Description La commande TABLEAU POINTEUR cre ou redimensionne un tableau d'lments de type Pointeur en mmoire. Le paramtre nomTableau est le nom du tableau. Le paramtre taille est le nombre d'lments du tableau. Le paramtre taille2 est optionnel. Si vous le spcifiez, cette commande cre un tableau deux dimensions. Dans ce cas, taille spcifie le nombre de lignes et taille2 spcifie le nombre de colonnes de chaque tableau. Chaque ligne dans un tableau deux dimensions peut tre traite la fois comme un lment et comme un tableau. Cela signifie que vous pouvez insrer et supprimer des tableaux entiers dans un tableau deux dimensions, par l'intermdiaire des autres commandes de ce thme, lorsque vous travaillez avec la premire dimension du tableau. Lorsque vous appliquez la commande TABLEAU POINTEUR un tableau existant : Si vous agrandissez sa taille, les lments existants ne sont pas modifis, les nouveaux lments sont initialiss un pointeur nul (ce qui signifie que la fonction Nil applique l'un de ces lments retourne Vrai). Si vous rduisez sa taille, les lments du "bas" du tableau sont supprims et perdus. Exemples (1) Cet exemple cre un tableau process contenant 100 lments de type Pointeur :

TABLEAU POINTEUR (tabPointeurs; 100)

(2) Cet exemple cre un tableau local de 100 lignes contenant chacune 50 lments de type Pointeur :

TABLEAU POINTEUR ($tabPointeurs;100;50)

1808 4e Dimension - Langage

(3) Cet exemple cre un tableau interprocess d'lments de type Pointeur dont la taille est gale au nombre de tables dans la base et remplit chaque lment pointant vers la table dont le numro est le mme que celui de l'lment :

TABLEAU POINTEUR (<>tabPointeurs;Nombre de tables) Boucle($vElem;1;Taille tableau(<>tabPointeurs)) <>tabPointeurs{$vElem}:=Table($vElem) Fin de boucle

4e Dimension - Langage 1809

Taille tableau

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Taille tableau (tableau) Numrique Paramtre tableau Rsultat Type Tableau Numrique Description Tableau dont vous dsirez connatre la taille Nombre d'lments dans le tableau

Description Taille tableau retourne le nombre d'lments de tableau. Exemples (1) L'exemple suivant retourne la taille du tableau monTableau :

vTaille := Taille tableau (monTableau) ` vTaille reoit la taille de monTableau

(2) L'exemple suivant retourne le nombre de lignes d'un tableau deux dimensions :

vlLignes:=Taille tableau(t2DTableau)

` vlLignes reoit la taille de t2DTableau

(3) L'exemple suivant retourne le nombre de colonnes d'une ligne d'un tableau deux dimensions :

` vlColonnes reoit la taille de t2DTableau{10} vlColonnes:=Taille tableau(t2DTableau{10})

Rfrence INSERER LIGNES, SUPPRIMER LIGNES.

1810 4e Dimension - Langage

TRIER TABLEAU

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TRIER TABLEAU (tableau{; tableau2; ...; tableauN}{; sensDuTri}) Paramtre tableau sensDuTri Type Tableau > ou < Description Tableau(x) trier > pour effectuer un tri par ordre croissant ou < pour effectuer un tri par ordre dcroissant Tri croissant si ce paramtre est omis

Description La commande TRIER TABLEAU trie un ou plusieurs tableaux par ordre croissant ou dcroissant. Note : Vous ne pouvez pas trier de tableaux de type Pointeur ou Image. Vous pouvez trier un lment d'un tableau deux dimensions (c'est--dire t2DTableau{$vlCetElment}), mais vous ne pouvez pas trier le tableau 2D lui-mme (c'est--dire t2DTableau). Le paramtre sensDuTri spcifie l'ordre du tri : croissant ou dcroissant. Si sensDuTri est gal au symbole suprieur (>), l'ordre du tri est croissant. Si sensDuTri est gal au symbole infrieur (<), l'ordre du tri est dcroissant. Si sensDuTri est omis, l'ordre du tri est croissant. Si plus d'un tableau est spcifi, les tableaux sont tris en fonction de l'ordre dfini pour le premier tableau (les tris multi-niveaux ne sont pas possibles dans ce cas). Ce fonctionnement est particulirement utile avec les zones de dfilement dans des formulaires : TRIER TABLEAU assure la synchronisation des tableaux utiliss pour ces zones. Exemples (1) L'exemple suivant cre deux tableaux et les trie en fonction du nom de la socit : TOUT SELECTIONNER ([Personnes]) SELECTION VERS TABLEAU ([Personnes]Noms;tabNoms;[Personnes]Socits; tabSocits) TRIER TABLEAU (tabSocits; tabNoms; >)

4e Dimension - Langage 1811

Cependant, comme TRIER TABLEAU n'effectue pas de tris multi-niveaux, les noms des personnes apparatront en dsordre l'intrieur de chaque socit. Pour que les noms des personnes soient tris pour chaque socit, vous devrez plutt crire : TOUT SELECTIONNER ([Personnes]) TRIER ([Personnes];[Personnes]Socits; >;[Personnes]Noms;>) SELECTION VERS TABLEAU ([Personnes]Noms;tabNoms;[Personnes]Socits; tabSocits) (2) Vous affichez les noms d'une table [Personnes] dans une fentre flottante. Cette liste de noms peut tre trie de A vers Z ou de Z vers A en fonction du bouton sur lequel vous cliquez, dans la fentre. Comme il se peut que certaines personnes portent le mme nom, vous avez galement cr un champ [Personnes]Numro ID qui est un champ index unique. Lorsque vous cliquez sur un nom dans la liste, vous voulez rcuprer l'enregistrement correspondant. En utilisant un tableau synchronis et cach des numros d'ID, vous tes certain d'accder l'enregistrement correspondant au nom slectionn : ` Mthode objet du tableau tabNoms Au cas ou : (Evenement formulaire=Sur chargement) TOUT SELECTIONNER([Personnes]) SELECTION VERS TABLEAU([Personnes]Noms;tabNoms;[Personnes]Numro ID; tabIDs) TRIER TABLEAU(tabNoms;tabIDs;>) : (Evenement formulaire=Sur libration) EFFACER VARIABLE(tabNoms) EFFACER VARIABLE(tabIDs) : (Evenement formulaire=Sur clic) Si (tabNoms#0) ` Utiliser le tableau tabIDs pour rcuprer le bon enregistrement CHERCHER([Personnes];[Personnes]Numro IDr=tabIDs{tabNoms}) ` Traiter ici l'enregistrement Fin de si Fin de cas ` Mthode objet du bouton bAversZ ` Tri croissant des tableaux en conservant la synchronisation TRIER TABLEAU(tabNoms;tabIDs;>) ` Mthode objet du bouton bZversA ` Tri dcroissant des tableaux en conservant la synchronisation TRIER TABLEAU(tabNoms;tabIDs;<)

Rfrence SELECTION VERS TABLEAU, TABLEAU MULTI TRI, TRIER.

1812 4e Dimension - Langage

TABLEAU MULTI TRI

Tableaux version 2003 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLEAU MULTI TRI (tableau{; sensDuTri}{; tableau2; sensDuTri2; ...; tableauN; sensDuTriN}) Paramtre tableau sensDuTri Type Tableau > ou < Description Tableau(x) trier > pour effectuer un tri croissant ou < pour effectuer un tri dcroissant Si omis = pas de tri

TABLEAU MULTI TRI (nomTabPtr; nomTabTri) Paramtre nomTabPtr nomTabTri Type Tab pointeur Tab Entier long Description Tableau de pointeurs de tableaux Tableau dordres de tri (1 = tri par ordre croissant, -1 = tri par ordre dcroissant, 0 = synchronisation avec des tris prcdents)

Description La commande TABLEAU MULTI TRI vous permet deffectuer un tri multi-critres sur un ensemble de tableaux. Cette fonction est notamment utile dans le cadre des zones de dfilement groupes dans les formulaires. Cette commande admet deux syntaxes diffrentes. Premire syntaxe : TABLEAU MULTI TRI (tableau{; sensDuTri}{; tableau2; sensDuTri2; ...; tableauN; sensDuTriN}) Cette syntaxe est la plus simple, elle permet de passer directement les noms des tableaux synchroniss auxquels vous souhaitez appliquer un tri multi-critres. Vous pouvez passer un nombre illimit de couples (tableau;> ou <) et/ou de tableaux seuls. Tous les tableaux passs en paramtres sont tris de manire synchronise. Vous pouvez passer des tableaux de tout type, lexception des tableaux de pointeurs et dimages. Vous pouvez trier un lment dun tableau deux dimensions (cest--dire t2DTableau{$vlCetElment}), mais vous ne pouvez pas trier le tableau 2D lui-mme (cest-dire t2DTableau). Pour utiliser le contenu dun tableau comme critre de tri, passez le paramtre sensDuTri. La valeur du paramtre (> ou <) dfinit lordre (croissant ou dcroissant) dans lequel le tableau sera tri. Si le paramtre sensDuTri est omis, le contenu du tableau nest pas utilis comme critre de tri. Note : Attention, au moins un critre de tri doit tre pass pour que la commande fonctionne. Si aucun critre de tri nest dfini, une erreur est gnre. 4e Dimension - Langage 1813

Les niveaux de tris sont dtermins par lordre dans lequel les tableaux sont passs la commande : la position dun tableau avec critre dans la syntaxe dtermine son niveau de tri. Seconde syntaxe : TABLEAU MULTI TRI (nomTabPtr; nomTabTri) Cette syntaxe, plus complexe, est prcieuse pour les dveloppements gnriques (par exemple, vous pouvez crer une mthode gnrique de tri des tableaux de tout type, ou encore gnrer lquivalent dun TRIER TABLEAU gnrique). La paramtre nomTabPtr contient le nom dun tableau de pointeurs de tableaux ; chaque lment de ce tableau est un pointeur dsignant un tableau trier. Les tris seront effectus dans lordre des pointeurs de tableaux dfini par nomTabPtr. Note : nomTabPtr peut tre un tableau de pointeurs local ($nomTabPtr), process (nomTabPtr) ou interprocess (<>nomTabPtr). En revanche, les lments de ce tableau doivent pointer sur des tableaux process ou interprocess uniquement. La paramtre nomTabTri contient le nom dun tableau dont chaque lment indique lordre de tri (-1, 0 ou 1) de llment du tableau de pointeurs correspondant : -1 = Tri par ordre dcroissant. 0 = Le tableau nest pas utilis comme critre de tri mais doit tre tri en fonction des autres tris. 1 = Tri par ordre croissant. Note : Vous ne pouvez pas trier de tableaux de type Pointeur ou Image. Vous pouvez trier un lment dun tableau deux dimensions (cest--dire t2DTableau{$vlCetElment}), mais vous ne pouvez pas trier le tableau 2D lui-mme (cest--dire t2DTableau). A chaque lment du tableau nomTabPtr doit correspondre un lment du tableau nomTabTri. Les deux tableaux doivent donc avoir exactement le mme nombre dlments. Exemples (1) Lexemple suivant utilise la premire syntaxe : il cre quatre tableaux et les trie par ville (ordre croissant) puis par salaire (ordre dcroissant), les deux derniers tableaux tab_Noms et tab_NumTel tant synchroniss en fonction des critres de tri prcdents : TOUT SELECTIONNER([Employs]) SELECTION VERS TABLEAU([Employs]Ville;tab_Villes;[Employs]Salaire;tab_Salaire; [Employs]Nom;tab_Noms;[Employs]NumTel;tab_NumTel) TABLEAU MULTI TRI (tab_Villes;>;tab_Salaire;<;tab_Noms;tab_NumTel)

Si vous souhaitez que le tableau des noms soit utilis comme troisime critre de tri, il vous suffit dajouter > ou < derrire le paramtre tab_Noms. A noter que la syntaxe : TABLEAU MULTI TRI (tab_Villes;>;tab_Salaire;tab_Noms;tab_NumTel) quivaut strictement : TRIER TABLEAU(tab_Villes;tab_Salaire;tab_Noms;tab_NumTel;>)

1814 4e Dimension - Langage

(2) Lexemple suivant utilise la seconde syntaxe : il cre quatre tableaux et les trie par ville (ordre croissant) et socit (ordre dcroissant), les deux derniers tableaux tab_Noms et tab_NumTel tant synchroniss en fonction des critres de tri prcdents : TOUT SELECTIONNER([Employs]) SELECTION VERS TABLEAU([Employs]Ville;tab_Villes;[Employs]Socit;tab_Socit; [Employs]Nom;tab_Noms;[Employs]NumTel;tab_NumTel) TABLEAU POINTEUR(tab_Pointeurs;4) TABLEAU ENTIER LONG(tab_Tris;4) tab_Pointeurs{1}:=->tab_Villes tab_Tris{1}:=1 tab_Pointeurs{2}:=->tab_Socit tab_Tris{2}:=-1 tab_Pointeurs{3}:=->tab_Noms tab_Tris{3}:=0 tab_Pointeurs{4}:=->tab_NumTel tab_Tris{4}:=0 TABLEAU MULTI TRI (tab_Pointeurs;tab_Tris)

Si vous souhaitez que le tableau des noms soit utilis comme troisime critre de tri, il vous suffit dassigner la valeur 1 llment tab_Tris{3}. Ou bien, si vous souhaitez que les tableaux soient tris uniquement sur le critre des villes, assignez la valeur 0 aux lments tab_Tris{2}, tab_Tris{3} et tab_Tris{4}. De cette manire, vous obtenez un rsultat identique TRIER TABLEAU(tab_Villes;tab_Socit;tab_Noms;tab_NumTel;>). Rfrence SELECTION VERS TABLEAU, TRIER, TRIER TABLEAU.

4e Dimension - Langage 1815

Chercher dans tableau

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Chercher dans tableau (tableau; valeur{; dbut}) Numrique Paramtre tableau valeur dbut Rsultat Type Tableau Expression Numrique Numrique Description Tableau dans lequel effectuer la recherche Valeur de mme type rechercher dans le tableau Elment partir duquel commencer la recherche Numro du premier lment trouv correspondant valeur

Description Chercher dans tableau retourne le numro du premier lment de tableau qui correspond valeur. Chercher dans tableau peut tre utilis avec des tableaux de type Texte, Alpha, Numrique, Date, Pointeur et Boolen. Les paramtres tableau et valeur doivent tre du mme type. Si aucun lment n'est trouv, Chercher dans tableau renvoie 1. Si dbut est spcifi, Chercher dans tableau commence la recherche l'lment spcifi par dbut. Si dbut n'est pas spcifi, Chercher dans tableau commence la recherche l'lment 1. Exemples (1) La mthode projet suivante efface tous les lments vides du tableau alpha ou texte pass en paramtre :

1816 4e Dimension - Langage

` Mthode projet NETTOYER TABLEAU ` NETTOYER TABLEAU ( Pointeur ) ` NETTOYER TABLEAU ( -> Tableau Texte ou Alpha ) C_POINTEUR ($1) Repeter $vlElem:=Chercher dans tableau ($1->;"") Si ($vlElem>0) SUPPRIMER LIGNES ($1->;$vlElem) Fin de si Jusque ($vlElem<0)

Une fois que cette mthode projet est implmente dans votre base, vous pouvez crire, par exemple : TABLEAU TEXTE (TabValeurs;...) ` ... ` Utiliser le tableau comme vous voulez ` ... ` Eliminer les lments chanes vides NETTOYER TABLEAU (->TabValeurs) (2) La mthode projet suivante slectionne le premier lment d'un tableau dont le pointeur pass comme premier paramtre correspond la valeur de la variable ou du champ dont le pointeur est pass en second paramtre : ` Mthode projet SELECTIONNER ELEMENT ` SELECTIONNER ELEMENT ( Pointeur ; Pointeur) ` SELECTIONNER ELEMENT ( -> Tableau Texte ou Alpha ; -> Champ ou variable de type Texte ou Alpha )

$1->:=Chercher dans tableau ($1->;$2->) ` Si aucun lment n'est trouv, fixer le tableau aucun lment slectionn Si ($1->=-1) $1->:=0 Fin de si

Une fois que cette mthode projet est implmente dans la base, vous pouvez crire, par exemple :

4e Dimension - Langage 1817

` Mthode objet du pop-up menu TabTitres Au cas ou : (Evenement formulaire=Sur chargement) SELECTIONNER ELEMENT (->TabTitres;->[Personnes]Titre) Fin de cas Rfrence INSERER LIGNES, SUPPRIMER LIGNES, Taille tableau.

1818 4e Dimension - Langage

Compter dans tableau

Tableaux version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Compter dans tableau (tableau; valeur) Entier long Paramtre tableau valeur Rsultat Type Tableau Expression Entier long Description Tableau dans lequel effectuer le comptage Valeur compter Nombre doccurrences trouves

Description La commande Compter dans tableau retourne le nombre doccurrences de valeur dans tableau. Cette commande peut tre utilise avec des tableaux de type Texte, Alpha, Numrique, Date, Pointeur et Boolen. Les paramtres tableau et valeur doivent tre du mme type ou dun type compatible. Si aucun lment de tableau ne correspond valeur, la commande retourne 0. Exemple Lexemple suivant permet dafficher le nombre de lignes slectionnes dans une list box :

`tBList est le nom dun tableau de colonne List box ALERTE(Chaine(Compter dans tableau(tBList;Vrai))+" ligne(s) slectionne(s) dans la list box")

Rfrence Chercher dans tableau.

4e Dimension - Langage 1819

INSERER LIGNES

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

INSERER LIGNES (tableau; position{; combien}) Paramtre tableau position combien Type Tableau Numrique Numrique Description Nom du tableau dans lequel insrer des lments Position de dpart du ou des lment(s) insrer Nombre d'lments insrer ou 1 lment si ce paramtre est omis

Description INSERER LIGNES insre un ou plusieurs lments ou "lignes" dans le tableau tableau. Les nouveaux lments sont insrs avant l'lment spcifi par position, et initialiss la valeur vide du type du tableau. Tous les lments situs au-del de position sont dcals vers le bas d'un offset ou de la valeur spcifie par combien. Si position est suprieur la taille du tableau, les lments sont insrs la fin du tableau. Le paramtre combien reprsente le nombre de lignes insrer. Si combien n'est pas spcifi, un seul lment est insr. La taille du tableau est augmente de combien. Exemples (1) L'exemple suivant insre cinq nouveaux lments partir de l'lment 10 :

INSERER LIGNES (unTableau; 10; 5)

(2) L'exemple suivant ajoute un lment un tableau :

$vlElem:=Taille tableau (unTableau)+1 INSERER LIGNES (unTableau;$vlElem) unTableau{$vlElem}:=...

Rfrence SUPPRIMER LIGNES, Taille tableau.

1820 4e Dimension - Langage

SUPPRIMER LIGNES

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER LIGNES (tableau; position{; combien}) Paramtre tableau position combien Type Tableau Numrique Numrique Description Tableau dans lequel supprimer des lignes Elment de dpart de la suppression Nombre d'lments supprimer ou 1 lment si ce paramtre est omis

Description La commande SUPPRIMER LIGNES supprime un ou plusieurs lment(s) de tableau. Les lments sont supprims partir de l'lment spcifi par position. Le paramtre combien est le nombre d'lments supprimer. Si combien n'est pas spcifi, un seul lment est supprim. La taille du tableau est rduite de combien. Exemples (1) L'exemple suivant supprime trois lments en commenant l'lment 5 :

SUPPRIMER LIGNES (unTableau; 5; 3)

(2) L'exemple suivant supprime le dernier lment d'un tableau, s'il existe : $vlElem:=Taille tableau (unTableau) Si ($vlElem>0) SUPPRIMER LIGNES (unTableau;$vlElem) Fin de si

Rfrence INSERER LIGNES, Taille tableau.

4e Dimension - Langage 1821

AJOUTER A TABLEAU

Tableaux version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

AJOUTER A TABLEAU (tableau; valeur) Paramtre tableau valeur Type Tableau Expression Description Tableau auquel ajouter une valeur Valeur ajouter au tableau

Description La commande AJOUTER A TABLEAU ajoute une nouvelle ligne la fin du tableau et lui affecte la valeur passe dans le paramtre valeur. En mode interprt, si le tableau na pas t dfini au pralable, la commande le cre et lui attribue un type en fonction de celui de valeur. Cette commande fonctionne avec tous les types de tableaux : chane, numrique, boolen, date, pointeur et image. Le type de valeur doit correspondre au type du tableau, sinon lerreur de syntaxe 54 Les arguments sont incompatibles est gnre. Les combinaisons suivantes sont toutefois possibles : un tableau de type chane (Texte ou Alpha) accepte toute valeur de type Texte ou Alpha. un tableau de type numrique (Entier, Entier long ou Rel) accepte toute valeur de type Entier, Entier long, Numrique ou Heure. Exemple Le code suivant : INSERER LIGNES($montableau;Taille tableau($montableau)+1) $montableau{Taille tableau($montableau)}:=$mavaleur ... peut tre remplac par :

AJOUTER A TABLEAU($montableau;$mavaleur)

Rfrence INSERER LIGNES, SUPPRIMER LIGNES.

1822 4e Dimension - Langage

COPIER TABLEAU

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

COPIER TABLEAU (source; destination) Paramtre source destination Type Tableau Tableau Description Tableau recopier Tableau de destination

Description La commande COPIER TABLEAU cre ou remplace le tableau destination avec les mmes contenu, taille et type que le tableau source. Les tableaux source et destination peuvent tre des tableaux locaux, process ou interprocess. La porte du tableau n'a pas d'importance lors de la duplication des tableaux. Exemple L'exemple suivant remplit un tableau C. Un nouveau tableau, "D", est ensuite cr, contenant les mmes informations que le tableau C : ` Slectionner tous les enregistrements dans la table TOUT SELECTIONNER ([Contacts]) ` Remplir le tableau C avec les donnes du champ SELECTION VERS TABLEAU ([Contacts]Socit; C) COPIER TABLEAU (C; D) ` Copier le tableau C dans le tableau D

4e Dimension - Langage 1823

ENUMERATION VERS TABLEAU

Tableaux version 5

Note de compatibilit En raison de la nouvelle implmentation des listes hirarchiques, la compatibilit de cette fonction n'a pu tre totalement maintenue. Aussi, compter de la version 6, il est prfrable d'utiliser la fonction Charger liste pour travailler avec des listes hirarchiques dfinies dans l'diteur d'numrations, en mode Structure.
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENUMERATION VERS TABLEAU (numration; tableau{; rfElments}) Paramtre numration tableau rfElments Type Alpha Tableau Tableau Num Description Enumration de laquelle copier les lments du premier niveau Tableau dans lequel copier les lments de l'numration Numros de rfrence des lments de l'numration

Description La commande ENUMERATION VERS TABLEAU cre ou remplace le tableau tableau avec les lments du premier niveau de l'numration numration. Si vous n'avez pas pralablement dfini le tableau comme tableau de type Alpha ou Texte, ENUMERATION VERS TABLEAU cre un tableau de type Texte par dfaut. Le paramtre optionnel rfElments (un tableau de type Numrique) retourne les numros de rfrence des lments de l'numration. Note de compatibilit : Dans la version prcdente de 4D, le troisime paramtre tait un tableau rempli avec les noms de toutes les numrations lies. Si un lment de l'numration principale comportait une numration lie, le nom de cette dernire tait place dans l'lment de tableau ayant le mme numro que l'lment de l'numration. S'il n'y avait pas d'numration lie, l'lment insr tait une chane vide. Ce second tableau avait la mme taille que tableau. Vous pouviez utiliser les noms dans le tableau liens pour accder aux numrations lies.

1824 4e Dimension - Langage

Vous pouvez continuer utiliser ENUMERATION VERS TABLEAU pour construire un tableau bas sur les lments de premier niveau d'une numration. Cependant, cette commande ne vous donne pas les moyens de travailler avec les lments des sous-numrations. Pour exploiter pleinement les listes hirarchiques, utilisez les nouvelles commandes de listes hirarchiques introduites par la version 6. Exemple L'exemple suivant recopie les lments de l'numration Rgions dans le tableau tabRgions :

ENUMERATION VERS TABLEAU ("Rgions"; tabRgions)

Rfrence Charger liste, STOCKER LISTE, TABLEAU VERS ENUMERATION.

4e Dimension - Langage 1825

TABLEAU VERS ENUMERATION

Tableaux version 5

Note de compatibilit En raison de la nouvelle implmentation des listes hirarchiques, la compatibilit de cette commande n'a pu tre totalement maintenue. Aussi, compter de la version 6, il est prfrable d'utiliser la commande STOCKER LISTE pour travailler avec des listes hirarchiques dfinies dans l'diteur d'numrations, en mode Structure.
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLEAU VERS ENUMERATION (tableau; numration{; rfElments}) Paramtre tableau numration rfElments Type Tableau Alpha Tableau Num Description Tableau duquel copier les lments Enumration dans laquelle copier les lments de tableau Tableau numrique des numros de rfrence des lments

Description La commande TABLEAU VERS ENUMERATION cre ou remplace l'numration numration (dfinie dans l'diteur d'numrations en mode Structure) en utilisant les lments du tableau tableau. Cette commande vous permet de dfinir seulement les lments du premier niveau de l'numration. Le paramtre optionnel rfElments, s'il est pass, doit tre un tableau de type Numrique synchronis avec le tableau tableau. Chaque lment de ce tableau indique le numro de rfrence de l'lment de l'numration correspondant dans tableau. Si ce paramtre est omis, 4D affecte automatiquement aux lments de l'numration les numros de rfrence 1, 2... N. Note de compatibilit : Dans la version prcdente de 4D, ce paramtre tait utilis pour lier d'autres numrations chaque lment de tableau. Si un lment du tableau liens correspondait au nom d'une numration existante, cette numration tait alors rattache l'lment correspondant.

1826 4e Dimension - Langage

Vous pouvez continuer utiliser TABLEAU VERS ENUMERATION pour construire une numration base sur les lments d'un tableau. Cependant, cette commande ne vous donne pas les moyens de travailler avec les lments des sous-numrations. Pour exploiter pleinement les listes hirarchiques, utilisez les nouvelles commandes de listes hirarchiques introduites avec la version 6 de 4D. Exemple L'exemple suivant copie le tableau tabRgions dans l'numration "Rgions" :

TABLEAU VERS ENUMERATION (tabRgions; "Rgions")

Rfrence APPELER SUR ERREUR, Charger liste, ENUMERATION VERS TABLEAU, STOCKER LISTE. Gestion des erreurs La commande TABLEAU VERS ENUMERATION gnre l'erreur -9957 lorsqu'elle est applique une numration en cours de modification en mode Structure. Vous pouvez intercepter cette erreur l'aide d'une mthode projet de gestion des erreurs installe par la commande APPELER SUR ERREUR.

4e Dimension - Langage 1827

SELECTION VERS TABLEAU

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SELECTION VERS TABLEAU (champ | table; tableau{; champ2 | table2; tableau2; ...; champN | tableN; tableauN}) Paramtre champ | table tableau Type Champ ou Table Tableau Description Champ rcuprer dans le tableau ou Table dont les numros d'enregistrements sont rcuprer dans le tableau Tableau recevant les valeurs des champs ou les numros d'enregistrements

Description La commande SELECTION VERS TABLEAU cre un ou plusieurs tableaux et y copie les valeurs des champ(s) ou les numros d'enregistrement(s) de la slection courante. SELECTION VERS TABLEAU s'applique la slection courante de la table spcifie dans le premier paramtre. La commande peut raliser les oprations suivantes : Charger les valeurs d'un ou plusieurs champs, Charger les numros des enregistrements, l'aide de la syntaxe ...;[table];tableau;... Charger des valeurs de champs lis, s'il existe un lien automatique de N vers 1 entre les tables, ou si vous avez pralablement appel la commande FIXER LIENS AUTOMATIQUES pour rendre automatiques les liens manuels N vers 1 (dans les deux cas, les valeurs peuvent tre charges travers plusieurs niveaux de liens N vers 1 entre les tables). Chaque tableau est typ en fonction du type de champ. Il y a cependant deux exceptions : Lorsqu'un champ de type Texte est copi dans un tableau Alpha, le tableau reste de type Alpha. La copie d'un champ de type Heure provoquera la cration d'un tableau Entier long. Note : Vous ne pouvez pas utiliser de champs de type Sous-table ni de sous-champs. Si vous chargez les numros des enregistrements, ils sont copis dans un tableau de type Entier long. 4D Server : La commande SELECTION VERS TABLEAU est optimise pour 4D Server. Chaque tableau est cr sur le serveur puis envoy en totalit sur le poste client.

1828 4e Dimension - Langage

ATTENTION : SELECTION VERS TABLEAU peut crer des tableaux de taille importante, en fonction de la taille de la slection courante, ainsi que du type et de la taille des donnes charger. Comme les tableaux rsident en mmoire, il peut tre utile de tester la taille des tableaux crs aprs l'excution de la commande, ou d'utiliser une mthode projet d'appel sur erreur. Note : Aprs un appel SELECTION VERS TABLEAU, la slection courante et l'enregistrement courant ne sont pas modifis, mais l'enregistrement courant n'est plus charg. Utilisez la commande CHARGER ENREGISTREMENT aprs un SELECTION VERS TABLEAU si vous souhaitez utiliser les valeurs des champs de l'enregistrement courant. Exemples (1) Dans l'exemple suivant, la table [Personnes] dispose d'un lien automatique vers la table [Socits]. Les deux tableaux tabNoms et tabAdresseSocits sont dimensionns en fonction du nombre d'enregistrements dans la slection de la table [Personnes] et contiennent des informations venant des deux tables :

SELECTION VERS TABLEAU ([Personnes]Nom; tabNoms; [Socits]Adresse; tabAdresseSocits)

(2) L'exemple ci-dessous retourne les numros d'enregistrements de la table [Clients] dans le tableau tabNumEnr et les valeurs du champ [Clients]Noms dans le tableau tabNoms :

SELECTION VERS TABLEAU([Clients]; tabNumEnr; [Clients]Noms; tabNoms)

Rfrence APPELER SUR ERREUR, FIXER LIENS AUTOMATIQUES, SELECTION LIMITEE VERS TABLEAU, TABLEAU MULTI TRI, TABLEAU VERS SELECTION.

4e Dimension - Langage 1829

SELECTION LIMITEE VERS TABLEAU

Tableaux version 5.5.3

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SELECTION LIMITEE VERS TABLEAU (dbut; fin; champ | table; tableau{; champ2 | table2; tableau2; ...; champN | tableN; tableauN}) Paramtre dbut fin champ | table tableau Type Numrique Numrique Description Numro de l'enregistrement sous-slectionn partir duquel commencer la copie des donnes Numro de l'enregistrement sous-slectionn auquel arrter la copie des donnes Champ utiliser pour rcuprer les donnes ou Table utiliser pour rcuprer les numros d'enregistrements Tableau recevant les donnes ou les numros d'enregistrements

Champ | Table Tableau

Description SELECTION LIMITEE VERS TABLEAU cre un ou plusieurs tableaux et y copie des donnes en provenance des champs de la slection courante ou les numros des enregistrements de la slection courante. A la diffrence de SELECTION VERS TABLEAU qui s'applique l'intgralit de la slection courante, SELECTION LIMITEE VERS TABLEAU s'applique uniquement une sous-slection d'enregistrements, dfinie par les paramtres dbut et fin. Vous devez passer dans les paramtres dbut et fin des numros d'enregistrements sousslectionns s'inscrivant dans l'intervalle dfini par la formule 1 <= dbut <= fin <= Enregistrements trouves ([...]). Si vous passez des numros correspondant 1 <= dbut = fin <= Enregistrements trouves ([...]), ce sont les champs ou les numros des enregistrements de la slection courante rpondant dbut = fin qui seront chargs. Si vous passez des numros d'enregistrements incorrects, vous obtiendrez les rsultats suivants : Si fin > Enregistrements trouves ([...]), la commande retourne toutes les valeurs, partir de l'enregistrement sous-slectionn spcifi par dbut jusqu'au dernier enregistrement sousslectionn. Si dbut > fin, la commande ne retourne que les valeurs de l'enregistrement dbut.

1830 4e Dimension - Langage

Si les deux paramtres incompatibles avec la taille de la sous-slection, les tableaux sont retourns vides Comme SELECTION VERS TABLEAU, SELECTION LIMITEE VERS TABLEAU s'applique la slection de la table passe en paramtre. La commande peut raliser les oprations suivantes : Charger les valeurs d'un ou plusieurs champs, Charger les numros des enregistrements, l'aide de la syntaxe ...;[table];tableau;... Charger des valeurs de champs lis, s'il existe un lien automatique de N vers 1 entre les tables, ou si vous avez pralablement appel la commande FIXER LIENS AUTOMATIQUES pour rendre automatiques les liens manuels N vers 1 (dans les deux cas, les valeurs peuvent tre charges travers plusieurs niveaux de liens N vers 1 entre les tables). Chaque tableau est typ en fonction du type de champ. Il y a cependant deux exceptions : Lorsqu'un champ de type Texte est copi dans un tableau Alpha, le tableau reste de type Alpha. La copie d'un champ de type Heure provoquera la cration d'un tableau Entier long. Note : Vous ne pouvez pas utiliser de champs de type Sous-table ni de sous-champs. Si vous chargez les numros des enregistrements, ils sont copis dans un tableau de type Entier long. 4D Server : La commande SELECTION LIMITEE VERS TABLEAU est optimise pour 4D Server. Chaque tableau est cr sur le serveur puis envoy en totalit sur le poste client. ATTENTION : SELECTION LIMITEE VERS TABLEAU peut crer des tableaux de taille importante, en fonction de l'intervalle dfini par dbut et fin, ainsi que du type et de la taille des donnes charger. Comme les tableaux rsident en mmoire, il peut tre utile de tester la taille des tableaux crs aprs l'excution de la commande, ou d'utiliser une mthode projet d'interception d'erreurs, installe par la commande APPELER SUR ERREUR. Une fois la commande correctement excute, la taille des tableaux rsultants est gale (fin-dbut)+1 sauf si le paramtre fin est suprieur au nombre d'enregistrements dans la slection. Dans ce cas, les tableaux contiennent (Enregistrements trouves([...])-dbut)+1 lments. Exemples (1) La ligne de code suivante utilise les 50 premiers enregistrements de la slection courante de la table [Factures]. Les valeurs du champ [Factures]RfFacture et du champ li [Clients]RfClient sont charges.

SELECTION LIMITEE VERS TABLEAU (1;50;[Factures]RfFacture;tlRfFacture; [Clients]RfClient;tlRfClient)

4e Dimension - Langage 1831

(2) Les lignes de code suivantes utilisent les 50 derniers enregistrements de la slection courante de la table [Factures]. Les numros d'enregistrements de la table [Factures] ainsi que ceux de la table lie [Clients] sont chargs :

lTailleSl := Enregistrements trouves ([Factures]) SELECTION LIMITEE VERS TABLEAU (lTailleSl-49;lTailleSl;[Factures];taFactureNum; [Clients];taClientNum)

(3) Les lignes de code suivantes vous permettent de travailler squentiellement avec des portions de 1000 enregistrements d'une slection importante qui ne peut pas tre charge dans des tableaux en une seule fois : lMaxPage := 1000 lTailleSl := Enregistrements trouves ([Annuaire]) Boucle ($lPage ; 1; 1+((lTailleSl-1)\lMaxPage) ) ` Charger les valeurs et/ou les numros d'enregistrements SELECTION LIMITEE VERS TABLEAU (1+(lMaxPage*($lPage-1)); lMaxPage*$lPage;...;...;...;...;...;...) ` Faire quelque chose avec les tableaux Fin de boucle Rfrence APPELER SUR ERREUR, FIXER LIENS AUTOMATIQUES, SELECTION VERS TABLEAU.

1832 4e Dimension - Langage

TABLEAU VERS SELECTION

Tableaux version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLEAU VERS SELECTION (tableau; champ{; tableau2; champ2; ...; tableauN; champN}) Paramtre tableau champ Type Tableau Champ Description Tableau copier dans la slection Champ recevant les valeurs du tableau

Description La commande TABLEAU VERS SELECTION copie un ou plusieurs tableaux vers une slection d'enregistrements. Tous les champs lists doivent appartenir la mme table. Si une slection existe au moment de l'appel, les lments du tableau sont copis dans les enregistrements en fonction de l'ordre du tableau et de l'ordre des enregistrements. Si le nombre d'lments du tableau est suprieur au nombre d'enregistrements de la slection courante, de nouveaux enregistrements sont crs. Les enregistrements, qu'ils soient nouveaux ou existants, sont automatiquement sauvegards. Si les tableaux ont des tailles diffrentes, le premier tableau dtermine le nombre d'lments copier. Les tableaux suivants sont copis dans les champs passs aprs chaque nom de tableau. Cette commande effectue l'opration inverse de SELECTION VERS TABLEAU. Cependant, TABLEAU VERS SELECTION ne permet pas d'utiliser de champs en provenance de tables diffrentes ni de tables lies, mme si un lien automatique existe. ATTENTION : Comme TABLEAU VERS SELECTION remplace les informations ventuellement prsentes dans les enregistrements existants, cette commande doit tre utilise avec prudence. Si un enregistrement est verrouill par un autre process pendant l'excution de la commande TABLEAU VERS SELECTION, il n'est pas modifi. Tous les enregistrements verrouills sont placs dans l'ensemble LockedSet. Aprs l'excution de TABLEAU VERS SELECTION, vous pouvez tester si l'ensemble LockedSet contient des enregistrements qui taient verrouills. 4D Server : Cette commande est optimise pour 4D Server. Le tableau est envoy au serveur depuis le poste client. Les enregistrements sont modifis ou crs sur le serveur. Comme une telle requte est gre de faon synchrone, le poste client doit attendre que l'opration se soit correctement droule. Dans les environnements multi-utilisateurs et multi-process, aucun enregistrement verrouill ne sera rcrit.

4e Dimension - Langage 1833

Exemple Dans l'exemple suivant, les deux tableaux tabNoms et tabSocits crivent des donnes dans la table [Personnes]. Les valeurs du tableau tabNoms sont places dans le champ [Personnes]Nom et les valeurs du tableau tabSocits sont places dans le champ [Personnes]Socit :

TABLEAU VERS SELECTION (tabNoms; [Personnes]Nom; tabSocits; [Personnes]Socit)

Rfrence SELECTION VERS TABLEAU.

1834 4e Dimension - Langage

VALEURS DISTINCTES

Tableaux version 6.5 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

VALEURS DISTINCTES (champ; tableau) Paramtre champ tableau Type Champ | Sous-champ Tableau Description Champ ou sous-champ utiliser Tableau devant recevoir les donnes du champ indexable

Description VALEURS DISTINCTES cre et remplit le tableau tableau avec toutes les valeurs distinctes provenant du champ champ pour la slection courante de la table laquelle le champ ou sous-champ appartient. Vous pouvez passer cette commande tout type de champ indexable, cest--dire dont le type supporte lindexation mais qui n'est pas forcment index. Toutefois, lexcution de la commande avec des champs non indexs est plus lente qu'avec des champs indexs. A noter galement que dans ce cas, la commande perd l'enregistrement courant. Vous pouvez galement excuter cette commande avec un sous-champ. Dans ce cas, le sous-champ doit tre index. Note : La commande FIXER PARAMETRE BASE permet de dfinir si VALEURS DISTINCTES doit utiliser ou non l'index, en fonction du nombre d'enregistrements prsents dans la slection. Si vous passez un champ, VALEURS DISTINCTES analyse et extrait les valeurs distinctes pour les enregistrements slectionns uniquement. En revanche, si vous passez un sous-champ, VALEURS DISTINCTES examine tous les sous-enregistrements de chaque enregistrement slectionn. Note : Lorsque vous excutez VALEURS DISTINCTES au sein d'une transaction non encore termine, la commande tient compte des enregistrements crs au cours de la transaction. Le tableau utilis par VALEURS DISTINCTES doit tre du mme type que le champ ou souschamp pass en premier paramtre, sinon le tableau est retyp. Il y a une exception cette rgle : si le champ est de type Heure, le tableau correspondant doit tre de type Entier long.

4e Dimension - Langage 1835

Aprs l'appel, la taille du tableau est gale au nombre de valeurs distinctes trouves dans la slection. La commande ne modifie pas la slection courante ni l'enregistrement courant. Les lments dans tableau sont tris par ordre croissant car VALEURS DISTINCTES utilise l'index du champ. Si cet ordre vous convient, vous n'avez donc pas besoin d'appeler TRIER TABLEAU aprs l'excution de VALEURS DISTINCTES. ATTENTION : VALEURS DISTINCTES peut crer des tableaux de taille importante, en fonction de la taille de la slection courante, ainsi que du type et de la taille des donnes charger. Comme les tableaux rsident en mmoire, il peut tre utile de tester la taille des tableaux crs aprs l'excution de la commande, ou d'utiliser une mthode projet d'interception d'erreurs installe par la commande APPELER SUR ERREUR. 4D Server : Cette commande est optimise pour 4D Server. Le tableau est cr et les valeurs sont calcules sur le serveur. Seul le tableau est envoy au client. Exemples (1) L'exemple suivant cre une liste de villes partir de la slection courante et indique l'utilisateur le nombre de villes dans lesquelles la socit dispose de magasins :

TOUT SELECTIONNER([Revendeurs]) ` Crer une slection d'enregistrements VALEURS DISTINCTES([Revendeurs]Ville;taVilles) ALERTE("Cette socit dispose de magasins dans " +Chaine(Taille tableau(taVilles)) +" villes.")

(2) L'exemple suivant retourne dans taMotsCls tous les mots-cls qui sont lis ( l'aide d'une sous-table) aux documents 4D Write stocks dans la table [Documentation] et dont le sujet est Economie :

CHERCHER ([Documentation];[Documentation]Sujet="Economie") VALEURS DISTINCTES([Documentation]MotsCls'Mot;taMotsCls)

Une fois ce tableau construit, vous pouvez le rutiliser pour chercher rapidement les documents lis au mot-cl slectionn en crivant : CHERCHER([Documentation];[Documentation]MotsCls'Mot=taMotsCls{taMotsCls}) SELECTION VERS TABLEAU ([Documentation]Sujet;taSujets) ` ... Rfrence APPELER SUR ERREUR, FIXER PARAMETRE BASE, SELECTION LIMITEE VERS TABLEAU, SELECTION VERS TABLEAU.

1836 4e Dimension - Langage

TABLEAU ENTIER LONG SUR SELECTION

Tableaux version 6.7 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLEAU ENTIER LONG SUR SELECTION (table; tabEnrg{; tempo}) Paramtre table tabEnrg tempo Type Table Tab Entier long Alpha Description Table de la slection courante Tableau de numros denregistrements Nom de la slection temporaire ou Slection courante si ce paramtre est omis

Description La commande TABLEAU ENTIER LONG SUR SELECTION remplit le tableau tabEnrg avec les numros (absolus) des enregistrements faisant partie de la slection temporaire tempo. Si vous ne passez pas le paramtre tempo, la commande utilise la slection courante de la table table. Note : Llment n 0 du tableau tabEnrg est initialis -1. Rfrence CREER SELECTION SUR TABLEAU.

4e Dimension - Langage 1837

TABLEAU BOOLEEN SUR ENSEMBLE

Tableaux version 6.5

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

TABLEAU BOOLEEN SUR ENSEMBLE (tabBoolen{; ensemble}) Paramtre tabBoolen ensemble Type Tab boolen Alpha Description Tableau d'appartenance des enregistrements lensemble Nom de lensemble ou Ensemble UserSet si ce paramtre est omis

Description La commande TABLEAU BOOLEEN SUR ENSEMBLE remplit un tableau de boolens indiquant si chaque enregistrement de la table laquelle appartient ensemble fait ou non partie de lensemble. Les lments du tableau sont ordonns en fonction de lordre de cration des enregistrements dans la table (numros absolus). Si N est le nombre denregistrements de la table, llment 0 du tableau correspond lenregistrement n 0, llment 1 du tableau correspond lenregistrement n 1, etc. Chaque lment du tableau est mis : Vrai si lenregistrement correspondant fait partie de lensemble, Faux si lenregistrement correspondant ne pas partie de lensemble. Attention, le total nombre dlments du tableau tabBoolen nest pas significatif. En effet, pour des raisons structurelles, il peut tre diffrent du nombre denregistrements effectivement prsents dans la table. Les ventuels lments supplmentaires sont mis Faux. Si vous ne passez pas le paramtre ensemble, la commande utilisera lensemble systme UserSet du process courant. Rfrence CREER ENSEMBLE SUR TABLEAU.

1838 4e Dimension - Langage

61 ________________________ Transactions

4e Dimension - Langage 1839

1840 4e Dimension - Langage

Utiliser des transactions

Transactions version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les transactions sont une srie de modifications effectues l'intrieur d'un process sur des donnes relies entre elles. Une transaction n'est sauvegarde de faon dfinitive dans la base que si la transaction est valide. Si une transaction n'est pas complte, parce qu'elle est annule ou en raison d'un quelconque vnement extrieur, les modifications ne sont pas sauvegardes. Pendant une transaction, toutes les modifications effectues sur les donnes de la base dans le process sont stockes localement dans un buffer temporaire. Si la transaction est accepte avec VALIDER TRANSACTION, les changements sont sauvegards de faon dfinitive. Si la transaction est annule avec ANNULER TRANSACTION, les changements ne sont pas sauvegards. Aprs la validation ou l'annulation d'une transaction, la slection de chaque table pour le process courant devient vide car les transactions manipulent des adresses d'enregistrements temporaires. Pour la mme raison, soyez vigilants en utilisant des slections temporaires au cours d'une transaction. Aprs validation ou annulation d'une transaction, une slection temporaire cre avant ou pendant la transaction peut comporter des adresses d'enregistrements incorrectes. Par exemple, une slection temporaire peut conserver les adresses d'enregistrements dtruits ou l'adresse temporaire d'un enregistrement cr pendant la transaction. Cela s'applique aussi aux ensembles puisqu'ils sont bass sur des tables de bits avec des adresses d'enregistrements. Note : Les enregistrements crs lors d'une transaction reoivent des numros temporaires qui s'incrmentent partir du numro 18 000 000. Les commandes suivantes utilisent des numros d'enregistrements. Leur utilisation dans une transaction est donc dconseille : ALLER A ENREGISTREMENT JOINTURE SELECTION RETOUR REDUIRE SELECTION SCAN INDEX Exemples de transactions
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

L'exemple de cette section s'appuie sur la structure prsente ci-dessous. C'est une base relativement simple de facturation. Les lignes de factures sont stockes dans une table appele [Ligne Facture], qui est relie la table [Factures] par une relation entre les champs [Factures]NoFacture et [Ligne Facture]NoFacture. Lorsqu'une facture est ajoute, un numro unique est calcul avec la commande Numerotation automatique. Le lien entre [Factures] et [Ligne Facture] est du type aller-retour automatique. L'option "Mise jour auto dans les sous-formulaires" est coche.

4e Dimension - Langage 1841

Le lien entre [Ligne Facture] et [Pices] est manuel.

Quand un utilisateur saisit une facture, les actions suivantes doivent tre excutes: Ajouter un enregistrement dans la table [Factures]. Ajouter plusieurs enregistrements dans la table [Ligne Facture]. Mettre jour le champ [Pices]Entrept pour chaque pice figurant sur la facture. En d'autres termes, vous devez sauvegarder les donnes lies. C'est la situation type o vous devez utiliser une transaction. Vous pourrez ainsi tre certain de pouvoir soit sauvegarder tous ces enregistrements pendant l'opration, soit annuler la transaction si un enregistrement ne peut tre ajout ou mis jour. Si vous n'utilisez pas une transaction, vous ne pouvez pas garantir l'intgrit logique des donnes de votre base. Par exemple, si un enregistrement parmi ceux de la table [Pices] est verrouill, vous ne pourrez pas mettre jour la quantit stocke dans le champ [Pices]Entrept. Ce champ sera alors logiquement incorrect. La somme des pices vendues et restantes dans l'entrept ne sera pas gale la quantit d'orgine saisie dans l'enregistrement. Vous pouvez viter cette situation en utilisant les transactions. Il y a plusieurs faons d'effectuer une saisie sous transaction : (1) Vous pouvez laisser 4D grer les transactions votre place en slectionnant l'option Transaction automatique en saisie dans la bote de dialogue des proprits de la base en mode Structure. Dans ce cas, pendant la saisie, 4D ouvre si ncessaire une transaction puis la valide ou l'annule selon que vous avez accept ou non la saisie des donnes. Par exemple, la saisie de donnes dans un formulaire contenant une table lie dans un sousformulaire est une opration qui requiert une transaction. Cette option s'applique toute la base. Si vous voulez grer les transactions vous-mme, vous devez utiliser les commandes de transaction DEBUT TRANSACTION, VALIDER TRANSACTION et ANNULER TRANSACTION.

1842 4e Dimension - Langage

(2) Vous pouvez par exemple crire : LECTURE ECRITURE([Ligne Facture]) LECTURE ECRITURE([Pices]) FORMULAIRE ENTREE([Factures];"Saisie") Repeter DEBUT TRANSACTION AJOUTER ENREGISTREMENT([Factures]) Si (OK=1) VALIDER TRANSACTION Sinon ANNULER TRANSACTION Fin de si Jusque (OK=0) LECTURE SEULEMENT(*) (3) Pour rduire les verrouillages des enregistrements pendant la saisie de donnes, vous pouvez aussi choisir de grer les transactions partir de la mthode du formulaire et d'accder aux tables en LECTURE ECRITURE uniquement quand cela est ncessaire. Vous effectuez la saisie de donnes en utilisant le formulaire de saisie pour [Factures], qui contient la table lie [Factures]Lignes dans un sous-formulaire. Le formulaire comporte deux boutons : bAnnuler et bOK. Aucune action ne leur est attribue. La boucle d'ajout devient alors : LECTURE ECRITURE([Ligne Facture]) LECTURE SEULEMENT([Pices]) FORMULAIRE ENTREE([Factures];"Input") Repeter AJOUTER ENREGISTREMENT([Factures]) Jusque (bOK=0) LECTURE SEULEMENT([Ligne Facture]) Notez que la table [Pices] est dsormais en "lecture seulement" pendant la saisie de donnes. L'accs en lecture/criture ne s'active que si les donnes sont valides. La transaction est ouverte dans la mthode du formulaire entre de la table [Factures] : Au cas ou : (Evenement formulaire=Sur chargement) DEBUT TRANSACTION [Factures]NoFactures:=Numerotation automatique([Factures]NoFactures) Sinon [Factures]Total facture:=Somme([Ligne Facture]Total ligne) Fin de cas

4e Dimension - Langage 1843

Si vous cliquez sur le bouton bAnnuler, la saisie et la transaction doivent tre annules. Voici la mthode objet du bouton bAnnuler: Au cas ou : (Evenement formulaire=Sur clic) ANNULER TRANSACTION NE PAS VALIDER Fin de cas Si vous cliquez sur le bouton bOK, la saisie et la transaction doivent tre acceptes. Voici la mthode objet du bouton bOK : Au cas ou : (Evenement formulaire=Sur clic) $NbLines:=Enregistrements trouves([Ligne Facture]) ` Passer en lecture/criture pour accder la table [Pices] LECTURE ECRITURE([Pices]) DEBUT SELECTION([Ligne Facture]) ` Commencer la premire ligne $ValidTrans:=Vrai ` Tout devrait marcher Boucle ($Line;1;$NbLines) ` Pour chaque ligne CHARGER SUR LIEN([Ligne Facture]NoPiece) OK:=1 ` Vous voulez continuer Tant que (Enregistrement verrouille([Pices]) & (OK=1)) ` Essayer d'obtenir l'enregistrement en lecture/criture CONFIRMER("La pice "+[Ligne Facture]NoPiece+" est utilise. Vous attendez ?") Si (OK=1) ENDORMIR PROCESS(Numero du process courant;60) CHARGER ENREGISTREMENT([Pices]) Fin de si Fin tant que Si (OK=1) ` Mettre jour quantit dans l'entrept [Pices]Entrept:=[Pices]Entrept-[Ligne Facture]Quantit STOCKER ENREGISTREMENT([Pices]) ` Sauvegarder l'enregistrement Sinon $Ligne:=$NbLines+1 ` Sortir de la boucle $ValidTrans:=Faux Fin de si ENREGISTREMENT SUIVANT([Ligne Facture]) ` Aller la ligne suivante Fin de boucle LECTURE SEULEMENT([Pices]) ` Mettre la table en mode lecture seulement Si ($ValidTrans) STOCKER ENREGISTREMENT([Factures]) ` Sauvegarder les enregistrements ` Valider toutes modifications de la base VALIDER TRANSACTION

1844 4e Dimension - Langage

Sinon ANNULER TRANSACTION ` Tout annuler Fin de si NE PAS VALIDER ` Quitter le formulaire Fin de cas Dans le code ci-dessus, quel que soit le bouton sur lequel l'utilisateur a cliqu, nous appelons la commande NE PAS VALIDER. Le nouvel enregistrement n'est pas valid par un appel VALIDER mais par STOCKER ENREGISTREMENT. De plus, vous remarquez que STOCKER ENREGISTREMENT est appele juste avant la commande VALIDER TRANSACTION. Ainsi, la sauvegarde de l'enregistrement [Factures] est partie intgrante de la transaction. Appeler la commande VALIDER validerait aussi l'enregistrement mais dans ce cas, la transaction serait valide avant le stockage de la facture. Autrement dit, l'enregistrement serait sauvegard en-dehors de la transaction. En fonction de vos besoins, laissez 4D grer les transactions pendant la saisie ou personnalisez votre base votre convenance, comme dans les exemples prcdents. Dans le dernier exemple, la gestion du verrouillage des enregistrements de la table [Pices] pourrait tre plus labore. Rfrence ANNULER TRANSACTION, DEBUT TRANSACTION, Transaction en cours, VALIDER TRANSACTION.

4e Dimension - Langage 1845

DEBUT TRANSACTION

Transactions version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DEBUT TRANSACTION Paramtre Type Description Cette commande ne requiert pas de paramtre Description DEBUT TRANSACTION dbute une transaction dans le process courant. Toutes les modifications apportes la base seront stockes temporairement jusqu' ce que la transaction soit valide ou annule. Si vous avez plusieurs process globaux, vous pouvez avoir plusieurs transactions. Toutefois, vous ne pouvez pas imbriquer des transactions dans d'autres transactions. Si vous dbutez une transaction dans une autre, 4e Dimension ignore la seconde. Rfrence ANNULER TRANSACTION, Transaction en cours, Utiliser des transactions, VALIDER TRANSACTION.

1846 4e Dimension - Langage

VALIDER TRANSACTION

Transactions version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

VALIDER TRANSACTION Paramtre Type Description Cette commande ne requiert pas de paramtre Description VALIDER TRANSACTION accepte la transaction ouverte par la commande DEBUT TRANSACTION dans le process courant. VALIDER TRANSACTION sauvegarde toutes les modifications apportes la base pendant la transaction. Rfrence ANNULER TRANSACTION, DEBUT TRANSACTION, Transaction en cours, Utiliser des transactions.

4e Dimension - Langage 1847

ANNULER TRANSACTION

Transactions version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ANNULER TRANSACTION Paramtre Type Description Cette commande ne requiert pas de paramtre Description ANNULER TRANSACTION annule la transaction ouverte par la commande DEBUT TRANSACTION dans le process courant. ANNULER TRANSACTION laisse la base inchange en annulant toutes les oprations ventuellement excutes pendant la transaction. Rfrence DEBUT TRANSACTION, Transaction en cours, Utiliser des transactions, VALIDER TRANSACTION.

1848 4e Dimension - Langage

Transaction en cours

Transactions version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Transaction en cours Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen VRAI si le process courant est en transaction, FAUX sinon

Description La commande Transaction en cours retourne VRAI si le process courant est en transaction, sinon elle retourne FAUX. Exemple Si vous effectuez des oprations (ajout, modification ou suppression) sur de multiples enregistrements, vous pouvez rencontrer des enregistrements verrouills. Dans ce cas, pour prserver l'intgrit des donnes, vous devez avoir ouvert une transaction, de manire ce que vous puissiez faire marche arrire et annuler l'ensemble de l'opration depuis le dbut, sans que les donnes de la base soient modifies. Si vous effectuez l'opration depuis un trigger ou une sous-routine pouvant tre appel(e) dans une transaction ou hors transaction, l'utilisation de la commande Transaction en cours vous permet de vrifier que la mthode du process courant ou la mthode appelante a bien ouvert une transaction. Si ce n'est pas le cas, vous ne commencez mme pas l'opration, car, en cas d'chec au cours du processus, vous ne pourriez pas revenir sur les oprations dj effectues. Rfrence ANNULER TRANSACTION, DEBUT TRANSACTION, Prsentation des triggers, VALIDER TRANSACTION.

4e Dimension - Langage 1849

1850 4e Dimension - Langage

62 ________________________ Triggers

4e Dimension - Langage 1851

1852 4e Dimension - Langage

Prsentation des triggers

Triggers version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Un trigger est une mthode associe une table. C'est une proprit d'une table. Vous n'appelez pas un trigger, les triggers sont appels automatiquement par le moteur de 4D chaque fois qu'un enregistrement de la table est manipul (ajout, suppression, modification et chargement). Les triggers sont des mthodes qui peuvent viter des oprations illgales dans votre base. Par exemple, dans une facturation, vous pouvez empcher qu'un utilisateur cre une facture sans spcifier qui elle doit tre adresse. Les triggers sont un outil puissant permettant de contrler les oprations sur les tables, et d'viter des pertes de donnes accidentelles. Vous pouvez crer des triggers trs simples et les rendre de plus en plus sophistiqus. Compatibilit avec les versions prcdentes de 4D
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les triggers sont un nouveau type de mthode introduit dans la version 6 de 4D. Dans les versions prcdentes, les mthodes table (appeles formules-fichier) taient excutes par 4D seulement lorsqu'un formulaire d'une table tait utilis pour la saisie de donnes, l'affichage ou l'impression. Elles taient rarement utilises. Notez que les triggers sont excuts un niveau beaucoup plus bas que les prcdentes formules-fichier. Quelle que soit l'opration effectue sur un enregistrement par l'intermdiaire d'une action utilisateur (comme la saisie de donnes) ou par programmation (comme un appel STOCKER ENREGISTREMENT), le trigger de la table sera appel par 4D. Les triggers sont trs diffrents des formules-fichier. Si vous avez converti une base version 5 et si vous voulez tirer parti des possibilits offertes par les triggers, assurez-vous que l'option Utiliser les formulesfichiers de la V5.x.x dans la bote de dialogue des Prfrences de l'application est bien dslectionne.

4e Dimension - Langage 1853

Activer et crer un trigger


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Par dfaut, lorsque vous crez une table en mode Structure, la table n'a pas de trigger. Pour utiliser un trigger pour une table, vous devez : activer le trigger et indiquer 4D quand l'appeler. crer et crire le code pour le trigger. Activer un trigger qui n'est pas encore crit ou crire un trigger sans l'activer n'affecte pas les oprations effectues sur une table. 1. Activer un Trigger Pour activer le trigger, slectionnez les options Triggers pour la table dans la fentre des Proprits de la table :

Voici la description de ces options : Sur sauvegarde nouvel enreg. Si cette option est slectionne, le trigger sera appel chaque fois qu'un enregistrement est cr dans la table, c'est--dire dans les circonstances suivantes : Vous ajoutez un enregistrement lors de la saisie de donnes (mode Utilisation ou commande AJOUTER ENREGISTREMENT). Vous crez et sauvegardez un enregistrement avec CREER ENREGISTREMENT et STOCKER ENREGISTREMENT. Notez que le trigger est appel au moment o vous excutez STOCKER ENREGISTREMENT, et non quand il est rellement cr.

1854 4e Dimension - Langage

Vous importez des enregistrements (mode Utilisation ou commandes du langage). Vous appelez d'autres commandes qui crent et/ou sauvegardent de nouveaux enregistrements (par exemple, TABLEAU VERS SELECTION, STOCKER SUR LIEN, etc.). Vous utilisez un plug-in 4D qui appelle les commandes CREER ENREGISTREMENT et STOCKER ENREGISTREMENT. Sur sauvegarde enregistrement Si cette option est slectionne, le trigger sera appel chaque fois qu'un enregistrement de la table est modifi, c'est--dire dans les circonstances suivantes : Vous modifiez un enregistrement en saisie de donnes (mode Utilisation ou commande MODIFIER ENREGISTREMENT) Vous sauvegardez un enregistrement existant avec STOCKER ENREGISTREMENT. Vous appelez une commande qui provoque la sauvegarde d'un enregistrement existant (par exemple, TABLEAU VERS SELECTION, APPLIQUER A SELECTION, etc.) Vous utilisez un plug-in 4D qui appelle la commande STOCKER ENREGISTREMENT. Sur suppression enregistrement Si cette option est slectionne, le trigger sera appel chaque fois qu'un enregistrement de la table est supprim, c'est--dire dans les circonstances suivantes : Vous supprimez un enregistrement en mode Utilisation ou en appelant la commande SUPPRIMER ENREGISTREMENT ou SUPPRIMER SELECTION. Vous effectuez des oprations qui provoquent la suppression d'un enregistrement li par l'intermdiaire des options de contrle de suppression d'un lien. Vous utilisez un plug-in 4D qui appelle la commande SUPPRIMER ENREGISTREMENT. Sur chargement enregistrement Si cette option est slectionne, le trigger sera appel chaque fois qu'un enregistrement de la table est charg. Cette option couvre toutes les situations o un enregistrement courant est charg du fichier de donnes, l'exception des fonctions listes ci-dessous. Note : Ce trigger ne traite pas la cration d'un nouvel enregistrement, mais uniquement le chargement d'enregistrements existants. A des fins d'optimisation du fonctionnement de 4D, l'option Sur chargement enregistrement ne dclenche JAMAIS l'appel du trigger lors de l'utilisation des fonctions pouvant ventuellement (mais pas systmatiquement) tirer parti d'un index. En effet, si l'index est utilis, les enregistrements ne sont pas chargs. Inversement, si l'index n'est pas utilis (par exemple si le champ trait n'est pas index), les enregistrements sont chargs. Cette incertitude quant l'appel du trigger ne permet pas de l'exploiter de manire fiable. Les fonctions pour lesquelles l'option Sur chargement enregistrement ne provoquera jamais l'appel du trigger sont les suivantes : Recherches : effectues par l'utilisateur (diteur standard) et commandes CHERCHER, CHERCHER DANS SELECTION. Tris : effectus par l'utilisateur (diteur standard) et commande TRIER.

4e Dimension - Langage 1855

Fonctions statistiques : Somme, Moyenne, Min, Max, Ecart type, Variance, Somme des carres. Commandes JOINTURE, SELECTION RETOUR. IMPORTANT : Si vous excutez une opration ou appelez une commande qui agit sur plusieurs enregistrements, ce trigger est appel pour chaque enregistrement. Si, par exemple, vous appelez APPLIQUER A SELECTION pour une table dont la slection courante est compose de 100 enregistrements, le trigger sera excut 100 fois. 2. Crer un trigger Pour crer un trigger pour une table, utilisez la fentre de l'Explorateur ou double-cliquez sur le titre de la table dans la fentre de Structure en appuyant sur la touche Alt (sous Windows) ou Option (sous MacOS). Pour plus d'informations, reportez-vous au manuel Mode Structure. Evnements moteur
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Un trigger peut tre invoqu pour l'un des quatre vnements moteur dcrits ci-dessus. Dans le trigger, vous dtectez quel vnement a lieu en appelant la fonction Evenement moteur. Cette fonction retourne une valeur numrique qui indique l'vnement moteur. Typiquement, vous crivez un trigger avec une structure du type "Au cas ou" sur le rsultat retourn par Evenement moteur : ` Trigger pour [UneTable] C_ENTIER LONG($0) $0:=0 ` On suppose que la requte est accepte Au cas ou : (Evenement moteur=Sur sauvegarde nouvel enreg) ` Effectuer les actions appropries pour sauvegarder l'enregistrement nouvellement cr. : (Evenement moteur=Sur sauvegarde enregistrement) ` Effectuer les actions appropries pour sauvegarder l'enregistrement dj existant. : (Evenement moteur=Sur suppression enregistrement) ` Effectuer les actions appropries pour dtruire l'enregistrement. : (Evenement moteur=Sur chargement enregistrement) ` Effectuer les actions appropries pour charger en mmoire l'enregistrement. Fin de cas

1856 4e Dimension - Langage

Les triggers sont des fonctions


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Un trigger a deux finalits : Effectuer des actions sur l'enregistrement juste avant qu'il soit sauvegard, supprim ou juste aprs qu'il ait t charg. Accepter ou rejeter une opration de base de donnes. 1. Effectuer des actions A chaque fois qu'un enregistrement est sauvegard (ajout ou modifi) dans une table [Documents], vous souhaitez estampiller l'enregistrement avec des marqueurs de cration et de modification. Vous pouvez crire le trigger suivant : ` Trigger pour table [Documents] Au cas ou : (Evenement moteur=Sur sauvegarde nouvel enreg) [Documents]Creation Stamp:=Time stamp [Documents]Modification Stamp:=Time stamp : (Evenement moteur=Sur sauvegarde enregistrement) [Documents]Modification Stamp:=Time stamp Fin de cas Note : La fonction Time stamp utilise dans cet exemple est une petite mthode projet retournant le nombre de secondes coules depuis une date choisie arbitrairement. Une fois que ce trigger a t crit et activ, peu importe la faon dont vous ajoutez ou modifiez un enregistrement dans la table [Documents] (saisie de donnes, import, mthode projet, plug-in 4D), la valeur des deux champs [Documents]Creation Stamp et [Documents]Modification Stamp sera automatiquement affecte par le trigger avant que l'enregistrement ne soit crit sur disque. Note : Voir l'exemple de la commande PROPRIETES DOCUMENT pour une analyse complte de cet exemple. 2. Accepter ou rejeter l'opration de la base Pour accepter ou rejeter une opration de la base, le trigger doit retourner un code d'erreur de trigger dans le rsultat de la fonction $0. Exemple Prenons le cas d'une table [Employs]. Pendant la saisie de donnes, vous contrlez le champ [Employs]No Sc.Soc. Par exemple, lorsque l'utilisateur clique sur le bouton de validation, vous vrifiez le champ utilisant la mthode objet du bouton : ` Mthode objet bouton bAccept Si (Bon No Sc.Soc ([Employs]No Sc.Soc)) VALIDER

4e Dimension - Langage 1857

Sinon BEEP ALERTE ("Saisissez un numro de scurit sociale et cliquez de nouveau sur OK.") Fin de si Si la valeur du champ est correcte, vous acceptez la saisie de donnes, sinon vous affichez une alerte et restez en saisie de donnes. Si vous crez aussi des enregistrements pour la table [Employs] par programmation, le code ci-dessous serait valide MAIS violerait la rgle impose dans la mthode objet cre plus haut : ` Extrait d'une mthode projet ` ... CREER ENREGISTREMENT ([Employs]) [Employs]Nom :="DOE" STOCKER ENREGISTREMENT ([Employs]) ` <- violation de la rgle ! Il n'y a pas de ` numro de scurit sociale En utilisant un trigger pour la table [Employs], vous pouvez appliquer la contrainte sur [Employs]No Sc.Soc tous les niveaux de la base. Le trigger serait du type : ` Trigger pour [Employs] $0:=0 $dbEvent:=Evenement moteur Au cas ou : (($dbEvent=Sur sauvegarde nouvel enreg) | ($dbEvent= Sur sauvegarde enregistrement)) Si (Non(Bon No Sc.Soc ([Employs]No Sc.Soc))) $0:=-15050 Sinon ` ... Fin de si ` ... Fin de cas Une fois que ce trigger est crit et activ, la ligne STOCKER ENREGISTREMENT([Employs]) de la mthode projet ci-dessus gnrera une erreur moteur -15050 et l'enregistrement ne sera PAS sauvegard. De la mme faon, si un plug-in 4D essayait de sauvegarder un enregistrement dans [Employs] avec un numro de scurit sociale incorrect, le trigger gnrerait la mme erreur et l'enregistrement ne serait pas sauvegard non plus.

1858 4e Dimension - Langage

Le trigger garantit que personne (utilisateur, dveloppeur, plug-in, 4D Open client avec 4D Server) ne peut violer la rgle sur le numro de scurit sociale ( dessein ou par erreur). Notez que mme si vous n'avez pas cr de trigger pour une table, la base peut retourner des erreurs moteur lorsque vous essayez de sauvegarder ou de dtruire un enregistrement. Vous pouvez, par exemple, recevoir l'erreur -9998, si vous essayez de sauvegarder un enregistrement. Les triggers retournent de nouveaux types d'erreurs dans 4D : 4D gre les erreurs normales : index unique, contrles relationnels, etc. En utilisant les triggers, vous pouvez crer des codes d'erreurs propres au contenu de votre application. Important : Vous pouvez retourner le code d'erreur de votre choix. Cependant, n'utilisez pas des codes d'erreurs dj utiliss par le moteur de 4D. Nous vous recommandons fortement d'utiliser des codes compris entre -32000 et -15000. Nous rservons les erreurs suprieures 15000 au moteur de 4D. Au niveau du process, vous grez les erreurs trigger de la mme faon que les erreurs du moteur de base de donnes : vous pouvez laisser 4D afficher la bote de dialogue standard d'erreur, la mthode est alors interrompue. vous pouvez utiliser une mthode de gestion d'erreur installe par APPELER SUR ERREUR et traiter l'erreur de faon approprie. Note : Pendant la saisie, si une erreur trigger est retourne au moment o vous essayez de valider ou de supprimer un enregistrement, l'erreur est gre comme une erreur sur un index unique. La bote de dialogue d'erreur est affiche et vous restez en saisie de donnes. Mme si vous n'utilisez une base qu'en mode Utilisation (et non en Menus crs), vous bnficiez des triggers. Mme si un trigger ne retourne pas d'erreur ($0:=0), cela ne signifie pas qu'une opration de la base s'effectuera correctement. Il peut y avoir eu un doublon sur l'index unique. Si l'opration est la mise jour d'un enregistrement, ce dernier peut tre verrouill, une erreur d'entre/sortie peut se produire, bien d'autres choses encore peuvent arriver. Ces vrifications sont effectues aprs l'excution du trigger. Cependant, du point de vue du plus haut niveau du process en excution, les erreurs retournes par le moteur de la base de donnes ou celle d'un trigger sont de mme nature : une erreur trigger est une erreur du moteur de la base de donnes.

4e Dimension - Langage 1859

Les triggers et l'architecture 4D


___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les triggers fonctionnent au niveau du moteur de la base de donnes. Ce point est illustr dans le schma suivant :

Les triggers sont excuts sur la machine o est situ le moteur de la base de donnes. Si ce point est une vidence dans le cas de 4D en mono-utilisateur, il convient de rappeler que pour 4D Server, les triggers sont excuts sur la machine serveur (dans le process actif) et non sur la machine cliente. Quand un trigger est appel, il s'excute dans le contexte du process de base de donnes qui tente l'opration. Ci-dessous, ce process est appel process appelant l'excution du trigger. En particulier, le trigger fonctionne avec la slection courante, les enregistrements courants, les modes lecture/criture, les verrouillages d'enregistrements du process appelant. S'il est vrai que les triggers peuvent, par exemple, tester les smaphores globaux, soyez prudent lorsque vous utilisez les autres objets de la base et du langage, car un trigger peut s'excuter sur une machine diffrente que celle du process appelant : c'est le cas avec 4D Server ! Variables interprocess : Un trigger a accs aux variables interprocess de la machine o il est excut. Avec 4D Server, ce peut tre une machine diffrente de celle du process appelant. Variables process : une table indpendante de variables process peut tre partage par tous les triggers. Un trigger n'a pas accs aux variables process du process appelant.

1860 4e Dimension - Langage

Variables locales : vous pouvez utiliser des variables locales dans un trigger. Leur aire d'action est l'excution du trigger (elles sont cres/dtruites au cours de cette excution). Smaphores : Un trigger peut tester ou placer des smaphores globaux et locaux (sur la machine o il s'excute dans ce dernier cas). Cependant, un trigger doit s'excuter rapidement. En consquence, utilisez plutt des smaphores locaux dans un trigger, sauf si vous avez une ide prcise en tte. Ensembles et slections temporaires : Si vous utilisez un ensemble ou une slection temporaire dans un trigger, vous travaillez alors avec ceux de la machine o les triggers s'excutent. Interface utilisateur : N'utilisez PAS d'lments d'interface utilisateur dans un trigger (alerte, message ou dialogue). Cela signifie galement que tracer le trigger dans la fentre du Dbogueur doit tre limit. Souvenez-vous que les triggers en client/serveur s'excutent sur la machine 4D Server. Un message d'alerte affich sur le poste serveur ne dit pas grand chose l'utilisateur qui, lui, travaille sur sa machine cliente. Laissez le process appelant grer l'interface utilisateur. Triggers et transactions
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Les transactions doivent tre gres au niveau du process appelant. Il est fortement dconseill de grer des transactions au niveau du trigger. Si, pendant l'excution d'un trigger, vous devez ajouter, modifier ou dtruire plusieurs enregistrements et souhaitez garantir l'intgrit de vos donnes l'aide d'une transaction, vous devez d'abord tester ( partir du trigger) si le process appelant est en cours de transaction avec la commande Transaction en cours. En effet, si ce n'est pas le cas et si le trigger rencontre un enregistrement verrouill, le process appelant n'aura aucun moyen d'annuler a posteriori les actions dj effectues par le trigger. Par consquent, si vous n'tes pas en transaction, ne commencez pas les oprations excuter, et retournez simplement une erreur dans $0 afin de signaler au process appelant que l'opration de base de donnes doit tre excute dans une transaction. Note : Afin d'optimiser le fonctionnement combin des triggers et des transactions, 4D n'appelle PAS les triggers lors d'un VALIDER TRANSACTION. Cela vite que les triggers soient excuts deux fois. Triggers en cascade
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Prenons l'exemple de la structure suivante :

4e Dimension - Langage 1861

Note : Les tables ont t contractes (il y a davantage de champs). Pour les ncessits de cette documentation, nous admettrons que la base autorise la suppression d'une facture. Voyons aussi comment une telle opration serait gre au niveau du trigger (puisque vous pourriez aussi dcider d'effectuer l'opration au niveau du process). Afin que soit maintenue l'intgrit relationnelle des donnes, la suppression d'une facture requiert les actions suivantes de la part du trigger de [Factures] : Dcrmenter le champ Ventes de la table [Clients] du montant de la facture. Supprimer tous les enregistrements de [Lignes facture] lis la facture. Ceci implique aussi que le trigger de [Lignes facture] dcrmente le champ Quantit vendue des enregistrements [Produits] lis la ligne de facture que l'on s'apprte supprimer. Supprimer tous les enregistrements de [Paiements] lis la facture. Tout d'abord, le trigger de [Factures] ne doit effectuer ces actions que si le process appelant est en transaction, afin qu'une annulation rtroactive soit possible en cas de rencontre d'un enregistrement verrouill. Deuximement, le trigger de [Lignes facture] est en cascade avec le trigger de [Factures]. Le premier s'excute l'intrieur du second parce que la destruction des lments de la liste est conscutive un appel SUPPRIMER SELECTION dans le trigger de [Factures]. Ajoutons que toutes les tables dans cet exemple ont des triggers activs pour tous les vnements de la base de donnes. La cascade des triggers sera : Le trigger de Factures est appel car le process appelant supprime une facture Le trigger de Clients est appel car le trigger Factures met jour le champ Ventes Le trigger de Lignes facture est appel car le trigger Factures supprime une ligne (ce qui est rpt) Le trigger de Produits est appel car le trigger Lignes facture met jour le champ Quantit vendue Le trigger de Paiements est appel car le trigger Factures supprime un paiement (ce qui est rpt) Dans cette cascade, le trigger de [Factures] s'excute au niveau 1, les triggers [Clients], [Lignes facture] et [Paiements] au niveau 2 et le trigger [Produits] au niveau 3. Dans les triggers, vous pouvez dtecter quel niveau un trigger est excut grce la commande Niveau du trigger. De plus, vous pouvez aussi obtenir des informations sur les autres niveaux en utilisant la commande PROPRIETES DU TRIGGER.

1862 4e Dimension - Langage

Si, par exemple, vous dtruisiez un enregistrement [Produits] un niveau process, le trigger de [Produits] s'excuterait au niveau 1, non au niveau 3, comme plus haut. Avec Niveau du trigger et PROPRIETES DU TRIGGER, vous pouvez identifier la raison d'une action. Dans l'exemple ci-dessus, une facture est supprime au niveau process. Prenons pour hypothse que nous voulons dtruire un enregistrement [Clients] au niveau process. Le trigger de [Clients] devrait alors tre conu pour dtruire toutes les factures lies ce client. Cela signifie que le trigger [Factures] devrait tre invoqu comme plus haut, mais pour une autre raison. Du trigger [Factures], vous pouvez dtecter si le niveau est 1 ou 2. S'il est 2, vous pouvez vrifier si oui ou non c'est cause de la suppression de l'enregistrement Client lui-mme. Si tel est le cas, vous n'avez mme plus besoin de vous proccuper de la mise jour du champ Ventes. Utilisation de la numrotation automatique dans un trigger
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Quand vous manipulez l'vnement moteur Sur sauvegarde nouvel enreg, vous pouvez appeler la commande Numerotation automatique pour maintenir un numro d'identification unique pour chaque enregistrement d'une table. Par exemple : ` Trigger pour la table [Factures] Au cas ou : (Evenement moteur=Sur sauvegarde nouvel enreg) ` ... [Factures]Facture Identification:=Numerotation automatique ([Factures]) ` ... Fin de cas Rfrence Evenement moteur, Mthodes, Niveau du trigger, Numero enregistrement, PROPRIETES DU TRIGGER.

4e Dimension - Langage 1863

Evenement moteur

Triggers version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Evenement moteur Entier long Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Entier long 0 1 2 3 4 Hors de tout vnement de trigger Sauvegarde d'un nouvel enregistrement Sauvegarde d'un enregistrement existant Suppression d'un enregistrement Chargement d'un enregistrement

Description La commande Evenement moteur est appele dans un trigger et renvoie une valeur numrique qui indique le type de l'vnement de la base, ou la raison pour laquelle le trigger a t appel. 4D fournit les constantes prdfinies suivantes : Constante Sur sauvegarde nouvel enreg Sur sauvegarde enregistrement Sur suppression enregistrement Sur chargement enregistrement Type Entier Entier Entier Entier long long long long Valeur 1 2 3 4

Si, dans un trigger, vous effectuez des oprations de base de donnes sur plusieurs enregistrements (par exemple mise jour de plusieurs enregistrements dans la table [Produits] et ajout d'enregistrement dans la table [Factures]), vous pouvez rencontrer des situations (comme des enregistrements verrouills) qui empchent le trigger d'excuter correctement les oprations pour lesquelles il est appel. Il vous faut alors stopper les actions de la base et retourner une erreur pour que le process appelant sache que la requte n'a pu tre excute. Ce process doit galement tre en mesure d'annuler les oprations non excutes. Autrement dit, lorsqu'une telle situation se produit, vous avez besoin de savoir dans le trigger si vous tes en transaction avant mme d'essayer de faire quoi que ce soit. Pour cela, utilisez la fonction Transaction en cours.

1864 4e Dimension - Langage

Dans 4e Dimension, il n'y a pas de limite, part la mmoire disponible, aux appels de triggers en cascade. Pour optimiser l'excution d'un trigger, vous pouvez crire le code de vos triggers non seulement en fonction de l'vnement de la base mais aussi du niveau de l'appel lorsque les triggers sont appels en cascade. Par exemple, pendant l'vnement de la base Suppression enregistrement pour la table [Factures], vous pouvez ne pas effectuer la mise jour du champ [Clients]Ventes si la suppression de l'enregistrement de la table [Factures] fait partie de la suppression en cascade des factures lies l'enregistrement dans la table [Clients] que vous tes en train de supprimer. Pour cela, utilisez les routines Niveau du trigger et PROPRIETES DU TRIGGER. Exemple Utilisez la fonction Evenement moteur pour structurer vos triggers comme ci-dessous : ` Un trigger de la table [toute table] C_ENTIER LONG($0) $0:=0 ` S'assurer que la requte de la base sera accorde Au cas ou : (Evenement moteur=Sur sauvegarde nouvel enreg) ` Excuter les actions appropries pour la sauvegarde d'un nouvel enregistrement : (Evenement moteur=Sur sauvegarde enregistrement) ` Excuter les actions appropries pour la sauvegarde d'un enregistrement existant : (Evenement moteur=Sur suppression enregistrement) ` Excuter les actions appropries pour la suppression d'un enregistrement : (Evenement moteur=Sur chargement enregistrement) ` Excuter les actions appropries pour le chargement d'un enregistrement en mmoire Fin de cas

Rfrence Niveau du trigger, Prsentation des triggers, PROPRIETES DU TRIGGER, Transaction en cours.

4e Dimension - Langage 1865

Niveau du trigger

Triggers version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Niveau du trigger Numrique Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Numrique Niveau d'excution du trigger (0 si hors du cycle d'excution du trigger)

Description La commande Niveau du trigger retourne le niveau d'excution du trigger. Reportez-vous la description des triggers en cascade dans la section Prsentation des triggers. Rfrence Evenement moteur, Prsentation des triggers, PROPRIETES DU TRIGGER.

1866 4e Dimension - Langage

PROPRIETES DU TRIGGER

Triggers version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

PROPRIETES DU TRIGGER (niveauTrigger; evenementBase; tableNum; enregNum) Paramtre niveauTrigger evenementBase tableNum enregNum Type Numrique Numrique Numrique Numrique Description Niveau d'excution du trigger Evnement de base de donnes Numro de la table Numro de l'enregistrement

Description La commande PROPRIETES DU TRIGGER fournit des informations sur le niveau d'excution du trigger que vous avez pass dans niveauTrigger. Vous devez utiliser conjointement PROPRIETES DU TRIGGER et Niveau du trigger pour effectuer diffrentes actions en fonction de la cascade du trigger. Reportez-vous la description des triggers en cascade dans la section Prsentation des triggers. Si vous passez un niveau d'excution de trigger inexistant, la commande retourne 0 (zro) dans chaque paramtre. La nature de l'vnement de base de donnes pour le niveau d'excution du trigger est retourne dans evenementBase. Les constantes prdfinies suivantes sont fournies : Constante Type Valeur Sur sauvegarde nouvel enreg Entier long 1 Sur sauvegarde enregistrement Entier long 2 Sur suppression enregistrement Entier long 3 Sur chargement enregistrement Entier long 4 Le numro de table et d'enregistrement pour l'enregistrement concern par l'vnement de base de donnes pour le niveau d'excution du trigger sont retourns dans tableNum et enregNum. Note : Rappelez-vous que, pendant une transaction, les numros des enregistrements nouvellement crs sont des numros temporaires. Rfrence A propos des numros d'enregistrements, Evenement moteur, Niveau du trigger, Prsentation des triggers.

4e Dimension - Langage 1867

1868 4e Dimension - Langage

63 ________________________ Utilisateurs et groupes

4e Dimension - Langage 1869

1870 4e Dimension - Langage

CHANGER PRIVILEGES

Utilisateurs et groupes version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER PRIVILEGES Paramtre Type Description Cette commande ne requiert pas de paramtre Description CHANGER PRIVILEGES permet de modifier le systme de mots de passe. Lorsque cette commande est excute, la fentre des mots de passe du mode Structure est appele pour modifier les privilges. Les groupes peuvent tre modifis par le Super_Utilisateur et l'Administrateur et par les propritaires de groupe. Seuls le Super_Utilisateur et l'Administrateur peuvent modifier tous les groupes. Les propritaires de groupe ne peuvent modifier que leur propre groupe. Des utilisateurs peuvent tre ajouts et retirs des groupes. Cette commande ne fait rien si aucun groupe n'est dfini. Le Super_Utilisateur et l'Administrateur peuvent crer des utilisateurs et les placer dans des groupes. Dans le cadre d'une base client-serveur, le Super_Utilisateur et l'Administrateur peuvent galement utiliser cette commande pour enregistrer l'accs personnalis la base 4D Server (voir la section Enregistrer l'accs la base 4D Server dans le manuel de rfrence de 4D Server). Exemple L'exemple suivant affiche la fentre des mots de passe :

CHANGER PRIVILEGES

Rfrence CHANGER MOT DE PASSE, CHANGER UTILISATEUR.

4e Dimension - Langage 1871

CHANGER UTILISATEUR COURANT

Utilisateurs et groupes version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER UTILISATEUR COURANT {(utilisateur; motDePasse)} Paramtre utilisateur motDePasse Type Alpha | Num Alpha Description Nom ou Numro de rfrence unique de lutilisateur Mot de passe (non crypt)

Description CHANGER UTILISATEUR COURANT permet de changer l'identit de l'utilisateur courant dans la base, sans devoir la quitter. Le changement d'identit peut tre effectu par l'utilisateur lui-mme via la bote de dialogue de connexion la base (lorsque la commande est appele sans paramtres) ou directement par la commande. Lorsqu'il change d'identit, l'utilisateur abandonne ses anciens privilges au profit de ceux de l'utilisateur choisi. Le nouveau compte est utilis pour tous les process utilisateurs courants de la base. A noter quun process cr par un autre process hrite du compte utilisateur de celui-ci. 4D Server : Sur le poste serveur, les process dmarrs via les mthodes bases Sur dmarrage serveur, Sur arrt serveur, etc., sont excuts sous le compte du Super_Utilisateur. Si la commande CHANGER UTILISATEUR COURANT est excute sans paramtres, la bote de dialogue de connexion la base s'affiche. L'utilisateur doit alors saisir ou slectionner un nom et un mot de passe valides pour entrer dans la base. Le contenu de la bote de dialogue de connexion dpend des options dfinies dans la page Application/Accs des Prfrences de la base. Vous pouvez galement passer les deux paramtres facultatifs utilisateur et motDePasse afin de spcifier par programmation le nouveau compte utiliser. Passez dans le paramtre utilisateur le nom ou le numro de rfrence unique (rfUtilisateur) du compte utiliser. Les noms et les numros des utilisateurs peuvent tre obtenus via la commande LIRE LISTE UTILISATEURS.

1872 4e Dimension - Langage

Numro de rfrence de lutilisateur 1 2 3 15000 -11 -15010

Description de lutilisateur Super_Utilisateur Administrateur Utilisateur cr par le Super_Utilisateur (l'utilisateur n3 est le 1er utilisateur cr par le Super_Utilisateur, l'utilisateur n4 est le deuxime, et ainsi de suite). Utilisateur cr par l'Administrateur (l'utilisateur n-11 est le 1er utilisateur cr par l'Administrateur, l'utilisateur n-12 est le deuxime, et ainsi de suite).

Si le compte dutilisateur dsign nexiste pas ou a t supprim, lerreur -9979 est gnre. Vous pouvez intercepter cette erreur avec une mthode de gestion derreurs installe par la commande APPELER SUR ERREUR. Sinon, vous pouvez appeler la fonction Utilisateur supprime pour tester le compte utilisateur avant dappeler cette commande. Passez dans le paramtre motDePasse le mot de passe non crypt du compte de lutilisateur. Si le mot de passe ne correspond pas lutilisateur, la commande ne fait rien et lerreur -9978 est gnre. La commande est temporise afin dviter des attaques par force brute (essais automatiques de multiples combinaisons de noms dutilisateurs/mots de passe). Ainsi, au bout du quatrime appel la commande, elle nest excute quaprs 10 secondes dattente. Cette temporisation est globale au poste de travail. Proposer une bote de dialogue de gestion daccs personnalise La commande CHANGER UTILISATEUR COURANT permet de mettre en place des botes de dialogue personnalises pour la saisie du nom et du mot de passe (avec rgles de saisie et d'expiration) tout en bnficiant des avantages du systme intgr de contrle des accs de 4e Dimension. Le principe est le suivant : 1. Lentre dans la base seffectue directement en mode Utilisateur par dfaut, sans bote de dialogue. 2. Dans la Mthode base Sur ouverture, le dveloppeur provoque laffichage dune bote de dialogue personnalise de saisie du nom dutilisateur et du mot de passe ( laide de la commande DIALOGUE ou AJOUTER ENREGISTREMENT par exemple). Tout type de traitement peut tre envisag dans la bote de dialogue : - Il est possible dafficher la liste des utilisateurs de la base, comme dans la bote de dialogue daccs standard de 4e Dimension, laide de la commande LIRE LISTE UTILISATEURS. - Le champ de saisie du mot de passe peut contenir divers contrles afin de vrifier la validit des caractres saisis (nombre minimum de caractres, unicit...) .

4e Dimension - Langage 1873

- Des rgles dexpiration peuvent tre appliques au moment de la validation de la bote de dialogue : date dexpiration, changement forc la premire connexion, verrouillage du compte aprs plusieurs saisies errones, mmorisation des mots de passe dj utiliss... 3. Lorsque la saisie est valide, les informations requises (nom dutilisateur et mot de passe) sont passes la commande CHANGER UTILISATEUR COURANT afin douvrir la base avec les privilges du compte utilisateur. Exemple L'exemple suivant affiche la bote de dialogue de connexion :

CHANGER UTILISATEUR COURANT

Rfrence CHANGER MOT DE PASSE.

1874 4e Dimension - Langage

Valider mot de passe

Utilisateurs et groupes version 2004 (Modifie)

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Valider mot de passe (rfUtilisateur; motDePasse) Boolen Paramtre rfUtilisateur motDePasse Rsultat Type Numrique Alpha Boolen Description N de rfrence unique Mot de passe non crypt Vrai = mot de passe correct Faux = mot de passe incorrect

Description La commande Valider mot de passe retourne Vrai si la chane passe dans motDePasse est le mot de passe du compte utilisateur dont le n de rfrence est pass dans rfUtilisateur. La commande est temporise afin dviter des attaques par force brute (essais automatiques de multiples combinaisons de noms dutilisateurs/mots de passe). Ainsi, au bout du quatrime appel la commande, elle nest excute quaprs 10 secondes dattente. Cette temporisation est globale au poste de travail. Exemple Lexemple suivant vrifie que Laurel est le mot de passe de lutilisateur Hardy : LIRE LISTE UTILISATEURS(atNomUtil;alNumrosUtil) $vlElem:=Chercher dans tableau(atNomUtil;"Hardy") Si ($vlElem>0) Si (Valider mot de passe(alRefUtil{$vlElem} ;"Laurel")>0) ALERTE("Oui !") Sinon ALERTE("Dommage !") Fin de si Sinon ALERTE("Nom d'utilisateur inconnu") Fin de si

Rfrence Ecrire proprietes utilisateur, LIRE PROPRIETES UTILISATEUR.

4e Dimension - Langage 1875

CHANGER MOT DE PASSE

Utilisateurs et groupes version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER MOT DE PASSE (motDePasse) Paramtre motDePasse Type Alpha Description Nouveau mot de passe

Description CHANGER MOT DE PASSE permet de changer le mot de passe de l'utilisateur courant. Cette commande remplace le mot de passe courant par le nouveau mot de passe que vous passez dans motDePasse. Attention : Les mots de passe diffrencient les caractres majuscules et minuscules. Exemple L'exemple suivant permet l'utilisateur de modifier son mot de passe : CHANGER UTILISATEUR ` Afficher la bote de dialogue des mots de passe Si (OK=1) $pw1:=Demander("Saisissez le nouveau mot de passe pour "+Utilisateur courant) ` Le mot de passe doit comporter au moins cinq caractres Si (((OK=1) & ($pw1#"")) & (Longueur($pw1)>5)) ` Vrifier qu'un mot de passe valide a t saisi $pw2:=Demander("Saisissez de nouveau le mot de passe") Si ((OK=1) & ($pw1=$pw2)) CHANGER MOT DE PASSE($pw2) ` Modifier le mot de passe Fin de si Fin de si Fin de si

Rfrence CHANGER UTILISATEUR.

1876 4e Dimension - Langage

Utilisateur courant

Utilisateurs et groupes version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Utilisateur courant Alpha Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Alpha Nom de l'utilisateur courant

Description Utilisateur courant retourne le "nom d'utilisateur" de l'utilisateur courant. Exemple Reportez-vous l'exemple de la commande Appartient au groupe. Rfrence Appartient au groupe, CHANGER MOT DE PASSE, CHANGER UTILISATEUR.

4e Dimension - Langage 1877

Lire utilisateur par defaut

Utilisateurs et groupes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire utilisateur par defaut Numrique Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Numrique Numro de rfrence unique de lutilisateur

Description La commande Lire utilisateur par defaut retourne le numro de rfrence unique de lutilisateur dsign comme Utilisateur par dfaut dans la bote de dialogue des Prfrences de la base :

Les numros de rfrence pour les utilisateurs peuvent tre les suivants : Numro de rfrence de lutilisateur 1 2 3 15000 -11 -15010 Description de lutilisateur Super_Utilisateur Administrateur Utilisateur cr par le Super_Utilisateur (l'utilisateur n3 est le 1er utilisateur cr par le Super_Utilisateur, l'utilisateur n4 est le deuxime, et ainsi de suite). Utilisateur cr par l'Administrateur (l'utilisateur n-11 est le 1er utilisateur cr par l'Administrateur, l'utilisateur n-12 est le deuxime, et ainsi de suite).

Si aucun utilisateur par dfaut nest dfini, la commande retourne 0.

1878 4e Dimension - Langage

Appartient au groupe

Utilisateurs et groupes version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Appartient au groupe (nomUtilisateur; groupe) Boolen Paramtre nomUtilisateur groupe Rsultat Type Alpha Alpha Boolen Description Nom de l'utilisateur Nom du groupe Vrai = utilisateur est dans groupe Faux = utilisateur n'est pas dans groupe

Description La fonction Appartient au groupe retourne Vrai si utilisateur appartient au groupe. Exemple L'exemple suivant recherche des factures. Si l'utilisateur courant est dans le groupe Administration, il pourra accder aux formulaires qui affichent des informations confidentielles. Sinon, des formulaires standard sont affichs :

CHERCHER([Factures];[Factures]Prix>100) Si (Appartient au groupe(Utilisateur courant;"Administration") FORMULAIRE SORTIE([Factures];"Confidentiel_Sortie") FORMULAIRE ENTREE([Factures];"Conf_Saisie") Sinon FORMULAIRE SORTIE([Factures];"Sortie_Standard") FORMULAIRE ENTREE([Factures];"Entre_Standard") Fin de si MODIFIER SELECTION([Factures];*)

Rfrence Utilisateur courant.

4e Dimension - Langage 1879

SUPPRIMER UTILISATEUR

Utilisateurs et groupes version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SUPPRIMER UTILISATEUR (rfUtilisateur) Paramtre rfUtilisateur Type Numrique Description Numro d'identification de l'utilisateur supprimer

Description La commande SUPPRIMER UTILISATEUR supprime l'utilisateur dont le numro est pass dans rfUtilisateur. Vous devez passer un numro valide d'utilisateur, retourn par la commande LIRE LISTE UTILISATEURS. Si le compte de l'utilisateur n'existe pas ou a dj t supprim, une erreur -9979 est genre. Vous pouvez intercepter cette erreur avec une mthode de gestion d'erreurs installe par la commande APPELER SUR ERREUR. Les utilisateurs supprims n'apparaissent plus dans la fentre des mots de passe qui est affiche lorsque vous appelez CHANGER UTILISATEUR. Cependant, afin de maintenir des numros d'utilisateur uniques, le compte de l'utilisateur est conserv dans le systme de mots de passe. Les utilisateurs supprims sont affichs en vert dans la fentre des mots de passe en mode Structure. Rfrence ECRIRE PROPRIETES UTILISATEUR, LIRE LISTE UTILISATEURS, LIRE PROPRIETES UTILISATEUR, Utilisateur supprime. Gestion des erreurs Si vous n'avez pas les privilges d'accs pour appeler SUPPRIMER UTILISATEUR ou si un autre process accde dj au systme de mots de passe, une erreur de privilge d'accs est gnre. Vous pouvez intercepter cette erreur avec une mthode de gestion d'erreurs installe par la commande APPELER SUR ERREUR.

1880 4e Dimension - Langage

Utilisateur supprime

Utilisateurs et groupes version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Utilisateur supprime (rfUtilisateur) Boolen Paramtre rfUtilisateur Rsultat Type Numrique Boolen Description Numro d'identification de l'utilisateur Vrai = le compte de l'utilisateur est supprim ou n'existe pas Faux = le compte de l'utilisateur est actif

Description La commande Utilisateur supprime teste le compte de l'utilisateur dont le numro d'identification unique est pass dans rfUtilisateur. Si le compte n'existe pas ou a t supprim, la fonction Utilisateur supprime retourne Vrai. Sinon, elle retourne Faux. Rfrence ECRIRE PROPRIETES UTILISATEUR, LIRE PROPRIETES UTILISATEUR, SUPPRIMER UTILISATEUR. Gestion des erreurs Si vous n'avez pas les privilges d'accs pour appeler Utilisateur supprime ou si un autre process accde dj au systme de mots de passe, une erreur de privilge d'accs est gnre. Vous pouvez intercepter cette erreur avec une mthode de gestion d'erreurs utilisant la commande APPELER SUR ERREUR.

4e Dimension - Langage 1881

LIRE LISTE UTILISATEURS

Utilisateurs et groupes version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE LISTE UTILISATEURS (nomsUtil; numrosUtil) Paramtre nomsUtil rfsUtil Type Tableau alpha Tableau num Description Noms des utilisateurs tels qu'ils apparaissent dans l'diteur de Mots de passe Numros de rfrence uniques pour chaque utilisateur

Description La commande LIRE LISTE UTILISATEURS remplit les tableaux nomsUtil et rfsUtil avec les noms et les numros de rfrence uniques des utilisateurs tels qu'ils apparaissent dans la fentre des Mots de passe de 4D. Le tableau nomsUtil est rempli avec les noms des utilisateurs, y compris ceux dont le compte est supprim (les utilisateurs dont le nom apparat en vert dans la fentre des mots de passe). Note : Utilisez la commande Utilisateur supprime pour savoir si un compte utilisateur est supprim. Le tableau rfsUtil, synchronis avec nomsUtil, est rempli avec les numros de rfrence uniques des utilisateurs. Ces numros peuvent tre les suivants : Numro de rfrence Description utilisateur de l'utilisateur 1 Super_Utilisateur 2 Administrateur 3 15000 Utilisateur cr par le Super_Utilisateur (l'utilisateur n3 est le 1er utilisateur cr par le Super_Utilisateur, l'utilisateur n4 est le second, et ainsi de suite). -11 -15010 Utilisateur cr par l'Administrateur (l'utilisateur n-11 est le 1er utilisateur cr par l'Administrateur, l'utilisateur n-12 est le second, et ainsi de suite). Rfrence Ecrire proprietes utilisateur, LIRE LISTE GROUPE, LIRE PROPRIETES UTILISATEUR.

1882 4e Dimension - Langage

Gestion des erreurs Si vous n'avez pas les privilges d'accs pour appeler la commande LIRE LISTE UTILISATEURS ou si le systme des Mots de passe est dj ouvert par un autre process, une erreur de privilge d'accs est gnre. Vous pouvez intercepter cette erreur avec une mthode de gestion d'erreurs installe par APPELER SUR ERREUR.

4e Dimension - Langage 1883

LIRE PROPRIETES UTILISATEUR

Utilisateurs et groupes version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE PROPRIETES UTILISATEUR (rfUtilisateur; nom; dmarrage; motDePasse; nbUtilisations; dernireUtilisation{; adhsions{; groupePropritaire}}) Paramtre rfUtilisateur nom dmarrage motDePasse nbUtilisations dernireUtilisation adhsions groupePropritaire Type Numrique Alpha Alpha Alpha Numrique Date Tableau num Numrique Description Numro de rfrence unique de l'utilisateur Nom de l'utilisateur Nom de la mthode de dmarrage Chane vide Nombre d'utilisations de la base Date de la dernire utilisation de la base Numros de rfrence des groupes auxquels l'utilisateur appartient Numro de rfrence du groupe propritaire de lutilisateur

Description LIRE PROPRIETES UTILISATEUR retourne les informations concernant l'utilisateur dont le numro de rfrence est pass dans le paramtre rfUtilisateur. Vous devez passer le numro de rfrence retourn par la commande LIRE LISTE UTILISATEURS. Si le compte d'utilisateur n'existe pas ou a t supprim, l'erreur -9979 est gnre. Vous pouvez intercepter cette erreur avec une mthode de gestion d'erreurs installe par APPELER SUR ERREUR. Sinon, vous pouvez appeler la fonction Utilisateur supprime pour tester le compte de l'utilisateur avant d'appeler LIRE PROPRIETES UTILISATEUR. Les numros de rfrence pour les utilisateurs peuvent tre les suivants : Numro de rfrence Description utilisateur de l'utilisateur 1 Super_Utilisateur 2 Administrateur 3 15000 Utilisateur cr par le Super_Utilisateur (l'utilisateur n3 est le 1er utilisateur cr par le Super_Utilisateur, l'utilisateur n4 est le second, et ainsi de suite). -11 -15010 Utilisateur cr par l'Administrateur (l'utilisateur n-11 est le 1er utilisateur cr par l'Administrateur, l'utilisateur n-12 est le second, et ainsi de suite).

1884 4e Dimension - Langage

Aprs l'appel, pour chaque utilisateur dont la rfrence est rfUtilisateur, vous rcuprez aussi le nom, la mthode de dmarrage, le nombre d'utilisations et la date de la dernire utilisation de la base dans les paramtres nom, dmarrage, nbUtilisation et dernireUtilisation. Note : La commande LIRE PROPRIETES UTILISATEUR ne retourne plus le mot de passe crypt dans le paramtre motDePasse. Depuis la version 6.0.2 de 4D, une chane vide est toujours retourne dans ce paramtre. Si vous souhaitez contrler le mot de passe d'un utilisateur, utilisez la fonction Valider mot de passe. Si vous passez le paramtre facultatif adhsion, vous rcuprez le numro de rfrence unique du groupe auquel l'utilisateur appartient. Si vous passez le paramtre facultatif groupePropritaire, vous rcuprez le numro de rfrence du groupe propritaire de lutilisateur, cest--dire le groupe propritaire par dfaut des objets crs par cet utilisateur. Les numros de rfrence pour les groupes peuvent tre les suivants : Numro de rfrence Description du groupe du groupe 15001 32767 Groupe cr par le Super_Utilisateur ou le propritaire du groupe (le groupe n15001 est le 1er groupe cr par le Super_Utilisateur, le groupe n15002 est le second, etc. -15001 -32768 Groupe cr par l'Administrateur ou le propritaire du groupe (le groupe n-15001 est le 1er groupe cr par l'Administrateur, le groupe n-15002 est le second, etc. Rfrence Ecrire proprietes utilisateur, LIRE LISTE GROUPE, LIRE LISTE UTILISATEURS, Valider mot de passe. Gestion des erreurs Si vous n'avez pas les privilges d'accs pour appeler la commande LIRE PROPRIETES UTILISATEUR ou si le systme de Mots de passe est dj ouvert par un autre process, une erreur de privilge d'accs est gnre. Vous pouvez intercepter cette erreur avec une mthode de gestion d'erreurs installe par APPELER SUR ERREUR.

4e Dimension - Langage 1885

Ecrire proprietes utilisateur

Utilisateurs et groupes version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ecrire proprietes utilisateur (rfUtilisateur; nom; dmarrage; motDePasse; nbUtilisation; dernireUtilisation{; adhsions{; groupePropritaire}}) Numrique Paramtre rfUtilisateur Type Numrique Description Numro de rfrence unique du compte de l'utilisateur ou -1 pour l'ajout d'un utilisateur affili au Super_Utilisateur ou -2 pour l'ajout d'un utilisateur affili l'Administrateur Nouveau nom de l'utilisateur Nom de la nouvelle mthode de dmarrage Nouveau mot de passe (non crypt) ou * pour ne pas modifier le mot de passe Nouveau nombre d'utilisations de la base Nouvelle date de dernire utilisation de la base Numros de rfrence des groupes auxquels l'utilisateur appartient Numro de rfrence du groupe propritaire de lutilisateur Numro de rfrence unique du nouvel utilisateur

nom dmarrage motDePasse nbUtilisation dernireUtilisation adhsions groupePropritaire Rsultat

Alpha Alpha Alpha Numrique Date Tableau num Numrique Numrique

Description Ecrire proprietes utilisateur vous permet de modifier et de mettre jour les proprits d'un compte actif d'utilisateur existant dont le numro de rfrence est pass dans le paramtre rfUtilisateur, ou d'ajouter un nouvel utilisateur affili soit au Super_Utilisateur soit l'Administrateur. Si vous modifiez les proprits d'un utilisateur existant, vous devez passer le numro de rfrence qui vous est renvoy par la commande LIRE LISTE UTILISATEURS. Si le compte d'utilisateur n'existe pas ou a t supprim, Ecrire proprietes utilisateur retourne 0 et l'erreur -9979 est gnre. Vous pouvez intercepter cette erreur avec une mthode de gestion d'erreurs installe par APPELER SUR ERREUR. Sinon, vous pouvez appeler la fonction Utilisateur supprime pour tester le compte de l'utilisateur avant d'appeler Ecrire proprietes utilisateur.

1886 4e Dimension - Langage

Les numros de rfrence pour les utilisateurs peuvent tre les suivants : Numro de rfrence Description utilisateur de l'utilisateur 1 Super_Utilisateur 2 Administrateur 3 15000 Utilisateur cr par le Super_Utilisateur (l'utilisateur n3 est le 1er utilisateur cr par le Super_Utilisateur, l'utilisateur n4 est le second, et ainsi de suite). -11 -15000 Utilisateur cr par l'Administrateur (l'utilisateur n-11 est le 1er utilisateur cr par l'Administrateur, l'utilisateur n-12 est le second, et ainsi de suite). Si vous voulez ajouter un nouvel utilisateur affili au Super_Utilisateur, il faut passer -1 rfUtilisateur. Si vous voulez ajouter un nouvel utilisateur affili l'Administrateur, il faut passer -2 rfUtilisateur. Si l'utilisateur a bien t cr ou modifi, Ecrire proprietes utilisateur retourne son numro de rfrence unique d'utilisateur. Si vous ne passez pas un numro de rfrence d'utilisateur valide, Ecrire proprietes utilisateur ne fait rien et retourne 0. Lorsque vous appelez cette commande, vous passez le nouveau nom, la nouvelle mthode de dmarrage, le nouveau mot de passe, le nouveau nombre d'utilisations et la nouvelle date de dernire utilisation pour l'utilisateur dans les paramtres nom, dmarrage, motDePasse, nbUtilisation et dernireUtilisation. Vous passez un mot de passe non crypt dans le paramtre motDePasse. 4D cryptera ce mot de passe avant de le sauvegarder dans le compte de l'utilisateur. Si le nouveau nom d'utilisateur pass dans nom n'est pas unique (un utilisateur de mme nom existe dj), la commande ne fait rien et l'erreur -9979 est gnre. Vous pouvez intercepter cette erreur avec une mthode de gestion d'erreurs installe par APPELER SUR ERREUR. Si vous ne voulez pas modifier toutes les proprits de l'utilisateur ( part son groupe, voir ci-dessous), appelez au pralable LIRE PROPRIETES UTILISATEUR et passez les valeurs retournes dans celles que vous ne voulez pas modifier. Si vous ne voulez pas modifier le mot de passe de l'utilisateur, passez * dans le paramtre motDePasse. Cela vous permet de changer les autres proprits du compte de lutilisateur, sans changer le mot de passe de ce compte. Si vous ne passez pas le paramtre optionnel adhsions, les adhsions de l'utilisateur restent inchanges. Si vous ne passez pas ce paramtre en cas d'ajout d'un utilisateur, il ne fera partie d'aucun groupe.

4e Dimension - Langage 1887

Si vous passez le paramtre optionnel adhsions, vous modifiez toutes les adhsions pour l'utilisateur. Avant d'appeler cette commande, vous devez remplir le tableau adhsions avec les numros de rfrence uniques des groupes dont l'utilisateur devra faire partie. Si vous passez le paramtre facultatif groupePropritaire, vous indiquez le numro de rfrence du groupe propritaire de lutilisateur, cest--dire le groupe propritaire par dfaut des objets crs par cet utilisateur. Les numros de rfrence pour les groupes peuvent tre les suivants : Numro de rfrence Description du groupe du groupe 15001 32767 Groupe cr par le Super_Utilisateur ou le propritaire du groupe (le groupe n15001 est le 1er groupe cr par le Super_Utilisateur, le groupe n15002 est le second, etc. -15001 -32768 Groupe cr par l'Administrateur ou le propritaire du groupe (le groupe n-15001 est le 1er groupe cr par l'Administrateur, le groupe n-15002 est le second, etc. Si vous voulez annuler les adhsions d'un utilisateur, passez un tableau vide dans le paramtre adhsion. Rfrence LIRE LISTE GROUPE, LIRE LISTE UTILISATEURS, LIRE PROPRIETES UTILISATEUR, SUPPRIMER UTILISATEUR, Utilisateur supprime, Valider mot de passe. Gestion des erreurs Si vous n'avez pas les privilges d'accs pour appeler Ecrire proprietes utilisateur ou si le systme de mots de passe est dj ouvert par un autre process, une erreur de privilge d'accs est gnre. Vous pouvez intercepter cette erreur avec une mthode de gestion d'erreurs installe par APPELER SUR ERREUR.

1888 4e Dimension - Langage

UTILISATEURS VERS BLOB

Utilisateurs et groupes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

UTILISATEURS VERS BLOB (utilisateurs) Paramtre utilisateurs Type BLOB Description BLOB devant contenir les utilisateurs Comptes utilisateurs (crypt)

Description La commande UTILISATEURS VERS BLOB stocke dans le BLOB utilisateurs la liste de tous les comptes dutilisateurs et les groupes de la base crs par lAdministrateur. Seul lAdministrateur de la base peut excuter cette commande. Si un autre utilisateur tente de lexcuter, la commande ne fait rien et une erreur de privilge (-9949) est gnre. Le BLOB gnr est automatiquement encrypt et ne peut tre lu que par la commande BLOB VERS UTILISATEURS. Vous pouvez stocker ce BLOB dans un fichier disque ou dans un champ. Cette commande quivaut lenregistrement des groupes et utilisateurs depuis la fentre de gestion des groupes de la Bote outils, la diffrence prs quelle permet de stocker les comptes utilisateurs dans un champ BLOB et non uniquement dans un fichier. Ce principe permet de conserver une sauvegarde des utilisateurs parmi les donnes de la base, et ainsi de mettre en place un mcanisme de sauvegarde et de chargement automatiques des utilisateurs en cas de mise jour de la structure de la base (en effet, les informations relatives aux comptes utilisateurs sont stockes par 4e Dimension dans le fichier de structure de la base). Rfrence BLOB VERS UTILISATEURS.

4e Dimension - Langage 1889

BLOB VERS UTILISATEURS

Utilisateurs et groupes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

BLOB VERS UTILISATEURS (utilisateurs) Paramtre utilisateurs utilisateurs Type BLOB Description BLOB (crypt) contenant des comptes crs et sauvegards par l'Administrateur Description La commande BLOB VERS UTILISATEURS ajoute dans la base de donnes les comptes utilisateurs prsents dans le BLOB utilisateurs. Le BLOB utilisateurs est crypt et doit imprativement avoir t cr par la commande UTILISATEURS VERS BLOB. Seul lAdministrateur de la base peut excuter cette commande. Si un autre utilisateur tente de lexcuter, la commande ne fait rien et une erreur de privilge (-9949) est gnre. Lajout de chaque compte utilisateur est effectu en tenant compte des rgles suivantes : Le numro didentification de lutilisateur sert de rfrence. Les utilisateurs sont traits dans lordre des numros. Si le numro existe dj dans la structure de la base, les informations du compte sont mises jour si ncessaire en fonction des informations contenues dans le BLOB. Si le numro nexiste pas dans la structure de la base, lutilisateur est cr en fonction des informations contenues dans le BLOB. Si le numro correspond un compte utilisateur supprim dans la structure de la base, le compte est mis jour en fonction des informations contenues dans le BLOB. Si les informations contenues dans le BLOB indiquent que le compte utilisateur est supprim, le compte est supprim dans la structure de la base. Les utilisateurs mis jour sont associs aux groupes suivant les informations du BLOB. Si un groupe nexiste pas, il est ajout. Si la commande est excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0. Note de compatibilit : Les fichiers dutilisateurs et groupes (extension .4UG) crs par la commande de menu Enregistrer les groupes & utilisateurs... dans une version de 4e Dimension antrieure la 2004 peuvent tre chargs dans 4e Dimension 2004 via la squence suivante : DOCUMENT VERS BLOB(mondoc; blob) BLOB VERS UTILISATEURS(blob) En revanche, les fichiers dutilisateurs et groupes gnrs dans 4e Dimension partir de la version 2004 ne peuvent pas tre ouverts avec une version prcdente.

1890 4e Dimension - Langage

Rfrence UTILISATEURS VERS BLOB. Variables et ensembles systme Si la commande est excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0.

4e Dimension - Langage 1891

LIRE LISTE GROUPE

Utilisateurs et groupes version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE LISTE GROUPE (nomsGroupe; numrosGroupe) Paramtre nomsGroupe numrosGroupe Type Tableau alpha Tableau num Description Noms des groupes tels qu'ils apparaissent dans l'diteur de Mots de passe Numros de rfrence uniques pour chaque groupe

Description LIRE LISTE GROUPE remplit les tableaux nomsGroupe et numrosGroupe avec les noms et les numros de rfrence uniques des groupes tels qu'ils apparaissent dans l'diteur de Mots de passe. Le tableau numrosGroupe, synchronis avec le tableau nomsGroupe, est rempli avec les numros de rfrence uniques des groupes. Ces numros sont les suivants : Numro de rfrence Description du groupe du groupe 15001 32767 Groupe cr par le Super_Utilisateur ou le propritaire du groupe (le groupe n15001 est le 1er groupe cr par le Super_Utilisateur, le groupe n15002 est le second, etc. -15011 -32768 Groupe cr par l'Administrateur ou le propritaire du groupe (le groupe n-15001 est le 1er groupe cr par l'Administrateur, le groupe n-15002 est le second, etc. Rfrence Ecrire proprietes groupe, LIRE LISTE UTILISATEURS, LIRE PROPRIETES GROUPE. Gestion des erreurs Si vous n'avez pas les privilges d'accs pour appeler la commande LIRE LISTE GROUPE ou si le systme de Mots de passe est dj ouvert par un autre process, une erreur de privilge d'accs est gnre. Vous pouvez intercepter cette erreur avec une mthode de gestion d'erreurs installe par APPELER SUR ERREUR.

1892 4e Dimension - Langage

LIRE PROPRIETES GROUPE

Utilisateurs et groupes version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE PROPRIETES GROUPE (rfGroupe; nom; propritaire{; membres}) Paramtre rfGroupe nom propritaire membres Type Numrique Alpha Numrique Tableau num Description Numro de rfrence du groupe Nom du groupe Numro de rfrence du propritaire du groupe Membres du groupe

Description LIRE PROPRIETES GROUPE retourne les proprits du groupe dont le numro de rfrence est pass dans rfGroupe. Vous passez le numro de rfrence du groupe retourn par la commande LIRE LISTE GROUPE. Les numros de rfrence des groupes sont les suivants : Numro de rfrence Description du groupe du groupe 15001 32767 Groupe cr par le Super_Utilisateur ou le propritaire du groupe (le groupe n15001 est le 1er groupe cr par le Super_Utilisateur, le groupe n15002 est le second, etc. -15011 -32768 Groupe cr par l'Administrateur ou le propritaire du groupe (le groupe n-15001 est le 1er groupe cr par l'Administrateur, le groupe n-15002 est le second, etc. Si vous ne passez pas un numro de rfrence valide, LIRE PROPRIETES GROUPE renvoie des paramtres vides. Aprs l'appel de la commande, vous rcuprez le nom et le numro du propritaire du groupe dans les paramtres nom et propritaire. Si vous passez le paramtre optionnel membres, ce tableau contiendra les numros de rfrence uniques des utilisateurs qui appartiennent au groupe.

4e Dimension - Langage 1893

Les numros de rfrence des membres de groupe sont les suivants : Numro de rfrence Description membre du membre 1 Super_Utilisateur 2 Administrateur 1 15000 Utilisateur cr par le Super_Utilisateur (l'utilisateur n3 est le 1er utilisateur cr par le Super_Utilisateur, l'utilisateur n4 est le second, et ainsi de suite). -11 -15010 Utilisateur cr par l'Administrateur (l'utilisateur n-11 est le 1er utilisateur cr par l'Administrateur, l'utilisateur n-12 est le second, et ainsi de suite). 15001 32767 Groupe cr par le Super_Utilisateur ou le propritaire du groupe (le groupe n15001 est le 1er groupe cr par le Super_Utilisateur, le groupe n15002 est le second, etc. -15011 -32768 Groupe cr par l'Administrateur ou le propritaire du groupe (le groupe n-15001 est le 1er groupe cr par l'Administrateur, le groupe n-15002 est le second, etc. Rfrence ECRIRE PROPRIETES GROUPE, LIRE LISTE GROUPE, LIRE LISTE UTILISATEURS. Gestion des erreurs Si vous n'avez pas les privilges d'accs pour appeler la commande LIRE PROPRIETES GROUPE ou si le systme de Mots de passe est dj ouvert par un autre process, une erreur de privilge d'accs est gnre. Vous pouvez intercepter cette erreur avec une mthode de gestion d'erreurs installe par APPELER SUR ERREUR.

1894 4e Dimension - Langage

Ecrire proprietes groupe

Utilisateurs et groupes version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ecrire proprietes groupe (rfGroupe; nom; propritaire{; membres}) Numrique Paramtre rfGroupe Type Numrique Description Numro de rfrence unique du groupe activ ou -1 pour ajouter un groupe de Super_Utilisateur -2 pour ajouter un groupe d'Administrateur Nouveau nom de groupe Numro de rfrence unique de l'utilisateur ou le propritaire du nouveau groupe Nouveaux membres du groupe Numro de rfrence unique du nouveau groupe

nom propritaire membres Rsultat

Alpha Numrique Tableau num Numrique

Description Ecrire proprietes groupe vous permet de modifier et de mettre jour les proprits d'un groupe existant dont vous passez le numro de rfrence unique dans rfGroupe, ou d'ajouter un nouveau groupe affili au Super_Utilisateur ou l'Administrateur. Si vous modifiez les proprits d'un groupe existant, vous devez passer son numro de rfrence tel que retourn dans la commande LIRE LISTE GROUPE. Les numros de rfrence de groupe sont les suivants : Numro de rfrence du groupe 15001 32767 -15001 -32768 Description du groupe Groupe cr par le Super_Utilisateur ou le propritaire du groupe (le groupe n15001 est le 1er groupe cr par le Super_Utilisateur, le groupe n15002 est le second, etc. Groupe cr par l'Administrateur ou le propritaire du groupe (le groupe n-15001 est le 1er groupe cr par l'Administrateur, le groupe n-15002 est le second, etc.

Si vous voulez ajouter un nouveau groupe affili au Super_Utilisateur, passez -1 dans rfGroupe. Si vous voulez ajouter un nouveau groupe affili l'Administrateur, passez -2 dans rfGroupe.

4e Dimension - Langage 1895

Si le groupe a bien t cr, Ecrire proprietes groupe retourne son numro de rfrence unique. Si vous ne passez pas -1, -2 ou un numro de rfrence de groupe valide, Ecrire proprietes groupe ne fait rien et retourne 0. Avant d'appeler cette routine, vous passez le nouveau nom du groupe et le numro du propritaire du groupe dans les paramtres nom et propritaire. Si vous ne voulez pas modifier toutes les proprits du groupe ( part ses membres, voir ci-dessous), passez les valeurs retournes par LIRE PROPRIETES GROUPE dans les paramtres que vous voulez laisser inchangs. Si vous ne passez pas le paramtre optionnel membres, la liste courante des membres du groupe reste inchange. Si vous le faites lors d'une cration d'un groupe, le groupe n'aura pas de membres. Note : Le propritaire d'un groupe n'est pas automatiquement dfini comme membre du groupe qu'il possde. C'est vous de l'y inclure explicitement, l'aide du paramtre membres. Si vous passez le paramtre optionnel membres, vous modifiez toute la liste des membres pour ce groupe. Avant d'appeler cette routine, vous devez remplir le tableau membres avec les numros de rfrence uniques des utilisateurs et/ou des groupes devant appartenir au groupe. Ces numros peuvent tre les suivants : Numro de rfrence Description membre du membre 1 Super_Utilisateur 2 Administrateur 1 15000 Utilisateur cr par le Super_Utilisateur (l'utilisateur n3 est le 1er utilisateur cr par le Super_Utilisateur, l'utilisateur n4 est le second, et ainsi de suite). -11 -15010 Utilisateur cr par l'Administrateur (l'utilisateur n-11 est le 1er utilisateur cr par l'Administrateur, l'utilisateur n-12 est le second, et ainsi de suite). 15001 32767 Groupe cr par le Super_Utilisateur ou le propritaire du groupe (le groupe n15001 est le 1er groupe cr par le Super_Utilisateur, le groupe n15002 est le second, etc. -15011 -32768 Groupe cr par l'Administrateur ou le propritaire du groupe (le groupe n-15001 est le 1er groupe cr par l'Administrateur, le groupe n-15002 est le second, etc.

1896 4e Dimension - Langage

Si vous voulez enlever tous les membres d'un groupe, passez un tableau vide dans le paramtre membres. Rfrence LIRE LISTE GROUPE, LIRE LISTE UTILISATEURS, LIRE PROPRIETES GROUPE. Gestion des erreurs Si vous n'avez pas les privilges d'accs pour appeler la commande Ecrire proprietes groupe ou si le systme de mots de passe est dj ouvert par un autre process, une erreur de privilge d'accs est gnre. Vous pouvez intercepter cette erreur avec une mthode de gestion d'erreurs installe par APPELER SUR ERREUR.

4e Dimension - Langage 1897

CHANGER LICENCES

Utilisateurs et groupes version 2004 (Modifie)

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

CHANGER LICENCES Paramtre Type Description Cette commande ne requiert pas de paramtre Description La commande CHANGER LICENCES affiche la bote de dialogue de mise jour des licences 4D. Cette bote de dialogue vous permet dactiver des plug-ins, le serveur Web ou, avec 4D Server, dajouter des numros d'expansion afin d'accrotre le nombre de clients pouvant utiliser simultanment la base et ses plug-ins. Note : Dans 4e Dimension et 4D Server, vous affichez cette bote de dialogue en slectionnant la commande Mise jour des licences... dans le menu Aide. CHANGER LICENCES permet dactiver des licences et dajouter des numros d'expansion dans une application compile diffuse vos clients. Les dveloppeurs 4D et les administrateurs de systmes peuvent utiliser cette commande pour diffuser une application 4D, en laissant leurs clients le soin de saisir eux-mme les numros sans devoir leur faire parvenir une mise jour de lapplication. Pour plus d'informations sur le fonctionnement de cette bote de dialogue, reportez-vous au Guide d'installation de 4e Dimension. Exemple Dans une bote de dialogue de configuration ou de prfrences personnalise, vous placez un bouton auquel la mthode suivante est associe :

` Mthode objet du bouton bLicence CHANGER LICENCES

Vous permettrez ainsi lutilisateur dactiver des licences sans avoir modifier la base de donnes.

1898 4e Dimension - Langage

ECRIRE ACCES PLUGIN

Utilisateurs et groupes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRIRE ACCES PLUGIN (plugIn; groupe) Paramtre plugIn groupe Type Entier long Alpha Description Numro du plug-in Nom du groupe associer au plug-in

Description La commande ECRIRE ACCES PLUGIN permet de spcifier par programmation le groupe dutilisateurs autoris utiliser chaque plug-in srialis install dans la base. Cette dfinition permet de grer la rpartition des licences des plug-ins. Note : Cette opration peut galement tre effectue en mode Structure dans l'diteur de groupes. Passez dans le paramtre plugIn le numro du plug-in auquel associer un groupe dutilisateurs. Les licences de plug-ins incluent les licences Web et Web Client. Vous pouvez passer une des constantes du thme Licence disponible : Constante Licence 4D Draw Licence 4D for OCI Licence 4D View Licence 4D Web Licence 4D Write Licence Web Client Type Entier Entier Entier Entier Entier Entier long long long long long long Valeur 808464694 808465208 808465207 808464945 808464697 808465209

Passez dans le paramtre groupe le nom du groupe dont les utilisateurs seront autoriss utiliser le plug-in. Rfrence Lire acces plugin.

4e Dimension - Langage 1899

Lire acces plugin

Utilisateurs et groupes version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire acces plugin (plugIn) Alpha Paramtre plugIn Rsultat Type Entier long Alpha Description Numro du plug-in Nom du groupe associ au plug-in

Description La commande Lire acces plugin retourne le nom du groupe dutilisateurs autoris utiliser le plug-in dont le numro a t pass dans le paramtre plugIn. Si aucun groupe nest associ au plug-in, la commande retourne une chane vide (""). Passez dans le paramtre plugIn le numro du plug-in duquel vous souhaitez connatre le groupe dutilisateurs associ. Les licences de plug-ins incluent les licences Web et SOAP de 4D Client. Vous pouvez passer une des constantes suivantes du thme Licence disponible : Constante Licence 4D Draw Licence 4D for OCI Licence 4D View Licence 4D Write Licence Web 4D Client Licence SOAP 4D Client Rfrence ECRIRE ACCES PLUGIN. Type Entier Entier Entier Entier Entier Entier long long long long long long Valeur 808464694 808465208 808465207 808464697 808465209 808465465

1900 4e Dimension - Langage

64 ________________________ Variables

4e Dimension - Langage 1901

1902 4e Dimension - Langage

ECRIRE VARIABLES

Variables version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ECRIRE VARIABLES (doc; variable{; variable2; ...; variableN}) Paramtre doc variable Type Alpha Variable Description Nom du document dans lequel sauvegarder la ou les variable(s) Variable(s) sauvegarder

Description La commande ECRIRE VARIABLES sauvegarde une ou plusieurs variable(s) dans un document disque dont le nom est pass dans le paramtre doc. Les variables ne doivent pas obligatoirement tre du mme type, mais doivent avoir le type Texte, Numrique, Date, Heure, Boolen ou Image. Si vous passez une chane vide ("") dans doc, une bote de dialogue standard d'enregistrement de fichiers apparat, permettant l'utilisateur de donner un nom au document crer. Dans ce cas, la variable systme Document rcupre le nom du document, s'il a bien t cr. Si les variables ont t correctement sauvegardes, la variable systme OK prend la valeur 1. Sinon, OK prend la valeur 0. Note : Lorsque vous crivez des variables dans des documents l'aide de la commande ECRIRE VARIABLES, 4e Dimension utilise un format de donnes qui lui est propre. Vous ne pouvez rcuprer les variables qu'avec la commande LIRE VARIABLES. N'utilisez pas les commandes RECEVOIR VARIABLE ou RECEVOIR PAQUET pour lire un document cr par ECRIRE VARIABLES. ATTENTION : La commande ECRIRE VARIABLES ne permet pas de sauvegarder les variables de type Tableau. Pour cela, vous devez utiliser les nouvelles commandes du thme BLOB. Exemples L'exemple suivant enregistre trois variables dans un fichier nomm PrefsUti :

ECRIRE VARIABLES ("PrefsUti"; VSNom; VLCode; VGIconPict)

4e Dimension - Langage 1903

Variables et ensembles systme Si l'opration s'est correctement droule, la variable OK prend la valeur 1, sinon elle prend la valeur 0. Rfrence BLOB VERS DOCUMENT, BLOB VERS VARIABLE, DOCUMENT VERS BLOB, LIRE VARIABLES, VARIABLE VERS BLOB.

1904 4e Dimension - Langage

LIRE VARIABLES

Variables version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE VARIABLES (doc; variable{; variable2; ...; variableN}) Paramtre doc variable Type Alpha Variable Description Document contenant la ou les variable(s) lire Nom de(s) variable(s) devant recevoir les valeurs

Description La commande LIRE VARIABLES charge une ou plusieurs variables depuis le document dsign par doc. Ce document doit avoir t cr l'aide de la commande ECRIRE VARIABLES. Les variables variable, variable2... variableN sont soit cres, soit rcrites si elles existent dj. Si vous passez une chane vide ("") dans doc, une bote de dialogue standard d'ouverture de fichiers apparat, permettant l'utilisateur de slectionner le document ouvrir. Dans ce cas, la variable systme Document contiendra le nom du document choisi. Dans le cadre de bases compiles, les variables utilises doivent tre du mme type que celles charges du disque. ATTENTION : Cette commande ne traite pas les variables de type Tableau. Pour cela, vous devez utiliser les nouvelles commandes du thme BLOB. Exemple L'exemple suivant charge trois variables d'un document nomm PrefsUti :

LIRE VARIABLES ( "PrefsUti"; VSNom; VLCode; VGIconPict)

Variables et ensembles systme La variable systme OK prend la valeur 1 si les variables ont t correctement charges, sinon elle prend la valeur 0. Rfrence BLOB VERS DOCUMENT, BLOB VERS VARIABLE, DOCUMENT VERS BLOB, RECEVOIR VARIABLE, VARIABLE VERS BLOB.

4e Dimension - Langage 1905

EFFACER VARIABLE

Variables version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

EFFACER VARIABLE (variable) Paramtre variable Type Variable Description Nom de la variable effacer

Description La commande EFFACER VARIABLE fonctionne diffremment en mode interprt et en mode compil. Mode interprt EFFACER VARIABLE efface variable de la mmoire. En consquence, la variable devient indfinie : tenter de lire sa valeur gnre une erreur de syntaxe. A noter que si par la suite vous assignez de nouveau une valeur la variable, 4D, en mode interprt, la recrera la vole. Lorsqu'une variable est efface, la fonction Indefinie, si elle lui est applique, retourne Vrai. Mode compil EFFACER VARIABLE rinitialise uniquement variable la valeur par dfaut de son type (par exemple chane vide pour les types Alpha et Texte, 0 zro pour les variables numriques, aucun lment pour un tableau etc.). La variable existe toujours : les variables ne sont jamais indfinies dans du code compil. La variable passe dans variable doit tre une variable process ou interprocess. Note : Il n'est pas ncessaire d'effacer les variables process la fin de l'excution d'un process, 4D s'en charge automatiquement. Les variables locales, c'est--dire celles dont le nom est prcd du symbole dollar ($), ne peuvent tre effaces par EFFACER VARIABLE. Toutefois, chaque variable locale est automatiquement efface la fin de l'excution de la mthode dans laquelle elle a t cre.

1906 4e Dimension - Langage

Exemple Dans un formulaire, vous utilisez une liste droulante appele asMalListeD n'ayant qu'un rle d'interface utilisateur. Autrement dit, vous exploitez ce tableau lors de la saisie de donnes, mais une fois que le formulaire est referm, vous n'en avez plus besoin. Par consquent, lors de l'vnement Sur libration, vous effacez simplement le tableau : ` Mthode objet liste droulante asMalListeD Au cas ou : (Evenement formulaire=Sur chargement) ` Initialiser le tableau comme vous le souhaitez... TABLEAU ALPHA(63;asMalListeD;...) ` ... :(Evenement formulaire=Sur libration) ` Vous n'avez plus besoin du tableau EFFACER VARIABLE (asMalListeD) ` ... Fin de cas

Rfrence Indefinie.

4e Dimension - Langage 1907

Indefinie

Variables version 5

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Indefinie (variable) Boolen Paramtre variable Rsultat Type Variable Boolen Description Variable tester Vrai = Variable actuellement indfinie Faux = Variable actuellement dfinie

Description Indefinie retourne Vrai si variable n'a pas t dfinie, et Faux si variable a t dfinie. Une variable est dfinie si une valeur lui a t assigne. Une variable est indfinie si aucune valeur ne lui a t assigne, ou si elle a t efface par la commande EFFACER VARIABLE. Si la base de donnes a t compile, la fonction Indefinie retourne Faux pour toutes les variables. Exemples (1) Avant la version 6 de 4e Dimension, la fonction Indefinie fournissait un moyen sr de tester si la base tait excute en mode interprt ou en mode compil : touteVar:="Hello" EFFACER VARIABLE(touteVar) Si (Indefinie(touteVar)) ` Vous tes en mode interprt Sinon ` Vous tes en mode compil Fin de si

A compter de la version 6, il est plus pratique d'utiliser la fonction intgre Application compilee. (2) Votre application gre un process lorsqu'une commande de menu d'un module particulier de la base est slectionne : si le process est dj cr, vous le passez au premier plan ; s'il n'est pas cr, vous le dmarrez. Pour cela, pour chaque module de votre application, vous grez une variable interprocess PID_... initialise dans la mthode base Sur ouverture.

1908 4e Dimension - Langage

Au cours du dveloppement de la base, vous ajoutez de nouveaux modules. Au lieu de devoir chaque fois modifier la mthode base Sur ouverture (pour ajouter l'initialisation de la variable PID_... correspondante) puis quitter et rouvrir la base pour tout rinitialiser, vous utilisez la fonction Indefinie pour grer " la vole" l'ajout d'un nouveau module : ` Mthode projet M_AJOUT_CLIENTS

` Prise en compte des tapes de dveloppement intermdiaires Si (Indefinie(PID_AJOUT_CLIENTS)) C_ENTIER LONG(PID_AJOUT_CLIENTS) PID_AJOUT_CLIENTS:=0 Fin de si Si (PID_AJOUT_CLIENTS=0) PID_AJOUT_CLIENTS:=Nouveau process("P_AJOUT_CLIENTS";64*1024; "P_AJOUT_CLIENTS") Sinon MONTRER PROCESS(PID_AJOUT_CLIENTS) PASSER AU PREMIER PLAN(PID_AJOUT_CLIENTS) Fin de si ` Note: P_AJOUT_CLIENTS, la mthode de gestion des process, ` fixe PID_ADD_CUSTOMERS zro lorsqu'elle est termine.

Rfrence EFFACER VARIABLE.

4e Dimension - Langage 1909

1910 4e Dimension - Langage

65 ________________________ Web Services (Client)

4e Dimension - Langage 1911

1912 4e Dimension - Langage

Commandes du thme Web Services (Client)

Web Services (Client) version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension, compter de la version 2003, prend en charge les Web Services, ce qui signifie que le programme vous permet de publier (partie serveur) et/ou dutiliser (partie client) des Web Services depuis vos bases de donnes. Un Web Service est un ensemble de fonctions publi sur un rseau. Ces fonctions peuvent tre invoques et utilises par toute application compatible Web Services et connecte au rseau. Les Web Services peuvent effectuer tout type de tche, comme le suivi dacheminement de colis chez un transporteur, le commerce lectronique, le suivi de valeurs boursires, etc. Pour plus dinformations sur le concept et le fonctionnement des Web Services, reportezvous au manuel Mode Structure. La souscription aux Web Services dans 4e Dimension seffectue simplement laide de lAssistant Web Services. Dans la plupart des cas, cet assistant sera suffisant pour vous permettre dutiliser des Web Services. Toutefois, si vous souhaitez personnaliser certains mcanismes, vous devez utiliser les commandes SOAP client de 4e Dimension 2003. Cette section dcrit les commandes utilises pour la souscription par 4e Dimension des Web Services externes (partie client). Pour plus d'informations sur les commandes utilises lors de la publication des Web Services (partie serveur), reportez-vous aux commandes du thme Web Services (Serveur). Note : Par convention, les libells SOAP et Web Service ont t utiliss respectivement dans les noms des commandes (et des constantes) ct serveur et ct client. Ces deux notions dsignent la mme technologie.

4e Dimension - Langage 1913

FIXER PARAMETRE WEB SERVICE

Web Services (Client) version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER PARAMETRE WEB SERVICE (nom; valeur{; typeSOAP}) Paramtre nom valeur typeSOAP Type Chane Variable Chane Description Nom du paramtre inclure dans la requte SOAP Variable 4D contenant la valeur du paramtre Type SOAP du paramtre

Description La commande FIXER PARAMETRE WEB SERVICE permet de dfinir un paramtre utilis pour une requte SOAP cliente. Appelez autant de fois cette commande quil y a de paramtres dans la requte. Passez dans nom le nom du paramtre tel quil doit apparatre dans la requte SOAP. Passez dans valeur la variable 4D contenant la valeur du paramtre. Dans le cadre des mthodes proxy, cette variable est gnralement $1, $2, $3, etc., correspondant un paramtre 4D pass la mthode proxy lors de son appel. Il est toutefois possible dutiliser des variables intermdiaires. Note : Chaque variable ou tableau 4D utilis(e) doit tre pralablement dclar(e) laide des commandes des thmes Compilateur et Tableaux. Par dfaut, 4e Dimension dtermine automatiquement le type SOAP le plus appropri pour le paramtre nom en fonction du contenu de valeur. Lindication du type est incluse dans la requte. Toutefois, vous pouvez vouloir forcer la dfinition du type SOAP du paramtre. Dans ce cas, vous pouvez passer le paramtre optionnel typeSOAP ; vous devez utiliser une des chanes de caractres suivantes (types de donnes primaires) : typeSOAP string int boolean float decimal double duration datetime time date gyearmonth gyear Description Chane Entier long Boolen Rel 32 bits Rel avec dcimale Rel 64 bits Dure en annes mois jours heures minutes secondes, par exemple : P1Y2M3DT10H30M Date et heure au format ISO8601, par exemple 2003-05-31T13:20:00 Heure, par exemple 13:20:00 Date, par exemple 2003-05-31 Anne et mois (calendrier grgorien), par exemple 2003-05 Anne (calendrier grgorien), par exemple 2003

1914 4e Dimension - Langage

gmonthday gday gmonth hexbinary base64binary anyuri qname notation

Mois et jour (calendrier grgorien), par exemple --05-31 Jour (calendrier grgorien), par exemple ---31 Mois (calendrier grgorien), par exemple --10-Valeur exprime en hexadcimal BLOB Uniform Resource Identifier (URI), par exemple : http://www.societe.com/page Nom XML qualifi (espace de nommage et partie locale) Attribut Notation

Note : Pour plus dinformations sur les types de donnes XML, reportez-vous lURL http://www.w3.org/TR/xmlschema-2/ Exemple Cet exemple dfinit deux paramtres : C_TEXTE($1) C_TEXTE($2) FIXER PARAMETRE WEB SERVICE("ville";$1) FIXER PARAMETRE WEB SERVICE("pays";$2)

Rfrence APPELER WEB SERVICE, LIRE RESULTAT WEB SERVICE.

4e Dimension - Langage 1915

FIXER OPTION WEB SERVICE

Web Services (Client) version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER OPTION WEB SERVICE (option; valeur) Paramtre option valeur Type Entier long Entier long Description Code de loption fixer Valeur de loption

Note prliminaire : Cette commande est destine aux utilisateurs avancs des Web Services. Son emploi est facultatif. Description La commande FIXER OPTION WEB SERVICE permet de dfinir diffrentes options qui seront utilises lors de la prochaine requte SOAP dclenche par la commande APPELER WEB SERVICE. Vous pouvez appeler cette commande autant de fois quil y a doptions fixer. Passez dans le paramtre option le numro de loption dfinir et dans le paramtre valeur la nouvelle valeur de loption. Vous pouvez utiliser pour ces deux paramtres une des constantes prdfinies suivantes, situes dans le thme Web Services (Client) : Constante (param option) Web Service timeout HTTP Web Service header SOAP Web Service version SOAP Constante (param valeur) Web Service SOAP_1_1 Web Service SOAP_1_2 Type Entier long Entier long Entier long Type Entier long Entier long Valeur 1 2 3 Valeur 0 1

Voici la description des options et des valeurs possibles : option = Web Service timeout HTTP valeur = timeout de la partie cliente exprim en secondes. Le timeout de la partie cliente est le dlai dattente du client Web Service en cas de nonrponse du serveur. A lissue de ce dlai, le client referme la session, la requte est perdue. Par dfaut, ce dlai est de 180 secondes. Il peut tre modifi en raison de caractristiques particulires (tat du rseau, spcificits du Web Service, etc.).

1916 4e Dimension - Langage

option = Web Service header SOAP valeur = rfrence dlment xml racine insrer en tant que header (en-tte) de la requte SOAP. Cette option permet dinsrer un header dans la requte SOAP gnre par la commande APPELER WEB SERVICE. Par dfaut, les requtes SOAP ne comportent pas den-tte spcifique. Cependant, certains Web Services requirent la prsence de cet en-tte, par exemple pour la gestion de paramtres didentification. option = Web Service version SOAP valeur = Web Service SOAP_1_1 ou Web Service SOAP_1_2 Cette option permet de prciser la version du protocole SOAP utilise dans la requte. Passez dans valeur la constante Web Service SOAP_1_1 pour indiquer la version 1.1 et la constante Web Service SOAP_1_2 pour indiquer la version 1.2. Lordre dappel des options na pas dimportance. Si une mme option est dfinie plusieurs fois, seule la valeur du dernier appel est prise en compte. Exemples (1) Insertion dun en-tte personnalis dans la requte SOAP : ` Cration dune rfrence XML C_ALPHA(16;vRefRacine;vRefElement) vRefRacine:=DOM Creer ref XML("RootElement") vxPath:="/RootElement/Elem1/Elem2/Elem3" vRefElement:=DOM Creer element XML(vRefRacine;vxPath) `Modification de len-tte SOAP avec la rfrence FIXER OPTION WEB SERVICE(Web Service header SOAP;vRefElement)

(2) Utilisation de la version 1.2 du protocole SOAP :

FIXER OPTION WEB SERVICE(Web Service version SOAP;Web Service SOAP_1_2)

Rfrence APPELER WEB SERVICE.

4e Dimension - Langage 1917

APPELER WEB SERVICE

Web Services (Client) version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

APPELER WEB SERVICE (urlAccs; soapAction; nomMthode; espaceNommage{; typeCompos}) Paramtre urlAccs soapAction nomMthode espaceNommage typeCompos Type Chane Chane Chane Chane Entier long Description URL daccs au Web Service Contenu du champ SOAPAction Nom de la mthode Espace de nommage (Namespace) Configuration de types composs (types simples si omis)

Description La commande APPELER WEB SERVICE permet dinvoquer un Web Service en envoyant une requte HTTP. Cette requte contient le message SOAP pralablement construit laide de la commande FIXER PARAMETRE WEB SERVICE. Tout appel ultrieur la commande FIXER PARAMETRE WEB SERVICE provoquera la construction dune nouvelle requte. Lexcution dune commande APPELER WEB SERVICE efface galement tout ventuel rsultat de Web Service prcdemment appel et le remplace par le(s) nouveau(x) rsultats. Passez dans urlAccs lURL complet permettant daccder au Web Service (ne confondez pas cet URL avec celui du fichier WSDL, dcrivant le Web Service). Accs en mode scuris (SSL) : Si vous souhaitez utiliser le Web Service en mode scuris (SSL), passez simplement https:// en tte de lURL au lieu de http://. Ce paramtrage active automatiquement la connexion en mode scuris. Passez dans le paramtre soapAction le contenu du champ SOAPAction de la requte. Ce champ contient gnralement la valeur NomService#NomMthode. Passez dans le paramtre nomMthode le nom de la mthode distante (appartenant au Web Service) que vous souhaitez excuter. Passez dans le paramtre espaceNommage lespace de nommage XML (Namespace) utilis pour la requte SOAP. Pour plus dinformations sur lespace de nommage XML, reportezvous au manuel Mode Structure de 4D. Le paramtre optionnel typeCompos permet d'indiquer la configuration des paramtres Web Service envoys ou reus (dfinis laide des commandes FIXER PARAMETRE WEB SERVICE et LIRE RESULTAT WEB SERVICE). La valeur du paramtre typeCompos dpend du mode de publication du Web Service (DOC ou RPC, cf. manuel Mode Structure de 4D) et de ses paramtres. 1918 4e Dimension - Langage

Vous devez passer dans typeCompos lune des constantes suivantes, places dans le thme Web Services (Client) : Constante Type Valeur Web Service dynamique Entier long 0 (dfaut) Web Service entre manuel Entier long 1 Web Service sortie manuel Entier long 2 Web Service manuel Entier long 3 Chaque constante correspond une configuration de Web Services. Une configuration reprsente une combinaison entre le mode de publication (RPC/DOC) et les types de paramtres entre/sortie simples ou composs (aussi appels complexes) mis en oeuvre. Note : La caractristique entre ou sortie des paramtres svalue du point de vue de la mthode proxy/du Web Service : un paramtre entre est une valeur passe la mthode proxy et donc au Web Service, un paramtre sortie est retourn par le Web Service et donc par la mthode proxy (gnralement via $0). Le tableau suivant fournit les configurations possibles et les constantes correspondantes : Paramtres entre Paramtres sortie Simples Composs Simples RPC / Web Service dynamique RPC / Web Service manuel entre Composs RPC / Web Service manuel sortie RPC ou DOC / Web Service manuel Les cinq configurations dcrites ci-dessous peuvent donc tre mises en oeuvre. Dans tous les cas, 4e Dimension se charge de formater la requte SOAP envoyer au Web Service ainsi que son enveloppe. Il vous appartient de formater le contenu de cette requte suivant la configuration utilise. Note : Bien qutant des types XML composs, les tableaux de donnes sont grs par 4D comme des types simples. Mode RPC, entre et sortie simples Cette configuration est la plus simple utiliser. Dans ce cas, le paramtre typeCompos contient la constante Web Service dynamique ou est omis. Les paramtres envoys et les rponses reues peuvent tre manipuls directement, sans traitement pralable. Reportez-vous lexemple de la commande LIRE RESULTAT WEB SERVICE. Mode RPC, entre compose et sortie simple Dans ce cas, le paramtre typeCompos contient la constante Web Service entre manuel. Avec cette configuration, vous devez passer manuellement au Web Service chaque lment xml source sous la forme d'un BLOB, laide de la commande FIXER PARAMETRE WEB SERVICE. Il vous appartient de formater le BLOB initial sous forme dlment xml valide. Ce BLOB doit contenir comme premier lment le premier lment fils suppos de llment <Body> de la requte finale.

4e Dimension - Langage 1919

Exemple C_BLOB($1) C_BOOLEEN($0)

FIXER PARAMETRE WEB SERVICE("MonBlobXML";$1) APPELER WEB SERVICE("http://my.domain.com/mon_service";"MonSoapAction"; "http://my.namespace.com/";Web Service entre manuel) LIRE RESULTAT WEB SERVICE($0;"MaVarSortie";*)

Mode RPC, entre simple et sortie compose Dans ce cas, le paramtre typeCompos contient la constante Web Service sortie manuel. Chaque paramtre de sortie sera retourn par le Web Service sous forme dlment xml stock dans un BLOB. Vous rcuprez ce paramtre laide de la commande LIRE RESULTAT WEB SERVICE. Vous pourrez ensuite analyser le contenu du BLOB reu laide des commandes XML de 4D. Exemple C_BLOB($0) C_BOOLEEN($1)

FIXER PARAMETRE WEB SERVICE("MaVarEntree";$1) APPELER WEB SERVICE("http://my.domain.com/mon_service";"MonSoapAction"; "http://my.namespace.com/";Web Service sortie manuel) LIRE RESULTAT WEB SERVICE($0;"MonXMLSortie";*)

Mode RPC, entre et sortie composes Dans ce cas, le paramtre typeCompos contient la constante Web Service manuel. Chaque paramtre dentre et de sortie devra tre stock sous forme dlment xml dans des BLOBs, comme dcrit dans les deux configurations prcdentes. Exemple C_BLOB($0) C_BLOB($1)

FIXER PARAMETRE WEB SERVICE("MonBlobXMLEntree";$1) APPELER WEB SERVICE("http://my.domain.com/mon_service";"MonSoapAction"; "http://my.namespace.com/";Web Service manuel) LIRE RESULTAT WEB SERVICE($0;"MonXMLSortie";*)

Mode DOC Une mthode proxy dappel dun Web Service DOC est semblable une mthode proxy dappel dun Web Service RPC utilisant des paramtres dentre et de sortie composs. La seule diffrence entre ces deux configurations se situe au niveau du contenu xml des paramtres BLOB passs et reus. Du point de vue de 4e Dimension, la construction et lenvoi de la requte SOAP sont identiques.

1920 4e Dimension - Langage

Exemple C_BLOB($0) C_BLOB($1) FIXER PARAMETRE WEB SERVICE("MonXMLEntree";$1) APPELER WEB SERVICE("http://my.domain.com/mon_service";"MonSoapAction"; "http://my.namespace.com/";Web Service manuel) LIRE RESULTAT WEB SERVICE($0;"MonXMLSortie";*) Note : Dans le cas des Web Services DOC, la valeur des chanes (ci-dessus MonXMLEntree et MonXMLSortie) passes en paramtres na pas dimportance ; il est mme possible de passer des chanes vides (""). En effet, ces valeurs ne sont pas utilises dans la requte SOAP contenant le document xml. Il est toutefois obligatoire de passer ces paramtres. Pour utiliser un Web Service publi en mode DOC (ou en mode RPC avec types composs), il est conseill de procder de la manire suivante : Gnrer la mthode proxy laide de lAssistant Client Web Services. La mthode proxy sera appele de la manire suivante : $BlobXMLresult:=$proxy_MethodeDOC($BlobXMLparam) Prendre connaissance du contenu des requtes SOAP envoyer au Web Service laide dun outil de test en ligne (par exemple http://soapclient.com/soaptest.html). Ce type doutil permet, partir du WSDL du Web Service, de gnrer des formulaires HTML de test. Copier le contenu xml gnr partir du premier fils de <body>. Ecrire la mthode permettant de placer les valeurs relles des paramtres dans le code xml ; ce code doit ensuite tre plac dans le BLOB $BlobXMLparam. Pour lanalyse de la rponse, vous pouvez galement utiliser un outil de test en ligne, ou tirer parti du WSDL qui spcifie les lments retourns. Rfrence FIXER PARAMETRE WEB SERVICE, LIRE RESULTAT WEB SERVICE. Variables et ensembles systme Si la requte est correctement achemine et que le Web Service la accepte, la variable systme OK prend la valeur 1. Sinon, elle prend la valeur 0 et une erreur est retourne.

4e Dimension - Langage 1921

LIRE RESULTAT WEB SERVICE

Web Services (Client) version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE RESULTAT WEB SERVICE (valeurRetour{; nomRetour}{; *}) Paramtre valeurRetour nomRetour * Type Variable Chane Description Valeur retourne par le Web Service Nom du paramtre rcuprer Librer la mmoire

Description La commande LIRE RESULTAT WEB SERVICE permet de rcuprer une valeur renvoye par le Web Service lissue du traitement effectu. Note : Cette commande doit tre utilise uniquement aprs la commande APPELER WEB SERVICE. Le paramtre valeurRetour reoit la valeur renvoye par le Web Service. Passez dans ce paramtre une variable 4D. Cette variable est gnralement $0, correspondant la valeur retourne par la mthode proxy. Il est toutefois possible dutiliser des variables intermdiaires (vous devez utiliser des variables process uniquement). Note : Chaque variable ou tableau 4D utilis(e) doit tre pralablement dclar(e) laide des commandes des thmes Compilateur et Tableaux. Le paramtre optionnel nomRetour permet de spcifier le nom du paramtre rcuprer. Toutefois, comme la plupart des Web Services retournent une seule valeur, ce paramtre nest gnralement pas ncessaire. Le paramtre *, optionnel, indique au programme de librer la mmoire consacre au traitement de la requte. Vous devez passer ce paramtre aprs la rcupration de la dernire valeur renvoye par le Web Service.

1922 4e Dimension - Langage

Exemple Imaginons un Web Service retournant lheure courante dans nimporte quelle ville du monde. Les paramtres reus par le Web Service sont le nom de la ville et le code du pays. Le Web Service retourne alors lheure correspondante. La mthode proxy dappel pourrait tre de la forme suivante : C_TEXTE($1) C_TEXTE($2) C_HEURE($0) FIXER PARAMETRE WEB SERVICE("ville";$1) FIXER PARAMETRE WEB SERVICE("code_pays";$2) APPELER WEB SERVICE("http://www.villesdumonde.com/WS";"WSHeures#Heure_ville"; "Heure_ville";"http://www.villesdumonde.com/namespace/default")

Si (OK=1) LIRE RESULTAT WEB SERVICE($0;"retour";*) Fin de si

Rfrence APPELER WEB SERVICE, FIXER PARAMETRE WEB SERVICE.

4e Dimension - Langage 1923

AUTHENTIFIER WEB SERVICE

Web Services (Client) version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

AUTHENTIFIER WEB SERVICE (nom; motDePasse) Paramtre nom motDePasse Type Chane Chane Description Nom de lutilisateur Mot de passe de lutilisateur

Description La commande AUTHENTIFIER WEB SERVICE vous permet dutiliser des Web Services ncessitant lauthentification de lapplication cliente (authentification simple). Passez dans les paramtres nom et motDePasse les informations didentification requises (nom dutilisateur et mot de passe). Ces informations seront encodes et ajoutes la requte HTTP envoye au Web Service via la commande APPELER WEB SERVICE. Il est donc ncessaire dappeler la commande AUTHENTIFIER WEB SERVICE avant la commande APPELER WEB SERVICE. Les informations dauthentification sont rinitialises aprs chaque requte. Vous devez donc utiliser la commande AUTHENTIFIER WEB SERVICE avant chaque APPELER WEB SERVICE. En cas dchec de lauthentification, le serveur SOAP retourne une erreur que vous pouvez identifier laide de la commande Lire infos erreur Web Service. Rfrence APPELER WEB SERVICE, Lire infos erreur Web Service.

1924 4e Dimension - Langage

Lire infos erreur Web Service

Web Services (Client) version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire infos erreur Web Service (typeInfo) Chane Paramtre typeInfo Rsultat Type Entier long Chane Description Information rcuprer Information sur la dernire erreur SOAP

Description La commande Lire infos erreur Web Service retourne des informations sur la dernire erreur rencontre lors de lexcution dune requte SOAP adresse un Web Service. Le paramtre typeInfo vous permet dindiquer le type dinformation que vous souhaitez obtenir. Vous devez passer une des constantes suivantes, places dans le thme Web Services (Client) : Constante Type Valeur Web Service code erreur Entier long 0 Web Service message Entier long 1 Web Service code erreur HTTP Entier long 2 Web Service origine erreur Entier long 3 Ces constantes pemettent de rcuprer les valeurs suivantes : Web Service code erreur : Code derreur principal (dfini par 4D). Ce code est galement retourn dans la variable systme Error. Voici la liste des codes pouvant tre retourns : 9910 : Erreur Web Service (voir aussi Web Service origine erreur) 9911 : Erreur de lanalyseur xml 9912 : Erreur HTTP (voir aussi Web Service code erreur HTTP) 9913 : Erreur rseau 9914 : Erreur interne Web Service message : Message dtaill dcrivant lerreur. Le type de message diffre suivant le type derreur principale. - Si erreur principale = 9910 (Erreur Web Service) : la cause de lerreur SOAP est retourne (ex : mthode appele inexistante). - Si erreur principale = 9911 (Erreur de lanalyseur xml) : lemplacement de lerreur dans le document xml est retourn. - Si erreur principale = 9912 (Erreur HTTP) : - si lerreur HTTP est situe dans lintervalle [300-400] (problmes li lemplacement du document demand), le nouvel emplacement de lURL demand est retourn. - pour tout autre code derreur HTTP, le <body> est renvoy.

4e Dimension - Langage 1925

- Si erreur principale = 9913 (Erreur rseau) : la cause de lerreur rseau est retourne (ex : AdresseServeur : erreur DNS) - Si erreur principale = 9914 (Erreur interne) : la cause de lerreur interne est retourne Web Service code erreur HTTP : Code de lerreur HTTP ( utiliser en cas derreur principale 9912). Web Service origine erreur : Cause de lerreur (retourne par le protocole SOAP utiliser en cas derreur principale 9910). - Version Mismatch (les versions ne correspondent pas). - Must Understand (un paramtre dfini comme obligatoire na pas pu tre interprt par le serveur) - Client Fault (erreur client) - Server Fault (erreur serveur) - Encoding Unknown (encodage inconnu) Une chane vide est retourne lorsquaucune information nest disponible.

1926 4e Dimension - Langage

66 ________________________ Web Services (Serveur)

4e Dimension - Langage 1927

1928 4e Dimension - Langage

Commandes du thme Web Services (Serveur) Web Services (Serveur) version 2003
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La publication de Web Services dans 4e Dimension seffectue simplement laide doptions dans les proprits des mthodes. Dans la plupart des cas, ce fonctionnement sera suffisant pour vous permettre de publier des Web Services. Toutefois, si vous souhaitez personnaliser certains mcanismes, utiliser des tableaux de donnes..., vous devez utiliser les commandes SOAP serveur de 4e Dimension 2003. Cette section dcrit les commandes utilises lors de la publication dans 4e Dimension de Web Services (partie serveur). Pour des informations gnrales sur les Web Services ou la description des commandes utilises lors de la souscription aux Web Services (partie client), reportez-vous la section Commandes du thme Web Services (Client). Note : Les libells SOAP et Web Service ont t utiliss respectivement dans les noms des commandes (et des constantes) ct serveur et ct client par convention uniquement. Ces deux notions dsignent la mme technologie.

4e Dimension - Langage 1929

DECLARATION SOAP

Web Services (Serveur) version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DECLARATION SOAP (variable; type; entre_sortie{; alias}) Paramtre variable type entre_sortie alias Type Variable 4D Entier long Entier long Chane Description Variable rfrenant un argument SOAP entrant ou sortant Type 4D vers lequel pointe largument 1 = Entre SOAP, 2 = Sortie SOAP Nom publi pour cet argument lors des changes SOAP

Description La commande DECLARATION SOAP permet de dclarer explicitement le type des paramtres utiliss dans une mthode 4D publie comme Web Service. Lorsquune mthode est publie en tant que Web Service, les paramtres standard $0, $1... $n sont utiliss pour dcrire les paramtres du Web Service auprs du monde extrieur (notamment dans le fichier WSDL). Le protocole SOAP exigeant que les paramtres soient explicitement nomms, 4e Dimension utilise par dfaut les noms FourD_arg0, FourD_arg1 ... FourD_argn. Ce fonctionnement par dfaut peut toutefois savrer problmatique pour les raisons suivantes : Il nest pas possible de dclarer $0 ou $1 en tant que tableau. Il est donc ncessaire dutiliser des pointeurs, mais dans ce cas il reste connatre le type des valeurs pour la gnration du fichier WSDL. Ensuite, il peut tre utile ou ncessaire de personnaliser les noms des paramtres (entrants et sortants). Enfin, ce fonctionnement rend impossible le retour de plus dune valeur par appel (dans $0). La commande DECLARATION SOAP permet de saffranchir de ces limites. Vous pouvez excuter cette commande pour chaque paramtre entrant et sortant et lui assigner un nom et un type. Note : Mme si la commande DECLARATION SOAP est utilise, il est ncessaire de dclarer les variables et tableaux 4D dans la mthode Compiler_Web laide les commandes du thme Compilateur. Passez dans variable la variable 4D rfrencer dans lappel du Web Service. Attention, vous pouvez rfrencer uniquement des variables process ou les arguments des mthodes 4D ($0 $n). Les variables locales et interprocess ne peuvent pas tre utilises.

1930 4e Dimension - Langage

Passez dans type le type 4D correspondant. La plupart des types de variables et de tableaux 4D peuvent tre employs. Vous pouvez utiliser les constantes prdfinies suivantes, places dans le thme Types champs et variables : Constante Type Valeur Est un BLOB Entier long 30 Est un boolen Entier long 6 Est un entier Entier long 8 Est un entier long Entier long 9 Est un numrique Entier long 1 Est un tableau boolen Entier long 22 Est un tableau chane Entier long 21 Est un tableau date Entier long 17 Est un tableau entier Entier long 15 Est un tableau entierlong Entier long 16 Est un tableau numrique Entier long 14 Est un tableau texte Entier long 18 Est un texte Entier long 2 Est une date Entier long 4 Est une heure Entier long 11 Est une variable chane Entier long 24 Note : Les constantes suivantes ne sont pas utilisables dans le cadre de mthodes SOAP : Est un champ alpha, Est un pointeur, Est un tableau 2D, Est un tableau image, Est un tableau pointeur, Est une image, Est une sous table, Est une variable indfinie. Passez dans entre_sortie une valeur indiquant si le paramtre trait est entrant (cest-dire correspondant une valeur reue par la mthode) ou sortant (cest--dire correspondant une valeur retourne par la mthode). Vous pouvez utiliser les constantes prdfinies suivantes, places dans le thme Web Services (Serveur) : Constante Type Valeur SOAP entre Entier long 1 SOAP sortie Entier long 2 Mthode COMPILER_WEB : Les arguments SOAP entrants rfrencs laide de variables 4D (et non via les arguments des mthodes 4D) doivent tre pralablement dclars dans la mthode projet COMPILER_WEB. En effet, lutilisation de variables process dans les mthodes Web Services ncessite leur dclaration avant lappel de la mthode. La mthode projet COMPILER_WEB est appele, si elle existe, chaque requte SOAP accepte. Par dfaut, la mthode COMPILER_WEB nexiste pas. Vous devez la crer explicitement. A noter que la mthode COMPILER_WEB est galement appele par le serveur Web de 4D lors de la rception de requtes Web classiques de type POST (cf. section URLs et actions de formulaires). Passez dans alias le nom de largument tel quil doit apparatre dans la WSDL et dans les changes SOAP. Attention, ce nom doit tre unique dans lappel RPC (paramtres entrants et sortants confondus), sinon seule la dernire dclaration sera prise en compte par 4D. Note : Les noms des arguments ne doivent PAS contenir despace ou de caractres tendus. Seuls les caractres latins suivants peuvent tre utiliss : ([A-Za-z0-9._] | '-')*. 4e Dimension - Langage 1931

Si le paramtre alias est omis, 4e Dimension utilisera par dfaut le nom de la variable ou FourD_argN pour les arguments des mthodes 4D ($0 $n). Note : La commande DECLARATION SOAP doit tre incluse dans la mthode publie comme Web Service. Il nest pas possible de lappeler dune autre mthode. Exemples (1) Cet exemple spcifie un nom de paramtre : ` Lors de la gnration du fichier WSDL et des appels SOAP, le libell ` zipcode sera utilis au lieu de fourD_arg1 C_ENTIER LONG($1) DECLARATION SOAP($1;Est un entier long;SOAP Entre;"zipcode")

(2) Cet exemple permet de rcuprer un tableau de codes postaux sous forme dentiers longs : `Dans la mthode COMPILER_WEB TABLEAU ENTIER LONG(tab_codes;0)

`Dans la mthode du service Web DECLARATION SOAP(tab_codes;Est un tableau entierlong;SOAP Entre;"in_tab_codes")

(3) Cet exemple permet de rfrencer deux valeurs de retour sans spcifier de nom dargument :

DECLARATION SOAP(ret1;Est un entier long;SOAP Sortie) DECLARATION SOAP(ret2;Est un entier long;SOAP Sortie)

Rfrence ENVOYER ERREUR SOAP, Fichier donnees verrouille, Lire informations SOAP. Constantes Thmes Types champs et variables et Web Services (Serveur).

1932 4e Dimension - Langage

ENVOYER ERREUR SOAP

Web Services (Serveur) version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

ENVOYER ERREUR SOAP (typeErreur; description) Paramtre typeErreur description SOAP Type Entier long Chane Description 1 = Erreur Client, 2 = Erreur Serveur Description de lerreur envoyer au client

Description La commande ENVOYER ERREUR SOAP permet de retourner une erreur un client SOAP en indiquant lorigine de lerreur : client ou serveur. Utiliser cette commande vous permet de signaler une erreur un client sans devoir retourner de rsultat. Par exemple, une erreur ct client peut tre dtecte lorsque vous publiez un Web Service Racine_carree et quun client envoie une requte avec un nombre ngatif ; vous pouvez utiliser cette commande afin dindiquer au client quune valeur positive est requise. Une erreur possible ct serveur peut tre par exemple un manque de mmoire survenu lors de lexcution de la mthode. Passez dans typeErreur lorigine de lerreur. Vous pouvez utiliser les constantes prdfinies suivantes, places dans le thme Web Services (Serveur) : Constante SOAP erreur client SOAP erreur serveur Type Entier long Entier long Valeur 1 2

Passez dans description un descriptif de lerreur. Si limplmentation du client est conforme, lerreur pourra tre traite. Exemple Pour reprendre lexemple du Web Service Racine_carree fourni dans la description de la commande, linstruction suivante peut tre utilise pour traiter les requtes sur des nombres ngatifs :

ENVOYER ERREUR SOAP(SOAP erreur client;"Valeurs positives requises")

Rfrence DECLARATION SOAP, Lire informations SOAP.

4e Dimension - Langage 1933

Est une requete SOAP

Web Services (Serveur) version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Est une requete SOAP Boolen Paramtre Type Description Cette commande ne requiert pas de paramtre Rsultat Boolen Vrai si la requte est SOAP, Faux sinon

Description La commande Est une requete SOAP retourne Vrai si le code en cours dexcution fait partie dune requte SOAP. Cette commande peut tre utilise pour des raisons de scurit dans la Mthode base Sur authentification Web afin de dterminer la nature des requtes reues. Rfrence DECLARATION SOAP, Mthode base Sur authentification Web.

1934 4e Dimension - Langage

Lire informations SOAP

Web Services (Serveur) version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Lire informations SOAP (numInfo) Chane Paramtre numInfo Rsultat Type Entier long Chane Description Numro du type dinformation SOAP lire Information SOAP

Description La commande Lire informations SOAP permet de rcuprer sous forme de chane de caractres diffrents types dinformations concernant une requte SOAP. Lorsque vous traitez une requte SOAP, il peut tre utile dobtenir des informations supplmentaires en-dehors des valeurs des paramtres RPC sur la requte. Par exemple, pour des raisons de scurit, vous pouvez utiliser cette commande dans la Mthode base Sur authentification Web afin de connatre le nom de la mthode Web Service demande. Passez dans le paramtre numInfo le numro du type dinformation SOAP connatre. Vous pouvez utiliser les constantes prdfinies suivantes, places dans le thme Web Services (Serveur) : Constante Type Valeur SOAP nom mthode Entier long 1 SOAP nom service Entier long 2 SOAP nom mthode = nom de la mthode offerte comme Web Service sur le point dtre excute. SOAP nom service = nom du Web Service auquel appartient la mthode. Note : Pour des raisons de scurit galement, il est possible de dfinir la taille maximale des requtes Web Services adresses 4D. Ce paramtrage est effectu laide de la commande FIXER PARAMETRE BASE (thme Dfinition structure). Rfrence ENVOYER ERREUR SOAP, FIXER PARAMETRE BASE.

4e Dimension - Langage 1935

1936 4e Dimension - Langage

67 ________________________ XML

4e Dimension - Langage 1937

1938 4e Dimension - Langage

Prsentation des commandes XML

XML version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension inclut un ensemble de commandes permettant d'crire et danalyser des objets contenant des donnes XML (eXtensible Markup Language). A propos du langage XML
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le langage XML est une norme dchange de donnes. Il est bas sur lemploi de balises permettant de dcrire de manire prcise les donnes changes ainsi que leur structure. Les fichiers XML sont des fichiers au format Texte, leur contenu est analys (parsing) par les applications qui importent les donnes. Aujourdhui, de nombreuses applications prennent en charge ce format. Pour plus dinformations sur le XML, reportez-vous, par exemple, au site http://xmlfr.org. Pour la prise en charge du XML, 4e Dimension utilise une librairie nomme Xerces.dll dveloppe par la socit Apache Foundation. 4e Dimension prend en charge XML version 1.0. Note : 4e Dimension permet galement dimporter et dexporter directement des donnes au format XML laide de lditeur dimport/export standard. Commandes DOM et commandes SAX
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension propose deux ensembles distincts de commandes XML, prfixes DOM et SAX. Que sont DOM et SAX ? DOM (Document Object Model) et SAX (Simple API XML) sont deux modes danalyse diffrents des documents XML. Le mode DOM effectue lanalyse dune source XML et construit sa structure (son arbre) en mmoire. De ce fait, laccs chaque lment de la source est extrmement rapide. Cependant, la totalit de larbre tant contenu dans la mmoire, le traitement de gros documents XML peut dpasser la capacit de la mmoire et provoquer des erreurs. Le mode SAX ne construit pas darbre en mmoire. Dans ce mode, des vnements (tels que le dbut et la fin dun lment) sont gnrs lors de lanalyse de la source. Ce mode autorise lanalyse de documents XML de toute taille, quelle que soit la quantit de mmoire disponible. Pour plus dinformations sur les standards XML, vous pouvez consulter les sites http://www.saxproject.org/?selected=event et http://www.w3schools.com/xml/. Cration, ouverture et fermeture des documents XML via DOM Les objets crs, modifis ou analyss par les commandes DOM de 4D peuvent tre des textes, des URLs, des documents ou des BLOBs. Les commandes DOM utilises pour l'ouverture des objets XML dans 4e Dimension sont DOM Analyser source XML et DOM Analyser variable XML.

4e Dimension - Langage 1939

De nombreuses commandes permettent ensuite de lire, d'analyser et d'crire les lments et les attributs. La rcupration des erreurs s'effectue via la commande LIRE ERREUR XML (commune aux deux standards XML). La commande DOM FERMER XML permet de finalement refermer la source. Cration, ouverture et fermeture des documents XML via SAX Les commandes SAX travaillent avec des rfrences de documents standard de 4e Dimension (DocRef, rfrence de type Heure). Il est donc possible dutiliser ces commandes conjointement avec les commandes 4D permettant de grer les documents, par exemple ENVOYER PAQUET ou Ajouter a document. La cration et louverture par programmation de documents XML est effectue via les commandes Creer document et Ouvrir document. Par la suite, lutilisation dune commande XML avec ces documents provoquera la mise en oeuvre automatique des mcanismes XML tels que lencodage. Par exemple, len-tte <?xml version="1.0" encoding=" encodage " standalone = "no "?> sera automatiquement crit dans le document. La fermeture dun document XML doit tre effectue laide de la commande FERMER DOCUMENT. Si des lments XML taient ouverts, ils sont automatiquement referms. Utilisation de la notation XPath (DOM)
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Deux commandes DOM (DOM Creer element XML et DOM Chercher element XML) acceptent la notation XPath pour laccs aux lments XML. La notation XPath est issue du langage XPath, consacr la navigation parmi les structures XML. La notation XPath permet de dsigner directement des lments au sein dune structure XML sans devoir indiquer le chemin complet pour y parvenir. Elle permet de saffranchir de la hirarchie des lments. Soit par exemple la structure suivante : <RootElement> <Elem1> <Elem2> <Elem3 Font=Verdana Size=10> </Elem3> </Elem2> </Elem1> </RootElement> La notation XPath permet daccder llment 3 via la syntaxe /RootElement/Elem1/Elem2/Elem3. 4e Dimension accepte galement les lments XPath indexs, avec la syntaxe Elment[NumElment]. Soit par exemple la structure suivante : <RootElement> <Elem1> <Elem2>aaa</Elem2> <Elem2>bbb</Elem2> <Elem2>ccc</Elem2> </Elem1> </RootElement>

1940 4e Dimension - Langage

La notation XPath permet daccder la valeur ccc via la syntaxe /RootElement/Elem1/Elem2[3]. Note : Dans 4e Dimension, le paramtre xChemin spcifi dans les commandes DOM Creer element XML et DOM Chercher element XML doit dbuter par le caractre / suivi du nom de l'lment courant. Pour une illustration de la notation XPath, reportez-vous aux exemples des commandes DOM Creer element XML et DOM Chercher element XML. Prise en charge des transformations XSL
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension prend en charge lapplication de feuilles de style XSL (eXtended Stylesheet Language). Le langage XSL permet de modifier le balisage dun document XML. Le langage XSL comporte deux facettes : le formatage : il permet dappliquer des rgles de style et daffichage pour les lments XML, un peu limage des CSS (Cascading StyleSheet) du langage HTML. la transformation : il permet de transformer un balisage XML en un autre systme de balisage, par exemple en HTML. Cette fonction de transformation est plus spcifiquement appele XSLT. Une feuille de style XSL peut entirement rorganiser les lments XML dun document en les slectionnant puis en les transformant en dautres lments. Cette fonction est utile par exemple pour harmoniser un ensemble de documents XML disparates.

Note : 4e Dimension utilise la librairie Xalan-C_1_6_0.dll pour la ralisation des transformations XSL. Xalan est un processeur XSLT du domaine public. Pour plus dinformations, reportez-vous ladresse http://xml.apache.org/xalan-c/index.html. Les feuilles de style XSL sont des documents texte (extension .xsl) gnrs manuellement ou laide dapplications spcialises. Le langage XSL comporte divers lments et fonctions permettant deffectuer tout type de transformation dynamique. Pour plus dinformations sur ce langage, reportez-vous au site http://xmlfr.org (par exemple).

4e Dimension - Langage 1941

4e Dimension vous permet de transformer un document XML laide dune feuille de style XSL existante (commande APPLIQUER TRANSFORMATION XSLT). En outre, 4e Dimension vous permet de modifier la vole des paramtres de la feuille de style XSL via la commande FIXER PARAMETRE XSLT. Note : Une option de la bote de dialogue dexportation permet galement dutiliser une feuille de style XSL lors dun export XML et donc de gnrer un document XML transform. Terminologie
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le langage XML utilise de nombreux termes et acronymes spcifiques. Cette liste non exhaustive explicite les principales notions XML utilises par les commandes et fonctions de 4e Dimension. Attribut : Sous-balise XML associe un lment. Un attribut comporte toujours un nom et une valeur (cf. schma ci-dessous). Bien form : Un document XML est dclar bien form par lanalyseur XML lorsquil est conforme aux spcifications XML gnriques. Voir aussi Validation. DTD : Document Type Declaration (Dclaration de type de document). La DTD recense lensemble des rgles et des proprits spcifiques que doit suivre un document XML. Ces rgles dfinissent notamment le nom et le contenu de chaque balise ainsi que leur contexte. Cette formalisation des lments permet de vrifier quun document XML est conforme (dans ce cas il est dclar valide). La DTD peut tre incluse dans le document XML (DTD interne) ou dans un document tiers (DTD externe). A noter que la DTD nest pas obligatoire. Elment : Balise XML. Un lment comporte toujours un nom et une valeur. Facultativement, un lment peut contenir des attributs (cf. schma).

Enfant : Dans une structure XML, lment dun niveau directement infrieur un autre. Parent : Dans une structure XML, lment dun niveau directement suprieur un autre. Parsing, parser (Analyser, analyseur) : Action danalyser le contenu dun objet structur afin den extraire les informations utiles. Les commandes du thme XML permettent danalyser le contenu de tout objet XML.

1942 4e Dimension - Langage

Racine (Root) : Elment situ au premier niveau dune structure XML. RefElment : Rfrence XML utilise par les commandes XML de 4D pour dsigner une structure XML (documents ou lment). Cette rfrence est constitue de 8 caractres cods sous forme hexadcimale, ce qui signifie qu'elle est compose de 16 caractres. Structure XML : objet XML structur. Cet objet peut tre un document, une variable, un lment. Validation : Un document XML est valid par lanalyseur XML lorsquil est bien form et conforme aux spcifications de la DTD. Voir aussi Bien form. XML : eXtensible Markup Language (Langage balis volutif). Norme dchange de donnes informatises permettant de transfrer des donnes ainsi que leur structure. Le langage XML est bas sur lemploi de balises et dune syntaxe spcifiques, linstar du langage HTML. Toutefois, la diffrence de ce dernier, le langage XML permet de dfinir des balises personnalises. XSL : eXtensible Stylesheet Language (Langage des feuilles de style volutif). Langage permettant de dfinir des feuilles de style utilisables pour traiter et afficher le contenu dun document XSL.

4e Dimension - Langage 1943

DOM Creer ref XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM Creer ref XML (racine{; nameSpace}{; nSNom; nSValeur}{; nSNom2; nSValeur2; ...; nSNomN; nSValeurN}) Chane Paramtre racine nameSpace nSNom nSValeur Rsultat Type Chane Chane Chane Chane Chane Description Nom de llment racine Valeur de lespace de nommage (Namespace) Nom despace de nommage Valeur despace de nommage Rfrence de llment XML racine

Description La commande DOM Creer ref XML cre un arbre XML vide en mmoire et retourne sa rfrence. Passez dans le paramtre racine le nom de llment racine de larbre XML. Passez dans le paramtre facultatif nameSpace la dclaration de la valeur de lespace de nommage (namespace) de larbre (par exemple http://www.4d.com). Dans ce cas, vous devez prfixer le paramtre racine avec le nom de lespace de nommage, suivi de : (par exemple MonNameSpace:MaRacine). Note : Lespace de nommage (namespace) est une chane de caractres permettant de garantir lunicit des noms de variables XML. En gnral, un URL du type http://www.monsite.com/monurl est utilis. Il nest pas ncessaire que lURL soit valide sur le site, il faut juste quil soit unique. Vous pouvez dclarer un ou plusieurs espace(s) de nommage supplmentaire(s) dans larbre XML gnr, laide de couples nSNom / nSValeur. Vous pouvez passer autant de couples nom / valeur despace de nommage que vous voulez. Exemples (1) Cration dun arbre XML simple :

C_ALPHA (16;vRefElem) vRefElem:=DOM Creer ref XML("MaRacine")

Ce code produit le rsultat suivant : <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <MaRacine/>

1944 4e Dimension - Langage

(2) Cration dun arbre XML avec un espace de nommage : C_ALPHA (16;vRefElem) $Racine:="MonNameSpace:MaRacine" $Namespace:="http://www.4D.com/tech/namespace" vRefElem:=DOM Creer ref XML($Racine;$Namespace)

Ce code produit le rsultat suivant : <MonNameSpace:MaRacine xmlns:MonNameSpace="http://www.4D.com/tech/ namespace"/> (3) Cration dun arbre XML avec plusieurs espaces de nommage : C_ALPHA (16;vRefElem) C_ALPHA (80;$aNSNom1;$aNSNom2;$aNSValeur1;$aNSValeur2) $Racine:="MonNameSpace:MaRacine" $Namespace:="http://www.4D.com/tech/namespace" $aNSNom1:="NSNom1" $aNSNom2:= "NSNom2" $aNSValeur1:="http://www.4D.com/Prod/namespace" $aNSValeur2:="http://www.4D.com/Mkt/namespace" vRefElem:=DOM Creer ref XML($Racine;$Namespace;$aNSNom1;$aNSValeur1; $aNSNom2;$aNSValeur2)

Ce code produit le rsultat suivant : <MonNameSpace:MaRacine xmlns:MonNameSpace="http://www.4D.com/tech/ nameSpace" NSNom1="http://www.4D.com/Prod/namespace" NSNom2="http://www.4D.com/Mkt/namespace"/> Rfrence DOM ECRIRE OPTIONS XML. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre.

4e Dimension - Langage 1945

DOM ECRIRE OPTIONS XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM ECRIRE OPTIONS XML (refElment; encodage{; autonome{; indentation}}) Paramtre refElment encodage autonome indentation Type Chane Chane Boolen Boolen Description Rfrence dlment XML Jeu de caractres du document XML Vrai=le document est autonome Faux (dfaut)=le document nest pas autonome Vrai (dfaut)=le document est indent Faux=le document nest pas indent

Description La commande DOM ECRIRE OPTIONS XML permet de dfinir diverses options qui seront utilise pour la cration de larbre XML dsign par refElment. Ces options concernent lencodage, lattribut autonome (standalone) et lindentation de larbre : encodage : indique le jeu de caractres employ. Par dfaut (si la commande nest pas appele), le jeu de caractres UTF-8 (Unicode compress) est utilis. autonome : indique si larbre est autonome (Vrai) ou sil dpend, pour son fonctionnement, de ressources externes (Faux). Par dfaut (si la commande nest pas appele ou si le paramtre est omis), larbre nest pas autonome. indentation : indique si larbre doit faire apparatre des indentations (Vrai) ou non (Faux) correspondant aux niveaux hirarchiques des cls XML. Par dfaut (si la commande nest pas appele ou si le paramtre est omis), larbre est indent. Exemple Cet exemple dfinit lencodage et loption standalone de llment refElment :

DOM ECRIRE OPTIONS XML(refElment;"UTF-16";Vrai)

Rfrence DOM Creer ref XML.

1946 4e Dimension - Langage

DOM Analyser source XML

XML version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM Analyser source XML (document{; validation{; dtd}}) Chane Paramtre document validation dtd Rsultat Type Chane Boolen Chane Chane Description Chemin daccs du document Vrai = Validation par la DTD, Faux = Pas de validation Emplacement de la DTD Rfrence de llment XML (16 caractres)

Description La commande DOM Analyser source XML analyse un document contenant une structure XML et retourne une rfrence pour ce document. La commande peut valider ou non le document. Le document peut tre situ sur disque ou sur Internet/Intranet. Vous pouvez passer dans le paramtre document : soit un chemin daccs complet standard (du type C:\\Dossier\\Fichier\\... sous Windows et MacintoshHD:Dossier:Fichier sous MacOS), soit un chemin Unix (du type http://www.site.com/Fichier ou file://Monfichier). Si vous passez uniquement un nom de fichier dans document, la commande le recherchera ct du fichier de structure de la base. Dans le cas dun progiciel MacOS, la commande recherchera le fichier ct du progiciel. Le paramtre boolen validation vous permet dindiquer si vous souhaitez que la structure soit valide ou non laide de la DTD. Si validation vaut Vrai, la structure sera valide. Dans ce cas, lanalyseur tentera de valider la structure XML du document sur la base de la DTD dfinie ou rfrence dans le document, ou encore dsigne par le paramtre dtd. Si validation vaut Faux, la structure ne sera pas valide. Le troisime paramtre, dtd, vous permet de dsigner la DTD spcifique pour lanalyse du document. Si vous utilisez ce paramtre, la commande ne tient pas compte de la DTD rfrence dans le document XML. Il existe deux moyens pour dsigner une DTD : en tant que rfrence. Il vous suffit pour cela de passer le chemin daccs complet de la nouvelle DTD dans le paramtre dtd. Si le document dsign ne contient pas de DTD valide, le paramtre dtd est ignor et une erreur est gnre. directement dans un Texte. Dans ce cas, si le contenu du paramtre dbute par <xml !, 4D considrera quil sagit de la DTD ; dans le cas contraire, 4D considrera quil sagit dun chemin daccs.

4e Dimension - Langage 1947

Si la validation ne peut tre effectue (pas de DTD, URL vers la DTD incorrecte, etc.), une erreur est gnre. La variable systme Error indique le numro de lerreur. Vous pouvez intercepter cette erreur laide dune mthode installe par la commande APPELER SUR ERREUR. La commande retourne une chane de 16 caractres (RefElment) constituant la rfrence en mmoire de la structure virtuelle du document. Cette rfrence devra tre utilise avec les autres commandes danalyse XML. Exemples (1) Ouverture sans validation dun document XML situ sur disque :

$ref_XML_Struct:=DOM Analyser source XML("C:\\import.xml")

(2) Ouverture sans validation dun document XML situ ct du fichier de structure de la base :

$ref_XML_Struct:=DOM Analyser source XML("import.xml")

(3) Ouverture dun document XML situ sur disque et validation laide dune DTD situe sur le disque :

$ref_XML_Struct:=DOM Analyser source XML("C:\\import.xml";Vrai; "C:\\import_dtd.xml")

(4) Ouverture sans validation dun document XML situ un URL spcifique :

$ref_XML_Struct:=DOM Analyser source XML("http://www.4D.fr/xml/import.xml")

Rfrence DOM Analyser variable XML. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK prend la valeur 1. Sinon, elle prend la valeur 0.

1948 4e Dimension - Langage

DOM Analyser variable XML

XML version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM Analyser variable XML (variable{; validation{; dtd}}) Chane Paramtre variable validation dtd Rsultat Type BLOB | Texte Boolen Chane Chane Description Nom de la variable Vrai = Validation par le DTD, Faux = Pas de validation Emplacement de la DTD Rfrence de llment XML (16 caractres)

Description La commande DOM Analyser variable XML analyse une variable de type BLOB ou Texte contenant une structure XML et retourne une rfrence pour cette variable. La commande peut valider ou non le document. Passez dans le paramtre variable le nom de la variable BLOB ou Texte contenant lobjet XML. Le paramtre boolen validation vous permet dindiquer si vous souhaitez que la structure soit valide ou non laide de la DTD. Si validation vaut Vrai, la structure sera valide. Dans ce cas, lanalyseur tentera de valider la structure XML de la variable sur la base de la DTD dfinie ou rfrence dans la variable, ou encore dsigne par le paramtre dtd. Si validation vaut Faux, la structure ne sera pas valide. Le troisime paramtre, dtd, vous permet de dsigner la DTD spcifique pour lanalyse du document. Si vous utilisez ce paramtre, la commande ne tient pas compte de la DTD rfrence dans la variable XML. Il existe deux moyens pour dsigner une DTD : en tant que rfrence. Il vous suffit pour cela de passer le chemin daccs complet de la nouvelle DTD dans le paramtre dtd. Si le document dsign ne contient pas de DTD valide, le paramtre dtd est ignor et une erreur est gnre. directement dans un Texte. Dans ce cas, si le contenu du paramtre dbute par <xml !, 4D considrera quil sagit de la DTD ; dans le cas contraire, 4D considrera quil sagit dun chemin daccs. Si la validation ne peut tre effectue (pas de DTD, URL vers le DTD incorrecte, etc.), une erreur est gnre. La variable systme Error indique le numro de lerreur. Vous pouvez intercepter cette erreur laide dune mthode installe par la commande APPELER SUR ERREUR.

4e Dimension - Langage 1949

La commande retourne une chane de 16 caractres (RefElment) constituant la rfrence en mmoire de la structure virtuelle de la variable. Cette rfrence devra tre utilise avec les autres commandes danalyse XML. Exemples (1) Ouverture sans validation dun objet XML situ dans une variable Texte 4D : C_TEXTE(maVarTexte) C_HEURE(vDoc) C_ALPHA(16;$ref_XML_Struct) vDoc:=Ouvrir document ("Document.xml") Si (OK=1) RECEVOIR PAQUET(vDoc;maVarTexte;32000) FERMER DOCUMENT(vDoc) $ref_XML_Struct:=DOM Analyser variable XML(maVarTexte) Fin de si

(2) Ouverture sans validation dun document XML situ dans un BLOB 4D : C_BLOB(maVarBlob) C_ALPHA(16;$ref_XML_Struct)

DOCUMENT VERS BLOB("c:\\import.xml";maVarBlob) $ref_XML_Struct:=DOM Analyser variable XML(maVarBlob)

Rfrence DOM Analyser source XML. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK prend la valeur 1. Sinon, elle prend la valeur 0.

1950 4e Dimension - Langage

DOM Creer element XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM Creer element XML (refElment; xChemin{; nomAttribut; valeurAttribut}{; nomAttribut2; valeurAttribut2; ...; nomAttributN; valeurAttributN}) Chane Paramtre refElment xChemin nomAttribut valeurAttribut Rsultat Type Chane Texte Chane Chane Chane Description Rfrence dlment XML racine Chemin XPath de llment XML crer Attribut dfinir Nouvelle valeur dattribut Rfrence de llment XML cr

Description La commande DOM Creer element XML permet de crer un nouvel lment dans llment XML refElment lemplacement du noeud dsign par le paramtre xChemin et de lui ajouter ventuellement des attributs. Passez dans refElment la rfrence de llment racine (cr par exemple laide de la commande DOM Creer ref XML). Passez dans xChemin le chemin daccs au format XML de llment crer. La notation XPath est utilisable (cf. paragraphe Utilisation de la notation XPath dans la section Prsentation des commandes XML). Si des lments du chemin nexistent pas, ils sont crs. Note : Si vous avez dfini un ou plusieurs espace(s) de nommage pour larbre dsign par refElment (cf. commande DOM Creer ref XML), vous devez prfixer le paramtre xChemin du nom de lespace utiliser (par exemple MonNameSpace:MonElment). Vous pouvez passer dans les paramtres facultatifs nomAttribut et valeurAttribut un couple attribut / valeur dattribut (sous forme de variables, champs ou valeurs littrales). Vous pouvez passer autant de couples que vous voulez. La commande retourne en rsultat la rfrence XML de llment cr. Exemples (1) Nous souhaitons crer llment suivant : <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <RootElement> <Elem1> <Elem2> <Elem3> </Elem3> </Elem2> </Elem1> </RootElement> 4e Dimension - Langage 1951

Pour cela, il suffit dcrire : C_ALPHA(16;vRefRacine;vRefElement) vRefRacine:=DOM Creer ref XML("RootElement") vxPath:="/RootElement/Elem1/Elem2/Elem3" vRefElement:=DOM Creer element XML(vRefRacine;vxPath)

(2) Nous souhaitons crer llment suivant (comportant des attributs) : <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <RootElement> <Elem1> <Elem2> <Elem3 Font=Verdana Size=10> </Elem3> </Elem2> </Elem1> </RootElement> Pour cela, il suffit dcrire : C_ALPHA(16;vRefRacine;vRefElement) C_ALPHA(80;$aAttrNom1;$aAttrNom2;$aAttrVal1;$aAttrVal2) $aAttrNom1:="Font" $aAttrNom2:="Size" $aAttrVal1:="Verdana" $aAttrVal2:="10" vRefRacine:=DOM Creer ref XML("RootElement") vxPath:="/RootElement/Elem1/Elem2/Elem3" vRefElement:=DOM Creer element XML(vRefRacine;vxPath;$aAttrNom1;$aAttrVal1; $aAttrNom2;$aAttrVal2)

Rfrence DOM Lire element XML, DOM SUPPRIMER ELEMENT XML. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre. Gestion des erreurs Une erreur est gnre lorsque : la rfrence de llment racine nest pas valide le nom de llment crer nest pas valide (par exemple, sil dbute par un chiffre).

1952 4e Dimension - Langage

DOM Chercher element XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM Chercher element XML (refElment; xChemin) refElment Paramtre refElment xChemin Rsultat Type Chane Texte | BLOB refElment Description Rfrence dlment XML Chemin XPath de llment chercher Rfrence de llment trouv (le cas chant)

Description La commande DOM Chercher element XML vous permet de rechercher un lment XML spcifique dans une structure XML. La recherche dbute llment dsign par le paramtre refElment. Le noeud XML chercher est dfini par le paramtre xChemin. Le format XPath est utilisable (cf. paragraphe Utilisation de la notation XPath dans la section Prsentation des commandes XML). Il est possible dutiliser des lments indexs. Note : Conformment la norme XML, la recherche diffrencie les majuscules et les minuscules. La commande retourne en rsultat la rfrence XML de llment trouv. Exemple Cet exemple permet de rechercher rapidement un lment XML et dafficher sa valeur :

vTrouv:=DOM Chercher element XML(vRefElem;"/Book[15]/Title") DOM LIRE VALEUR ELEMENT XML(vTrouv;valeur) ALERTE("La valeur de llment est : \""+valeur+"\"")

La mme recherche peut galement tre effectue ainsi :


vTrouv:=DOM Chercher element XML(vRefElem;"/Book[15]") vTrouv:=DOM Chercher element XML(vTrouv;"/Title") DOM LIRE VALEUR ELEMENT XML(vTrouv;valeur) ALERTE("La valeur de llment est : \""+valeur+"\"")

Rfrence DOM Compter elements XML, DOM Creer element XML.

4e Dimension - Langage 1953

Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre. Gestion des erreurs Une erreur est gnre lorsque : la rfrence de llment nest pas valide le chemin xPath pass nest pas valide.

1954 4e Dimension - Langage

DOM Compter elements XML

XML version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM Compter elements XML (refElment; nomElment) Entier long Paramtre refElment nomElment Rsultat Type Chane Chane Entier long Description Rfrence dlment XML Nom d'lments XML compter Nombre dlments

Description La commande DOM Compter elements XML retourne le nombre dlments enfants dpendants de llment parent refElment et nomms nomElment. Rfrence DOM Lire element XML. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK prend la valeur 1. Si une erreur se produit, elle prend la valeur 0.

4e Dimension - Langage 1955

DOM Lire element XML

XML version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM Lire element XML (refElment; nomElment; index; valeurElment) Chane Paramtre refElment nomElment index valeurElment Rsultat Type Chane Chane Entier long Variable Chane Description Rfrence dlment XML Nom de llment lire Numro dindice de llment lire Valeur de llment Rfrence de llment XML (16 caractres)

Description La commande DOM Lire element XML retourne une rfrence XML vers llment enfant dpendant des paramtres nomElment et index. La valeur de llment est galement retourne dans le paramtre valeurElment. Rfrence DOM LIRE VALEUR ELEMENT XML. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK prend la valeur 1. Si une erreur se produit, elle prend la valeur 0.

1956 4e Dimension - Langage

DOM Lire premier element XML

XML version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM Lire premier element XML (refElment{; nomElmentEnf{; valeurElmentEnf}}) Chane Paramtre refElment nomElmentEnf valeurElmentEnf Rsultat Type Chane Chane Chane Chane Description Rfrence dlment XML Nom du champ slectionn Valeur du champ slectionn Rfrence de llment XML (16 caractres)

Description La commande DOM Lire premier element XML retourne une rfrence XML vers le premier enfant de llment XML pass en rfrence dans refElment. Cette rfrence pourra tre utilise avec les autres commandes danalyse XML. Les paramtres nomElmentEnf et valeurElmentEnf, sils sont passs, reoivent respectivement le nom et la valeur de llment enfant.

Exemples (1) Rcupration de la rfrence du premier lment XML du parent racine. La structure XML (C:\\import.xml) est pralablement charge dans un BLOB : C_BLOB(maVarBlob) C_ALPHA(16;$ref_XML_Parent;$ref_XML_Enfant) DOCUMENT VERS BLOB("c:\\import.xml";maVarBlob) $ref_XML_Parent:=DOM Analyser variable XML(maVarBlob) $ref_XML_Enfant:=DOM Lire premier element XML($ref_XML_Parent)

4e Dimension - Langage 1957

(2) Rcupration de la rfrence, du nom et de la valeur du premier lment XML du parent racine. La structure XML (C:\\import.xml) est pralablement charge dans un BLOB : C_BLOB(maVarBlob) C_ALPHA(16;$ref_XML_Parent;$ref_XML_Enfant) C_TEXTE($enfantNom;$enfantValeur) DOCUMENT VERS BLOB("c:\\import.xml";maVarBlob) $ref_XML_Parent:=DOM Analyser variable XML(maVarBlob) $ref_XML_Enfant:=DOM Lire premier element XML($ref_XML_Parent;$enfantNom; $enfantValeur)

Rfrence DOM Lire element XML suivant. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK prend la valeur 1. Sinon, elle prend la valeur 0.

1958 4e Dimension - Langage

DOM Lire element XML suivant

XML version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM Lire element XML suivant (refElment{; nomElmentEnf{; valeurElmentEnf}}) Chane Paramtre refElment nomElmentEnf valeurElmentEnf Rsultat Type Chane Chane Chane Chane Description Rfrence dlment XML Nom du champ slectionn Valeur du champ slectionn Rfrence de llment XML (16 caractres)

Description La commande DOM Lire element XML suivant retourne une rfrence vers le prochain enfant de llment XML pass en rfrence. Cette rfrence pourra tre utilise avec les autres commandes danalyse XML. Les paramtres nomElmentEnf et valeurElmentEnf, sils sont passs, reoivent respectivement le nom et la valeur de llment enfant. Cette commande permet danalyser successivement tous les enfants de llment XML pass en paramtre. Aprs le dernier enfant, la variable systme OK prend la valeur 0. Exemples (1) Rcupration de la rfrence de llment XML suivant llment pass en paramtre :

C_ALPHA(16;$ref_XML_Parent;$ref_XML_Suivant) $ref_XML_Suivant:=DOM Lire element XML suivant($ref_XML_Parent)

4e Dimension - Langage 1959

(2) Rcupration dans une boucle des rfrences des lments XML suivant llment parent pass en paramtre : C_ALPHA(16;$ref_XML_Parent;$ref_XML_Premier;$ref_XML_Suivant) $ref_XML_Premier:=DOM Lire premier element XML($ref_XML_Parent) $ref_XML_Suivant:=$ref_XML_Premier Tant que (OK=1) $ref_XML_Suivant:=DOM Lire element XML suivant($ref_XML_Suivant) Fin tant que

Rfrence DOM Lire premier element XML. Variables et ensembles systme Si la commande a t correctement excute et si llment analys nest pas le dernier enfant de llment rfrenc, la variable systme OK prend la valeur 1. Si une erreur se produit ou si llment analys est le dernier enfant de llment rfrenc, elle prend la valeur 0.

1960 4e Dimension - Langage

DOM ECRIRE NOM ELEMENT XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM ECRIRE NOM ELEMENT XML (refElment; nomElment) Paramtre refElment nomElment Type Chane Chane Description Rfrence dlment XML Nouveau nom de llment

Description La commande DOM ECRIRE NOM ELEMENT XML permet de modifier le nom de llment dsign par refElment. Passez dans refElment la rfrence de llment renommer et dans nomElment le nouveau nom de llment. Bien entendu, la commande se charge de modifier les balises douverture et de fermeture de llment. Exemple Soit la source XML suivante : <Book> <Title>The Best Seller</Title> </Book> Si le code suivant est excut, en admettant que vRefElem contienne la rfrence de llment Book :

DOM ECRIRE NOM ELEMENT XML(vRefElem;"BestSeller")

Nous obtenons : <BestSeller> <Title>The Best Seller</Title> </BestSeller> Rfrence DOM LIRE NOM ELEMENT XML. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre. Gestion des erreurs Une erreur est gnre lorsque : la rfrence de llment nest pas valide le nouveau nom dlment nest pas valide (par exemple, sil dbute par un chiffre).

4e Dimension - Langage 1961

DOM LIRE NOM ELEMENT XML

XML version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM LIRE NOM ELEMENT XML (refElment; nomElment) Paramtre refElment nomElment Type Chane Variable Description Rfrence dlment XML Nom de llment

Description La commande DOM LIRE NOM ELEMENT XML retourne dans le paramtre nomElment le nom de llment XML dsign par refElment. Pour plus d'informations sur les noms d'lments XML, reportez-vous la section Prsentation des commandes XML. Exemple Cette mthode retourne le nom de llment $ref_XML_Elment : C_ALPHA(16;$ref_XML_Elment) C_TEXTE($nom)

DOM LIRE NOM ELEMENT XML($ref_XML_Elment;$nom)

Rfrence DOM ECRIRE NOM ELEMENT XML, DOM Lire element XML, DOM LIRE VALEUR ELEMENT XML. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK prend la valeur 1. Si une erreur se produit, elle prend la valeur 0.

1962 4e Dimension - Langage

DOM ECRIRE VALEUR ELEMENT XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM ECRIRE VALEUR ELEMENT XML (refElment; valeurElment) Paramtre refElment valeurElment Type Chane Chane | Variable Description Rfrence dlment XML Nouvelle valeur de llment

Description La commande DOM ECRIRE VALEUR ELEMENT XML permet de modifier la valeur de llment dsign par refElment. Passez dans valeurElment une chane ou une variable (ou un champ) contenant la nouvelle valeur de llment : si vous passez une chane, la valeur sera affecte telle quelle dans la structure XML. si vous passez une variable ou un champ, 4e Dimension appliquera un traitement appropri la valeur en fonction du type de valeurElment. Tous les types de donnes peuvent tre utiliss, lexception des tableaux, images et pointeurs. Exemple Soit la source XML suivante : <Book> <Title>The Best Seller</Title> </Book> Si le code suivant est excut, en admettant que vRefElem contienne la rfrence de llment Title :

DOM ECRIRE VALEUR ELEMENT XML(vRefElem;"The Loser")

Nous obtenons : <Book> <Title>The Loser</Title> </Book> Rfrence DOM LIRE VALEUR ELEMENT XML. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre (par exemple, si la rfrence de llment nest pas valide).

4e Dimension - Langage 1963

DOM LIRE VALEUR ELEMENT XML

XML version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM LIRE VALEUR ELEMENT XML (refElment; valeurElment{; cDATA}) Paramtre refElment valeurElment cDATA Type Chane Variable Variable Description Rfrence dlment XML Valeur de llment Contenu de la section CDATA

Description La commande DOM LIRE VALEUR ELEMENT XML retourne dans le paramtre valeurElment la valeur de llment XML dsign par refElment. 4e Dimension tentera de convertir la valeur obtenue dans le type de la variable passe en paramtre. Le paramtre facultatif cDATA permet de rcuprer le contenu de la ou des section(s) CDATA de llment XML refElment le cas chant. Comme pour le paramtre valeurElment, 4e Dimension tentera de convertir la valeur obtenue dans le type de la variable passe en paramtre. Exemple Cette mthode retourne la valeur de llment $ref_XML_Elment : C_ALPHA(16;$ref_XML_Elment) C_REEL($valeur)

DOM LIRE VALEUR ELEMENT XML($ref_XML_Elment;$valeur)

Rfrence DOM ECRIRE VALEUR ELEMENT XML, DOM Lire element XML, DOM LIRE NOM ELEMENT XML. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK prend la valeur 1. Si une erreur se produit, elle prend la valeur 0.

1964 4e Dimension - Langage

DOM SUPPRIMER ELEMENT XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM SUPPRIMER ELEMENT XML (refElment) Paramtre refElment Type Chane Description Rfrence dlment XML

Description La commande DOM SUPPRIMER ELEMENT XML supprime llment dsign par refElment. Rfrence DOM Creer element XML. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre. Une erreur est gnre lorsque : la rfrence de llment nest pas valide, llment est vide.

4e Dimension - Langage 1965

DOM Compter attributs XML

XML version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM Compter attributs XML (refElment) Entier long Paramtre refElment Rsultat Type Chane Entier long Description Rfrence dlment XML Nombre dattributs

Description La commande DOM Compter attributs XML retourne le nombre dattributs XML prsents dans llment XML dsign par refElment. Pour plus d'informations sur les attributs XML, reportez-vous la section Prsentation des commandes XML. Exemple Avant de rcuprer les valeurs des lments dans un tableau, vous souhaitez connatre le nombre dattributs dans llment XML suivant :

C_BLOB(maVarBlob) C_ALPHA(16;$ref_XML_Parent;$ref_XML_Enfant) C_TEXTE(monRsultat) C_ENTIER LONG($nbAttributs) $ref_XML_Parent:=DOM Analyser variable XML(maVarBlob) $ref_XML_Enfant:=DOM Lire premier element XML($ref_XML_Parent)

$nbAttributs:=DOM Compter attributs XML($ref_XML_Enfant) TABLEAU TEXTE(tAttrib;$nbAttributs) Boucle($i;1;$nbAttributs) DOM LIRE ATTRIBUT XML PAR INDEX($ref_XML_Enfant;$i;tAttrib{$i}) Fin de boucle

Dans lexemple ci-dessus, $nbAttributs vaut 3, tAttrib{1} contient Font, tAttrib{2} contient N et tAttrib{3} contient size. Note : Le numro dindice ne correspond pas lemplacement de lattribut dans le fichier XML affich sous forme de texte. En XML, lindice dun attribut indique sa position parmi les attributs classs par ordre alphabtique (en fonction de leur nom).

1966 4e Dimension - Langage

Rfrence DOM Compter elements XML. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK prend la valeur 1. Si une erreur se produit, elle prend la valeur 0.

4e Dimension - Langage 1967

DOM ECRIRE ATTRIBUT XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM ECRIRE ATTRIBUT XML (refElment; nomAttribut; valeurAttribut{; nomAttribut2; valeurAttribut2; ...; nomAttributN; valeurAttributN}) Paramtre refElment nomAttribut valeurAttribut Type Chane Chane Chane Description Rfrence dlment XML Attribut dfinir Nouvelle valeur dattribut

Description La commande DOM ECRIRE ATTRIBUT XML permet dajouter un ou plusieurs attribut(s) llment XML dont la rfrence est passe dans le paramtre refElment. Elle permet galement de dfinir la valeur de chaque attribut dfini. Passez dans les paramtres nomAttribut et valeurAttribut respectivement lattribut crire et sa valeur (sous forme de variables, champs ou valeurs littrales). Vous pouvez passer autant de couples attribut/valeur que vous voulez. Exemple Soit la source XML suivante : <Book> <Title>The Best Seller</Title> </Book> Si le code suivant est excut : vAttrName:="Font" vAttrVal:="Verdana" DOM ECRIRE ATTRIBUT XML(vRefElem;vAttrName;vAttrVal)

Nous obtenons : <Book> <Title Font=Verdana>The Best Seller</Title> </Book> Rfrence DOM LIRE ATTRIBUT XML PAR INDEX, DOM LIRE ATTRIBUT XML PAR NOM. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre.

1968 4e Dimension - Langage

DOM LIRE ATTRIBUT XML PAR INDEX

XML version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM LIRE ATTRIBUT XML PAR INDEX (refElment; indexAttribut; nomAttribut; valeurAttribut) Paramtre refElment indexAttribut nomAttribut valeurAttribut Type Chane Entier long Variable Variable Description Rfrence dlment XML Numro dindice de lattribut Nom de lattribut Valeur de lattribut

Description La commande DOM LIRE ATTRIBUT XML PAR INDEX permet de connatre le nom ainsi que la valeur dun attribut dsign par son numro dindice. Passez dans refElment la rfrence dun lment XML et dans indexAttribut le numro dindice de lattribut dont vous voulez connatre le nom. Le nom est retourn dans le paramtre nomAttribut et sa valeur est retourne dans le paramtre valeurAttribut. 4e Dimension tentera de convertir la valeur obtenue dans le type de la variable passe en paramtre. Note : Le numro dindice ne correspond pas lemplacement de lattribut dans le fichier XML affich sous forme de texte. En XML, lindice dun attribut indique sa position parmi les attributs classs par ordre alphabtique (en fonction de leur nom). Pour une illustration de ce principe, reportez-vous lexemple de la commande DOM Compter attributs XML. Si la valeur passe dans indexAttribut est suprieure au nombre dattributs prsents dans llment XML, une erreur est retourne. Exemple Reportez-vous lexemple de la commande DOM Compter attributs XML. Rfrence DOM LIRE ATTRIBUT XML PAR NOM. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK prend la valeur 1. Si une erreur se produit, elle prend la valeur 0.

4e Dimension - Langage 1969

DOM LIRE ATTRIBUT XML PAR NOM

XML version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM LIRE ATTRIBUT XML PAR NOM (refElment; nomAttribut; valeurAttribut) Paramtre refElment nomAttribut valeurAttribut Type Chane Chane Variable Description Rfrence dlment XML Nom dattribut Valeur de lattribut

Description La commande DOM LIRE ATTRIBUT XML PAR NOM permet de connatre la valeur dun attribut dsign par son nom. Passez dans refElment la rfrence dun lment XML et dans nomAttribut le nom dattribut dont vous voulez connatre la valeur. La valeur est retourne dans le paramtre valeurAttribut. 4e Dimension tentera de convertir la valeur obtenue dans le type de la variable passe en paramtre. Si aucun attribut nomAttribut nexiste dans llment XML, une erreur est retourne. Si plusieurs attributs de llment XML portent le nom spcifi, seule la valeur du premier attribut est retourne. Exemple Cette mthode permet de rcuprer une valeur dattribut XML laide de son nom : C_BLOB(maVarBlob) C_ALPHA(16;$ref_XML_Parent;$ref_XML_Enfant) C_ENTIER LONG($NumLigne) $ref_XML_Parent:=DOM Analyser variable XML(maVarBlob) $ref_XML_Enfant:=DOM Lire premier element XML($ref_XML_Parent) DOM LIRE ATTRIBUT XML PAR NOM($ref_XML_Enfant;"N";$NumLigne)

Si cette mthode est applique lexemple ci-dessous, $NumLigne contient la valeur 1 :

1970 4e Dimension - Langage

Rfrence DOM LIRE ATTRIBUT XML PAR INDEX. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK prend la valeur 1. Si une erreur se produit, elle prend la valeur 0.

4e Dimension - Langage 1971

DOM Lire informations XML

XML version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM Lire informations XML (refElment; infoXML) Chane Paramtre refElment infoXML Rsultat Type Chane Entier long Chane Description Rfrence dlment XML racine Type dinformation lire Valeur de linformation XML

Description La commande DOM Lire informations XML permet de rcuprer diverses informations sur llment XML dsign par refElment. Passez dans infoXML un code indiquant le type dinformation rcuprer. Vous pouvez utiliser les constantes prdfinies suivantes, places dans le thme XML : Constante Type Valeur ID PUBLIC Entier long 1 ID SYSTEM Entier long 2 Nom DOCTYPE Entier long 3 Encoding Entier long 4 Version Entier long 5 URI Document Entier long 6 Ces constantes indiquent les informations suivantes : ID PUBLIC : Identificateur public (FPI) de la DTD laquelle le document se conforme (si la balise DOCTYPE xxx PUBLIC est prsente). ID SYSTEM : Identificateur systme. Nom DOCTYPE : Nom de llment racine tel que dfini dans la balise DOCTYPE. Encoding : Encodage utilis (UTF-8, ISO...). Version : Version de XML accept. URI Document : URI de la DTD. Rfrence LIRE ERREUR XML. Constantes Thme XML.

1972 4e Dimension - Langage

DOM EXPORTER VERS FICHIER

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM EXPORTER VERS FICHIER (refElment; cheminFichier) Paramtre refElment cheminFichier Type Chane Texte Description Rfrence dlment XML racine Chemin daccs complet du fichier

Description La commande DOM EXPORTER VERS FICHIER permet de sauvegarder un arbre XML dans un fichier sur disque. Passez dans refElment la rfrence de llment racine exporter. Passez dans cheminFichier le chemin daccs complet du fichier dexport utiliser ou crer. Si le fichier nexiste pas, il est cr. Si vous passez uniquement un nom de fichier (sans chemin daccs), le fichier sera recherch ou cr ct du fichier de structure. Si vous passez une chane vide (""), une bote de dialogue standard douverture et de cration de fichier apparat. Exemple Cet exemple sauvegarde larbre vRefElem dans le fichier MonDoc.xml :

DOM EXPORTER VERS FICHIER(vRefElem;"C:\\dossier\MonDoc.xml")

Rfrence DOM EXPORTER VERS VARIABLE. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre. Gestion des erreurs Une erreur est gnre lorsque : la rfrence de llment nest pas valide, le chemin daccs spcifi nest pas valide, le volume de stockage retourne une erreur (disque plein, etc.).

4e Dimension - Langage 1973

DOM EXPORTER VERS VARIABLE

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM EXPORTER VERS VARIABLE (refElment; vVarXml) Paramtre refElment vVarXml Type Chane Texte | BLOB Description Rfrence dlment XML racine Variable devant recevoir larbre XML

Description La commande DOM EXPORTER VERS VARIABLE permet de sauvegarder un arbre XML dans une variable texte ou BLOB. Passez dans refElment la rfrence de llment racine exporter. Passez dans vVarXml le nom de la variable devant contenir larbre XML. Cette variable peut tre de type Texte ou BLOB. Vous pouvez choisir le type en fonction des oprations effectuer par la suite ou de la taille que larbre peut atteindre (rappelons que les variables de type Texte sont limites 32000 caractres). Si llment est stock dans une variable Texte, lencodage utilis sera Mac Roman. Exemple Cet exemple sauvegarde larbre vRefElem dans une variable texte :

C_TEXTE(vtMonTexte) DOM EXPORTER VERS VARIABLE(vRefElem;vtMonTexte)

Rfrence DOM EXPORTER VERS FICHIER. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre (par exemple, si la rfrence de llment nest pas valide).

1974 4e Dimension - Langage

DOM FERMER XML

XML version 2004 (Modifie)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

DOM FERMER XML (refElment) Paramtre refElment Type Chane Description Rfrence dlment XML racine

Description La commande DOM FERMER XML libre lespace mmoire occup par lobjet XML dsign par refElment. Si refElment nest pas un objet XML racine, une erreur est gnre. Rfrence DOM Analyser source XML, DOM Analyser variable XML. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK prend la valeur 1. Si une erreur se produit, elle prend la valeur 0.

4e Dimension - Langage 1975

SAX ECRIRE OPTIONS XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX ECRIRE OPTIONS XML (document; encodage{; autonome{; indentation}}) Paramtre document encodage autonome indentation Type DocRef Chane Boolen Boolen Description Rfrence du document ouvert Jeu de caractres du document XML Vrai=le document est autonome Faux (dfaut)=le document nest pas autonome Vrai (dfaut)=le document est indent Faux=le document nest pas indent

Description La commande SAX ECRIRE OPTIONS XML initialise le document XML rfrenc par document laide des valeurs passes en paramtres. Ces paramtres permettent de dterminer lencodage, lattribut autonome (standalone) et lindentation du document. encodage : indique le jeu de caractres employ dans le document. Par dfaut (si la commande nest pas appele), le jeu de caractres UTF-8 (Unicode compress) est utilis. autonome : indique si le document est autonome (Vrai) ou sil dpend, pour son fonctionnement, dautres fichiers ou de ressources externes (Faux). Par dfaut (si la commande nest pas appele ou si le paramtre est omis), le document nest pas autonome. indentation : indique si le document doit faire apparatre des indentations (Vrai) ou non (Faux) correspondant aux niveaux hirarchiques des cls XML. Par dfaut (si la commande nest pas appele ou si le paramtre est omis), le document est indent. Cette commande doit tre appele une seule fois par document et avant la premire commande dcriture XML dans le document, sinon une erreur est gnre. Exemple Le code suivant :

SAX ECRIRE OPTIONS XML($RefDoc;"UTF-16";Vrai)

... inscrira cette ligne dans le document : <?xml version="1.0" encoding="UTF-16" standalone="yes"?> Rfrence SAX LIRE VALEURS DOCUMENT XML.

1976 4e Dimension - Langage

SAX LIRE VALEURS DOCUMENT XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX LIRE VALEURS DOCUMENT XML (document; encodage; version; autonome) Paramtre document encodage version autonome Type DocRef Chane Chane Boolen Description Rfrence du document ouvert Jeu de caractres du document XML Version du XML Vrai=le document est autonome, sinon Faux

Description La commande SAX LIRE VALEURS DOCUMENT XML extrait des informations lmentaires de len-tte XML du document XML rfrenc par document. La commande retourne respectivement le type dencodage, la version et la proprit autonome du document dans les paramtres encodage, version et autonome. Cette commande doit tre utilise dans le contexte de lvnement SAX Dbut document XML. Pour plus d'informations sur les vnements SAX, reportez-vous la description de la commande SAX Lire noeud XML. Rfrence SAX ECRIRE OPTIONS XML, SAX Lire noeud XML. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre.

4e Dimension - Langage 1977

SAX AJOUTER DOCTYPE XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX AJOUTER DOCTYPE XML (document; docType) Paramtre document docType Type DocRef Chane Description Rfrence du document ouvert DocType ajouter

Description La commande SAX AJOUTER DOCTYPE XML ajoute l'instruction DocType dfinie par le paramtre docType dans le document XML rfrenc par document. Une instruction DocType permet dindiquer le type de XML dans lequel le document a t crit et de dsigner la Dclaration de type de document (DTD) utilise. Une instruction DocType est gnralement de la forme <!DOCTYPE type_XML "adresse_DTD">. Exemple Linstruction suivante :

vDocType := "Livres SYSTEM \"Livre.DTD\"" SAX AJOUTER DOCTYPE XML ($RefDoc;vDocType)

... inscrira cette ligne dans le document : <!DOCTYPE Livres SYSTEM "Livre.DTD"> Rfrence SAX AJOUTER COMMENTAIRE XML. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0. Gestion des erreurs En cas derreur, la commande retourne une erreur qui peut tre intercepte via une mthode dappel sur erreur.

1978 4e Dimension - Langage

SAX Lire noeud XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX Lire noeud XML (document) Entier long Paramtre document Rsultat Type DocRef Entier long Description Rfrence du document ouvert Evnement retourn par la fonction

Description La commande SAX Lire noeud XML retourne un entier long indiquant le type dvnement SAX retourn durant lanalyse du document XML rfrenc par document. Les vnements sont fournis sous forme de constantes dans le thme XML : Constante Type Valeur Dbut document XML Entier long 1 Commentaire XML Entier long 2 Instruction de traitement XML Entier long 3 Dbut lment XML Entier long 4 Fin lment XML Entier long 5 Donne XML Entier long 6 CDATA XML Entier long 7 Entit XML Entier long 8 Fin document XML Entier long 9 Exemple Exemple de traitement des vnements : RefDoc:=Ouvrir document("") Si (OK=1) Repeter MonEvnement:=SAX Lire noeud XML(RefDoc) Au cas ou : (MonEvnement=Dbut document XML) FaireQuelqueChose : (MonEvnement=Commentaire XML) FaireAutreChose Fin de cas Jusque (MonEvnement=Fin document XML) Fin de si FERMER DOCUMENT (RefDoc) Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre. 4e Dimension - Langage 1979

SAX AJOUTER COMMENTAIRE XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX AJOUTER COMMENTAIRE XML (document; commentaire) Paramtre document commentaire Type DocRef Chane Description Rfrence du document ouvert Commentaire ajouter

--> -->

Description La commande SAX AJOUTER COMMENTAIRE XML ajoute un commentaire dans le document XML rfrenc par document. Un commentaire XML est un texte dont le contenu ne sera pas analys par linterprteur XML. Les commentaires XML sont encadrs par les caractres <!-- et -->. Exemple Linstruction suivante :

vCommentaire := "Cr par 4e Dimension" SAX AJOUTER COMMENTAIRE XML ($RefDoc;vCommentaire)

... inscrira cette ligne dans le document : <!--Cr par 4e Dimension--> Rfrence SAX AJOUTER DOCTYPE XML. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0. Gestion des erreurs En cas derreur, la commande retourne une erreur qui peut tre intercepte via une mthode dappel sur erreur.

1980 4e Dimension - Langage

SAX LIRE COMMENTAIRE XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX LIRE COMMENTAIRE XML (document; commentaire) Paramtre document commentaire Type DocRef Chane Description Rfrence du document ouvert Commentaire XML

Description La commande SAX LIRE COMMENTAIRE XML retourne un commentaire si un vnement SAX de type Commentaire XML est gnr dans le document XML rfrenc par document. Pour plus d'informations sur les vnements SAX, reportez-vous la description de la commande SAX Lire noeud XML. Rfrence SAX AJOUTER COMMENTAIRE XML, SAX Lire noeud XML. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre.

4e Dimension - Langage 1981

SAX OUVRIR ELEMENT XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX OUVRIR ELEMENT XML (document; balise{; nomAttribut; valeurAttribut}{; nomAttribut2; valeurAttribut2; ...; nomAttributN; valeurAttributN}) Paramtre document balise nomAttribut valeurAttribut Type DocRef Chane Chane Chane Description Rfrence du document ouvert Nom de llment ouvrir Nom dattribut Valeur dattribut

Description La commande SAX OUVRIR ELEMENT XML permet dajouter un nouvel lment dans le document XML rfrenc par document ainsi que, facultativement, des attributs et leurs valeurs. Llment ajout est ouvert dans le document (la balise de fin nest pas ajoute). Pour refermer un lment cr laide de cette commande, vous devez soit : utiliser la commande SAX FERMER ELEMENT XML, refermer le document XML. Dans ce cas, 4e Dimension ajoute automatiquement les balises XML de fermeture ncessaires. Passez dans balise le nom de llment crer. Ce nom peut contenir uniquement des lettres, des chiffres, ainsi que les caractres ., -,_ et :. Si un caractre invalide est pass dans balise, une erreur est gnre. Facultativement, la commande permet de passer un ou plusieurs couple(s) attributs/valeurs (sous forme de variables, champs ou valeur littrales) via les paramtres nomAttribut et valeurAttribut. Vous pouvez passer autant de couples attribut/valeur que vous voulez. Exemple Linstruction suivante :

vElement:="Book" SAX OUVRIR ELEMENT XML($RefDoc;vElement)

... inscrira cette ligne dans le document : <Book Rfrence SAX FERMER ELEMENT XML, SAX OUVRIR ELEMENT XML TABLEAUX. Gestion des erreurs Si un caractre invalide est pass dans balise, une erreur est gnre. 1982 4e Dimension - Langage

SAX OUVRIR ELEMENT XML TABLEAUX

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX OUVRIR ELEMENT XML TABLEAUX (document; balise{; tabNomsAttributs; tabValeursAttributs}{; tabNomsAttributs2; tabValeursAttributs2; ...; tabNomsAttributsN; tabValeursAttributsN}) Paramtre document balise tabNomsAttributs tabValeursAttributs Type docRef Chane Tab Chane Tab Chane Description Rfrence du document ouvert Nom de llment ouvrir Tableau de noms dattributs Tableau de valeurs dattributs

Description La commande SAX OUVRIR ELEMENT XML TABLEAUX permet dajouter un nouvel lment dans le document XML rfrenc par document ainsi que, facultativement, des attributs et leurs valeurs sous forme de tableaux. Hormis la prise en charge de tableaux (cf. ci-dessous), cette commande est identique SAX OUVRIR ELEMENT XML. Reportez-vous la description de cette commande pour le dtail de son fonctionnement. Facultativement, la commande SAX OUVRIR ELEMENT XML TABLEAUX permet de passer plusieurs couples dattributs et de valeurs dattributs sous forme de tableaux dans les paramtres tabNomsAttributs et tabValeursAttributs. Les tableaux doivent avoir t crs au pralable et fonctionner par paires. Vous pouvez passer autant de couples de tableaux et autant dlments dans chaque couple que vous voulez. Exemple La mthode suivante : TABLEAU ALPHA(80;tNomsAtt;2) TABLEAU ALPHA(80;tValeursAtt;2) vElement:="Book" tNomsAtt{1}:="Font" tValeursAtt{1}:="arial" tNomsAtt{2}:="Style" tValeursAtt{2}:="Bold" SAX OUVRIR ELEMENT XML TABLEAUX($RefDoc;vElement;tNomsAtt;tValeursAtt)

... inscrira cette ligne dans le document : <Book Font="arial" Style="Bold"> Rfrence SAX FERMER ELEMENT XML, SAX OUVRIR ELEMENT XML.

4e Dimension - Langage 1983

SAX FERMER ELEMENT XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX FERMER ELEMENT XML (document) Paramtre document Type DocRef Description Rfrence du document ouvert

Description La commande SAX FERMER ELEMENT XML inscrit dans le document XML rfrenc par document les instructions ncessaires la fermeture du dernier lment ouvert via la commande SAX OUVRIR ELEMENT XML. Lemploi de cette commande est facultatif. En effet, 4e Dimension ajoute automatiquement si ncessaire, au moment de la fermeture des documents XML, les balises de fin dlments non referms explicitement. Exemple Si le dernier lment ouvert est <Book>, linstruction suivante :

SAX FERMER ELEMENT XML($RefDoc)

... inscrira cette ligne dans le document : </Book> Rfrence SAX OUVRIR ELEMENT XML, SAX OUVRIR ELEMENT XML TABLEAUX.

1984 4e Dimension - Langage

SAX LIRE ELEMENT XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX LIRE ELEMENT XML (document; nom; prfixe; nomsAttributs; valeursAttributs) Paramtre document nom prfixe nomsAttributs valeursAttributs Type DocRef Chane Chane Tab chane Tab chane Description Rfrence du document ouvert Nom de llment Espace de nommage Noms des attributs Valeurs des attributs

Description La commande SAX LIRE ELEMENT XML retourne diverses informations relatives llment nom prsent dans le document XML rfrenc par document. Elle doit tre appele dans le contexte dun vnement SAX Dbut lment XML ou Fin lment XML. Dans le cas particulier dun Fin lment XML, les paramtres dattributs ne sont pas grs. Pour plus d'informations sur les vnements SAX, reportez-vous la description de la commande SAX Lire noeud XML. nom contient le nom de llment. prfixe retourne lespace de nommage (namespace) de llment. Ce paramtre est vide si aucun espace de nommage nest associ llment. La commande remplit le tableau nomsAttributs avec les noms des attributs de llment cible. Si ncessaire, la commande cre et dimensionne automatiquement le tableau. La commande remplit galement le tableau valeursAttributs avec les valeurs des attributs de llment cible. Si ncessaire, la commande cre et dimensionne automatiquement le tableau. Exemple Considrons lextrait de code XML suivant : <RootElement> <Child Att1="111" Att2="222" Att3="333">MonTexte</Child> </RootElement> Une fois linstruction suivante excute :

SAX LIRE ELEMENT XML (RefDoc;vNom;vPrfixe;tAttrNoms;tAttrValeurs)

...vNom contiendra Child vPrfixe contiendra

4e Dimension - Langage 1985

tAttrNoms{1} contiendra Att1, tAttrNoms{2} contiendra Att2, tAttrNoms{3} contiendra Att3 tAttrValeurs{1} contiendra 111, tAttrValeurs{2} contiendra 222, tAttrValeurs{3} contiendra 333 Rfrence SAX Lire noeud XML. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre.

1986 4e Dimension - Langage

SAX AJOUTER VALEUR ELEMENT XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX AJOUTER VALEUR ELEMENT XML (document; donnes) Paramtre document donnes Type DocRef Texte | BLOB Description Rfrence du document ouvert Texte ou BLOB insrer dans le document

Description La commande SAX AJOUTER VALEUR ELEMENT XML ajoute directement dans le document XML rfrenc par document des donnes de type texte ou BLOB sans les convertir. Cette commande quivaut par exemple insrer une pice jointe dans le corps (body) dun email. Si vous souhaitez encoder le contenu de donnes, vous devez utiliser la commande ENCODER. Dans ce cas bien entendu, vous devez passer un BLOB dans donnes. Pour que cette commande fonctionne, un lment doit tre ouvert. Dans le cas contraire, une erreur est gnre. Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0. Exemple Cet exemple insre le fichier whitepaper.pdf dans llment XML ouvert : C_BLOB(vBMonBLOB) DOCUMENT VERS BLOB ("c:\\whitepaper.pdf";vBMonBLOB) SAX AJOUTER VALEUR ELEMENT XML($RefDoc;vBMonBLOB)

Rfrence SAX LIRE VALEUR ELEMENT XML.

4e Dimension - Langage 1987

SAX LIRE VALEUR ELEMENT XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX LIRE VALEUR ELEMENT XML (document; valeur) Paramtre document valeur Type DocRef Texte | BLOB Description Rfrence du document ouvert Valeur de llment

Description La commande SAX LIRE VALEUR ELEMENT XML permet de rcuprer la valeur dun lment XML existant dans le document XML rfrenc par document. Elle doit tre appele dans le contexte dun vnement SAX Donne XML. Pour plus d'informations sur les vnements SAX, reportez-vous la description de la commande SAX Lire noeud XML. Passez dans le paramtre valeur une variable de type Texte ou BLOB devant rcuprer les donnes. Si vous passez un BLOB, le texte sera retourn tel quel (il ne sera pas modifi). Exemple Considrons lextrait de code XML suivant : <RootElement> <Child Att1="111" Att2="222" Att3="333">MonTexte</Child> </RootElement> Linstruction suivante retournera MonTexte dans vValeur :

SAX LIRE VALEUR ELEMENT XML(RefDoc;vValeur)

Rfrence SAX AJOUTER VALEUR ELEMENT XML, SAX Lire noeud XML. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre.

1988 4e Dimension - Langage

SAX AJOUTER CDATA XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX AJOUTER CDATA XML (document; donnes) Paramtre document donnes Type DocRef Texte | BLOB Description Rfrence du document ouvert Texte ou BLOB insrer dans le document entre balises CData

Description La commande SAX AJOUTER CDATA XML ajoute dans le document XML rfrenc par document des donnes de type texte ou BLOB. Ces donnes seront automatiquement encadres par les balises <CData> et </CData>. Le texte compris dans une section CData est ignor par linterprteur XML. Si vous souhaitez encoder le contenu de donnes, vous devez utiliser la commande ENCODER. Dans ce cas bien entendu, vous devez passer un BLOB dans donnes. Pour que cette commande fonctionne, un lment doit tre ouvert. Dans le cas contraire, une erreur est gnre. Exemple Vous souhaitez insrer les lignes suivantes dans votre document XML : function matchwo(a,b) { if (a < b && a < 0) then { return 1 } else { return 0 } } Pour cela, il vous suffit dexcuter le code suivant : C_TEXTE (vtMontexte) ... ` placez ici le texte dans la variable vtMontexte SAX AJOUTER CDATA XMLL($RefDoc;vtMontexte)

4e Dimension - Langage 1989

Le rsultat sera alors : <![CDATA[ function matchwo(a,b) { if (a < b && a < 0) then { return 1 } else { return 0 } } ]]> Rfrence SAX LIRE CDATA XML. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0.

1990 4e Dimension - Langage

SAX LIRE CDATA XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX LIRE CDATA XML (document; valeur) Paramtre document valeur Type DocRef BLOB Description Rfrence du document ouvert Valeur de llment

Description La commande SAX LIRE CDATA XML permet de rcuprer la valeur CDATA dun lment XML existant dans le document XML rfrenc par document. Elle doit tre appele dans le contexte dun vnement SAX CDATA XML. Pour plus d'informations sur les vnements SAX, reportez-vous la description de la commande SAX Lire noeud XML. Les donnes sont retournes telles quelles (elles ne sont pas modifies). Exemple Considrons lextrait de code XML suivant : <RootElement> <Child>MonTexte<![CDATA[MonCData]]</Child> </RootElement> Le code 4D suivant retournera MonCData dans vDonnesTexte : C_BLOB (vDonnes) C_TEXTE (vDonnesTexte) SAX LIRE CDATA XML(RefDoc;vDonnes) vDonnesTexte:=BLOB vers texte(vDonnes;Chane en C)

Rfrence SAX AJOUTER CDATA XML, SAX Lire noeud XML. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre.

4e Dimension - Langage 1991

SAX AJOUTER INSTRUCTION DE TRAITEMENT

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX AJOUTER INSTRUCTION DE TRAITEMENT (document; instruction) Paramtre document instruction Type DocRef Texte Description Rfrence du document ouvert Texte ou BLOB insrer dans le document

Description La commande SAX AJOUTER INSTRUCTION DE TRAITEMENT ajoute dans le document XML rfrenc par document une instruction de traitement XML. Une instruction de traitement permet dindiquer le type dapplication et ventuellement des paramtres additionnels permettant de traiter une entit externe non analysable. La commande formate les donnes dinstruction conformment au XML. En revanche, les instructions elles-mmes ne sont pas analyses, il revient au dveloppeur de sassurer quelles sont valides. Exemple Le code suivant : vtInstruct:="xml-stylesheet type="+Caractere(Guillemets)+"text/xsl"+ Caractere (Guillemets)+"href="+Caractere (Guillemets)+ "style.xsl"+Caractere (Guillemets) SAX AJOUTER INSTRUCTION DE TRAITEMENT ($RefDoc;vtInstruct)

... inscrira cette ligne dans le document : <?xml-stylesheet type="text/xsl" href="style.xsl"?> Rfrence SAX LIRE INSTRUCTION DE TRAITEMENT. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre.

1992 4e Dimension - Langage

SAX LIRE INSTRUCTION DE TRAITEMENT XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX LIRE INSTRUCTION DE TRAITEMENT XML (document; nom; valeur) Paramtre document nom valeur Type DocRef Chane Chane Description Rfrence du document ouvert Nom de linstruction Valeur de linstruction

Description La commande SAX LIRE INSTRUCTION DE TRAITEMENT XML retourne le nom et la valeur de linstruction de traitement XML analyse dans le document XML rfrenc par document. Cette commande doit tre appele dans le contexte dun vnement Instruction de traitement XML. Pour plus d'informations sur les vnements SAX, reportez-vous la description de la commande SAX Lire noeud XML. Exemple Considrons lextrait de code XML suivant : <?xml version="1.0" encoding="UTF-8"?> <!-- Edited with XML Spy v3.0.7 NT (http://www.xmlspy.com) by Myself (4D SA)--> <?PI TextProcess?> <!DOCTYPE RootElement SYSTEM "ParseTest.dtd"> Linstruction suivante retournera PI dans vNom et TextProcess dans vValeur :

SAX LIRE INSTRUCTION DE TRAITEMENT XML($RefDoc;vNom;vValeur)

Rfrence SAX AJOUTER INSTRUCTION DE TRAITEMENT XML, SAX Lire noeud XML.

4e Dimension - Langage 1993

SAX LIRE ENTITE XML

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

SAX LIRE ENTITE XML (document; nom; valeur) Paramtre document nom valeur Type DocRef Chane Chane Description Rfrence du document ouvert Nom de lentit Valeur de lentit

Description La commande SAX LIRE ENTITE XML permet de rcuprer le nom et valeur dune entit XML prsente dans le document XML rfrenc par document. Elle doit tre appele dans le contexte dun vnement SAX Entit XML. Pour plus d'informations sur les vnements SAX, reportez-vous la description de la commande SAX Lire noeud XML. Exemples Considrons lextrait de code XML suivant : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE body [ <!ELEMENT body (element*)> <!ELEMENT element (#PCDATA)> <!ENTITY nom "Le remplacement"> ]> <body> <element>Lentit est mise jour par &nom;</element> </body> Linstruction suivante retournera nom dans vNom et Le remplacement dans vValeur.

SAX LIRE ENTITE XML(RefDoc;vNom;vValeur)

Rfrence SAX Lire noeud XML. Variables et ensembles systme Si la commande a t excute correctement, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0 et une erreur est gnre.

1994 4e Dimension - Langage

LIRE ERREUR XML

XML version 2003

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE ERREUR XML (refElment; texteErreur{; ligne{; colonne}}) Paramtre refElment texteErreur ligne colonne Type Chane Variable Variable Variable Description Rfrence dlment XML Texte de lerreur Numro de ligne Numro de colonne

Description La commande LIRE ERREUR XML retourne dans le paramtre texteErreur la description de lerreur rencontre lors du traitement de llment XML dsign par le paramtre refElment. Les informations retournes sont fournies par la librairie Xerces.dll. Les paramtres optionnels ligne et colonne dsignent prcisment lemplacement de lerreur : ils rcuprent respectivement le numro de la ligne et, dans cette ligne, la position du premier caractre de lexpression lorigine de lerreur. Rfrence DOM Analyser informations XML. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK prend la valeur 1. Si une erreur se produit, elle prend la valeur 0.

4e Dimension - Langage 1995

APPLIQUER TRANSFORMATION XSLT

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

APPLIQUER TRANSFORMATION XSLT (sourceXML; feuilleXSL; rsultat) Paramtre sourceXML feuilleXSL rsultat Type Chane | BLOB Chane | BLOB Chane | BLOB Description Nom ou chemin daccs du document XML source ou BLOB contenant le XML source Nom ou chemin daccs du document contenant la feuille de style XSL, ou BLOB contenant la feuille de style XSL Nom ou chemin daccs du document recevant le rsultat de la transformation XSLT, ou BLOB recevant le rsultat de la transformation XSLT

Description La commande APPLIQUER TRANSFORMATION XSLT applique une transformation XSL un document ou un BLOB contenant du XML et gnre un document ou un BLOB rsultat. La porte de cette commande est le process courant. Note : Pour plus d'informations sur la transformation XSL (ou XSLT), reportez-vous la section Prsentation des commandes XML. La commande requiert trois paramtres de type BLOB ou Chane de caractres. Attention, la commande accepte uniquement des variables ou des champs comme paramtres. Si vous passez une chane de caractres, vous dsignez un document. Dans ce cas, vous pouvez passer uniquement le nom (le document doit se trouver ct de la structure de la base de donnes) ou le chemin daccs complet du document. Il n'est pas possible de mixer diffrents types de paramtres au sein dun mme appel. Le paramtre sourceXML doit contenir le source XML transformer. La commande vrifie la validit du code XML. Le paramtre feuilleXSL doit contenir la feuille de style XSL utiliser pour la transformation XSLT. Cette feuille de style peut avoir t gnre manuellement ou via un logiciel spcialis. La commande vrifie la validit du code XML. Le paramtre rsultat doit contenir le nom du document ou du BLOB devant recueillir le rsultat de la transformation XSLT. Si vous passez un nom de document nexistant pas lemplacement dsign, 4e Dimension le cre automatiquement. Si le document est dj ouvert en criture, une erreur est gnre.

1996 4e Dimension - Langage

La commande analyse le source XML et le transforme laide des instructions de la feuille de style XSL. Si la commande FIXER PARAMETRE XSLT a t utilise au pralable, la commande remplace les paramtres dfinis par leur valeur. Le rsultat de la transformation est crit dans le document ou BLOB rsultat. Note : Afin doptimiser les performances de cette commande notamment en cas dapplications successives de la mme feuille XSL, 4e Dimension compile et conserve en mmoire les dernires feuilles XSL utilises. Exemple Reportez-vous lexemple de la commande FIXER PARAMETRE XSLT. Rfrence FIXER PARAMETRE XSLT, LIRE ERREUR XSLT. Variables et ensembles systme Si la transformation a t correctement effectue, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0.

4e Dimension - Langage 1997

FIXER PARAMETRE XSLT

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

FIXER PARAMETRE XSLT (nomParam; valeurParam) Paramtre nomParam valeurParam Type Chane Chane Description Nom du paramtre chercher dans la feuille XSL Valeur du paramtre utiliser dans le document transform

Description La commande FIXER PARAMETRE XSLT doit tre utilise conjointement avec la commande APPLIQUER TRANSFORMATION XSLT. Elle permet de dfinir les valeurs de paramtres variables placs dans une feuille de style XSL au moment de la transformation XSLT dun document XML. A laide de cette commande, il est notamment possible dinsrer des valeurs issues de traitements 4e Dimension dans la feuille de style XSL, juste avant son utilisation par APPLIQUER TRANSFORMATION XSLT. Notes : La porte de cette commande est le process courant. Elle doit tre appele dans le mme process que la commande APPLIQUER TRANSFORMATION XSLT associe. Pour plus d'informations sur la transformation XSL (ou XSLT), reportez-vous la section Prsentation des commandes XML. Passez dans nomParam le nom du paramtre XSL variable remplacer. Ce paramtre doit tre prsent dans la feuille de style XSL sous la forme $aremplacer. En revanche, le caractre $ nest pas ncessaire dans nomParam. Par exemple, si linstruction <xsl:template match=$mavar> est place dans le fichier XSL, il vous suffira de passer mavar dans nomParam pour dsigner ce paramtre. Passez dans valeurParam la valeur que vous souhaitez insrer dans le fichier transform en lieu et place du paramtre XSL variable. Pour reprendre lexemple prcdent, si vous passez la valeur titre dans valeurParam, la transformation XSLT prendra en compte linstruction <xsl:template match="titre"> (ce qui dsigne les lments titre comme sujets de lapplication dune rgle de style). Note : Pour une description dtaille du langage XSL, vous pouvez vous reporter aux nombreux sites Web qui lui sont consacrs, par exemple http://xmlfr.org. Pour passer plusieurs paramtres une feuille de style XSL, il suffit dappeler plusieurs fois la commande FIXER PARAMETRE XSLT. Les paramtres sont empils jusqu lappel de APPLIQUER TRANSFORMATION XSLT dans le mme process. A lissue de lexcution de APPLIQUER TRANSFORMATION XSLT, la pile de paramtres est automatiquement efface.

1998 4e Dimension - Langage

Exemple Lexemple suivant dfinit deux paramtres XSL puis transforme le document mondoc.xml en fichier html via la feuille de style mafeuille.xsl :

FIXER PARAMETRE XSLT("varstyle";"gras") FIXER PARAMETRE XSLT("varcouleur";"bleu") $docxml:="mondoc.xml" $feuillexsl:="mafeuille.xsl" $dochtml:="mondoc.html" APPLIQUER TRANSFORMATION XSLT($docxml;$feuillexsl;$dochtml)

Rfrence APPLIQUER TRANSFORMATION XSLT, LIRE ERREUR XSLT. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK prend la valeur 1, sinon elle prend la valeur 0.

4e Dimension - Langage 1999

LIRE ERREUR XSLT

XML version 2004

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

LIRE ERREUR XSLT (texteErreur{; ligne{; colonne}}) Paramtre texteErreur ligne colonne Type Variable Variable Variable Description Texte de lerreur Numro de ligne Numro de colonne

Description La commande LIRE ERREUR XSLT retourne dans le paramtre texteErreur la description de la dernire erreur ventuellement rencontre lors de la transformation XSLT effectue dans le process courant. Les informations retournes sont fournies par la librairie Xerces.dll. Les paramtres optionnels ligne et colonne dsignent lemplacement de lerreur dans le fichier XSL : ils rcuprent respectivement le numro de la ligne et, dans cette ligne, la position du premier caractre de lexpression lorigine de lerreur. Rfrence APPLIQUER TRANSFORMATION XSLT, FIXER PARAMETRE XSLT. Variables et ensembles systme Si la commande a t correctement excute, la variable systme OK prend la valeur 1. Si une erreur se produit, elle prend la valeur 0.

2000 4e Dimension - Langage

68 ________________________ Codes d'erreurs

4e Dimension - Langage 2001

2002 4e Dimension - Langage

Erreurs de syntaxe

Codes d'erreurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le tableau suivant liste les codes et les messages des erreurs de syntaxe qui peuvent survenir lors de l'excution de votre code en mode Utilisation ou Menus crs. Quelques erreurs peuvent se produire en mode interprt seulement, quelques-unes en mode compil seulement et les autres dans les deux modes. Ces erreurs peuvent tre interceptes par une mthode d'appel sur erreur installe par la commande APPELER SUR ERREUR. Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Description Il manque une parenthse ouvrante. Il manque un champ. Cette fonction ne peut tre applique que sur un champ appartenant une sous-table. Les arguments de la liste doivent tous tre du mme type. Impossible de dterminer sur quelle table appliquer cette fonction Cette fonction ne peut tre excute que sur un champ de type sous-table. Il manque un argument de type numrique. Il manque un argument de type alphanumrique. Il manque le rsultat d'une condition. Cette fonction ne peut tre applique ce type de donnes. Cette fonction ne peut tre applique entre deux conditions. Cette fonction ne peut tre applique entre deux arguments numriques. Cette fonction ne peut tre applique entre deux arguments alphanumriques. Cette fonction ne peut tre applique entre deux arguments de type date. Les arguments de cette opration ne sont pas compatibles. Ce champ ne possde pas de lien. Il manque une table. Les types sont incompatibles. Le champ n'est pas index. Il manque le signe gal (=). Cette mthode n'existe pas. Les champs doivent appartenir la mme table (ou la mme sous-table) pour un tri ou un graphe. Il manque le signe infrieur (<) ou suprieur (>). Il manque un point-virgule (;). Il y a trop de champs pour le tri. Le champ ne doit pas tre de type image, texte, BLOB ou sous-table. Le nom du champ doit tre prfix par le nom de la table auquel il appartient. Le champ doit tre du type numrique.

4e Dimension - Langage 2003

29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69

La valeur doit tre gale 1 ou 0. Il manque une variable. Aucune barre de menus ne porte ce numro. Il manque une date. Mthode ou fonction non implmente Les fichiers comptables ne sont pas ouverts. La table et l'ensemble ne sont pas associs. Nom de table incorrect Il manque le signe d'affectation (:=). Ceci est une fonction et non une mthode. Cet ensemble n'existe pas. Ceci est une mthode et non une fonction. Il manque une variable ou un sous-champ. Lenregistrement ne peut pas tre dpil. La fonction est introuvable. La mthode est introuvable. Il manque une variable ou un champ. Il manque un argument de type alphanumrique ou numrique. Le champ doit tre de type alphanumrique. Erreur de syntaxe Impossible dutiliser cet oprateur ici Ces oprateurs ne peuvent pas tre utiliss conjointement. Ce module n'est pas implment. Il manque un argument de type tableau. L'indice du tableau est en dehors des limites. Les arguments sont incompatibles. Il manque un argument de type boolen. Il manque un champ, une variable ou une table. Il manque un oprateur. Il manque une parenthse fermante. Type d'argument inattendu Impossible de passer un paramtre ou une variable locale une commande EXECUTER sur une base compile Impossible de modifier le type d'un tableau dans une base compile Impossible dappliquer cette commande une sous-table Le champ nest pas index. Il manque un champ ou une variable de type image. La valeur doit comporter 4 caractres. La valeur doit tre compose d'au plus 3 caractres. Cette commande ne peut pas tre excute sur 4D Server. Il manque une liste. Il manque une rfrence d'une fentre externe.

2004 4e Dimension - Langage

Astuces Certains codes d'erreurs signalent des erreurs de syntaxe des des fautes de frappe. Par exemple, vous obtenez l'erreur 37 ("Il manque le signe d'affectation (:=).") si vous excutez l'expression v=0 alors que vous vouliez crire v:=0. Dans ce cas, vous liminez l'erreur en corrigeant votre code dans l'diteur de mthodes. Certains codes d'erreurs signalent de simples erreurs de programmation. Par exemple, vous obtenez l'erreur 5 ("Impossible de dterminer sur quelle table appliquer cette fonction.") si vous avez excut une commande telle que AJOUTER ENREGISTREMENT sans indiquer de nom de table dans le paramtre correspondant, et vous n'avez pas dfini de table par dfaut l'aide de la commande TABLE PAR DEFAUT. Dans ce cas, vous corrigez l'erreur en dfinissant une table par dfaut ou en passant un nom de table dans le paramtre correspondant. Certains codes d'erreurs signalent des erreurs lies la structure de la base. Par exemple, vous obtenez l'erreur 16 ("Ce champ ne possde pas de lien.") si vous appliquez la commande CHARGER SUR LIEN un champ qui n'est pas li un autre champ. Dans ce cas, vous liminez l'erreur en modifiant votre code ou en crant un lien partir du champ. Certaines erreurs qui surviennent ne stoppent pas toujours l'excution de votre code au "bon" endroit. Par exemple, si dans une sous-routine vous recevez l'erreur 53 ("L'indice du tableau est en dehors des limites.") sur la ligne vpChamp:=Champ($1;$2), l'erreur est de des numros incorrects de table ou de champ passs la sous-routine en tant que paramtres. Donc, l'erreur se trouve dans la mthode appelante et non l'endroit o l'erreur est dtecte. Dans ce cas, tracez votre code dans la fentre de dbogage et recherchez la ligne qui contient l'erreur, puis corrigez-la dans l'diteur des mthodes. Rfrence APPELER SUR ERREUR.

4e Dimension - Langage 2005

Erreurs de la base de donnes

Codes d'erreurs version 2004 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le tableau suivant liste les codes d'erreurs gnres par le moteur de base de donnes de 4e Dimension. Ces erreurs de bas niveau peuvent se produire lors d'oprations lies au moteur telles que des interruptions utilisateur, des erreurs de priviliges ou des objets endommags. Code 4004 4003 4002 4001 1006 -1 -9800 -9850 -9851 -9852 -9853 -9854 -9855 -9910 -9911 -9912 -9913 -9914 -9915 -9916 -9917 -9918 -9919 -9920 -9925 -9926 -9927 -9928 -9929 -9930 -9931 Description Un plug-in a requis l'enregistrement courant d'une table alors qu'il n'y en a pas Numro de champ invalide utilis par un plug-in Numro d'enregistrement non valide utilis par un plug-in Numro de table non valide utilis par un plug-in Interruption gnre par l'utilisateur. Point d'entre non valide utilis par un plug-in L'un des process a modifi les droits d'accs. La zone passe cette commande externe est incorrecte. Valeur incorrecte pour le paramtre numro 1. Valeur incorrecte pour le paramtre numro 2. Valeur incorrecte pour le paramtre numro 3. Valeur incorrecte pour le paramtre numro 4. Valeur incorrecte pour le paramtre numro 5. Erreur Web Service Erreur de lanalyseur xml Erreur HTTP Erreur rseau Erreur interne La rfrence du document est incorrecte. Llment n'est pas ouvert. Le type du tableau pass en paramtre est incorrect. Le nom de llment est incorrect. Cet encodage n'est pas support. Le type du noeud est incorrect Llment rfrenc est nul. Llment rfrenc est invalide. Llment rfrenc nest pas le root. Le nom de llment est inconnu. Lindex pour cet lment est invalide. Il nexiste pas dattribut de ce nom pour cet lment. Lindex pour cet attribut est invalide.

2006 4e Dimension - Langage

-9932 -9933 -9934 -9935 -9937 -9938 -9939 -9940 -9941 -9942 -9943 -9944 -9945 -9946 -9947 -9948 -9949 -9950 -9951 -9952 -9953 -9954 -9955 -9956 -9957 -9958 -9959 -9960 -9961 -9962 -9963 -9964 -9965 -9966 -9967 -9968 -9969 -9970 -9971 -9972 -9973 -9974 -9975 -9976

La DLL XML nest pas charge. Le fichier XML nest pas valide. Le fichier XML nest pas bien form. Le fichier XML nest pas valide ou nest pas bien form. Le systme de mots de passe est verrouill par un autre utilisateur. L'enregistrement courant a t modifi depuis le trigger. Routine externe introuvable. L'initialisation de l'extension 4D a chou. Slecteur EX_GESTALT inconnu. Licence 4D Client incompatible avec cette version de 4D Server. Erreur de version de plug-in de connectivit 4D. Cet utilisateur n'appartient pas au groupe d'accs par 4D Open. Erreur 4D Runtime CD-ROM, l'criture de donnes est impossible. Impossible d'effacer cette slection temporaire car elle n'existe pas. L'option Autoriser les connexions 4D Open n'est pas slectionne. Une fentre modale est active. Erreur de licence ou de privilge. Le numro d'ordre de ce segment de donnes n'est pas le bon. Ce champ ne possde pas de lien. Mauvais en-tte du segment principal. Il n'y a pas de fichier d'historique. Aucun enregistrement courant. QuickTime n'est pas install. Les versions de 4D Server et 4D Client sont incompatibles. L'numration est verrouille. Le process ne peut tre dmarr. Le process de sauvegarde est dj dmarr. Aucun plug-in de sauvegarde n'est install. Le process de sauvegarde n'est pas dmarr. Pas de sauvegarde possible car le serveur quitte. Numro d'enregistrement non valide. Table de dfinition de tri incorrecte envoye par un poste client. Table de dfinition de recherche incorrecte envoye par un poste client. Les types sont incompatibles. L'enregistrement ne peut pas tre modifi car il ne peut pas tre charg. Numro d'enregistrement hors slection. Type de champ incorrect. Le champ n'est pas index. Le numro du champ est en-dehors de l'intervalle dfini par le poste client. Le numro de la table est en-dehors de l'intervalle dfini par le poste client. Mauvaise ressource TRIC. Cet enregistrement vient d'tre dtruit. Page d'index de transaction non chargeable. Cette commande ne peut tre excute car la base est en cours de sauvegarde.

4e Dimension - Langage 2007

-9977 -9978 -9979 -9980 -9981 -9982 -9983 -9984 -9985 -9986 -9987 -9988 -9989 -9990 -9991 -9992 -9993 -9994 -9995 -9996 -9997 -9998 -9999 -10500 -10501 -10502 -10503 -10504 -10600

Cette slection nexiste pas. Mot de passe incorrect. Impossible d'afficher les informations utilisateur. Cration de table impossible car la structure est verrouille. Table de dfinition de nom/numro de champ envoye par le poste client incorrecte. Enregistrement non charg car hors slection pour le poste client. Attention ! Vous avez install deux fois le mme package de routines externes. Dtection d'une cl dj existante lors d'une transaction. Dtection d'une boucle lors de la suppression En attente du dverrouillage d'un enregistrement par le process n D'autres enregistrements sont lis celui-ci. Impossible de charger ce formulaire. Structure de la base invalide (la base de donnes doit tre rpare). Dpassement du dlai en rception. Vous n'avez pas l'autorisation d'accs. Ce mot de passe existe dj. Barre de menus endommage (la base de donnes doit tre rpare). Communication srie interrompue par l'utilisateur. L'utilisateur a appuy sur les touches Ctrl+Alt+Maj (Windows) ou Commande+Option+Maj (MacOS). Limite de la version de dmonstration. La pile est pleine (trop d'appels rcursifs ou en cascade). Le nombre maximum d'enregistrements est atteint. La cl d'index existe dj. Disque satur. Impossible de sauvegarder l'enregistrement. Adresse de donne non valide. Structure d'index non valide. Structure d'enregistrement non valide Numro d'enregistrement non valide Numro de page d'index non valide Impossible de lire ce BLOB. Il est peut-tre endommag.

Notes (1) Bien que certaines de ces erreurs signalent des problmes srieux par exemple (10502), Structure d'enregistrement non valide la plupart sont relativement courantes et peuvent peuvent tre traites par une mthode projet APPELER SUR ERREUR. Par exemple, vous intercepterez frquemment l'erreur 9998, La cl d'index existe dj si votre application laisse la possibilit de crer des valeurs identiques pour une table qui contient un champ index ayant la proprit Unique. (2) Certaines de ces erreurs ne se produisent jamais au niveau du langage de 4D. Elles ne surviennent et ne peuvent tre traites qu' un bas niveau par des routines du moteur de la base ou pendant l'utilisation, par exemple, de 4D Open.

2008 4e Dimension - Langage

(3) L'erreur -10503, Numro d'enregistrement non valide ne signifie pas toujours que la base doit tre rpare. Cette erreur peut se produire si vous tentez d'utiliser le numro (avec par exemple la commande ALLER A ENREGISTREMENT) d'un enregistrement venant d'tre cr pendant une transaction. La raison en est que les enregistrements crs lors de transactions reoivent des numros temporaires jusqu' ce que la transaction soit valide. Si l'erreur survient dans ce contexte, votre base est valide, mais pas votre algorithme. (4) L'erreur -9999 Disque satur. Impossible de sauvegarder l'enregistrement se produit lorsque tous les segments de votre base sont pleins ou placs sur des volumes pleins. Cette erreur peut galement tre gnre si le fichier de donnes est verrouill ou stock sur un volume verrouill. Rfrence APPELER SUR ERREUR.

4e Dimension - Langage 2009

Erreurs rseau

Codes d'erreurs version 6.8 (Modifie)

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le tableau suivant liste les erreurs qui peuvent se produire dans le cadre des connexions rseau. Code -10001 -10002 -10003 -10020 -10021 -10030 -10031 -10033 -10050 -10051 Description Interruption de la connexion la base en cours Interruption de la connexion pour ce process Paramtres de connexion incorrects Aucun serveur slectionn par OP Select 4D server Aucun serveur trouv par OP Find 4D server Dsynchronisation pendant l'criture Dsynchronisation pendant la lecture Taille des donnes incorrecte pendant la lecture Option inconnue dans Get/SetOption Valeur incorrecte dans Get/SetOption

2010 4e Dimension - Langage

Erreurs du gestionnaire de fichiers du systme

Codes d'erreurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le tableau suivant liste les codes d'erreurs retourns par le gestionnaire de fichiers du systme d'exploitation. Ces erreurs peuvent se produire en particulier lorsque vous utilisez les commandes du thme Documents systme. Pour plus d'informations, reportez-vous la section Prsentation des documents systme. Code -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -51 -52 -53 -54 -57 -58 -60 -61 -64 -84 -120 Description Le rpertoire du disque est plein. Vous ne pouvez pas crer de fichier sur le disque. Le disque est plein. Il n'y a plus de place disponible sur le disque. Le volume nexiste pas. Erreur dEntre/Sortie. Il y a probablement un secteur dfectueux sur le disque. Nom de fichier ou de volume incorrect. Il est trop long et/ou comporte un caractre invalide. Tentative de lecture ou d'criture dans un fichier non ouvert. Tentative de lecture aprs la fin de fichier. Tentative de lecture ou dcriture avant le dbut du fichier. Mmoire insuffisante pour ouvrir un nouveau fichier. Trop de fichiers ouverts. Fichier non trouv. Disque physiquement verrouill. Fichier verrouill. Volume verrouill par logiciel. Tentative d'accs un fichier supprim. Tentative d'utilisation du nom d'un fichier dj supprim pour renommer un fichier. Fichier dj ouvert en Lecture/Ecriture. Tentative d'accs un fichier avec un numro de rfrence de fichier invalide Erreur interne du gestionnaire de fichiers (le marqueur de fichiers est perdu). Le volume a t ject. Tentative d'criture dans un fichier verrouill Tentative d'criture sur un disque non-Macintosh Erreur de fichier systme Mauvais secteur de rpertoire principal. Votre disque est endommag. L'accs en lecture/criture ne permet pas d'crire. Problme physique avec le disque (installation ou formatage incorrect,...) Problme physique avec le disque (installation ou formatage incorrect,...) Tentative d'accs un fichier avec un chemin d'accs spcifiant un rpertoire inexistant

4e Dimension - Langage 2011

-121 -124

Un chemin d'accs ne peut tre cr Tentative d'accs un volume partag dconnect

Rfrence APPELER SUR ERREUR.

2012 4e Dimension - Langage

Erreurs du gestionnaire de mmoire du systme

Codes d'erreurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le tableau ci-dessous liste les principaux codes d'erreurs retourns par le gestionnaire de mmoire du systme d'exploitation. Code -108 -109 -111 -117 Description Mmoire disponible insuffisante. Allouez davantage de mmoire votre application 4D. Problme interne de mmoire. La mmoire est probablement endommage. Quittez l'application ds que possible. Redmarrez la machine et rouvrez la base. Problme interne de mmoire. La mmoire est probablement endommage. Quittez l'application ds que possible. Redmarrez la machine et rouvrez la base. (*) Problme interne de mmoire. La mmoire est probablement endommage. Quittez l'application ds que possible. Redmarrez la machine et rouvrez la base.

Conseil : Lorsque vous travaillez avec des gros tableaux, des BLOBs, des images ou des ensembles (c'est--dire des objets pouvant manipuler de grandes quantits de donnes), utilisez une mthode projet installe par APPELER SUR ERREUR pour tester l'erreur -108. (*) Une erreur -111 peut galement se produire lorsque vous tentez de lire une valeur dans un BLOB un offset hors intervalle. Dans ce cas, cette erreur est mineure et vous n'tes pas oblig de fermer la session de travail. Il vous suffit de corriger l'offset que vous avez pass la commande BLOB. Rfrence APPELER SUR ERREUR.

4e Dimension - Langage 2013

Erreurs du gestionnaire d'impression du systme

Codes d'erreurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le tableau ci-dessous liste les codes d'erreurs retourns par le gestionnaire d'impression du systme d'exploitation. Ces codes peuvent tre retourns durant l'impression. Code -1 -27 -128 -193 -4100 -4101 -8150 -8151 -8192 Description Problme lors de l'enregistrement d'un fichier imprimer Problme de communication avec l'imprimante Impression interrompue par l'utilisateur Fichier de ressources introuvable La connexion avec l'imprimante a t interrompue Imprimante teinte ou non connecte Aucune imprimante n'a t slectionne L'imprimante a t initialise avec une version du driver diffrente de la vtre Time out de l'imprimante

Rfrence APPELER SUR ERREUR.

2014 4e Dimension - Langage

Erreurs du gestionnaire de ressources du systme

Codes d'erreurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le tableau ci-dessous liste les codes d'erreurs retourns par le gestionnaire de ressources du systme d'exploitation. Code -1 -192 -193 -194 -196 Description Impossible d'ouvrir ce fichier de ressources Ressource introuvable La ressource est endommage (le fichier doit tre rpar) La ressource ne peut tre ajoute La ressource ne peut tre supprime

Rfrence APPELER SUR ERREUR.

4e Dimension - Langage 2015

Erreurs SANE NaN

Codes d'erreurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le tableau ci-dessous liste les codes NaN retourns par le systme d'exploitation. Le sigle NaN signifie Not a Number. C'est une reprsentation du Standard Apple Numeric Environment (SANE) qui est appele lorsqu'une opration produit un rsultat se trouvant dans le domaine de SANE. Code 1 2 4 8 9 17 20 21 33 34 36 37 38 255 Description Racine carre invalide Addition invalide Division invalide Multiplication invalide Reste invalide Conversion d'une chane ASCII invalide Conversion d'un nombre de type Comp en virgule flottante Cration d'un NaN avec un code zro Argument invalide pass une fonction trig Argument invalide pass une fonction trig inverse Argument invalide pass une fonction log Argument invalide pass une fonction xi ou xy Argument invalide pass une fonction financire Stockage non initialis

2016 4e Dimension - Langage

Erreurs du gestionnaire de son du systme

Codes d'erreurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le tableau ci-dessous liste les codes retourns par le gestionnaire de son du systme d'exploitation. Code -203 -204 -205 -206 -207 -209 Description Trop de commandes de sons La ressource son ne peut tre charge Le canal de son est endommag Format de ressource son incorrect Mmoire insuffisante pour jouer le son Le canal de son est indisponible

Rfrence APPELER SUR ERREUR.

4e Dimension - Langage 2017

Erreurs du gestionnaire de port srie du systme

Codes d'erreurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le tableau ci-dessous fournit le code d'erreur retourn par le gestionnaire de port srie du systme d'exploitation. Code -28 Description Il n'y a pas de port srie ouvert

Rfrence APPELER SUR ERREUR.

2018 4e Dimension - Langage

Erreurs MacOS

Codes d'erreurs version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le tableau ci-dessous liste certaines erreurs courantes retournes par MacOS. Lorsqu'une de ces erreurs se produit, il n'est gnralement pas possible de poursuivre la session sans redmarrer. Code 4 15 Description Division par zro Erreur du chargeur de segments : 4e Dimension n'a pas pu charger un de ses propres segments de code. Vous devez allouer davantage de mmoire 4e Dimension. 17 24 Un lment systme est manquant. Vrifiez que votre dossier systme a t correctement install. 25 Mmoire sature. Vous devez allouer davantage de mmoire 4e Dimension. 28 La pile a t place dans la heap de l'application. Vous devez allouer davantage de mmoire 4e Dimension.

4e Dimension - Langage 2019

2020 4e Dimension - Langage

69 ________________________ Codes ASCII

4e Dimension - Langage 2021

2022 4e Dimension - Langage

Codes ASCII

Codes ASCII version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Tables des codes ASCII La table standard des codes ASCII (de 0 127) est identique sur les plates-formes Windows et MacOS. Les codes ASCII de 0 127 sont lists dans les sections Codes ASCII 0..63 et Codes ASCII 64..127. La table ASCII tendue (codes ASCII de 128 255) est diffrente entre Windows et MacOS. Afin d'assurer l'indpendance de plate-forme de vos applications, 4e Dimension, lorsque le programme fonctionne sous Windows, convertit automatiquement les codes ASCII (de la table Windows vers la table MacOS) lorsque des caractres sont entrs dans l'environnement 4D (saisie de donnes, copier/coller, import d'enregistrements, etc.) ou encore (de la table MacOS vers la table Windows) lorsque des caractres sont extraits de l'environnement 4D (couper ou copier, export, etc.). Les codes ASCII de 127 255 sont lists dans les sections Codes ASCII 128..191 et Codes ASCII 192..255. 4e Dimension et les codes ASCII Sur les deux plates-formes MacOS et Windows, le moteur interne de base de donnes et le langage de 4D travaillent avec la table ASCII tendue du Macintosh. Lorsque vous saisissez des donnes (ajout d'enregistrements, dition de mthodes, etc.), 4e Dimension utilise le schma interne de conversion d'Altura pour convertir les codes provenant du clavier (qui sont donc exprims l'aide de la table ASCII tendue Windows) en codes Macintosh. Par exemple, pour saisir le caractre , vous tapez Alt+0223, mais c'est le code ASCII 167 que 4e Dimension va stocker dans l'enregistrement. Ce mode de fonctionnement est totalement transparent pour l'utilisateur car lorsque vous effectuez par exemple une recherche, vous saisissez la valeur relle trouver dans l'diteur de recherches. La valeur que vous tapez (Alt+0223) est galement convertie en code ASCII 167, et la recherche aboutira. Le mme principe est appliqu lorsque vous tapez Alt+0223 dans l'diteur de mthodes. Notez cependant que si vous recherchez un caractre sur la base de son code ASCII, vous devrez utiliser le code ASCII Macintosh du caractre.

4e Dimension - Langage 2023

Par exemple : CHERCHER (...; [MaTable]MonChamp="") ` s'obtient par Alt+0223 est identique : CHERCHER (...;[MaTable]MonChamp=Caractere(167)) ` a pour code ASCII MacOS 167 Rfrence APPELER SUR EVENEMENT, Code ascii, ISO vers Mac, Mac vers ISO, Mac vers Windows, Windows vers Mac.

2024 4e Dimension - Langage

Codes ASCII 0..63

Codes ASCII version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La table standard des codes ASCII (de 0 127) est commune aux plates-formes Windows et Macintosh.

4e Dimension - Langage 2025

Rfrence APPELER SUR EVENEMENT, Caractere, ISO vers Mac, Mac vers ISO, Mac vers Windows, Windows vers Mac.

2026 4e Dimension - Langage

Codes ASCII 64..127

Codes ASCII version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La table standard des codes ASCII (de 0 127) est commune aux plates-formes Windows et Macintosh.

4e Dimension - Langage 2027

Rfrence APPELER SUR EVENEMENT, Code ascii, ISO vers Mac, Mac vers ISO, Mac vers Windows, Windows vers Mac.

2028 4e Dimension - Langage

Codes ASCII 128..191

Codes ASCII version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le tableau suivant prsente les caractres affichs par 4e Dimension pour les codes ASCII de la table tendue. Cette table s'applique aux versions Macintosh et Windows de 4D. De plus, ce tableau indique les combinaisons de touches appliquer pour afficher les caractres sous Windows (Alt+code ASCII Windows).

4e Dimension - Langage 2029

2030 4e Dimension - Langage

4e Dimension - Langage 2031

Note : Les cases grises signalent des caractres non disponibles sous Windows, ou diffrents des caractres Macintosh. Rfrence APPELER SUR EVENEMENT, Caractere, ISO vers Mac, Mac vers ISO, Mac vers Windows, Windows vers Mac.

2032 4e Dimension - Langage

Codes ASCII 192..255

Codes ASCII version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Le tableau suivant prsente les caractres affichs par 4e Dimension pour les codes ASCII de la table tendue. Cette table s'applique aux versions Macintosh et Windows de 4D. De plus, ce tableau indique les combinaisons de touches appliquer pour afficher les caractres sous Windows (Alt+code ASCII Windows).

4e Dimension - Langage 2033

2034 4e Dimension - Langage

4e Dimension - Langage 2035

Note : Les cases grises signalent des caractres non disponibles sous Windows, ou diffrents des caractres Macintosh. Rfrence APPELER SUR EVENEMENT, Code ascii, ISO vers Mac, Mac vers ISO, Mac vers Windows, Windows vers Mac.

2036 4e Dimension - Langage

Codes des touches de fonction

Codes ASCII version 6.0

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4e Dimension retourne le code clavier des touches de fonction dans la variable systme Keycode, qui est utilise dans les mthodes projet installes par la commande APPELER SUR EVENEMENT pour intercepter les vnements. Les valeurs des touches de fonctions ne sont pas bases sur des codes ASCII. Elles sont listes ci-dessous : Touche F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 Code -122 -120 -99 -118 -96 -97 -98 -100 -101 -109 -103 -111 -105 -107 -113

4e Dimension - Langage 2037

Par ailleurs, le tableau suivant liste les valeurs retournes dans la variable systme Keycode lorsque vous appuyez sur les touches standard comme Retour chariot ou Entre. Touche Entre Retour chariot Retour arrire Tabulation Echappement Effacement Aide Dbut Fin Haut de page Bas de page Flche gauche Flche droite Flche haut Flche bas Code 3 13 8 9 27 127 5 1 4 11 12 28 29 30 31

Rfrence APPELER SUR EVENEMENT.

2038 4e Dimension - Langage

70 ________________________ Syntaxe des commandes

4e Dimension - Langage 2039

2040 4e Dimension - Langage

Syntaxe des commandes (liste alphabtique) Syntaxe des commandes version 2004 (Modifie)
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

La premire colonne indique le numro de chaque commande, utilis notamment par la commande Nom commande. A 99 346 192 149 119 431 433 105 435 910 393 265 376 403 911 56 411 361 202 41 206 200 201 242 247 245 35 263 25 241 273 338 328 311 329 316 155 Abs (nombre) Numrique Activation Boolen ACTIVER BOUTON ({*; }objet) ACTIVER LIGNE MENU (menu; ligneMenu{; process}) ADJOINDRE ELEMENT ({table; }ensemble) AFFICHER BARRE DE MENUS AFFICHER BARRE OUTILS AFFICHER ENREGISTREMENT {(table)} AFFICHER FENETRE {(fentre)} AFFICHER NOTIFICATION (titre; contenu{; dlai}) Ajouter a date (date; annes; mois; jours) Date Ajouter a document (document{; type}) DocRef AJOUTER A LISTE (liste; texteElment; numElment{; sous_Liste{; dploye}}) AJOUTER A PRESSE PAPIERS (typeDonnes; donnes) AJOUTER A TABLEAU (tableau; valeur) AJOUTER ENREGISTREMENT ({table}{; }{*}) AJOUTER LIGNE MENU (menu; libellLigne{; process}) AJOUTER SEGMENT DE DONNEES AJOUTER SOUS ENREGISTREMENT (sousTable; formulaire{; *}) ALERTE (message{; libellBoutonOK}) ALLER A CHAMP ({*; }objet) ALLER A DERNIER ENREGISTREMENT {(table)} ALLER A DERNIER SOUS ENREGISTREMENT (sousTable) ALLER A ENREGISTREMENT ({table; }enregistrement) ALLER A PAGE (numroPage) ALLER DANS SELECTION ({table; }position) Ancien (champ) Expression ANCIEN LIEN RETOUR (champ) Annee de (date) Numrique ANNULER TRANSACTION Appartient a ensemble (ensemble) Boolen Appartient au groupe (nomUtilisateur; groupe) Boolen Appel exterieur Boolen APPELER 4D APPELER PROCESS (process) APPELER SUR A PROPOS (libellLigne; mthode) APPELER SUR ERREUR (mthodErreur) 4e Dimension - Langage 2041

190 778 492 70 73 882 31 20 618 94 366 786 29 198 199 B 151 526 549 551 682 557 553 555 850 533 C 432 434 436 324 90 10 180 253 67 444 531 904 385

APPELER SUR EVENEMENT (mthodeEvn{; nomProcess}) APPELER WEB SERVICE (urlAccs; soapAction; nomMthode; espaceNommage{; typeCompos}) Application compilee Boolen APPLIQUER A SELECTION ({table; }formule) APPLIQUER A SOUS SELECTION (sousTable; formule) APPLIQUER TRANSFORMATION XSLT (sourceXML; feuilleXSL; rsultat) Apres Boolen Arctan (nombre) Numrique ARRETER SERVEUR WEB Arrondi (nombre; nbDcimales) Numrique ASSOCIER TYPES FICHIER (macOS; windows; contexte) AUTHENTIFIER WEB SERVICE (nom; motDePasse) Avant Boolen Avant selection {(table)} Boolen Avant sous enregistrement (sousTable) Boolen

BEEP BLOB BLOB BLOB BLOB BLOB BLOB BLOB BLOB BLOB

VERS DOCUMENT (document; blob{; *}) vers entier (blob; ordreOctet{; offset}) Numrique vers entier long (blob; ordreOctet{; offset}) Numrique VERS IMAGE (blobImage; image) vers liste (blob{; offset}) RefList vers reel (blob; formatRel{; offset}) Numrique vers texte (blob; formatTexte{; offset{; longueurTexte}}) Chane VERS UTILISATEURS (utilisateurs) VERS VARIABLE (blob; variable{; offset})

CACHER BARRE DE MENUS CACHER BARRE OUTILS CACHER FENETRE {(fentre)} CACHER PROCESS (process) Caractere (codeASCII) Chane Chaine (expression{; format}) Alpha Chaine heure (secondes) Alpha Champ (tableNum | champPtr{; champNum}) Num | Pointeur CHANGER BARRE (barre{; process{; *}}) CHANGER COORDONNEES FENETRE (gauche; haut; droite; bas{; fentre}) CHANGER CREATEUR DOCUMENT (document; crateur) CHANGER DICTIONNAIRE (dictionnaire) CHANGER ELEMENT (liste; rfElment | *; textElment; nouvelRf{; sous_Liste{; dploye}})

2042 4e Dimension - Langage

164 637 186 469 482 281 478 386 387 423 166 425 165 480 348 213 530 289 44 52 185 357 383 42 277 341 230 449 292 48 207 644 372 108 64 271 237 235 236 238 603 713 712 91

CHANGER JEU DE CARACTERES ({*; }objet; police) CHANGER LICENCES CHANGER MOT DE PASSE (motDePasse) CHANGER POINTEUR SOURIS {(curseur)} CHANGER POSITION DANS DOCUMENT (docRef; offset{; ancre}) CHANGER PRIVILEGES CHANGER PROPRIETES DOCUMENT (document; verrouill; invisible; cr le; cr ; modifi le; modifi ) CHANGER PROPRIETES ELEMENT (liste; rfElment | *; saisissable; styles; icne{; couleur}) CHANGER PROPRIETES LISTE (liste; apparence{; icne{; hauteurLigne{; doubleClic{; multiSlection{; modifiable}}}}}) CHANGER RACCOURCI CLAVIER (menu; cmdeMenu; touche{; process}) CHANGER STYLE ({*; }objet; style) CHANGER STYLE LIGNE MENU (menu; ligneMenu; styleLigne{; process}) CHANGER TAILLE ({*; }objet; taille) CHANGER TAILLE DOCUMENT (document; taille) CHANGER TEXTE LIGNE MENU (menu; ligneMenu; texteLigne{; process}) CHANGER TITRE FENETRE (titre{; fentre}) CHANGER TYPE DOCUMENT (document; type) CHANGER UTILISATEUR COURANT ({utilisateur}{; }{motDePasse}) CHARGER ANCIEN (champ) CHARGER ENREGISTREMENT {(table)} CHARGER ENSEMBLE ({table; }ensemble; document) CHARGER ET COMPRESSER IMAGE (document; type; qualit; image) Charger liste (nomListe) RfListe CHARGER SUR LIEN (tableN | champN{; discriminant}) CHERCHER ({table}{; critreRecherche{; *}}) CHERCHER DANS SELECTION ({table}{; critre{; *}}) Chercher dans tableau (tableau; valeur{; dbut}) Numrique Chercher fenetre (gauche; haut{; partieFentre}) RefFen CHERCHER PAR EXEMPLE ({table}{; }{*}) CHERCHER PAR FORMULE ({table}{; }{formule}) CHERCHER PAR FORMULE DANS SELECTION ({table}{; }{formule}) CHERCHER PAR TABLEAU (champIndex; tableau) Chercher process (nom{; *}) Numrique CHERCHER SOUS ENREGISTREMENTS (sousTable; formule) CHERCHER SUR CLE CHOIX COULEUR ({*; }objet; couleur{; couleurAlt}) CHOIX ENUMERATION ({*; }objet; num) CHOIX FILTRE SAISIE ({*; }objet; filtreSaisie) CHOIX FORMATAGE ({*; }objet; formatAffich) CHOIX SAISISSABLE ({*; }objet; zoneSaisie) CHOIX VISIBLE ({*; }objet; visible) Clic contextuel Boolen Clic droit Boolen Code ascii (caractre) Numrique

4e Dimension - Langage 2043

534 359 355 907 162 698 657 676 438 443 558 541 600 626 331 226 900 18 529 694 266 475 68 641 153 309 675 313 496 808 679 640 72 65 689 303 293 604 305 307 282 283 352 306 286 301

COMPRESSER BLOB (blob{; compression}) COMPRESSER FICHIER IMAGE (document; type; qualit) COMPRESSER IMAGE (image; type; qualit) Compter dans tableau (tableau; valeur) Entier long CONFIRMER (message{; libellBoutonOK{; libellBoutonAnn}}) Connexion Web securisee Boolen Contexte Web Boolen Convertisseur Euro (valeur; deMonnaie; versMonnaie) Numrique COORDONNEES ECRAN (gauche; haut; droite; bas{; cran}) COORDONNEES FENETRE (gauche; haut; droite; bas{; fentre}) COPIER BLOB (srcBLOB; dstBLOB; srcOffset; dstOffset; nombre) COPIER DOCUMENT (nomSource; nomDest{; *}) COPIER ENSEMBLE (srcEns; dstEns) Copier liste (liste) RfListe COPIER SELECTION ({table; }tempo) COPIER TABLEAU (source; destination) CORRECTION ORTHOGRAPHIQUE Cos (nombre) Numrique Createur document (document) Alpha CREER ALIAS (cheminCible; cheminAlias) Creer document (document{; type}) DocRef CREER DOSSIER (cheminAccs) CREER ENREGISTREMENT {(table)} CREER ENSEMBLE SUR TABLEAU (table; tabEnrg{; nomEns}) Creer fenetre (gauche; haut; droite; bas{; type{; titre{; caseFermeture}}}){ RefFen } Creer fenetre externe (gauche; haut; droit; bas; type; titre; zonePlugin) Numrique Creer fenetre formulaire ({table; }nomForm{; type{; posH{; posV{; *}}}}) RefFen CREER FICHIER DONNEES (cheminAccs) Creer fichier ressources (resNomFichier{; typeFichier}) DocRef CREER FORMULAIRE UTILISATEUR (table; formulaire; formUtilisateur) CREER IMAGETTE (source; dest{; largeur{; hauteur{; mode{; profondeur}}}}) CREER SELECTION SUR TABLEAU (table; tabEnrg{; tempo}) CREER SOUS ENREGISTREMENT (sousTable) CREER SUR LIEN (champ) CRYPTER BLOB (aCrypter; clPrivEmetteur{; clPubRcepteur}) CUMULER SUR (objet{; objet2; ...; objetN}) C_ALPHA ({mthode; }taille; variable{; variable2; ...; variableN}) C_BLOB ({mthode; }variable{; variable2; ...; variableN}) C_BOOLEEN ({mthode; }variable{; variable2; ...; variableN}) C_DATE ({mthode; }variable{; variable2; ...; variableN}) C_ENTIER ({mthode; }variable{; variable2; ...; variableN}) C_ENTIER LONG ({mthode; }variable{; variable2; ...; variableN}) C_GRAPHE ({mthode; }variable{; variable2; ...; variableN}) C_HEURE ({mthode; }variable{; variable2; ...; variableN}) C_IMAGE ({mthode; }variable{; variable2; ...; variableN}) C_POINTEUR ({mthode; }variable{; variable2; ...; variableN})

2044 4e Dimension - Langage

285 284 D 102 33 50 61 239 9 782 896 535 690 906 163 177 540 452 664 334 251 347 649 40 122 525 719 720 864 727 726 865 861 866 867 859 868 862 863 722

C_REEL ({mthode; }variable{; variable2; ...; variableN}) C_TEXTE ({mthode; }variable{; variable2; ...; variableN})

Date (chaneDate) Date Date du jour {(*)} Date DEBUT SELECTION {(table)} DEBUT SOUS ENREGISTREMENT (sousTable) DEBUT TRANSACTION Dec (nombre) Numrique DECLARATION SOAP (variable; type; entre_sortie{; alias}) DECODER (blob) DECOMPRESSER BLOB (blob) DECRYPTER BLOB (aDcrypter; clPubEmetteur{; clPrivRcepteur}) DEFILER LIGNES ({*; }objet{; position{; *}}) Demander (message{; rponseDfaut{; titreBoutonOK{; titreBoutonAnn}}}) Alpha DEPILER ENREGISTREMENT {(table)} DEPLACER DOCUMENT (cheminSource; cheminDest) DEPLACER FENETRE DEPLACER OBJET ({*; }objet; dpH; dpV{; redimH{; redimV{; *}}}) DEPLACER SELECTION ({table; }tempo) DERNIERE PAGE Desactivation Boolen DESINSCRIRE CLIENT DIALOGUE ({table; }formulaire) DIFFERENCE (ensemble1; ensemble2; rsultat) DOCUMENT VERS BLOB (document; blob{; *}) DOM Analyser source XML (document{; validation{; dtd}}) Chane DOM Analyser variable XML (variable{; validation{; dtd}}) Chane DOM Chercher element XML (refElment; xChemin) refElment DOM Compter attributs XML (refElment) Entier long DOM Compter elements XML (refElment; nomElment) Entier long DOM Creer element XML (refElment; xChemin{; nomAttribut{; valeurAttribut}}{; nomAttribut2; valeurAttribut2; ...; nomAttributN; valeurAttributN}) Chane DOM Creer ref XML (racine{; nameSpace{; nSNom{; nSValeur}}}{; nSNom2; nSValeur2; ...; nSNomN; nSValeurN}) Chane DOM ECRIRE ATTRIBUT XML (refElment; nomAttribut; valeurAttribut{; nomAttribut2; valeurAttribut2; ...; nomAttributN; valeurAttributN}) DOM ECRIRE NOM ELEMENT XML (refElment; nomElment) DOM ECRIRE OPTIONS XML (refElment; encodage{; autonome{; indentation}}) DOM ECRIRE VALEUR ELEMENT XML (refElment; valeurElment) DOM EXPORTER VERS FICHIER (refElment; cheminFichier) DOM EXPORTER VERS VARIABLE (refElment; vVarXml) DOM FERMER XML (refElment)

4e Dimension - Langage 2045

729 728 725 724 721 730 723 731 869 485 487 486 225 E 26 441 845 297 680 566 521 514 614 516 612 509 507 503 505 523 370 75 167 84 85 870 806 117 160

DOM LIRE ATTRIBUT XML PAR INDEX (refElment; indexAttribut; nomAttribut; valeurAttribut) DOM LIRE ATTRIBUT XML PAR NOM (refElment; nomAttribut; valeurAttribut) DOM Lire element XML (refElment; nomElment; index; valeurElment) Chane DOM Lire element XML suivant (refElment{; nomElmentEnf{; valeurElmentEnf}}) Chane DOM Lire informations XML (refElment; infoXML) Chane DOM LIRE NOM ELEMENT XML (refElment; nomElment) DOM Lire premier element XML (refElment{; nomElmentEnf{; valeurElmentEnf}}) Chane DOM LIRE VALEUR ELEMENT XML (refElment; valeurElment{; cDATA}) DOM SUPPRIMER ELEMENT XML (refElment) Dossier 4D Alpha Dossier systeme {(type)} Alpha Dossier temporaire Alpha DUPLIQUER ENREGISTREMENT {(table)}

Ecart type (sries) Numrique Ecran principal Entier long ECRIRE ACCES PLUGIN (plugIn; groupe) ECRIRE CACHE ECRIRE FICHIER IMAGE (nomFichier; image{; format}) ECRIRE IMAGE DANS BIBLIOTHEQUE (image; refImage; nomImage) ECRIRE IMAGE DANS PRESSE PAPIERS (image) ECRIRE NOM RESSOURCE (resType; resNum; resNom{; resFichier}) Ecrire proprietes groupe (rfGroupe; nom; propritaire{; membres}) Numrique ECRIRE PROPRIETES RESSOURCE (resType; resNum; resAttr{; resFichier}) Ecrire proprietes utilisateur (rfUtilisateur; nom; dmarrage; motDePasse; nbUtilisation; dernireUtilisation{; adhsions{; groupePropritaire}}) Numrique ECRIRE RESSOURCE (resType; resNum; resDonnes{; resFichier}) ECRIRE RESSOURCE CHAINE (resNum; resDonnes{; resFichier}) ECRIRE RESSOURCE IMAGE (resNum; resDonnes{; resFichier}) ECRIRE RESSOURCE TEXTE (resNum; resDonnes{; resFichier}) ECRIRE TEXTE DANS PRESSE PAPIERS (texte) ECRIRE VARIABLE PROCESS (process; varDestination; exprSource{; varDestination2; exprSource2; ...; varDestinationN; exprSourceN}) ECRIRE VARIABLES (doc; variable{; variable2; ...; variableN}) ECRITURE ASCII ({table; }document) ECRITURE DIF ({table; }document) ECRITURE SYLK ({table; }document) EDITER ELEMENT ({*; }objet{; lment}) EDITER FORMULE (table; formule) EFFACER ENSEMBLE (ensemble) EFFACER FENETRE {(fentre)}

2046 4e Dimension - Langage

402 333 144 89 633 379 176 112 191 113 895 323 561 669 314 110 189 51 147 195 83 76 667 358 140 8 550 548 288 654 815 78 781 619 103 659 677 80 783 294 362 388 369 63 651

EFFACER PRESSE PAPIERS EFFACER SELECTION (tempo) EFFACER SEMAPHORE (smaphore) EFFACER VARIABLE (variable) Element parent (liste; rfElment | *) Entier long Elements selectionnes (liste{; tabElments{; *}}) Entier long EMPILER ENREGISTREMENT {(table)} En entete Boolen En pied Boolen En rupture Boolen ENCODER (blob) ENDORMIR PROCESS (process; dure) ENLEVER ELEMENT ({table; }ensemble) Enregistrement charge {(table)} Boolen Enregistrement modifie {(table)} Boolen ENREGISTREMENT PRECEDENT {(table)} ENREGISTREMENT SELECTION {(table)} ENREGISTREMENT SUIVANT {(table)} Enregistrement verrouille {(table)} Boolen Enregistrements dans ensemble (ensemble) Numrique Enregistrements dans table {(table)} Numrique Enregistrements trouves {(table)} Numrique ENREGISTRER EVENEMENT (message{; importance}) ENREGISTRER IMAGE (document; image) ENSEMBLE VIDE ({table; }ensemble) Ent (nombre) Numrique ENTIER LONG VERS BLOB (entierLong; blob; ordreOctets{; offset | *}) ENTIER VERS BLOB (entier; blob; ordreOctet{; offset | *}) ENUMERATION VERS TABLEAU (numration; tableau{; rfElments}) ENVOYER BLOB HTML (blob; type{; sansContexte}) ENVOYER DONNEES HTTP (donnes{; *}) ENVOYER ENREGISTREMENT {(table)} ENVOYER ERREUR SOAP (typeErreur; description) ENVOYER FICHIER HTML (fichierHTML) ENVOYER PAQUET ({docRef; }paquet) ENVOYER REDIRECTION HTTP (url{; *}) ENVOYER TEXTE HTML (texteHTML{; sansContexte}) ENVOYER VARIABLE (variable) Est une requete SOAP Boolen Est une variable (unPointeur) Boolen Etat lecture seulement {(table)} Boolen Evenement formulaire Numrique Evenement moteur Entier long EXECUTER (instruction) EXECUTER SUR CLIENT (nomClient; nomMthode{; param}{; param2; ...; paramN})

4e Dimension - Langage 2047

373 21 666 F 215 827 447 448 267 154 498 491 490 716 489 321 389 36 37 706 842 628 396 660 813 835 345 787 344 367 833 919 310 395 620 710 805 645 623 733 901 639

Executer sur serveur (procdure; pile{; nom{; param{; param2; ...; paramN}{; *}}}) Numrique Exp (nombre) Numrique EXPORTER DONNEES (nomFichier{; projet{; *}})

Faux Boolen Fenetre formulaire courant RefFen Fenetre premier plan {(*)} RefFen Fenetre suivante (fentre) RefFen FERMER DOCUMENT (rfDocument) FERMER FENETRE {(fentre)} FERMER FICHIER RESSOURCES (resFichier) Fichier application Alpha Fichier donnees {(segment)} Alpha Fichier donnees verrouille Boolen Fichier structure Alpha FILTRER EVENEMENT FILTRER FRAPPE CLAVIER (carFiltr) Fin de selection {(table)} Boolen Fin sous enregistrement (sousTable) Boolen FIXER ALIGNEMENT ({*; }objet; alignement) FIXER COULEUR GRILLE LISTBOX ({*; }objet; couleur; horizontal; vertical) FIXER COULEURS RVB ({*; }objet; couleurAvantPlan; couleurArrirePlan{; couleurArrirePlanAlt}) FIXER DESTINATION RECHERCHE (destinationType{; destinationObjet}) FIXER ENTETE HTTP (entte|tabChamps{; tabValeurs}) FIXER EXECUTABLE CGI (url1{; url2}) FIXER HAUTEUR LIGNES LISTBOX (*; objet; hauteur) FIXER HISTORIQUE (historique | *) FIXER IMPRIMANTE COURANTE (nomImpr) FIXER INDEX (champ; index{; mode}{; *}) FIXER INTERFACE (interface) FIXER LARGEUR COLONNE LISTBOX ({*; }objet; largeur) FIXER LIEN CHAMP (tableN | champN; aller; retour) FIXER LIENS AUTOMATIQUES (aller{; retour}) FIXER LIMITE RECHERCHE (limite) FIXER LIMITES AFFICHAGE WEB (nombreEnr{; nombrePages{; imageRf}}) FIXER MARGE IMPRESSION (gauche; haut; droite; bas) FIXER METHODES AUTORISEES (tabMthodes) FIXER MINUTEUR (tickCount) FIXER NIVEAU COMPARAISON REEL (epsilon) FIXER OPTION IMPRESSION (option; valeur1{; valeur2}) FIXER OPTION WEB SERVICE (option; valeur) FIXER PAGE ACCUEIL (homePage)

2048 4e Dimension - Langage

642 777 883 537 634 892 893 606 891 709 622 268 602 601 812 55 54 390 G 871 688 466 691 467 465 488 169 148 H 100 440 188 179 178 I 692 671 665 364

PARAMETRE BASE ({table; }slecteur; valeur) PARAMETRE WEB SERVICE (nom; valeur{; typeSOAP}) PARAMETRE XSLT (nomParam; valeurParam) PROFONDEUR ECRAN (profondeur{; couleurs{; cran}}) RACINE HTML (chemAccsHTML) REDIMENSIONNEMENT FORMULAIRE HORIZONTAL (redimension{; largeurMini{; largeurMaxi}}) FIXER REDIMENSIONNEMENT FORMULAIRE VERTICAL (redimension{; hauteurMini{; hauteurMaxi}}) FIXER TAILLE BLOB (blob; taille{; remplisseur}) FIXER TAILLE FORMULAIRE ({objet; }horizontal; vertical{; *}) FIXER TAQUET IMPRESSION (numTaquet; position{; *}) FIXER TEMPORISATION WEB (timeout) FIXER TIMEOUT (secondes) FIXER TITRES CHAMPS (table | sous-table; titresChamps; numChamps) FIXER TITRES TABLES (titresTables; numTables) FIXER VARIABLE ENVIRONNEMENT (nomVar; valeurVar) FORMULAIRE ENTREE ({table; }formulaire{; formUtilisateur{; *}}) FORMULAIRE SORTIE ({table; }formulaire{; formUtilisateur}) Frappe clavier Alpha

FIXER FIXER FIXER FIXER FIXER FIXER

GENERER APPLICATION {(nomProjet)} GENERER CLES CRYPTAGE (clPrive; clPublique{; longueur}) GENERER CLIC (sourisX; sourisY{; process{; *}}) GENERER DEMANDE CERTIFICAT (clPrive; demCertif; tabCodes; tabLibells) GENERER EVENEMENT (quoi; message; quand; sourisX; sourisY; modifiers{; process}) GENERER FRAPPE CLAVIER (code{; modifiers{; process}}) Gestalt (slecteur; valeur) Numrique GRAPHE (graphZone; graphNum; xCatgories; zValeurs{; zValeurs2; ...; zValeursN}) GRAPHE SUR SELECTION ({table; }numGraphe; axeX; axeZ{; axeZ2; ...; axeZN})

Hasard Numrique Hauteur barre de menus Entier long Hauteur ecran {(*)} Numrique Heure (chaineHeure) Heure Heure courante {(*)} Heure

IMAGE VERS BLOB (image; blobImage; format) IMAGE VERS GIF (imagePICT; blobGIF) IMPORTER DONNEES (nomFichier{; projet{; *}}) IMPRESSION ECRAN (cran)

4e Dimension - Langage 2049

71 39 5 60 193 150 82 378 336 648 231 829 559 625 913 412 227 121 93 520 J 349 290 23 L 181 811 617 187 168 86 146 145 87 212 714 262 846 707

IMPRIMER ENREGISTREMENT ({table}{; }{* | >}) IMPRIMER ETIQUETTES ({table}{; tiqFichier{; * | >}}) Imprimer ligne ({table; }formulaire{; zone1{; zone2}}){ Numrique } IMPRIMER SELECTION ({table}{; }{* | >}) INACTIVER BOUTON ({*; }objet) INACTIVER LIGNE MENU (menu; ligneMenu{; process}) Indefinie (variable) Boolen INFORMATION ELEMENT (liste; positionElm | *; numElm; textElm{; sous_Liste{; dploy}}) INFORMATIONS PROCESS (process; procNom; procStatut; procTemps{; procVisible{; uniqueID{; origine}}}) INSCRIRE CLIENT (nomClient{; priode{; *}}) Inserer chaine (source; insertion; position) Alpha INSERER COLONNE LISTBOX ({*; }objet; positionCol; nomCol; variableCol; nomEntte; variableEntte) INSERER DANS BLOB (blob; offset; nombre{; dfaut}) INSERER ELEMENT (liste; avantElment | *; texteElment; numElment{; sous_Liste{; dploy}}) INSERER LIGNE LISTBOX ({*; }objet; positionLigne) INSERER LIGNE MENU (menu; aprsLigne; libellLigne{; process}) INSERER LIGNES (tableau; position{; combien}) INTERSECTION (ensemble1; ensemble2; rsultat) INVERSER FOND ({*; }textVar | textChp) ISO vers Mac (texte) Chane

JOINTURE (tableN; table1) JOUER SON (nomObjet{; canal}) Jour de (date) Numrique

LAISSER MESSAGES LANCER PROCESS EXTERNE (nomFichier{; fluxEntre{; fluxSortie{; fluxErreur}}}) LANCER SERVEUR WEB Largeur ecran {(*)} Numrique LECTURE ASCII ({table; }document) LECTURE DIF ({table; }document) LECTURE ECRITURE {(table | *)} LECTURE SEULEMENT {(table | *)} LECTURE SYLK ({table; }document) LIBERER ENREGISTREMENT {(table)} Licence disponible {(licence)} Boolen LIEN RETOUR (table1 | champ1) Lire acces plugin (plugIn) Alpha Lire alignement ({*; }objet) Numrique

2050 4e Dimension - Langage

510 650 814 909 902 697 732 884 678 894 702 836 700 699 565 522 788 917 889 888 696 784 780 470 834 920 899 610 609 711 908 513 831 915 898 734 643 401 536 258 631 674 613

Lire chaine dans liste (resNum; strNum{; resFichier}) Alpha LIRE CLIENTS INSCRITS (listeClients; nbMthodes) LIRE CORPS HTTP (corps) LIRE CORRESPONDANCE PORT SERIE (tabNums; tabNoms) LIRE ENREGISTREMENTS MARQUES ({table; }nomEnsemble) LIRE ENTETE HTTP (entte|tabChamps{; tabValeurs}) LIRE ERREUR XML (refElment; texteErreur{; ligne{; colonne}}) LIRE ERREUR XSLT (texteErreur{; ligne{; colonne}}) LIRE FICHIER IMAGE (nomFichier; image) Lire formatage ({*; }objet) Chane Lire hauteur imprimee Numrique Lire hauteur lignes listbox ({*; }objet) Entier LIRE ICONE DOCUMENT (cheminDoc; icne{; taille}) Lire ID ressource composant (nomComp; resType; resNumOriginal) Numrique LIRE IMAGE DANS BIBLIOTHEQUE (refImage | nomImage; image) LIRE IMAGE DANS PRESSE PAPIERS (image) Lire imprimante courante Chane Lire information listbox ({*; }objet; info) Entier long LIRE INFORMATION RESTITUTION (slecteur; info1; info2) LIRE INFORMATION SAUVEGARDE (slecteur; info1; info2) LIRE INFORMATIONS SERIALISATION (cl; utilisateur; socit; connects; maxUtilisateurs) Lire informations SOAP (numInfo) Chane Lire infos erreur Web Service (typeInfo) Chane Lire interface Numrique Lire largeur colonne listbox ({*; }objet) Entier LIRE LIEN CHAMP (champN; aller; retour{; *}) LIRE LIENS AUTOMATIQUES (aller; retour) LIRE LISTE GROUPE (nomsGroupe; numrosGroupe) LIRE LISTE UTILISATEURS (nomsUtil; rfUtil) LIRE MARGE IMPRESSION (gauche; haut; droite; bas) LIRE METHODES AUTORISEES (tabMthodes) Lire nom ressource (resType; resNum{; resFichier}) Alpha Lire nombre colonnes listbox ({*; }objet) Entier long Lire nombre lignes listbox ({*; }objet) Entier long LIRE OBJETS FORMULAIRE (tabObjets{; tabVariables{; tabPages{; *}}}) LIRE OPTION IMPRESSION (option; valeur1{; valeur2}) Lire parametre base ({table; }slecteur) Entier long LIRE PRESSE PAPIERS (typeDonnes; donnes) LIRE PROPRIETES BLOB (blob; compress{; tailleDcompresse{; tailleCourante}}) LIRE PROPRIETES CHAMP (chpPtr | tableNum{; champNum; champType{; champLong{; index{; unique{; invisible}}}}) LIRE PROPRIETES ELEMENT (liste; rfElment | *; saisissable{; styles{; icne{; couleur}}}) LIRE PROPRIETES FORMULAIRE ({table; }nomForm; largeur; hauteur{; nbPages{; largeurFixe{; hauteurFixe{; titre}}}}) LIRE PROPRIETES GROUPE (rfGroupe; nom; propritaire{; membres}) 4e Dimension - Langage 2051

686 632 515 685 687 611 663 508 506 517 502 504 779 832 708 524 655 804 803 826 371 74 683 703 511 474 473 460 471 621 442 809 564 789 500 527 681 499 556 22

LIRE PROPRIETES LIEN (ptrChp|numTable{; numChamp; tableDest; champDest{; discriminant{; allerAuto{; retourAuto}}}) LIRE PROPRIETES LISTE (liste; apparence{; icne{; hauteurLigne{; doubleClic{; multiSlection{; modifiable}}}}}) Lire proprietes ressource (resType; resNum{; resFichier}) Numrique LIRE PROPRIETES SAISIE CHAMP (ptrChp|numTable{; numChamp; nomEnum{; obligatoire{; nonSaisissable{; nonModifiable}}}) LIRE PROPRIETES TABLE (ptrTable|numTable; invisible{; trigSvgdeNouv{; trigSvgdeEnr{; trigSupprEnr{; trigChargEnr}}}}) LIRE PROPRIETES UTILISATEUR (rfUtilisateur; nom; dmarrage; motDePasse; nbUtilisations; dernireUtilisation{; adhsions{; groupePropritaire}}) LIRE RECT OBJET ({*; }objet; gauche; haut; droite; bas) LIRE RESSOURCE (resType; resNum; resDonnes{; resFichier}) Lire ressource chaine (resNum{; resFichier}) Alpha LIRE RESSOURCE ICONE (resNum; imageDest{; resFichier}) LIRE RESSOURCE IMAGE (resNum; resDonnes{; resFichier}) Lire ressource texte (resNum{; resFichier}) Texte LIRE RESULTAT WEB SERVICE (valeurRetour{; nomRetour{; *}}) LIRE TABLEAUX LISTBOX ({*; }objet; tabNomsCols; tabNomsEnttes; tabVarCols; tabVarEnttes; tabVisibles; tabStyles) Lire taquet impression (numTaquet) Numrique Lire texte dans presse papiers Alpha Lire texte edite Texte LIRE TITRES CHAMPS (table; titresChamps; numChamps) LIRE TITRES TABLES (titresTables; numTables) Lire utilisateur par defaut Numrique LIRE VARIABLE PROCESS (process; varSource; varDestination{; varSource2; varDestination2; ...; varSourceN; varDestinationN}) LIRE VARIABLES (doc; variable{; variable2; ...; variableN}) LIRE VARIABLES FORMULAIRE WEB (tabNoms; tabValeurs) LIRE ZONE IMPRESSION (hauteur{; largeur}) LISTE DE CHAINES VERS TABLEAU (resNum; chanes{; resFichier}) LISTE DES DOCUMENTS (cheminAccs; documents) LISTE DES DOSSIERS (cheminAccs; dossiers) LISTE DES POLICES (polices) LISTE DES VOLUMES (volumes) Liste existante (liste) Boolen LISTE FENETRES (fentres{; *}) LISTE FORMULAIRES UTILISATEURS (table; formulaire; tabFormUtilisateurs) LISTE IMAGES DANS BIBLIOTHEQUE (RefsImages; NomsImages) LISTE IMPRIMANTES (tabNoms{; tabEmplacements{; tabModles}}) LISTE RESSOURCES (resType; resNums; resNoms{; resFichier}) LISTE SEGMENTS DE DONNEES (segments) LISTE TYPES IMAGES (tabFormats{; tabNoms}) LISTE TYPES RESSOURCE (resTypes{; resFichier}) LISTE VERS BLOB (liste; blob{; *}) Log (nombre) Numrique

2052 4e Dimension - Langage

16 M 519 463 546 544 545 13 543 428 656 208 3 453 152 88 704 705 4 454 14 32 57 807 204 203 98 24 843 841 325 2 N 270 315 101 398 302 538 483

Longueur (chane) Numrique

Mac vers ISO (texte) Chane Mac vers Windows (texte) Chane Macintosh commande enfoncee Boolen Macintosh control enfoncee Boolen Macintosh option enfoncee Boolen Majusc (chane) Alpha Majuscule enfoncee Boolen Marque ligne menu (menu; ligneMenu{; process}) Alpha MARQUER ENREGISTREMENTS ({table}{; nomEnsemble{; *}}) MARQUER LIGNE MENU (menu; ligneMenu; marque{; process}) Max (sries) Numrique MAXIMISER FENETRE {(fentre)} Menu choisi Numrique MESSAGE (message) Methode appelee sur erreur Alpha Methode appelee sur evenement Alpha Min (sries) Numrique MINIMISER FENETRE {(fentre)} Minusc (chane) Alpha Modifie (champ) Boolen MODIFIER ENREGISTREMENT ({table}{; }{*}) MODIFIER FORMULAIRE (table; formulaire{; formUtilisateur{; bibliothque}}) MODIFIER SELECTION ({table}{; modeSlection{; saisieListe{; *{; *}}}}) MODIFIER SOUS ENREGISTREMENT (sousTable; formulaire{; *}) Modulo (nombre1; nombre2) Numrique Mois de (date) Numrique MONTRER BARRES DEFILEMENT LISTBOX ({*; }objet; horizontal; vertical) MONTRER GRILLE LISTBOX ({*; }objet; horizontal; vertical) MONTRER PROCESS (process) Moyenne (sries) Numrique

NE PAS VALIDER Nil (unPointeur) Boolen Niveau Numrique Niveau du trigger Numrique NIVEAUX DE RUPTURES (niveau{; sautPage}) Nom commande (commande) Alpha Nom de la machine Alpha

4e Dimension - Langage 2053

256 462 257 484 684 255 405 404 459 259 335 343 254 458 437 380 342 116 34 317 668 375 11 844 246 897 461 114 322 243 837 244 O 278 824 822 820 881 821 818

Nom de la table (numTable | ptrTable) Alpha Nom de police (numro) Alpha Nom du champ (champPtr | tableNum {; champNum}) Alpha Nom du possesseur Alpha Nom methode courante Alpha Nombre de champs (tableNum | tablePtr) Numrique Nombre de lignes de menu (menu{; process}) Numrique Nombre de menus {(process)} Numrique Nombre de millisecondes Entier long Nombre de parametres Numrique Nombre de process Entier Nombre de process utilisateurs Entier Nombre de tables Numrique Nombre de ticks Numrique Nombre ecrans Entier long Nombre elements (liste{; *}) Entier long Nombre utilisateurs Entier NOMMER ENSEMBLE ({table; }ensemble) Non (boolen) Boolen Nouveau process (mthode; pile{; nom{; param{; param2; ...; paramN}{; *}}}) Numrique Nouvel enregistrement {(table)} Boolen Nouvelle liste RfListe Num (expression) Numrique NUMERO COLONNE LISTBOX DEPLACEE ({*; }objet; ancPosition; nouvPosition) Numero dans selection {(table)} Numrique Numero de ligne affichee Entier long Numero de police (nomPolice) Entier long Numero du jour (date) Numrique Numero du process courant Numrique Numero enregistrement {(table)} Numrique NUMERO LIGNE LISTBOX DEPLACEE ({*; }objet; ancPosition; nouvPosition) Numerotation automatique {(table)} Numrique

Objet focus Pointeur ODBC ANNULER CHARGEMENT ODBC CHARGER ENREGISTREMENT {(nombreEnr)} ODBC EXECUTER (instructionSQL{; objetLi}{; objetLi2; ...; objetLiN}) ODBC EXPORTER (tableSource; projet; *) ODBC Fin de selection Boolen ODBC FIXER OPTION (option; valeur)

2054 4e Dimension - Langage

823 880 825 819 817 872 264 312 497 903 673 P 276 275 249 248 298 106 158 326 30 304 542 15 481 608 629 161 468 250 446 327 672 439 477 399 472 607 457 365

ODBC FIXER PARAMETRE (objet; typeParam) ODBC IMPORTER (tableSource{; projet{; *}}) ODBC LIRE DERNIERE ERREUR (errCode; errTexte; errODBC; errSQLServer) ODBC LIRE OPTION (option; valeur) ODBC LOGIN ({nomSource}{; utilisateur{; motDePasse}}) ODBC LOGOUT Ouvrir document (document{; type{; mode}}) DocRef OUVRIR FICHIER DONNEES (cheminAccs) Ouvrir fichier ressources (resNomFichier{; typeFichier}) DocRef OUVRIR PREFERENCES 4D (slecteur) OUVRIR URL WEB (url{; *})

Page formulaire courante Numrique Page impression Numrique PAGE PRECEDENTE PAGE SUIVANTE PARAMETRES DU GRAPHE (grapheZone; xmin; xmax; ymin; ymax; xprop; grilleX; grilleY; titre{; titre2; ...; titreN}) PARAMETRES IMPRESSION PAS DE TRACE PASSER AU PREMIER PLAN (process) Pendant Boolen Pointeur vers (nomVar) Pointeur Pop up menu (contenu{; parDfaut{; coordX{; coordY}}}) Numrique Position (Chercher; chane) Numrique Position dans document (document) Numrique Position deposer Numrique Position element liste (liste; rfElment) Numrique POSITION MESSAGE (x; y) POSITION SOURIS (sourisX; sourisY; boutonSouris{; *}) PREMIERE PAGE Process de la fenetre {(fentre)} Numrique Process de premier plan {(*)} Entier Process interrompu Boolen PROFONDEUR ECRAN (profondeur; couleurs{; cran}) PROPRIETES DOCUMENT (document; verrouill; invisible; cr le; cr ; modifi le; modifi ) PROPRIETES DU TRIGGER (niveauTrigger; evenementBase; tableNum; enregNum) PROPRIETES DU VOLUME (volume; taille; utilis; libre) PROPRIETES GLISSER DEPOSER (srcObjet; srcElment; srcProcess) PROPRIETES IMAGE (image; largeur; hauteur{; hOffset{; vOffset{; mode}}}) PROPRIETES PLATE FORME (plateForme{; systme{; machine}})

4e Dimension - Langage 2055

Q 790 771 776 735 197 770 746 791 745 767 797 774 761 765 763 750 772 759 796 794 757 752 738 748 747 756 768 798 775 762 766 769 751 773 760 795 793 792 758 753 QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR APPELER SUR COMMANDE (zone; nomMthode) BLOB VERS ETAT (zone; blob) Chercher colonne (zone; expression) Entier long Creer zone hors ecran Entier long ETAT ({table; }document{; hirarchique{; assistant{; recherche{; *}}}}) ETAT VERS BLOB (zone; blob) EXECUTER (zone) EXECUTER COMMANDE (zone; numCommande) FIXER DESTINATION (zone; type{; spcificits}) FIXER DONNEES TOTAUX (zone; numColonne; numRupture; oprateur | valeur) FIXER ENCADREMENTS (zone; colonne; ligne; encadrements; paisseur{; couleur}) FIXER ENTETE ET PIED DE PAGE (zone; slecteur; titreGauche; titreCentre; titreDroite; hauteur{; image{; alignementImage}}) FIXER ESPACEMENT TOTAUX (zone; sousTotal; valeur) FIXER INFO COLONNE (zone; numColonne; titre; objet; cache; taille; valeursRptes; format) FIXER INFO LIGNE (zone; ligne; cache) FIXER MODELE HTML (zone; modle) FIXER PROPRIETE DOCUMENT (zone; proprit; valeur) FIXER PROPRIETE TEXTE (zone; numColonne; numLigne; proprit; valeur) FIXER PROPRIETE ZONE (zone; proprit; valeur) FIXER SELECTION (zone; gauche; haut; droite; bas) FIXER TABLE ETAT (zone; table) FIXER TRIS (zone; tabColonnes{; tabTris}) FIXER TYPE ETAT (zone; type) INSERER COLONNE (zone; numColonne; objet) Lire colonne deposee (zone) Entier long LIRE DESTINATION (zone; type{; spcificits}) LIRE DONNEES TOTAUX (zone; numColonne; numLigne; oprateur; texte) LIRE ENCADREMENTS (zone; colonne; ligne; encadrement; paisseur{; couleur}) LIRE ENTETE ET PIED DE PAGE (zone; slecteur; titreGauche; titreCentre; titreDroit; hauteur{; image{; alignementImage}}) LIRE ESPACEMENT TOTAUX (zone; sousTotal; valeur) LIRE INFO COLONNE (zone; numCol; titre; objet; cache; taille; valeursRptes; format) Lire info ligne (zone; ligne) Entier long Lire modele HTML (zone) Texte Lire propriete document (zone; proprit) Entier long Lire propriete texte (zone; numColonne; numLigne; proprit) Entier long Lire propriete zone (zone; proprit) Entier long LIRE SELECTION (zone; gauche; haut{; droite{; bas}}) Lire statut commande (zone; numCommande{; valeur}) Entier long Lire table etat (zone) Entier long LIRE TRIS (zone; tabColonnes; tabTris)

2056 4e Dimension - Langage

755 764 749 754 291 R 424 539 320 172 79 104 81 174 456 382 890 351 552 38 77 234 233 695 394 918 120 S 6 887 856 852 851 857 855 858 854 878 874 876 879 875 860

QR Lire type etat (zone) Entier long QR Nombre de colonnes (zone) Entier long QR SUPPRIMER COLONNE (zone; numColonne) QR SUPPRIMER ZONE HORS ECRAN (zone) QUITTER 4D {(dlai)}

Raccourci clavier (menu; ligneMenu{; process}) Numrique Racine carree (nombre) Numrique REACTIVER PROCESS (process) RECEVOIR BUFFER (varRception) RECEVOIR ENREGISTREMENT {(table)} RECEVOIR PAQUET ({docRef; }rceptVar; stopCar | nbCar) RECEVOIR VARIABLE (variable) REDESSINER (objet) REDESSINER FENETRE {(fentre)} REDESSINER LISTE (liste) REDIMENSIONNER FENETRE FORMULAIRE (largeur; hauteur) REDUIRE SELECTION ({table; }nombre) REEL VERS BLOB (rel; blob; formatRel{; offset | *}) REFUSER {(champ)} REGLER SERIE (port | opration{; param | document}) Remplacer caracteres (source; nouveau; position) Alpha Remplacer chaine (source; obsolte; nouveau{; remplacements}) Alpha RESOUDRE ALIAS (cheminAlias; cheminCible) RESOUDRE POINTEUR (pointeur; nomVar; numTable; numChamp) RESTITUER REUNION (ensemble1; ensemble2; rsultat)

SAUT DE PAGE {(* | >)} SAUVEGARDER SAX AJOUTER CDATA XML (document; donnes) SAX AJOUTER COMMENTAIRE XML (document; commentaire) SAX AJOUTER DOCTYPE XML (document; docType) SAX AJOUTER INSTRUCTION DE TRAITEMENT (document; instruction) SAX AJOUTER VALEUR ELEMENT XML (document; donnes) SAX ECRIRE OPTIONS XML (document; encodage{; autonome{; indentation}}) SAX FERMER ELEMENT XML (document) SAX LIRE CDATA XML (document; valeur) SAX LIRE COMMENTAIRE XML (document; commentaire) SAX LIRE ELEMENT XML (document; nom; prfixe; nomsAttributs; valeursAttributs) SAX LIRE ENTITE XML (document; nom; valeur) SAX LIRE INSTRUCTION DE TRAITEMENT XML (document; nom; valeur) SAX Lire noeud XML (document) Entier long

4e Dimension - Langage 2057

877 873 853 921 350 368 340 260 905 670 381 630 912 210 308 143 392 17 1 28 12 111 62 7 97 658 330 45 53 184 384 43 156 426 232 830 560 159 693 624

SAX LIRE VALEUR ELEMENT XML (document; valeur) SAX LIRE VALEURS DOCUMENT XML (document; encodage; version; autonome) SAX OUVRIR ELEMENT XML (document; balise{; nomAttribut{; valeurAttribut}}{; nomAttribut2; valeurAttribut2; ...; nomAttributN; valeurAttributN}) SAX OUVRIR ELEMENT XML TABLEAUX (document; balise{; tabNomsAttributs{; tabValeursAttributs}}{; tabNomsAttributs2; tabValeursAttributs2; ...; tabNomsAttributsN; tabValeursAttributsN}) SCAN INDEX (champ; nombre{; > ou <}) SELECTION LIMITEE VERS TABLEAU (dbut; fin; champ | table; tableau{; champ2 | table2; tableau2; ...; champN | tableN; tableauN}) SELECTION RETOUR (champ) SELECTION VERS TABLEAU (champ | table; tableau{; champ2 | table2; tableau2; ...; champN | tableN; tableauN}) Selectionner document (rpertoire; typesFichiers; titre; options{; slectionns}) Chane Selectionner dossier {(message)} Alpha SELECTIONNER ELEMENTS PAR POSITION (liste; positionElm{; tabPositions}) SELECTIONNER ELEMENTS PAR REFERENCE (liste; rfElment{; tabRfs}) SELECTIONNER LIGNE LISTBOX ({*; }objet; positionLigne{; action}) SELECTIONNER TEXTE (zone; dbutSl; finSl) Self Pointeur Semaphore (smaphore{; nbTicks}) Boolen SIECLE PAR DEFAUT (sicle{; anPivot}) Sin (nombre) Numrique Somme (sries) Numrique Somme des carres (sries) Numrique Sous chaine (source; PartirDe{; nbCars}) Alpha SOUS ENREGISTREMENT PRECEDENT (sousTable) SOUS ENREGISTREMENT SUIVANT (sousTable) Sous enregistrements trouves (sousTable) Numrique Sous total (valeurs{; sautPage}) Numrique STATISTIQUES DU CACHE WEB (pages; hits; usage) Statut du process (process) Numrique STOCKER ANCIEN (champ) STOCKER ENREGISTREMENT {(table)} STOCKER ENSEMBLE (ensemble; document) STOCKER LISTE (liste; nomListe) STOCKER SUR LIEN (champ) STOP Style ligne menu (menu; ligneMenu{; process}) Numrique Supprimer chaine (source; position; nombreCar) Alpha SUPPRIMER COLONNE LISTBOX ({*; }objet; positionCol{; nombre}) SUPPRIMER DANS BLOB (blob; offset; nombre) SUPPRIMER DOCUMENT (document) SUPPRIMER DOSSIER (dossier) SUPPRIMER ELEMENT (liste; lmentRef | *{; *})

2058 4e Dimension - Langage

58 810 567 914 413 228 377 175 501 66 96 615 319 T 252 627 46 363 218 223 646 224 220 221 647 279 718 280 219 222 287 512 261 605 479 356 717 274 19 476 400 652

SUPPRIMER ENREGISTREMENT {(table)} SUPPRIMER FORMULAIRE UTILISATEUR (table; formulaire; formUtilisateur) SUPPRIMER IMAGE DANS BIBLIOTHEQUE (refImage | nomImage) SUPPRIMER LIGNE LISTBOX ({*; }objet; positionLigne) SUPPRIMER LIGNE MENU (menu; ligneMenu{; process}) SUPPRIMER LIGNES (tableau; position{; combien}) SUPPRIMER LISTE (liste{; *}) SUPPRIMER MESSAGES SUPPRIMER RESSOURCE (resType; resNum{; resFichier}) SUPPRIMER SELECTION {(table)} SUPPRIMER SOUS ENREGISTREMENT (sousTable) SUPPRIMER UTILISATEUR (rfUtilisateur) SUSPENDRE PROCESS (process)

Table (numTable | unPtr) Num | Pointeur Table du formulaire courant Pointeur TABLE PAR DEFAUT (table) Table par defaut courante Pointeur TABLEAU ALPHA (longueurChane; nomTableau; taille{; taille2}) TABLEAU BOOLEEN (nomTableau; taille{; taille2}) TABLEAU BOOLEEN SUR ENSEMBLE (tabBoolen{; ensemble}) TABLEAU DATE (nomTableau; taille{; taille2}) TABLEAU ENTIER (nomTableau; taille{; taille2}) TABLEAU ENTIER LONG (nomTableau; taille{; taille2}) TABLEAU ENTIER LONG SUR SELECTION (table; tabEnrg{; tempo}) TABLEAU IMAGE (nomTableau; taille{; taille2}) TABLEAU MULTI TRI (tableau{; sensDuTri}{; tableau2; sensDuTri2; ...; tableauN; sensDuTriN}) TABLEAU POINTEUR (nomTableau; taille{; taille2}) TABLEAU REEL (nomTableau; taille{; taille2}) TABLEAU TEXTE (nomTableau; taille{; taille2}) TABLEAU VERS ENUMERATION (tableau; numration{; rfElments}) TABLEAU VERS LISTE DE CHAINES (chanes; resNum{; resFichier}) TABLEAU VERS SELECTION (tableau; champ{; tableau2; champ2; ...; tableauN; champN}) Taille BLOB (blob) Entier long Taille document (document{; *}) Numrique Taille image (image) Numrique TAILLE OBJET OPTIMALE ({*; }objet; largeurOpti; hauteurOpti{; largeurMax}) Taille tableau (tableau) Numrique Tan (nombre) Numrique Tester chemin acces (cheminAccs) Numrique Tester presse papiers (typeDonnes) Numrique Tester semaphore (smaphore) Boolen

4e Dimension - Langage 2059

422 209 554 194 450 430 109 47 157 816 397 49 916 391 300 107 170 229 95 653 295 494 528 445 495 U 182 616 849 118 205 299 332 V 339 785 269 638 240

Texte ligne menu (menu; ligneMenu{; process}) Alpha TEXTE SELECTIONNE (zone; dbutSl; finSl) TEXTE VERS BLOB (texte; blob; formatTexte{; offset | *}) TITRE BOUTON ({*; }objet; libellBouton) Titre fenetre {(fentre)} Chane Titre menu (menu{; process}) Alpha TOUS LES SOUS ENREGISTREMENTS (sousTable) TOUT SELECTIONNER {(table)} TRACE TRAITER BALISES HTML (donnesEntre; donnesSortie) Transaction en cours Boolen TRIER ({table}{; champ{; > ou <{; champ2; > ou <2; ...; champN; > ou <N}{; *}}}) TRIER COLONNES LISTBOX ({*; }objet; numCol; sensDuTri{; numCol2; sensDuTri2; ...; numColN; sensDuTriN}) TRIER LISTE (liste{; > ou <}) TRIER PAR FORMULE (table{; expression{; > ou <}}{; expression2; > ou <2; ...; expressionN; > ou <N}) TRIER SOUS ENREGISTREMENTS (sousTable; sousChamp{; direction}{; sousChamp2; direction2; ...; sousChampN; directionN}) TRIER SUR INDEX TRIER TABLEAU (tableau{; tableau2; ...; tableauN}{; sensDuTri}) Troncature (nombre; nbDcimales) Numrique Trouver clef index (champIndex; valeur) Entier long Type (champVar) Numrique Type application Entier long Type document (document) Alpha Type fenetre {(fentre)} Type version Entier long

Utilisateur courant Alpha Utilisateur supprime (rfUtilisateur) Boolen UTILISATEURS VERS BLOB (utilisateurs) UTILISER ENSEMBLE (ensemble) UTILISER FILTRE (filtre | *{; typeFiltre}) UTILISER PARAMETRES IMPRESSION ({table; }formulaire) UTILISER SELECTION (tempo)

VALEURS DISTINCTES (champ; tableau) VALEURS OPTION IMPRESSION (option; tabNoms{; tabInfo1{; tabInfo2}}) VALIDER Valider mot de passe (rfUtilisateur; motDePasse) Boolen VALIDER TRANSACTION

2060 4e Dimension - Langage

532 635 27 547 353 493 59 214 W 563 562 464

VARIABLE VERS BLOB (variable; blob{; offset | *}) VARIABLE VERS VARIABLE (process; varDestination; varSource{; varDestination2; varSource2; ...; varDestinationN; varSourceN}) Variance (sries) Numrique Verrouillage majuscule enfoncee Boolen VERROUILLE PAR ({table; }process; utilisateur; machine; nomProcess) Version application {(*)} Alpha VISUALISER SELECTION ({table}{; modeSlection{; saisieListe{; *{; *}}}}) Vrai Boolen

Windows Alt enfoncee Boolen Windows Ctrl enfoncee Boolen Windows vers Mac (texte) Chane

4e Dimension - Langage 2061

2062 4e Dimension - Langage

Constantes

4e Dimension - Langage 2063

2064 4e Dimension - Langage

Alignement objet
Commande(s) associe(s) : FIXER ALIGNEMENT, Lire alignement. Constante Align droite Align gauche Align par dfaut Centr Type Entier Entier Entier Entier long long long long Valeur 4 2 1 3

4e Dimension - Langage 2065

BLOB
Commande(s) associe(s) : BLOB vers entier, BLOB vers entier long, BLOB vers reel, BLOB vers texte, ENTIER LONG VERS BLOB, ENTIER VERS BLOB, LIRE PROPRIETES BLOB, REEL VERS BLOB, TEXTE VERS BLOB. Constante Chane en C Chane pascal Format rel double Macintosh Format rel double PC Format rel tendu Format rel natif Mthode de compression compacte Mthode de compression rapide Non compress Ordre octets Macintosh Ordre octets natif Ordre octets PC Texte avec longueur Texte sans longueur Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long Valeur 0 1 2 3 1 0 1 2 0 1 0 2 2 3

2066 4e Dimension - Langage

Caractres latins ISO


Constante ISO L1 0 majus circonflexe ISO L1 a aigu ISO L1 a circonflexe ISO L1 a grave ISO L1 A majus aigu ISO L1 A majus circonflexe ISO L1 A majus grave ISO L1 A majus tilde ISO L1 A majus umlaut ISO L1 A majus umlaut ISO L1 a rond ISO L1 a tilde ISO L1 a umlaut ISO L1 ae ligature ISO L1 AE majus ligature ISO L1 c cdille ISO L1 C majus cdille ISO L1 Copyright ISO L1 e aigu ISO L1 e circonflexe ISO L1 e grave ISO L1 E majus aigu ISO L1 E majus circonflexe ISO L1 E majus grave ISO L1 E majus unlaut ISO L1 e umlaut ISO L1 Es zett allemand ISO L1 Et commercial ISO L1 eth islandais ISO L1 Eth majus islandais ISO L1 Guillemets ISO L1 i aigu ISO L1 i circonflexe ISO L1 i grave ISO L1 I majus aigu ISO L1 I majus circonflex ISO L1 I majus grave ISO L1 I majus umlaut ISO L1 i umlaut Type Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Valeur &Ocirc; &aacute; &acirc; &agrave; &Aacute; &Acirc; &Agrave; &Atilde; &Aring; &Auml; &aring; &atilde; &auml; &aelig; &AELig; &ccedil; &Ccedil; &copy; &eacute; &ecirc; &egrave; &Eacute; &Ecirc; &Egrave; &Euml; &euml; &szlig; &amp; &eth; &ETH; &quot; &iacute; &icirc; &igrave; &Iacute; &Icirc; &Igrave; &Iuml; &iuml;

4e Dimension - Langage 2067

Caractres latins ISO (suite)


Constante ISO L1 Infrieur ISO L1 Marque dpose ISO L1 N majus tilde ISO L1 n tilde ISO L1 o aigu ISO L1 o barr ISO L1 o circonflexe ISO L1 o grave ISO L1 O majus aigu ISO L1 O majus barr ISO L1 O majus grave ISO L1 O majus tilde ISO L1 O majus umlaut ISO L1 o tilde ISO L1 o umlaut ISO L1 Suprieur ISO L1 thorn islandais ISO L1 THORN majus islandais ISO L1 u aigu ISO L1 u circonflexe ISO L1 u grave ISO L1 U majus aigu ISO L1 U majus circonflexe ISO L1 U majus grave ISO L1 U majus umlaut ISO L1 u umlaut ISO L1 y aigu ISO L1 Y majus aigu ISO L1 y umlaut Type Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Valeur &lt; &reg; &Ntilde; &ntilde; &oacute; &oslash; &ocirc; &ograve; &Oacute; &Oslash; &Ograve; &Otilde; &Ouml; &otilde; &ouml; &gt; &thorn; &THORN; &uacute; &ucirc; &ugrave; &Uacute; &Ucirc; &Ugrave; &Uuml; &uuml; &yacute; &Yacute; &yuml;

2068 4e Dimension - Langage

Chercher fenetre
Commande(s) associe(s) : Chercher fenetre. Constante Dans Dans Dans Dans Dans Dans Dans barre de menu barre de titre case de contrle de taille case de fermeture case de zoom fentre systme zone contenu Type Entier Entier Entier Entier Entier Entier Entier long long long long long long long Valeur 1 4 5 6 8 2 3

4e Dimension - Langage 2069

Codes ASCII
Commande(s) associe(s) : APPELER SUR EVENEMENT, Caractere. Constante Apostrophe Arobase ASCII ACK ASCII BEL ASCII BS ASCII CAN ASCII CR ASCII DC1 ASCII DC2 ASCII DC3 ASCII DC4 ASCII DEL ASCII DLE ASCII EM ASCII ENQ ASCII EOT ASCII ESC ASCII ETB ASCII ETX ASCII FF ASCII FS ASCII GS ASCII HT ASCII LF ASCII NAK ASCII NUL ASCII RS ASCII SI ASCII SO ASCII SOH ASCII SP ASCII STX ASCII SUB ASCII SYN ASCII US ASCII VT Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long Valeur 39 64 6 7 8 24 13 17 18 19 20 127 16 25 5 4 27 23 3 12 28 29 9 10 21 0 30 15 14 1 32 2 26 22 31 11

2070 4e Dimension - Langage

Codes ASCII (suite)


Constante Echappement Effacement arrire Entre Espace inscable Espacement Guillemets Point Retour la ligne Retour chariot Tabulation Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long Valeur 27 8 3 202 32 34 46 10 13 9

4e Dimension - Langage 2071

Communications
Commande(s) associe(s) : REGLER SERIE. Constante Bit de stop deux Bit de stop un Bit de stop un et demi Bits de donnes 5 Bits de donnes 6 Bits de donnes 7 Bits de donnes 8 Parit impaire Parit paire Pas de parit Port imprimante MacOS Port srie MacOS Protocole aucun Protocole DTR Protocole XONXOFF Vitesse 115200 Vitesse 1200 Vitesse 1800 Vitesse 19200 Vitesse 230400 Vitesse 2400 Vitesse 300 Vitesse 3600 Vitesse 4800 Vitesse 57600 Vitesse 600 Vitesse 7200 Vitesse 9600 Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long long long long long long long long long long long long long Valeur -16384 16384 -32768 0 2048 1024 3072 4096 12288 0 0 1 0 30 20 1022 94 62 4 1021 46 380 30 22 0 189 14 10

2072 4e Dimension - Langage

Couleurs
Commande(s) associe(s) : CHOIX COULEUR. Constante Blanc Bleu Bleu clair Bleu fonc Gris Gris clair Gris fonc Jaune Marron Marron fonc Noir Orange Rouge Vert Vert fonc Violet Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long Valeur 0 6 7 5 14 12 11 1 13 10 15 2 3 8 9 4

4e Dimension - Langage 2073

Creer fenetre
Commande(s) associe(s) : Creer fenetre, Creer fenetre externe. Constante Avec barre de titre active Avec case de contrle de taille Avec case de zoom Avec titre de fentre Dialogue modal Dialogue modal dplaable Dialogue ombr Dialogue simple Fentre coins arrondis Fentre feuille Fentre feuille redim Fentre palette Fentre pop up Fentre standard Fentre standard de taille fixe Fentre standard sans zoom Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long Valeur 1 4 8 2 1 5 3 2 16 33 34 1984 32 8 4 0

2074 4e Dimension - Langage

Creer fenetre formulaire


Commande(s) associe(s) : Creer fenetre formulaire. Constante A droite A gauche Centre horizontalement Centre verticalement En bas En haut Form dialogue modal Form dialogue modal dplaable Form fentre feuille Form fentre palette Form fentre pop up Form fentre standard Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long Valeur 196608 131072 65536 262144 393216 327680 1 5 33 1984 32 8

4e Dimension - Langage 2075

Destinations de recherche
Commande(s) associe(s) : FIXER DESTINATION RECHERCHE. Constante Vers Vers Vers Vers ensemble slection courante slection temporaire variable Type Entier Entier Entier Entier long long long long Valeur 1 0 2 3

2076 4e Dimension - Langage

Dictionnaires
Commande(s) associe(s) : CHANGER DICTIONNAIRE. Constante Dictionnaire allemand Dictionnaire anglais Dictionnaire espagnol Dictionnaire franais Type Entier Entier Entier Entier long long long long Valeur 131584 69632 196608 262144

4e Dimension - Langage 2077

Documents systme
Commande(s) associe(s) : Ouvrir document, Selectionner document, Tester chemin acces. Constante Est un document Est un rpertoire Fichiers multiples Lecture et criture Lire chemin accs Mode criture Mode lecture Ouverture progiciel Slection alias Slection progiciel Utiliser fentre feuille Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long Valeur 1 0 1 0 3 1 2 2 8 4 16

2078 4e Dimension - Langage

Dossier Systme
Commande(s) associe(s) : Dossier systeme. Constante Bureau Win Extensions Mac Favoris Win Menu pomme ou Dmarrer Menu pomme ou Dmarrer_Tous Ouverture au dmarrage Ouverture au dmarrage_Tous Ouverture extinction Mac Ouverture extinction Mac_Tous Polices Prfrences ou Profiles Prfrences ou Profiles_Tous Program Files Win System Win System32 Win Systme Tableaux de bord Mac Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long long Valeur 15 10 14 9 8 5 4 7 6 1 3 2 16 12 13 0 11

4e Dimension - Langage 2079

Environnement 4D
Commande(s) associe(s) : Type application, Type version. Constante 4D Client 4D First 4D Runtime Interpreted 4D Runtime Single User 4D Runtime Volume License 4D Server 4e Dimension Version de dmonstration Version standard Type Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long Valeur 4 6 2 3 1 5 0 1 0

2080 4e Dimension - Langage

Euro monnaies
Commande(s) associe(s) : Convertisseur Euro. Constante Drachme grecque Escudo portugais Euro Florin nerlandais Franc belge Franc franais Franc luxembourgeois Lire italienne Livre irlandaise Mark allemand Mark finlandais Peseta espagnole Schilling autrichien Type Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Valeur GRD PTE EUR NLG BEF FRF LUF ITL IEP DEM FIM ESP ATS

4e Dimension - Langage 2081

Evnements (Modifiers)
Commande(s) associe(s) : GENERER EVENEMENT, GENERER FRAPPE CLAVIER. Constante Bit activation fentre Bit bouton souris Bit touche commande Bit touche contrle Bit touche contrle droite Bit touche majuscule Bit touche majuscule droite Bit touche option Bit touche option droite Bit touche verrouillage maj Masque activation fentre Masque bouton souris Masque touche commande Masque touche contrle Masque touche contrle droite Masque touche majuscule Masque touche majuscule droite Masque touche option Masque touche option droite Masque touche verrouillage maj Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long long long long long Valeur 0 7 8 12 15 9 13 11 14 10 1 128 256 4096 32768 512 8192 2048 16384 1024

2082 4e Dimension - Langage

Evnements (types)
Commande(s) associe(s) : GENERER EVENEMENT. Constante Activation fentre Bouton souris enfonc Bouton souris relch Evnement disque Evnement nul Evnement systme Mise jour fentre Rptition touche Touche enfonce Touche relche Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long Valeur 8 1 2 7 0 15 6 5 3 4

4e Dimension - Langage 2083

Evnements formulaire
Commande(s) associe(s) : Evenement formulaire. Constante Sur activation Sur affichage corps Sur appel extrieur Sur appel zone du plug in Sur aprs frappe clavier Sur avant frappe clavier Sur case de fermeture Sur chargement Sur clic souris Sur dposer Sur dsactivation Sur donnes modifies Sur double clic souris Sur entte Sur fermeture corps Sur gain focus Sur glisser Sur impression corps Sur impression pied de page Sur impressions sous total Sur libration Sur menu slectionn Sur minuteur Sur ouverture corps Sur perte focus Sur redimensionnement Sur validation Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long long long long long long long long long long long long Valeur 11 8 10 19 28 17 22 1 4 16 12 20 13 5 26 15 21 23 7 6 24 18 27 25 14 29 3

2084 4e Dimension - Langage

Evnements moteur
Commande(s) associe(s) : Evenement moteur. Constante Sur Sur Sur Sur chargement enregistrement sauvegarde enregistrement sauvegarde nouvel enreg suppression enregistrement Type Entier Entier Entier Entier long long long long Valeur 4 2 1 3

4e Dimension - Langage 2085

Expressions
Constante MAXENT MAXLARGTEXTE MAXLONG Type Entier long Entier long Entier long Valeur 32767 32000 2147483647

2086 4e Dimension - Langage

FIXER COULEUR RVB


Commande(s) associe(s) : FIXER COULEURS RVB. Constante Coul Coul Coul Coul Coul Coul Coul Coul Coul arrire plan claire de fond texte slect fond lment slect dsact fond ligne menu slect premier plan sombre texte ligne menu slect texte slect Type Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long Valeur -2 -4 -7 -11 -9 -1 -3 -10 -8

4e Dimension - Langage 2087

Fonctions mathmatiques
Commande(s) associe(s) : Arctan, Cos, Sin, Tan. Constante Degr Nombre e Pi Radian Type Numrique Numrique Numrique Numrique Valeur 0.0174532925199432958 2.71828182845904524 3.141592653589793239 57.29577951308232088

2088 4e Dimension - Langage

Formats d'affichage des dates


Commande(s) associe(s) : Chaine, CHOIX FORMATAGE, Lire formatage. Constante Abrg Jour Mois Anne Format abrg Format court Format long Format spcial Jour Mois Anne Spcial forc Type Entier Entier Entier Entier Entier Entier Entier long long long long long long long Valeur 6 2 1 3 4 5 7

4e Dimension - Langage 2089

Formats d'affichage des heures


Commande(s) associe(s) : Chaine, CHOIX FORMATAGE, Lire formatage. Constante h mn h mn Matin Aprs Midi h mn s Heure Minute Heure Minute Seconde Type Entier Entier Entier Entier Entier long long long long long Valeur 2 5 1 4 3

2090 4e Dimension - Langage

Formats d'affichage des images


Commande(s) associe(s) : CHOIX FORMATAGE, CREER IMAGETTE, Lire formatage. Constante Non tronque Proportionnelle Proportionnelle centre Sur fond Tronque centre Tronque non centre Type Entier Entier Entier Entier Entier Entier long long long long long long Valeur 2 5 6 3 1 4

4e Dimension - Langage 2091

Interfaces de plate-forme
Commande(s) associe(s) : FIXER INTERFACE, Lire interface. Constante Mac OS 7 Mac OS 9 Plate forme automatique Thme Mac Windows 3.11, NT 3.51 Windows 9x Type Entier Entier Entier Entier Entier Entier long long long long long long Valeur 0 3 -1 4 1 2

2092 4e Dimension - Langage

Journal d'vnements Windows NT


Commande(s) associe(s) : ENREGISTRER EVENEMENT. Constante Message davertissement Message derreur Message dinformation Type Entier long Entier long Entier long Valeur 1 2 0

4e Dimension - Langage 2093

Jours et mois
Commande(s) associe(s) : Mois de, Numero du jour. Constante Aot Avril Dcembre Dimanche Fvrier Janvier Jeudi Juillet Juin Lundi Mai Mardi Mars Mercredi Novembre Octobre Samedi Septembre Vendredi Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long long long long Valeur 8 4 12 1 2 1 5 7 6 2 5 3 3 4 11 10 7 9 6

2094 4e Dimension - Langage

Licence disponible
Commande(s) associe(s) : ECRIRE ACCES PLUGIN, Licence disponible, Lire acces plugin. Constante Licence Licence Licence Licence Licence Licence Licence Licence 4D Draw 4D for OCI 4D SOAP 4D View 4D Web 4D Write SOAP 4D Client Web 4D Client Type Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long Valeur 808464694 808465208 808465464 808465207 808464945 808464697 808465465 808465209

4e Dimension - Langage 2095

Liens
Commande(s) associe(s) : FIXER LIENS AUTOMATIQUES, LIRE LIENS AUTOMATIQUES. Constante Automatique Configuration structure Manuel Ne pas changer Pas de lien Type Entier Entier Entier Entier Entier long long long long long Valeur 3 1 2 0 0

2096 4e Dimension - Langage

List box
Commande(s) associe(s) : Lire information listbox, SELECTIONNER LIGNE LISTBOX. Constante Affichage barre df hor listbox Affichage barre df ver listbox Affichage entte listbox Ajouter slection listbox Hauteur barre df hor listbox Hauteur entte listbox Largeur barre df ver listbox Remplacer slection listbox Supprimer de slection listbox Type Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long Valeur 2 4 0 1 3 1 5 0 2

4e Dimension - Langage 2097

Listes hirarchiques
Commande(s) associe(s) : CHANGER PROPRIETES LISTE, LIRE PROPRIETES LISTE. Constante A la Macintosh A la Windows Rf icne Macintosh Rf icne Windows Utiliser rf image Utiliser ressource PICT Type Entier Entier Entier Entier Entier Entier long long long long long long Valeur 1 2 860 138 131072 65536

2098 4e Dimension - Langage

Moteur de la base
Commande(s) associe(s) : Numero enregistrement. Constante Aucun enregistrement courant Est un nouvel enregistrement Type Entier long Entier long Valeur -1 -3

4e Dimension - Langage 2099

Numros de port TCP


Commande(s) associe(s) : FIXER PARAMETRE BASE, Lire parametre base. Constante TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP TCP Authentication DNS Finger FTP Control FTP Data Gopher HTTP WWW IMAP3 Kerberos KLogin Nickname NNTP NTalk NTP PMCP PMD POP3 Printer RADACCT RADIUS Remote Cmd Remote Exec Remote Login Router SMTP SNMP SNMPTRAP SUN RPC Talk Telnet TFTP UUCP UUCP RLOGIN Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long Valeur 113 53 79 21 20 70 80 220 88 543 43 119 518 123 1643 1642 110 515 1646 1645 514 512 513 520 25 161 162 111 517 23 69 540 541

2100 4e Dimension - Langage

Options d'impression
Commande(s) associe(s) : FIXER OPTION IMPRESSION, LIRE OPTION IMPRESSION, VALEURS OPTION IMPRESSION. Constante Option alimentation Option couleur Option destination Option chelle Option nom document imprimer Option nombre copies Option orientation Option papier Option recto verso Type Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long Valeur 5 8 9 3 12 4 2 1 11

4e Dimension - Langage 2101

Options de formulaire
Commande(s) associe(s) : MODIFIER SELECTION, VISUALISER SELECTION. Constante Pas de slection Slection multiple Slection unique Type Entier long Entier long Entier long Valeur 0 2 1

2102 4e Dimension - Langage

Paramtres de la base
Commande(s) associe(s) : FIXER PARAMETRE BASE, Lire parametre base. Constante Adresse IP d'coute Appels systme 4D Client Appels systme 4D Server Appels systme 4e Dimension Client Adresse IP dcoute Client Jeu de caractres Client Maximum process Web Client Minimum process Web Client Numro de port Client Proc Web simultans maxi Client Taille max requtes Web Compression index Jeu de caractres Maximum process Web Minimum process Web Mode conversion Web Mode criture cache Numro du port Optimisation accs sq Process Web simultans maxi Ratio chercher dans slec sq Ratio de tri sq Ratio valeurs distinctes sq Taille cache donnes Taille maximum requtes Web Timeout 4D Client Timeout 4D Server Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long long long long long long long long long long long long Valeur 16 12 11 10 23 24 20 19 22 25 21 4 17 7 6 8 26 15 2 18 5 1 3 9 27 14 13

4e Dimension - Langage 2103

Presse-Papiers
Commande(s) associe(s) : AJOUTER A PRESSE PAPIERS, LIRE PRESSE PAPIERS, Tester presse papiers. Constante Donnes absentes presse papiers Donnes image Donnes texte Type Entier long Chane Chane Valeur -102 PICT TEXT

2104 4e Dimension - Langage

PROFONDEUR ECRAN
Commande(s) associe(s) : FIXER PROFONDEUR ECRAN, PROFONDEUR ECRAN. Constante Deux cent cinquante six coul Est en couleurs Est en niveaux de gris Milliers de couleurs Millions de couleurs 24 bits Millions de couleurs 32 bits Noir et blanc Quatre couleurs Seize couleurs Type Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long Valeur 8 1 0 16 24 32 0 2 4

4e Dimension - Langage 2105

Proprits des ressources


Commande(s) associe(s) : ECRIRE PROPRIETES RESSOURCE, Lire proprietes ressource. Constante Bit ressource heap systme Bit ressource modifie Bit ressource prcharge Bit ressource protge Bit ressource purgeable Bit ressource verrouille Masque ressource heap systme Masque ressource modifie Masque ressource prcharge Masque ressource protge Masque ressource purgeable Masque ressource verrouille Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long Valeur 6 1 2 3 5 4 64 2 4 8 32 16

2106 4e Dimension - Langage

Proprits plate-forme
Commande(s) associe(s) : PROPRIETES PLATE FORME. Constante Autres G3 et suprieurs INTEL 386 INTEL 486 Macintosh 68K Pentium Power Macintosh PowerPC 601 PowerPC 603 PowerPC 604 PowerPC G3 Windows Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long Valeur 406 386 486 1 586 2 601 603 604 510 3

4e Dimension - Langage 2107

QR Commandes
Commande(s) associe(s) : QR EXECUTER COMMANDE, QR Lire statut commande. Constante qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr cmd ajouter colonne cmd align droite cmd align gauche cmd align par dfault cmd apercu cmd cacher colonne cmd cacher ligne cmd centr cmd dplacer droite cmd dplacer gauche cmd destination 4D View cmd destination fichier cmd destination fichier HTML cmd destination graphe cmd destination imprimante cmd cart type cmd diter colonne cmd encadrements cmd enregistrer cmd enregistrer sous cmd entete et pied de page cmd espacement des totaux cmd executer cmd format cmd gras cmd insrer colonne cmd italique cmd largeur automatique cmd liste droulante police cmd max cmd min cmd mise en forme cmd mise en page cmd moyenne cmd nombre cmd normal Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long Valeur 2608 505 503 512 2007 2602 2607 504 3003 3002 2503 2501 2504 2502 2500 513 2603 2609 2002 2003 2005 2610 2008 2606 500 2600 501 2605 1000 509 508 2611 2006 507 510 511

2108 4e Dimension - Langage

QR Commandes (suite)
Constante qr qr qr qr qr qr qr qr qr qr qr qr qr qr qr cmd nouveau cmd objet couleur fond cmd objet couleur fond alt cmd objet couleur texte cmd ouvrir cmd palette colonnes cmd palette couleurs de fond cmd palette oprateurs cmd palette standard cmd palette style cmd somme cmd soulign cmd supprimer colonne cmd valeurs rptes cmd version enregistre Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long Valeur 2000 1003 1004 1002 2001 2054 2052 2051 2053 2050 506 502 2601 2604 2004

4e Dimension - Langage 2109

QR Destination de sortie
Commande(s) associe(s) : QR FIXER DESTINATION, QR LIRE DESTINATION. Constante qr qr qr qr qr fichier HTML fichier texte imprimante zone 4D Chart zone 4D View Type Entier Entier Entier Entier Entier long long long long long Valeur 5 2 1 4 3

2110 4e Dimension - Langage

QR Encadrements
Commande(s) associe(s) : QR LIRE ENCADREMENTS. Constante qr qr qr qr qr qr encadrement encadrement encadrement encadrement encadrement encadrement bas droit gauche haut horiz intrieur vert intrieur Type Entier Entier Entier Entier Entier Entier long long long long long long Valeur 8 4 1 2 32 16

4e Dimension - Langage 2111

QR Lignes pour Proprits


Commande(s) associe(s) : QR FIXER ENCADREMENTS, QR FIXER INFO LIGNE, QR FIXER PROPRIETE TEXTE, QR LIRE ENCADREMENTS, QR Lire info ligne. Constante qr qr qr qr qr dtail entte intitul pied de page total gnral Type Entier Entier Entier Entier Entier long long long long long Valeur -2 -4 -1 -5 -3

2112 4e Dimension - Langage

QR Oprateurs
Commande(s) associe(s) : QR FIXER DONNEES TOTAUX, QR LIRE DONNEES TOTAUX. Constante qr qr qr qr qr qr cart type max min moyenne nombre somme Type Entier Entier Entier Entier Entier Entier long long long long long long Valeur 32 8 4 2 16 1

4e Dimension - Langage 2113

QR Proprits de document
Commande(s) associe(s) : QR FIXER PROPRIETE DOCUMENT, QR Lire propriete document. Constante qr dialogue dimpression qr unit Type Entier long Entier long Valeur 1 2

2114 4e Dimension - Langage

QR Proprits de texte
Commande(s) associe(s) : QR FIXER PROPRIETE TEXTE, QR Lire propriete texte. Constante qr couleur de fond qr couleur de fond alterne qr couleur de texte qr gras qr italique qr justification qr police qr soulign qr taille police Type Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long Valeur 8 9 6 3 4 7 1 5 2

4e Dimension - Langage 2115

QR Proprits de zone
Commande(s) associe(s) : QR FIXER PROPRIETE ZONE, QR Lire propriete zone. Constante qr qr qr qr qr qr qr barre menu barre outils colonnes barre outils couleurs barre outils oprateurs barre outils standard barre outils style menus contextuels Type Entier Entier Entier Entier Entier Entier Entier long long long long long long long Valeur 1 6 5 4 2 3 7

2116 4e Dimension - Langage

QR Types d'tats
Commande(s) associe(s) : QR FIXER TYPE ETAT, QR Lire type etat. Constante qr tat en liste qr tat tableau crois Type Entier long Entier long Valeur 1 2

4e Dimension - Langage 2117

Sauvegarde et restitution
Commande(s) associe(s) : LIRE INFORMATION RESTITUTION, LIRE INFORMATION SAUVEGARDE. Constante Date dernire restitution Date dernire sauvegarde Date prochaine sauvegarde Statut dernire restitution Statut dernire sauvegarde Type Entier Entier Entier Entier Entier long long long long long Valeur 0 0 4 2 2

2118 4e Dimension - Langage

Signatures systme standard


Les signatures Systme standard sont des chanes de 4 caractres dsignant des types de fichiers standard, des types de ressources ou encore des types de donnes stocks notamment dans le Presse-papiers. Commande(s) associe(s) : AJOUTER A PRESSE PAPIERS, ECRIRE PROPRIETES RESSOURCE, LIRE PRESSE PAPIERS, Lire proprietes ressource, Tester presse papiers. Constante Document image Document MIDI Windows Document son Windows Document texte Document vido Windows QT Compresseur animation QT Compresseur Compact Vido QT Compresseur graphiques QT Compresseur photo QT Compresseur RAW QT Compresseur vido Type Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Chane Valeur PICT MID WAV TEXT AVI rle cdvc smc jpeg raw rpza

4e Dimension - Langage 2119

Source de donnes externes


Commande(s) associe(s) : ODBC CHARGER ENREGISTREMENT, ODBC FIXER OPTION, ODBC FIXER PARAMETRE, ODBC LIRE OPTION. Constante OBDC OBDC OBDC OBDC ODBC ODBC ODBC ODBC ODBC Asynchrone Paramtre entre Paramtre entre sortie Paramtre sortie Longueur maxi donnes Nombre maxi lignes Timeout connexion Timeout requte Tous les enregistrements Type Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long Valeur 1 1 2 4 3 2 5 4 -1

2120 4e Dimension - Langage

Statut du process
Commande(s) associe(s) : INFORMATIONS PROCESS, Statut du process. Constante Dtruit Dialogue cach En attente drapeau interne En attente entre sortie En attente vnement En excution Endormi Inexistant Suspendu Type Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long Valeur -1 6 4 3 2 0 1 -100 5

4e Dimension - Langage 2121

Styles de caractres
Commande(s) associe(s) : CHANGER PROPRIETES ELEMENT, CHANGER STYLE, CHANGER STYLE LIGNE MENU, Style ligne menu. Constante Condens Etendu Gras Italique Normal Ombr Relief Soulign Type Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long Valeur 32 64 1 2 0 16 8 4

2122 4e Dimension - Langage

Touches de fonction
Commande(s) associe(s) : APPELER SUR EVENEMENT. Constante Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche Touche aide bas dbut droite chappement entre F1 F10 F11 F12 F13 F14 F15 F2 F3 F4 F5 F6 F7 F8 F9 fin gauche haut page prcdente page suivante retour arrire retour chariot tab Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long long long long long long long long long long long long long long Valeur 5 31 1 29 27 3 -122 -109 -103 -111 -105 -107 -113 -120 -99 -118 -96 -97 -98 -100 -101 4 28 30 12 11 8 13 9

4e Dimension - Langage 2123

Type du process
Commande(s) associe(s) : INFORMATIONS PROCESS. Constante Aucun Autre process 4D Autre process utilisateur Cr depuis le mode Utilisation Cr par commande de menu Cr par programmation Gestionnaire Apple Event Gestionnaire dvnement Gestionnaire dindex Gestionnaire du cache Gestionnaire du port srie Process de structure Process principal Process Web avec contexte Process Web sans contexte Tche externe Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long Valeur 0 -10 4 3 2 1 -7 -8 -5 -4 -6 -2 -1 -11 -3 -9

2124 4e Dimension - Langage

Type fenetre
Commande(s) associe(s) : Type fenetre. Constante Fentre Fentre Fentre Fentre externe flottante modale normale Type Entier Entier Entier Entier long long long long Valeur 5 14 9 8

4e Dimension - Langage 2125

Types champs et variables


Commande(s) associe(s) : DECLARATION SOAP, LIRE PROPRIETES CHAMP, Type. Constante Est un BLOB Est un boolen Est un champ alpha Est un entier Est un entier long Est un numrique Est un pointeur Est un tableau 2D Est un tableau boolen Est un tableau chane Est un tableau date Est un tableau entier Est un tableau entierlong Est un tableau image Est un tableau numrique Est un tableau pointeur Est un tableau texte Est un texte Est une date Est une heure Est une image Est une sous table Est une variable chane Est une variable indfinie Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long long long long long long long long long Valeur 30 6 0 8 9 1 23 13 22 21 17 15 16 19 14 20 18 2 4 11 3 7 24 5

2126 4e Dimension - Langage

Web Services (Client)


Commande(s) associe(s) : APPELER WEB SERVICE, FIXER OPTION WEB SERVICE, Lire infos erreur Web Service. Constante Web Web Web Web Web Web Web Web Web Web Web Web Web Service code erreur Service code erreur HTTP Service dynamique Service entre manuel Service header SOAP Service manuel Service message Service origine erreur Service SOAP_1_1 Service SOAP_1_2 Service sortie manuel Service timeout HTTP Service version SOAP Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long Valeur 0 2 0 1 2 3 1 3 0 1 2 1 3

4e Dimension - Langage 2127

Web Services (Serveur)


Commande(s) associe(s) : DECLARATION SOAP, ENVOYER ERREUR SOAP, Lire informations SOAP. Constante SOAP SOAP SOAP SOAP SOAP SOAP entre erreur client erreur serveur nom mthode nom service sortie Type Entier Entier Entier Entier Entier Entier long long long long long long Valeur 1 1 2 1 2 2

2128 4e Dimension - Langage

XML
Commande(s) associe(s) : DOM Lire informations XML, SAX Lire noeud XML. Constante CDATA XML Commentaire XML Dbut document XML Dbut lment XML Donne XML Encoding Entit XML Fin document XML Fin lment XML ID PUBLIC ID SYSTEM Instruction de traitement XML Nom DOCTYPE URI Document Version Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long Valeur 7 2 1 4 6 4 8 9 5 1 2 3 3 6 5

4e Dimension - Langage 2129

Zone de formulaire
Commande(s) associe(s) : FIXER TAQUET IMPRESSION, Imprimer ligne, Lire taquet impression. Constante Corps formulaire Entte formulaire Entte formulaire1 Entte formulaire10 Entte formulaire2 Entte formulaire3 Entte formulaire4 Entte formulaire5 Entte formulaire6 Entte formulaire7 Entte formulaire8 Entte formulaire9 Pied de page formulaire Rupture formulaire0 Rupture formulaire1 Rupture formulaire2 Rupture formulaire3 Rupture formulaire4 Rupture formulaire5 Rupture formulaire6 Rupture formulaire7 Rupture formulaire8 Rupture formulaire9 Type Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier Entier long long long long long long long long long long long long long long long long long long long long long long long Valeur 0 200 201 210 202 203 204 205 206 207 208 209 100 300 301 302 303 304 305 306 307 308 309

2130 4e Dimension - Langage

Index des commandes


A
Abs Activation ACTIVER BOUTON ACTIVER LIGNE MENU ADJOINDRE ELEMENT AFFICHER BARRE DE MENUS AFFICHER BARRE OUTILS AFFICHER ENREGISTREMENT AFFICHER FENETRE AFFICHER NOTIFICATION Ajouter a date Ajouter a document AJOUTER A LISTE AJOUTER A PRESSE PAPIERS AJOUTER A TABLEAU AJOUTER ENREGISTREMENT AJOUTER LIGNE MENU AJOUTER SEGMENT DE DONNEES AJOUTER SOUS ENREGISTREMENT ALERTE ALLER A CHAMP ALLER A DERNIER ENREGISTREMENT ALLER A DERNIER SOUS ENREGISTREMENT ALLER A ENREGISTREMENT ALLER A PAGE ALLER DANS SELECTION Ancien ANCIEN LIEN RETOUR Annee de ANNULER TRANSACTION Appartient a ensemble Appartient au groupe Appel exterieur APPELER 4D APPELER PROCESS APPELER SUR A PROPOS APPELER SUR ERREUR 765 708 1358 1197 540 1180 150 491 741 1222 354 451 1140 1275 1822 1493 1198 574 1498 1207 851 1528 1748 502 807 1522 1505 1084 351 1848 543 1879 710 341 1334 1181 1031

4e Dimension - Langage 2131

APPELER SUR EVENEMENT APPELER WEB SERVICE Application compilee APPLIQUER A SELECTION APPLIQUER A SOUS SELECTION APPLIQUER TRANSFORMATION XSLT Apres Arctan ARRETER SERVEUR WEB Arrondi ASSOCIER TYPES FICHIER AUTHENTIFIER WEB SERVICE Avant Avant selection Avant sous enregistrement

1025 1918 563 1539 1746 1996 704 778 1684 768 474 1924 702 1530 1751

B
BEEP BLOB BLOB BLOB BLOB BLOB BLOB BLOB BLOB BLOB VERS DOCUMENT vers entier vers entier long VERS IMAGE vers liste vers reel vers texte VERS UTILISATEURS VERS VARIABLE 987 166 189 191 902 175 193 195 1890 171

C
CACHER BARRE DE MENUS CACHER BARRE OUTILS CACHER FENETRE CACHER PROCESS Caractere Chaine Chaine heure 1179 149 740 1347 226 215 357

2132 4e Dimension - Langage

Champ CHANGER BARRE CHANGER COORDONNEES FENETRE CHANGER CREATEUR DOCUMENT CHANGER DICTIONNAIRE CHANGER ELEMENT CHANGER JEU DE CARACTERES CHANGER LICENCES CHANGER MOT DE PASSE CHANGER POINTEUR SOURIS CHANGER POSITION DANS DOCUMENT CHANGER PRIVILEGES CHANGER PROPRIETES DOCUMENT CHANGER PROPRIETES ELEMENT CHANGER PROPRIETES LISTE CHANGER RACCOURCI CLAVIER CHANGER STYLE CHANGER STYLE LIGNE MENU CHANGER TAILLE CHANGER TAILLE DOCUMENT CHANGER TEXTE LIGNE MENU CHANGER TITRE FENETRE CHANGER TYPE DOCUMENT CHANGER UTILISATEUR COURANT CHARGER ANCIEN CHARGER ENREGISTREMENT CHARGER ENSEMBLE CHARGER ET COMPRESSER IMAGE Charger liste CHARGER SUR LIEN CHERCHER CHERCHER DANS SELECTION Chercher dans tableau Chercher fenetre CHERCHER PAR EXEMPLE CHERCHER PAR FORMULE CHERCHER PAR FORMULE DANS SELECTION CHERCHER PAR TABLEAU Chercher process CHERCHER SOUS ENREGISTREMENTS

416 1177 752 445 1271 1161 1354 1898 1876 1019 487 1871 482 1149 1128 1195 1356 1191 1355 485 1188 746 443 1872 1082 523 547 895 1117 1073 1406 1413 1816 756 1405 1415 1417 1418 1315 1754

4e Dimension - Langage 2133

CHERCHER SUR CLE CHOIX COULEUR CHOIX ENUMERATION CHOIX FILTRE SAISIE CHOIX FORMATAGE CHOIX SAISISSABLE CHOIX VISIBLE Clic contextuel Clic droit Code ascii COMPRESSER BLOB COMPRESSER FICHIER IMAGE COMPRESSER IMAGE Compter dans tableau CONFIRMER Connexion Web securisee Contexte Web Convertisseur Euro COORDONNEES ECRAN COORDONNEES FENETRE COPIER BLOB COPIER DOCUMENT COPIER ENSEMBLE Copier liste COPIER SELECTION COPIER TABLEAU CORRECTION ORTHOGRAPHIQUE Cos Createur document CREER ALIAS Creer document CREER DOSSIER CREER ENREGISTREMENT CREER ENSEMBLE SUR TABLEAU Creer fenetre Creer fenetre externe Creer fenetre formulaire CREER FICHIER DONNEES Creer fichier ressources CREER FORMULAIRE UTILISATEUR

247 1381 1376 1374 1366 1377 1379 716 715 224 158 897 894 1819 1209 1716 1702 782 594 751 200 453 555 1121 1553 1823 1270 776 444 465 449 460 492 538 729 733 757 576 1456 825

2134 4e Dimension - Langage

CREER IMAGETTE CREER SELECTION SUR TABLEAU CREER SOUS ENREGISTREMENT CREER SUR LIEN CRYPTER BLOB CUMULER SUR C_ALPHA C_BLOB C_BOOLEEN C_DATE C_ENTIER C_ENTIER LONG C_GRAPHE C_HEURE C_IMAGE C_POINTEUR C_REEL C_TEXTE

909 1558 1741 1080 201 947 338 329 330 331 333 334 332 340 335 336 337 339

D
Date Date du jour DEBUT SELECTION DEBUT SOUS ENREGISTREMENT DEBUT TRANSACTION Dec DECLARATION SOAP DECODER DECOMPRESSER BLOB DECRYPTER BLOB DEFILER LIGNES Demander DEPILER ENREGISTREMENT DEPLACER DOCUMENT DEPLACER FENETRE DEPLACER OBJET DEPLACER SELECTION DERNIERE PAGE 355 345 1524 1747 1846 767 1930 1269 160 206 1016 1212 509 454 738 1389 1555 809

4e Dimension - Langage 2135

Desactivation DESINSCRIRE CLIENT DIALOGUE DIFFERENCE DOCUMENT VERS BLOB DOM Analyser source XML DOM Analyser variable XML DOM Chercher element XML DOM Compter attributs XML DOM Compter elements XML DOM Creer element XML DOM Creer ref XML DOM ECRIRE ATTRIBUT XML DOM ECRIRE NOM ELEMENT XML DOM ECRIRE OPTIONS XML DOM ECRIRE VALEUR ELEMENT XML DOM EXPORTER VERS FICHIER DOM EXPORTER VERS VARIABLE DOM FERMER XML DOM LIRE ATTRIBUT XML PAR INDEX DOM LIRE ATTRIBUT XML PAR NOM DOM Lire element XML DOM Lire element XML suivant DOM Lire informations XML DOM LIRE NOM ELEMENT XML DOM Lire premier element XML DOM LIRE VALEUR ELEMENT XML DOM SUPPRIMER ELEMENT XML Dossier 4D Dossier systeme Dossier temporaire DUPLIQUER ENREGISTREMENT

709 1325 1501 549 164 1947 1949 1953 1966 1955 1951 1944 1968 1961 1946 1963 1973 1974 1975 1969 1970 1956 1959 1972 1962 1957 1964 1965 570 607 609 493

E
Ecart type Ecran principal ECRIRE ACCES PLUGIN ECRIRE CACHE 792 598 1899 575

2136 4e Dimension - Langage

ECRIRE FICHIER IMAGE ECRIRE IMAGE DANS BIBLIOTHEQUE ECRIRE IMAGE DANS PRESSE PAPIERS ECRIRE NOM RESSOURCE Ecrire proprietes groupe ECRIRE PROPRIETES RESSOURCE Ecrire proprietes utilisateur ECRIRE RESSOURCE ECRIRE RESSOURCE CHAINE ECRIRE RESSOURCE IMAGE ECRIRE RESSOURCE TEXTE ECRIRE TEXTE DANS PRESSE PAPIERS ECRIRE VARIABLE PROCESS ECRIRE VARIABLES ECRITURE ASCII ECRITURE DIF ECRITURE SYLK EDITER ELEMENT EDITER FORMULE EFFACER ENSEMBLE EFFACER FENETRE EFFACER PRESSE PAPIERS EFFACER SELECTION EFFACER SEMAPHORE EFFACER VARIABLE Element parent Elements selectionnes EMPILER ENREGISTREMENT En entete En pied En rupture ENCODER ENDORMIR PROCESS ENLEVER ELEMENT Enregistrement charge Enregistrement modifie ENREGISTREMENT PRECEDENT ENREGISTREMENT SELECTION ENREGISTREMENT SUIVANT Enregistrement verrouille

903 915 1287 1482 1895 1484 1886 1477 1468 1472 1470 1288 1339 1903 923 931 927 854 833 542 736 1281 1557 1332 1906 1155 1163 508 705 707 706 1268 1305 541 496 495 1529 1544 1527 526

4e Dimension - Langage 2137

Enregistrements dans ensemble Enregistrements dans table Enregistrements trouves ENREGISTRER EVENEMENT ENREGISTRER IMAGE ENSEMBLE VIDE Ent ENTIER LONG VERS BLOB ENTIER VERS BLOB ENUMERATION VERS TABLEAU ENVOYER BLOB HTML ENVOYER DONNEES HTTP ENVOYER ENREGISTREMENT ENVOYER ERREUR SOAP ENVOYER FICHIER HTML ENVOYER PAQUET ENVOYER REDIRECTION HTTP ENVOYER TEXTE HTML ENVOYER VARIABLE Est une requete SOAP Est une variable Etat lecture seulement Evenement formulaire Evenement moteur EXECUTER EXECUTER SUR CLIENT Executer sur serveur Exp EXPORTER DONNEES

544 500 1518 613 898 536 766 180 177 1824 1694 1710 270 1933 1691 261 1713 1697 268 1934 1050 522 683 1864 1052 1320 1300 774 935

F
Faux Fenetre formulaire courant Fenetre premier plan Fenetre suivante FERMER DOCUMENT FERMER FENETRE FERMER FICHIER RESSOURCES 211 760 754 755 452 735 1458

2138 4e Dimension - Langage

Fichier application Fichier donnees Fichier donnees verrouille Fichier structure FILTRER EVENEMENT FILTRER FRAPPE CLAVIER Fin de selection Fin sous enregistrement FIXER ALIGNEMENT FIXER COULEUR GRILLE LISTBOX FIXER COULEURS RVB FIXER DESTINATION RECHERCHE FIXER ENTETE HTTP FIXER EXECUTABLE CGI FIXER HAUTEUR LIGNES LISTBOX FIXER HISTORIQUE FIXER IMPRIMANTE COURANTE FIXER INDEX FIXER INTERFACE FIXER LARGEUR COLONNE LISTBOX FIXER LIEN CHAMP FIXER LIENS AUTOMATIQUES FIXER LIMITE RECHERCHE FIXER LIMITES AFFICHAGE WEB FIXER MARGE IMPRESSION FIXER METHODES AUTORISEES FIXER MINUTEUR FIXER NIVEAU COMPARAISON REEL FIXER OPTION IMPRESSION FIXER OPTION WEB SERVICE FIXER PAGE ACCUEIL FIXER PARAMETRE BASE FIXER PARAMETRE WEB SERVICE FIXER PARAMETRE XSLT FIXER PROFONDEUR ECRAN FIXER RACINE HTML FIXER REDIMENSIONNEMENT FORMULAIRE HORIZONTAL FIXER REDIMENSIONNEMENT FORMULAIRE VERTICAL FIXER TAILLE BLOB FIXER TAILLE FORMULAIRE

564 567 569 565 1030 845 1532 1752 1394 1113 1383 1419 1703 1717 1106 580 961 421 991 1099 1068 1066 1425 1687 976 831 713 779 966 1916 1690 425 1914 1998 597 1686 804 805 156 800

4e Dimension - Langage 2139

FIXER TAQUET IMPRESSION FIXER TEMPORISATION WEB FIXER TIMEOUT FIXER TITRES CHAMPS FIXER TITRES TABLES FIXER VARIABLE ENVIRONNEMENT FORMULAIRE ENTREE FORMULAIRE SORTIE Frappe clavier

978 1685 256 998 993 614 814 817 840

G
GENERER APPLICATION GENERER CLES CRYPTAGE GENERER CLIC GENERER DEMANDE CERTIFICAT GENERER EVENEMENT GENERER FRAPPE CLAVIER Gestalt GRAPHE GRAPHE SUR SELECTION 1267 1397 1013 1399 1014 1012 612 879 886

H
Hasard Hauteur barre de menus Hauteur ecran Heure Heure courante 770 599 591 358 356

I
IMAGE VERS BLOB IMAGE VERS GIF IMPORTER DONNEES IMPRESSION ECRAN IMPRIMER ENREGISTREMENT 901 899 933 973 958

2140 4e Dimension - Langage

IMPRIMER ETIQUETTES Imprimer ligne IMPRIMER SELECTION INACTIVER BOUTON INACTIVER LIGNE MENU Indefinie INFORMATION ELEMENT INFORMATIONS PROCESS INSCRIRE CLIENT Inserer chaine INSERER COLONNE LISTBOX INSERER DANS BLOB INSERER ELEMENT INSERER LIGNE LISTBOX INSERER LIGNE MENU INSERER LIGNES INTERSECTION INVERSER FOND ISO vers Mac

939 953 942 1360 1196 1908 1159 1312 1322 233 1094 198 1148 1103 1200 1820 551 1022 243

J
JOINTURE JOUER SON Jour de 1085 988 348

L
LAISSER MESSAGES LANCER PROCESS EXTERNE LANCER SERVEUR WEB Largeur ecran LECTURE ASCII LECTURE DIF LECTURE ECRITURE LECTURE SEULEMENT LECTURE SYLK LIBERER ENREGISTREMENT 1206 615 1683 592 921 929 520 521 925 525

4e Dimension - Langage 2141

Licence disponible LIEN RETOUR Lire acces plugin Lire alignement Lire chaine dans liste LIRE CLIENTS INSCRITS LIRE CORPS HTTP LIRE CORRESPONDANCE PORT SERIE LIRE ENREGISTREMENTS MARQUES LIRE ENTETE HTTP LIRE ERREUR XML LIRE ERREUR XSLT LIRE FICHIER IMAGE Lire formatage Lire hauteur imprimee Lire hauteur lignes listbox LIRE ICONE DOCUMENT Lire ID ressource composant LIRE IMAGE DANS BIBLIOTHEQUE LIRE IMAGE DANS PRESSE PAPIERS Lire imprimante courante Lire information listbox LIRE INFORMATION RESTITUTION LIRE INFORMATION SAUVEGARDE LIRE INFORMATIONS SERIALISATION Lire informations SOAP Lire infos erreur Web Service Lire interface Lire largeur colonne listbox LIRE LIEN CHAMP LIRE LIENS AUTOMATIQUES LIRE LISTE GROUPE LIRE LISTE UTILISATEURS LIRE MARGE IMPRESSION LIRE METHODES AUTORISEES Lire nom ressource Lire nombre colonnes listbox Lire nombre lignes listbox LIRE OBJETS FORMULAIRE LIRE OPTION IMPRESSION

584 1077 1900 1393 1466 1326 1708 260 1547 1705 1995 2000 904 1364 984 1107 483 1489 913 1284 962 1111 1512 1510 582 1935 1925 990 1100 1070 1067 1892 1882 974 832 1480 1097 1105 806 969

2142 4e Dimension - Langage

Lire parametre base LIRE PRESSE PAPIERS LIRE PROPRIETES BLOB LIRE PROPRIETES CHAMP LIRE PROPRIETES ELEMENT LIRE PROPRIETES FORMULAIRE LIRE PROPRIETES GROUPE LIRE PROPRIETES LIEN LIRE PROPRIETES LISTE Lire proprietes ressource LIRE PROPRIETES SAISIE CHAMP LIRE PROPRIETES TABLE LIRE PROPRIETES UTILISATEUR LIRE RECT OBJET LIRE RESSOURCE Lire ressource chaine LIRE RESSOURCE ICONE LIRE RESSOURCE IMAGE Lire ressource texte LIRE RESULTAT WEB SERVICE LIRE TABLEAUX LISTBOX Lire taquet impression Lire texte dans presse papiers Lire texte edite LIRE TITRES CHAMPS LIRE TITRES TABLES Lire utilisateur par defaut LIRE VARIABLE PROCESS LIRE VARIABLES LIRE VARIABLES FORMULAIRE WEB LIRE ZONE IMPRESSION LISTE DE CHAINES VERS TABLEAU LISTE DES DOCUMENTS LISTE DES DOSSIERS LISTE DES POLICES LISTE DES VOLUMES Liste existante LISTE FENETRES LISTE FORMULAIRES UTILISATEURS LISTE IMAGES DANS BIBLIOTHEQUE

423 1282 162 417 1152 799 1893 420 1136 1483 419 415 1884 1388 1475 1467 1473 1471 1469 1922 1109 977 1285 711 1000 997 1878 1336 1905 1700 983 1463 473 472 600 468 1126 748 826 911

4e Dimension - Langage 2143

LISTE IMPRIMANTES LISTE RESSOURCES LISTE SEGMENTS DE DONNEES LISTE TYPES IMAGES LISTE TYPES RESSOURCE LISTE VERS BLOB Log Longueur

960 1461 572 905 1459 173 773 223

M
Mac vers ISO Mac vers Windows Macintosh commande enfoncee Macintosh control enfoncee Macintosh option enfoncee Majusc Majuscule enfoncee Marque ligne menu MARQUER ENREGISTREMENTS MARQUER LIGNE MENU Max MAXIMISER FENETRE Menu choisi MESSAGE Methode appelee sur erreur Methode appelee sur evenement Min MINIMISER FENETRE Minusc Modifie MODIFIER ENREGISTREMENT MODIFIER FORMULAIRE MODIFIER SELECTION MODIFIER SOUS ENREGISTREMENT Modulo Mois de MONTRER BARRES DEFILEMENT LISTBOX MONTRER GRILLE LISTBOX 239 237 1005 1007 1006 230 1001 1192 1545 1193 791 742 1182 1215 1035 1029 790 744 231 1503 1496 823 1538 1500 771 349 1114 1112

2144 4e Dimension - Langage

MONTRER PROCESS Moyenne

1348 789

N
NE PAS VALIDER Nil Niveau Niveau du trigger NIVEAUX DE RUPTURES Nom commande Nom de la machine Nom de la table Nom de police Nom du champ Nom du possesseur Nom methode courante Nombre de champs Nombre de lignes de menu Nombre de menus Nombre de millisecondes Nombre de parametres Nombre de process Nombre de process utilisateurs Nombre de tables Nombre de ticks Nombre ecrans Nombre elements Nombre utilisateurs NOMMER ENSEMBLE Non Nouveau process Nouvel enregistrement Nouvelle liste Num NUMERO COLONNE LISTBOX DEPLACEE Numero dans selection Numero de ligne affichee Numero de police 838 1049 951 1866 946 1053 610 412 601 413 611 1056 411 1185 1184 360 1041 1318 1319 410 359 593 1124 1317 537 212 1297 494 1120 218 1101 1521 1525 602

4e Dimension - Langage 2145

Numero du jour Numero du process courant Numero enregistrement NUMERO LIGNE LISTBOX DEPLACEE Numerotation automatique

352 1309 501 1108 503

O
Objet focus ODBC ANNULER CHARGEMENT ODBC CHARGER ENREGISTREMENT ODBC EXECUTER ODBC EXPORTER ODBC Fin de selection ODBC FIXER OPTION ODBC FIXER PARAMETRE ODBC IMPORTER ODBC LIRE DERNIERE ERREUR ODBC LIRE OPTION ODBC LOGIN ODBC LOGOUT Ouvrir document OUVRIR FICHIER DONNEES Ouvrir fichier ressources OUVRIR PREFERENCES 4D OUVRIR URL WEB 1020 1730 1729 1726 1737 1728 1724 1731 1735 1734 1725 1721 1723 446 577 1452 585 1718

P
Page formulaire courante Page impression PAGE PRECEDENTE PAGE SUIVANTE PARAMETRES DU GRAPHE PARAMETRES IMPRESSION PAS DE TRACE PASSER AU PREMIER PLAN Pendant 812 945 811 810 884 965 1059 1349 703

2146 4e Dimension - Langage

Pointeur vers Pop up menu Position Position dans document Position deposer Position element liste POSITION MESSAGE POSITION SOURIS PREMIERE PAGE Process de la fenetre Process de premier plan Process interrompu PROFONDEUR ECRAN PROPRIETES DOCUMENT PROPRIETES DU TRIGGER PROPRIETES DU VOLUME PROPRIETES GLISSER DEPOSER PROPRIETES IMAGE PROPRIETES PLATE FORME

1051 1009 220 486 869 1154 1220 1008 808 750 1350 1308 595 476 1867 469 870 908 603

Q
QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR QR APPELER SUR COMMANDE BLOB VERS ETAT Chercher colonne Creer zone hors ecran ETAT ETAT VERS BLOB EXECUTER EXECUTER COMMANDE FIXER DESTINATION FIXER DONNEES TOTAUX FIXER ENCADREMENTS FIXER ENTETE ET PIED DE PAGE FIXER ESPACEMENT TOTAUX FIXER INFO COLONNE FIXER INFO LIGNE FIXER MODELE HTML FIXER PROPRIETE DOCUMENT 644 623 645 624 619 622 641 642 626 667 652 648 672 656 663 678 629

4e Dimension - Langage 2147

QR FIXER PROPRIETE TEXTE QR FIXER PROPRIETE ZONE QR FIXER SELECTION QR FIXER TABLE ETAT QR FIXER TRIS QR FIXER TYPE ETAT QR INSERER COLONNE QR Lire colonne deposee QR LIRE DESTINATION QR LIRE DONNEES TOTAUX QR LIRE ENCADREMENTS QR LIRE ENTETE ET PIED DE PAGE QR LIRE ESPACEMENT TOTAUX QR LIRE INFO COLONNE QR Lire info ligne QR Lire modele HTML QR Lire propriete document QR Lire propriete texte QR Lire propriete zone QR LIRE SELECTION QR Lire statut commande QR Lire table etat QR LIRE TRIS QR Lire type etat QR Nombre de colonnes QR SUPPRIMER COLONNE QR SUPPRIMER ZONE HORS ECRAN QUITTER 4D

637 633 646 635 665 631 674 675 628 670 654 650 673 660 664 680 630 639 634 647 643 636 666 632 676 677 625 578

R
Raccourci clavier Racine carree REACTIVER PROCESS RECEVOIR BUFFER RECEVOIR ENREGISTREMENT RECEVOIR PAQUET RECEVOIR VARIABLE REDESSINER 1194 772 1307 266 271 263 269 1021

2148 4e Dimension - Langage

REDESSINER FENETRE REDESSINER LISTE REDIMENSIONNER FENETRE FORMULAIRE REDUIRE SELECTION REEL VERS BLOB REFUSER REGLER SERIE Remplacer caracteres Remplacer chaine RESOUDRE ALIAS RESOUDRE POINTEUR RESTITUER REUNION

737 1127 761 1541 183 852 251 232 235 467 1047 1511 553

S
SAUT DE PAGE SAUVEGARDER SAX AJOUTER CDATA XML SAX AJOUTER COMMENTAIRE XML SAX AJOUTER DOCTYPE XML SAX AJOUTER INSTRUCTION DE TRAITEMENT SAX AJOUTER VALEUR ELEMENT XML SAX ECRIRE OPTIONS XML SAX FERMER ELEMENT XML SAX LIRE CDATA XML SAX LIRE COMMENTAIRE XML SAX LIRE ELEMENT XML SAX LIRE ENTITE XML SAX LIRE INSTRUCTION DE TRAITEMENT XML SAX Lire noeud XML SAX LIRE VALEUR ELEMENT XML SAX LIRE VALEURS DOCUMENT XML SAX OUVRIR ELEMENT XML SAX OUVRIR ELEMENT XML TABLEAUX SCAN INDEX SELECTION LIMITEE VERS TABLEAU SELECTION RETOUR SELECTION VERS TABLEAU 956 1509 1989 1980 1978 1992 1987 1976 1984 1991 1981 1985 1994 1993 1979 1988 1977 1982 1983 1543 1830 1086 1828

4e Dimension - Langage 2149

Selectionner document Selectionner dossier SELECTIONNER ELEMENTS PAR POSITION SELECTIONNER ELEMENTS PAR REFERENCE SELECTIONNER LIGNE LISTBOX SELECTIONNER TEXTE Self Semaphore SIECLE PAR DEFAUT Sin Somme Somme des carres Sous chaine SOUS ENREGISTREMENT PRECEDENT SOUS ENREGISTREMENT SUIVANT Sous enregistrements trouves Sous total STATISTIQUES DU CACHE WEB Statut du process STOCKER ANCIEN STOCKER ENREGISTREMENT STOCKER ENSEMBLE STOCKER LISTE STOCKER SUR LIEN STOP Style ligne menu Supprimer chaine SUPPRIMER COLONNE LISTBOX SUPPRIMER DANS BLOB SUPPRIMER DOCUMENT SUPPRIMER DOSSIER SUPPRIMER ELEMENT SUPPRIMER ENREGISTREMENT SUPPRIMER FORMULAIRE UTILISATEUR SUPPRIMER IMAGE DANS BIBLIOTHEQUE SUPPRIMER LIGNE LISTBOX SUPPRIMER LIGNE MENU SUPPRIMER LIGNES SUPPRIMER LISTE SUPPRIMER MESSAGES

456 461 1166 1169 1102 1018 1046 1329 361 775 788 795 221 1750 1749 1745 948 1715 1310 1083 497 545 1119 1081 1036 1189 234 1096 199 455 464 1157 499 827 918 1104 1201 1821 1122 1205

2150 4e Dimension - Langage

SUPPRIMER RESSOURCE SUPPRIMER SELECTION SUPPRIMER SOUS ENREGISTREMENT SUPPRIMER UTILISATEUR SUSPENDRE PROCESS

1487 1519 1742 1880 1306

T
Table Table du formulaire courant TABLE PAR DEFAUT Table par defaut courante TABLEAU ALPHA TABLEAU BOOLEEN TABLEAU BOOLEEN SUR ENSEMBLE TABLEAU DATE TABLEAU ENTIER TABLEAU ENTIER LONG TABLEAU ENTIER LONG SUR SELECTION TABLEAU IMAGE TABLEAU MULTI TRI TABLEAU POINTEUR TABLEAU REEL TABLEAU TEXTE TABLEAU VERS ENUMERATION TABLEAU VERS LISTE DE CHAINES TABLEAU VERS SELECTION Taille BLOB Taille document Taille image TAILLE OBJET OPTIMALE Taille tableau Tan Tester chemin acces Tester presse papiers Tester semaphore Texte ligne menu TEXTE SELECTIONNE TEXTE VERS BLOB 414 1760 1757 1759 1798 1804 1838 1802 1792 1794 1837 1806 1813 1808 1796 1800 1826 1464 1833 157 484 907 1391 1810 777 459 1289 1333 1187 1017 186

4e Dimension - Langage 2151

TITRE BOUTON Titre fenetre Titre menu TOUS LES SOUS ENREGISTREMENTS TOUT SELECTIONNER TRACE TRAITER BALISES HTML Transaction en cours TRIER TRIER COLONNES LISTBOX TRIER LISTE TRIER PAR FORMULE TRIER SOUS ENREGISTREMENTS TRIER SUR INDEX TRIER TABLEAU Troncature Trouver clef index Type Type application Type document Type fenetre Type version

1362 745 1186 1744 1517 1057 1698 1849 1428 1098 1138 1433 1753 248 1811 769 1427 1043 559 442 749 560

U
Utilisateur courant Utilisateur supprime UTILISATEURS VERS BLOB UTILISER ENSEMBLE UTILISER FILTRE UTILISER PARAMETRES IMPRESSION UTILISER SELECTION 1877 1881 1889 539 258 963 1556

V
VALEURS DISTINCTES VALEURS OPTION IMPRESSION VALIDER 1835 971 837

2152 4e Dimension - Langage

Valider mot de passe VALIDER TRANSACTION VARIABLE VERS BLOB VARIABLE VERS VARIABLE Variance Verrouillage majuscule enfoncee VERROUILLE PAR Version application VISUALISER SELECTION Vrai

1875 1847 168 1342 793 1002 527 561 1534 210

W
Windows Alt enfoncee Windows Ctrl enfoncee Windows vers Mac 1004 1003 238

4e Dimension - Langage 2153

2154 4e Dimension - Langage

S-ar putea să vă placă și