IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

4D Discussion :

Documentation demandé


Sujet :

4D

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Documentation demandé
    Bonjour je cherche de la docs sur la création des plugins car ce que fourni 4D SA n'est pas tres fourni, en fait c'est plus dans le fonctionnement du plugin que je suis interessé, l'initialisation et tout...

  2. #2
    Membre averti Avatar de Stopher
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juin 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 198
    Points : 446
    Points
    446
    Par défaut
    salut ,
    moi aussi , je doit developper des plugin pour 4d (pour mon stage) n'y connaissant pas grand chose en prog 4D j'ai pas mal de mal au dev de plugin ... en c/c++ pas de probleme , mais pour l'adapter au plugin (vide) generé par le 4D Plugin Wizard je rencontre pas mal de probleme , mon but etant d'integrer des controls activeX ...

    donc si tu trouve de la doc et bien je suis carrement interessé car pour l'instant , je suis uniquement sur la doc de 4D pas terrible en effet ...
    cherchant moi meme , si j'ai quelque chose je t'en ferai part

    voilà bon courage pour tes recherche cordialement
    christophe

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Tout ce que je peu te dire c'est que le code que tu dois insérer se trouve la où 4D plugin insére la ligne de commentaire //place your code here.
    Pour ce qui est des activeX je ne pourrais pas t'aider je n'y est jamais toucher et je devellope sous OS X.

    Par contre, peut etre pourras-tu m'aider, je voulais savoir si le plugin se lance au lancement de 4D ou bien lors du premier appel, et si il se ferme lors de la fin d'execution de la fonction ou a la fermeture de 4D...

    Je dois gerer un Index externe sur des champs texte et faire des recherche dessus ce que 4D n'autorise pas nativement...

    Tout ce que tu doit savoir c'est le nom de tes variables d'entrée de de sortie, apparement pas besoin de faire de return pour retourner une valeur, le code generé par 4D s'en occupe en executant une fonction en fin de code.
    Tu ne dois mettre que les traitements...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Points : 22
    Points
    22
    Par défaut Doc API 4D
    Bonjour,

    Bon je vais essayé de vous répondre par étape.

    La documentation de l'api 4D 2003 se trouve ici :

    http://www.4d.fr/documentation/4ddoc...KC/XKCMDUS.HTM

    La documentation de l'api 4D 2004 se trouve ici :

    http://www.4d.fr/documentation/4ddoc...KC/XKCMDUS.HTM

    Pour débuter un plugin il faut utiliser dans un premier temps 4D Plugin Wizard (2003 ou 2004 en fonction du 4D que vous utilisez) qui permet de générer le squelette du plugin avec vos points d'entrées pour l'utilisateur ainsi que les zones externes.

    Attention cependant pour ce qui concerne les plugins 2003 et 2004 sous mac les fichiers ".rsrc" sont différents.

    En version 2003 les ressources se trouvent dans la branche ressource alors qu'en 2004 elles se trouvent dans la partie data.

    Pour le pb de l'activeX, est-ce pour faire une zone externe ?

    Je suis à l'écoute pour d'autres questions.

    TODO

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    LOL, bon alors la on va pas etre d'accord.
    Le probleme c'est que la doc de 4D (en ligne que j'ai deja parcouru) ne me convient pas du tout, il explique les differentes methodes utilisé par l'api pour executer des requetes 4D....En aucun cas il n'explique comment s'initialise lee plugin, comment ca fonctionne...Bref du bon vieu systeme proprietaire malheureusement...je n'ai vu à aucun moment comment ca fonctionne, apres j'ai peut etre mal cherché...De plus tu me parle de ".rsrc"
    , je t'avou que je savais meme pas que ca existé...je debute la programation sous OS X et le seul outil de dev est XCodeTools, metrowerks codewarriors n'etant plus supporté sous OS X, je me retrouve avec un truc importé comme j'ai pu et j'ai du bidouille un .h pour que la compilation fonctionne.Bref c'est du grand n'importe quoi.mais bon a part la doc fourni par 4D où peut on se renseigner??parce que leurs docs ne rempli pas ma soif de connaissance

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    Re

    Par contre, peut etre pourras-tu m'aider, je voulais savoir si le plugin se lance au lancement de 4D ou bien lors du premier appel, et si il se ferme lors de la fin d'execution de la fonction ou a la fermeture de 4D...
    Au lancement de la base 4D le plugin est chargé puis est appelé avec la constante "InitPlugin / ClientinitPlugIn / ServerInitPlugin"

    Vous pouvez alors déclarer tous ce qui sera global à votre plugin un process par exemple un fichier ou un handle commun aux differentes instances etc ....


    A la fermeture du plugin celui ci est appelé avec la constante "DeinitPlugin / ClientDeinitPlugin / ServerDeinitPlugin"

    Vous en profiterez pour libèrer tout ce qui a été alloué ou ouvert (fichiers / sockets etc....)

    Je dois gerer un Index externe sur des champs texte et faire des recherche dessus ce que 4D n'autorise pas nativement...
    Je suppose que ce que vous voulez faire doit fonctionner en multi-process donc sur l'evenement "CreateProcess" initialiser par exemple votre environnement "de vue" et détruisez les sur "CloseProcess" qui intervient à la mort d'un process (4D)


    Tout ce que tu doit savoir c'est le nom de tes variables d'entrée de de sortie, apparement pas besoin de faire de return pour retourner une valeur, le code generé par 4D s'en occupe en executant une fonction en fin de code.
    Tu ne dois mettre que les traitements...

    Pour ce qui est de l'echange de parametres entre 4D et votre plugin :

    Parcourir ici :
    http://www.4d.fr/documentation/4ddoc...U/XKU00021.HTM

    PA_GetXXXX permet de recupérer le parametre typé qui est passé par l'utilisateur developpeur.

    PA_SetXXXX permet de fixer la valeur du parametre passé par l'utilisateur developpeur.

    PA_ReturnXXXX permet de fixer la valeur de retour de la fonction




    exemple 4D :
    C_ENTIER LONG ($X;$result)
    $X=1
    $result = MyExternalFunction($x)


    Code C

    long x_param = PA_GetLongParameter (params, 1) * 2;
    long result = x_param*4;

    PA_SetLongParameter (params, 1, x_param);
    PA_ReturnLong (params1 result);
    Donc après l'appel $result = 8 et $x=2


    TODO

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Draekonyss
    LOL, bon alors la on va pas etre d'accord.
    Il suffit qu'on soit sur la même longueur d'onde

    Perso je developpe de plugins sur 4D depuis 1989 donc on va bien pouvoir te guider.

    Citation Envoyé par Draekonyss
    Le probleme c'est que la doc de 4D (en ligne que j'ai deja parcouru) ne me convient pas du tout, il explique les differentes methodes utilisé par l'api pour executer des requetes 4D....En aucun cas il n'explique comment s'initialise lee plugin, comment ca fonctionne...
    Oui c'est pour ça que je vais tenté de répondre à vos attentes.

    Citation Envoyé par Draekonyss
    Bref du bon vieu systeme proprietaire malheureusement...
    Non historiquement les plugins 4D ont la même structure que les accessoires de bureau que macos. Une ressource chargé en memoire et que l'on appelait via une trap en lui passant des parametres via un ProcPtr.

    Citation Envoyé par Draekonyss
    je n'ai vu à aucun moment comment ca fonctionne, apres j'ai peut etre mal cherché...De plus tu me parle de ".rsrc"
    , je t'avou que je savais meme pas que ca existé...
    Toujours un héritage de macos qui décomposait les fichiers en deux parties la partie data tel qu'on l'utilise basiquement puis une partie dite de ressource qui sous 68000 permettait d'y stocker le code d'execution de l'appli ainsi que la definition des objets utiles aux frameworks.

    Citation Envoyé par Draekonyss
    je debute la programation sous OS X et le seul outil de dev est XCodeTools, metrowerks codewarriors n'etant plus supporté sous OS X, je me retrouve avec un truc importé comme j'ai pu et j'ai du bidouille un .h pour que la compilation fonctionne.Bref c'est du grand n'importe quoi.
    PluginWizard te genere un fichier projet XCode se compile t'il avec ?

    Sinon

    Il me faut connaître la version de 4D et d'XCode.

    Citation Envoyé par Draekonyss
    mais bon a part la doc fourni par 4D où peut on se renseigner??parce que leurs docs ne rempli pas ma soif de connaissance
    Ici non

    TODO

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    En fait mon index sera propre a la base et execute que sur le server, telle que je le vois, j'avou avoir encore du mal a me representer ce qui est propre au serveur et ce qui est propre au client.
    Sachant que je crée l'index au lancement du serveur, et j'ajoute des entree a chaque fois qu'une nouvelle fiche est créer. (désolé j'ai du mal avec l'orthographe et la grammaire)

    en gros mes commandes du plugins seront utilisé que dans des procedures stocké...

    Bon j'edit mon message tu a repost avant moi...
    Merci pour tous les renseignements ca fait plaisir.
    Donc je suis sous XCodetools(me rapelle jamais du vrai nom....) version 2 (mac os X.4) et la version de 4D est la 2003.x (.6 me semble mais a vérifier)
    Ah oui et le code généré par PluginWizard se compiler pas s'est pour ca que j'ai du 'bidouillé' un .h, une histoire de pascal void qui enlevé marche, bon j'ai beaucoup de warning mais ca va..

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Draekonyss
    En fait mon index sera propre a la base et execute que sur le server, telle que je le vois, j'avou avoir encore du mal a me representer ce qui est propre au serveur et ce qui est propre au client.
    Sachant que je crée l'index au lancement du serveur, et j'ajoute des entree a chaque fois qu'une nouvelle fiche est créer. (désolé j'ai du mal avec l'orthographe et la grammaire)

    en gros mes commandes du plugins seront utilisé que dans des procedures stocké...

    Donc sur l'evenement ServerInitPlugin il faut générer le process sur le serveur qui gerera l'index. Pour le maintenir, il faudra songer au niveau des triggers de l'informer que tel record à été modifié ou ajouté pour mettre à jour les indexs.

    Pour la partie cliente, lors d'une recherche il faudra utiliser les commandes de communication client serveur pour emmettre la requete et recevoir la réponse avec les commandes suivantes :

    PA_SendDataToServer
    http://www.4d.fr/documentation/4ddoc...U/CMU84576.HTM

    PA_ReceiveDataFromServer
    http://www.4d.fr/documentation/4ddoc...U/CMU84575.HTM

    TODO

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Ce n'est pas possible de dire du point de vue server que tel methode ne sera execute que sur le server??plutot que de passer par des communications server-client??

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    Bon ma config plugin 2003 mac.

    4D 2003.7 XCode 2.2.1

    Une fois XCode installé il faut executer dans le terminal la ligne suivante pour pouvoir debugger aisément dans XCode :

    defaults write com.apple.Xcode UsePerConfigurationBuildLocations NO
    Ensuite dans le projet si c'est un projet en C++ il faut renommer 4DPlugin.c en 4DPlugin.cpp.

    Liaison de 4D au projet :

    Il faut ajouter un executable dans "Executables" menu contextuel ->Add ->New Custom Executable..

    Pour le chemin d'acces on a ceci losque l'on selectionne 4D:
    ../4e Dimension.app

    il faut completer le chemin d'acces avec :
    /Contents/MacOS/4th Dimension

    Pour au final avoir :

    ../4e Dimension.app/Contents/MacOS/4th Dimension

    Ensuite mettre un point d'arrêt dans XCode dans le plugin main sur la ligne switch( selector ) par exemple

    void PluginMain( long selector, PA_PluginParameters params )
    {
    switch( selector )
    {
    case kInitPlugin :
    InitPlugin();
    break;

    case kDeinitPlugin :
    DeinitPlugin();
    break;
    }
    }
    Bon ensuite il faut bien configurer la base de test.

    Donc dans le dossier de developpement du plugin, on a :

    Un dossier build dans lequel il y a un dossier Mac4DX il faut mettre la base de test au niveau du dossier Mac4DX

    Ensuite si la compilation s'effectue, il faut demander Build and Debug ...

    Ouvrir la base de test située à coté du dossier Mac4DX.

    En théorie (c'est à dire si ca fonctionne ) le debugger de XCode va s'arrêter sur la ligne :

    switch( selector )

    Evidement tout ceci dans le meilleur des mondes si tu as un soucis je suis toujours à l'écoute.


    TODO

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Draekonyss
    Ce n'est pas possible de dire du point de vue server que tel methode ne sera execute que sur le server??plutot que de passer par des communications server-client??
    Bon si je resume ce que tu veux faire c'est :
    Créer un outil d'indexation des champs Texte de 4D.

    4D fonctionne en client serveur la maintenance de ton index doit s'opérer sur le serveur via les triggers des tables (ils sont d'ailleurs executés sur le serveur).

    Je ne pense pas qu'il soit souhaitable de répliquer tes informations d'indexation sur les clients sinon bonjour le trafic reseau.

    Donc pour pouvoir acceder a une recherche indexée il va falloir l'exécutée là ou se trouve tes informations d'indexation c'est à dire sur le serveur.

    Donc au demarrage de ton plugin si on est autre part que sur un 4D Client il faut lancer un process qui va se charger de maintenir tes indexs. C'est un process qui est autonome consulter :

    http://www.4d.fr/documentation/4ddoc...U/CMU84462.HTM

    Citation Envoyé par Draekonyss
    en gros mes commandes du plugins seront utilisé que dans des procedures stocké...
    Dans ce cas au niveau de l'appel de chaque routine bien tester que l'environnement d'exécution ne soit pas sur 4D Client.
    Ensuite au niveau du langage de requete du plugin si tu es sur un client tu formule ta requete, et il faut l'envoyer au serveur pour qu'il te genere un resultat et ensuite le retransmettre au Client.

    Je ne dis pas que ce soit simple ou la solution, mais si le problème m'était posé, j'agirai de cette manière.

    Sinon il reste aussi la possibilité (plus lourde) de gérer des sockets de communication.
    Tout dépend de ce qui est le plus urgent, la preuve que c'est faisable ou que ce soit le plus rapide possible

    J'espère avoir été clair si ce n'est pas le cas ....

    TODO

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Draekonyss
    Ah oui et le code généré par PluginWizard se compiler pas s'est pour ca que j'ai du 'bidouillé' un .h, une histoire de pascal void qui enlevé marche, bon j'ai beaucoup de warning mais ca va..
    Tiens voici une partie de code de plugin type que j'ai :

    #include "4DPlugin.h"

    void PluginMain( long selector, PA_PluginParameters params )
    {
    switch( selector )
    {
    case kInitPlugin :
    InitPlugin();
    break;

    case kDeinitPlugin :
    DeinitPlugin();
    break;

    case kServerInitPlugin :
    ServeurInitPlugin();
    break;

    case kServerDeinitPlugin :
    ServeurDeinitPlugin();
    break;

    case kClientConnect :
    ClientConnect();
    break;

    case kClientDisconnect :
    ClientDisconnect();
    break;

    case kCreateProcess :
    CreateProcess();
    break;

    case kCloseProcess :
    CloseProcess();
    break;

    // etc etc

    }
    }

    #pragma mark ----PlugIn Events


    void InitPlugin()
    {
    // write initialisation code here...

    char homePage4D[] = "http://www.4d.fr/";
    PA_OpenURL(homePage4D, strlen(homePage4D));
    }

    void DeinitPlugin()
    {
    // write deinitialisation code here...
    }

    void ServeurInitPlugin()
    {
    // write server initialisation code here...
    }

    void ServeurDeinitPlugin()
    {
    // write server deinitialisation code here...
    }

    void ClientConnect()
    {
    // write Client Connection code here...
    }

    void ClientDisconnect()
    {
    // write Client Deconnection code here...
    }

    void CreateProcess()
    {
    // write create process code here...
    }

    void CloseProcess()
    {
    // write close process code here...
    }
    Petit rappel sur les codes destinés aux plugins définis dans PublicTypes.h

    // different selectors that can be sent to plugin for different event
    #define kServerDeinitPlugin -220
    #define kServerCleanUp -207
    #define kWriteOnServer -206
    #define kReadOnServer -205
    #define kClientDisconnect -202
    #define kClientConnect -201
    #define kServerInitPlugin -200
    #define kPackageGiveMemory -10
    #define kCreateProcess -3 // called each time a process is created
    #define kCloseProcess -4 // called each time a process is removed
    #define kClientDeinitPlugin -2
    #define kDeinitPlugin kClientDeinitPlugin
    #define kClientInitPlugin -1
    #define kInitPlugin kClientInitPlugin
    TODO

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Merci, j'en demandé pas tant...
    Bon derniere question, j'ai pas trouvé de commandes pour récupérer la date du jour dans les fonctions de l'API 4D, y a un type pour la date PA_Date (pas sur du nom, mais il existe le type) par contre pas de fonction por récuperer la date du jour....

  15. #15
    Membre averti Avatar de Stopher
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juin 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 198
    Points : 446
    Points
    446
    Par défaut pour le pb de l'activeX
    ok pour le renomage en point cpp ... c tout bete , mais il fallait le savoir lol .. merci en tt cas

    sinon , oui tt a fait , mon but , et d'inserer un control activeX à une zone externe seulement , lorsque j'essaie d'ajouter une class MFC pour les control activeX ou tout autre Form , et bien soit il m'est impossible de l'ajouter , soit il me marque une erreur lor duchargement du "designer" le message est le suivant : "The designer could not be shown for this file because none of classes within it can be designed " ...

    peut etre n'est-ce pas la bonne facon de proceder pour ajouter ce genre de chose ... je ne c pas ... ???

  16. #16
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 114
    Points
    114
    Par défaut
    Bonjour à tout le monde,

    Citation Envoyé par Draekonyss
    Merci, j'en demandé pas tant...
    Bon derniere question, j'ai pas trouvé de commandes pour récupérer la date du jour dans les fonctions de l'API 4D, y a un type pour la date PA_Date (pas sur du nom, mais il existe le type) par contre pas de fonction por récuperer la date du jour....
    C'est parce que ce n'est pas nécessaire. Pour récupérer la date du jour, tu peux utiliser les routines du système ou d'une bibliothèque quelconque (C, C++). Si tu veux absolument le faire en 4D, tu dois passer par PA_ExecuteFunction, et récupérer la valeur dans une PA_Variable, genre :

    char toExecute[256] = "Date du jour;
    PA_Variable ddj = PA_ExecuteFunction(toExecute;std::strlen(toExecute);
    => tu as l'info dans le champ fDate de ddj (fDate est un PA_Date, cf PublicTypes.h) :
    ddj.uValue. fDate.fDay
    ddj.uValue. fDate.fMonth
    ddj.uValue. fDate.fYear

    A+

    Thibaud

Discussions similaires

  1. Demande de sauvegarde à la création d'un document
    Par francoisch dans le forum Word
    Réponses: 14
    Dernier message: 18/01/2008, 14h25
  2. exemple de document demande de formation
    Par JauB dans le forum Emploi
    Réponses: 0
    Dernier message: 17/12/2007, 11h24
  3. Demande de documentation utile BIRT
    Par dzenakhra dans le forum BIRT
    Réponses: 11
    Dernier message: 13/06/2007, 16h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo