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

AS/400 Discussion :

Procédure sur As400


Sujet :

AS/400

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Procédure sur As400
    Bonjour,

    J'aborde l'appel de procédure, et comme ma boite ne fait aucune formation , j'ai qq soucis pour mettre en oeuvre. Pour mon exemple, j'ai fais une procédure qui me calcule la transformation d'une date (cf,le code dessou) de 'yy/mm/dd' en 'mm/dd/ccyy' :


    H NOMAIN
    D Proc001 pr
    D 8A
    D 10A
    *
    *
    P PROC001 B
    D PROC001 Pi
    D var1 8A
    D var2 10A
    /free
    // 'yy/mm/dd' TO 'mm/dd/ccyy'
    var2 = %char(%date(var1:*ymd/):*usa/);
    RETURN ;
    /end-free

    J'ai fais 15 pour en faire un module .
    Maintenant avec l'option 27 (crtsrvpgm) pour en faire un pgm de service ça coince, voila la log:

    Message . . . . : RICAWRK/QRPGLESRC.PGB ligne 1 : ***ERREUR Syntaxe
    incorrecte.
    Cause . . . . . : Une erreur de syntaxe a été détectée dans le fichier
    source en langage de liage. Cette erreur s'est produite lors de la
    compilation de la ligne 1 du membre source en langage de liage PGB, dans l
    fichier QRPGLESRC de la bibliothèque RICAWRK, durant une tentative de
    création du programme de service PGB dans la bibliothèque RICAWRK.
    Que faire . . . : Corrigez l'erreur de syntaxe et relancez les commandes
    CRTSRVPGM (Créer un programme de service) ou UPDSRVPGM (Mettre à jour un
    programme de service).
    Technical description . . . . . . . . : The service program is not created
    Autre question il faut créer je crois un BNDDIR auquel j'ajoute mon pgm de service. Et ensuite mettre en carte h mon bnddir et appeler la procédure par un CALLP nomprocédure(:parm :parm). Est ce exact ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    686
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 686
    Points : 987
    Points
    987
    Par défaut
    Bonjour,

    Alors plusieurs choses :
    • Un programme de service est sensé (mais ce n'est pas obligatoire hein...) regrouper plusieurs fonctions. Mets y donc toutes tes fonctions de traitement de dates, chaines et nombres par exemple

    • Pour qu'une procédure puisse être utilisée ailleurs que dans le programme où elle se situe, il te manque le mot clé EXPORT sur la ligne P PROC001 B ...

    • Pour qu'il puisse être créé le programme de service nécessite un source de liage (généralement dans le fichier QSRVSRC). Tu y mettras la liste des procédures à exporter :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
                  STRPGMEXP  LVLCHK(*NO)                              
                  EXPORT     SYMBOL(PROC001)                            
                  ENDPGMEXP
      Attention, le nom de la procédure doit être ici en majuscules, et tu ne dois jamais changé l'ordre des procédures. Ajoute les à la liste.
      Donne le même nom que le nom de ton programme de service à ce membre source, ou indique l'autre nom au paramètre EXPORT (et paramètre SRCFILE pour le nom du fichier et bibliothèque si tu n'utilise pas les fichiers par défaut).

    • Enfin, oui tu dois créer un répertoire de liage dans lequel tu ajouteras ton programme de service, et que tu ajouteras dans tes cartes H avec la syntaxe BndDir(NomduRepertoireDeLiage)


    Maintenant je ne saurais trop te conseiller de chercher un peu sur le net, tu trouveras des tas d'exemples et de conseils.

    Edit :
    Un CallP ce n'est intéressant que si ta procédure ne retourne pas de valeur.
    Ici, je n'aurais pas fais comme çà, mais transmis un seul paramètre, avec une valeur en retour. Comme çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    P Cvt_DatIsoAToUsaA...                                              
    P                 B                   Export                        
    D Cvt_DatIsoAToUsaA...                                              
    D                 PI            10a                                 
    D  P_DatIsoA                     8a   Const                         
                                                                        
    D  W_DatUsaA      s             10a                                 
                                                                        
     /free                                                              
       // 'yy/mm/dd' TO 'mm/dd/ccyy'                                    
       W_DatUsaA = %char(%date(P_DatIsoA:*ymd/):*usa/);                 
       Return W_DatUsaA ;                                               
     /end-free                                                          
    P Cvt_DatIsoAToUsaA...                                              
    P                 E
    Ensuite dans le programme appelant tu fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DatUsaA = Cvt_DatIsoAToUsaA(DatIsoA);

  3. #3
    Membre averti
    Homme Profil pro
    Analyste-Programmeur IBM i, IBM Cognos TM1
    Inscrit en
    Août 2002
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-Programmeur IBM i, IBM Cognos TM1
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2002
    Messages : 234
    Points : 355
    Points
    355
    Par défaut
    Bonjour,

    Il y a des cours gratuits chez IBM :

    http://www-304.ibm.com/jct03001c/ser...age&c=a0000656

    Le cours sur l'ILE a la référence OE41.

    Pour mat part, je fait :
    un RPGLE, un BND et un ILESRVPGM.
    Tu utilises arcad ?

    larry57

  4. #4
    Membre averti
    Homme Profil pro
    Analyste-Programmeur IBM i, IBM Cognos TM1
    Inscrit en
    Août 2002
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-Programmeur IBM i, IBM Cognos TM1
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2002
    Messages : 234
    Points : 355
    Points
    355
    Par défaut
    Citation Envoyé par m4k-Hurrican Voir le message
    Maintenant je ne saurais trop te conseiller de chercher un peu sur le net, tu trouveras des tas d'exemples et de conseils.
    Si tu as un lien...

    Larry57

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 18
    Points : 13
    Points
    13
    Par défaut suite
    je retarde un peu mais je vais essayer de suite, merci pour les infos.
    Une derniere question de bleu. La différence entre l'appel d'un pgm de service et un appel de pgm externe, quelle est la différence? le fait de pouvoir pgm ds un autre lange et la possibilité de l'appeler dans un rpg ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    686
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 686
    Points : 987
    Points
    987
    Par défaut
    Attention, un programme de service n'est pas un programme dans le sens habituel. C'est plutôt une bibliothèque de fonctions.
    On appelle les procédures qu'il contient, pas le programme lui-même.
    L'avantage conséquent d'un programme de service est de regrouper un ensemble de fonctions sans nécessiter la recompilation des programmes utilisant ces fonctions.
    Exemple :
    J'ai personnellement un programme de service dans lequel j'ai une tonne de fonctions. Du traitement de chaînes de caractères, nombres, dates, à l'affichage d'une fenêtre d'erreur standardisée. Lorsque pour des raisons techniques j'ai eu à modifier la procédure d'affichage d'erreur, j'ai modifié le source, reconstruit le module puis le programme de service, et ... c'est tout. Les dizaines de programmes utilisant cette fonction ont immédiatement bénéficié des améliorations. J'ai rajouté des paramètres optionnels, les programmes existants n'y ont vu que du feu. Seuls ceux en ayant besoin et que j'ai modifié à dessein, ont profité des extensions apportées. (en fait j'ai recréé la commande/fonction MsgBox de VisualBasic en apportant des paramètres petit à petit).
    Autre exemple :
    Ta procédure de traitement de date va être utilisée dans x programmes. Tu t'aperçois au bout de quelques temps que tu as besoin de rajouter un traitement d'erreur. Tu l'ajoutes à ta procédure, et au lieu de recompiler tous les x programmes liés à la fonction, tu recompiles le module, tu recrées le programme de service et c'est tout. Gain de temps, gain de lisibilité, gain de facilité de maintenance, c'est tout bénef.

Discussions similaires

  1. [Conception] connection base db2 sur as400 en php
    Par moumout dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/09/2011, 00h03
  2. interface graphique sur as400
    Par horalass dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 14/08/2006, 20h28
  3. optimisation des requêtes sur AS400
    Par horalass dans le forum DB2
    Réponses: 2
    Dernier message: 10/08/2006, 22h22
  4. [Sybase] Execution procédure sur autre Serveur
    Par MashiMaro dans le forum Sybase
    Réponses: 2
    Dernier message: 03/02/2004, 11h45
  5. Connexion sur AS400
    Par fdloisel dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/01/2004, 16h18

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