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 :

comment exécuter des programmes AS400 en dot/net


Sujet :

AS/400

  1. #21
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par FORMULARY Voir le message
    Le mot-clé EXTERNAL NAME indique le nom de la bibliothèque et du programme correspondant à ta procédure.
    Tu lui demandes donc de créer une procédure Daily dans la bibliothèque Trust, qui appellera le programme WRKSYSSTS de la bibliothèque *LIBL
    Ce programme est un SQLRPGLE qui retourne un seul result set.

    1) WRKSYSSTS n'est pas un nom à donner à un programme utilisateur, car c'est le nom d'une commande système. Il pourrait y avoir confusion.
    2) Le programme WRKSYSSTS existe-t-il ? Et est-ce bien un programme SQLRPGLE ?
    OK je vois de mieux en mieux

    je viens de modifier ma requête en conséquence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
                Cmd.CommandText = "ALTER procedure TRUST.daily() " +
                                  "DYNAMIC RESULT SETS 1 " +
                                  "LANGUAGE RPGLE " +
                                  "SPECIFIC TRUST.daily " +
                                  "NOT DETERMINISTIC " +
                                  "READS SQL DATA " +
                                  "CALLED ON NULL INPUT " +
                                  "EXTERNAL NAME 'CALL TRUST/CHKAS_INT' " +
                                  "PARAMETER STYLE GENERAL;";
    
                Cmd.ExecuteNonQuery();
    mon erreur est à présent :

    SQL0104 Elément syntaxique SPECIFIC n'est pas correct. Eléments possibles : NOT DETERMINISTIC CONTAINS NO READS MODIFIES.

  2. #22
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par FORMULARY Voir le message
    ...

    1) WRKSYSSTS n'est pas un nom à donner à un programme utilisateur, car c'est le nom d'une commande système. Il pourrait y avoir confusion.
    2) Le programme WRKSYSSTS existe-t-il ? Et est-ce bien un programme SQLRPGLE ?
    oui je comprends, il s'agit de la commande system AS400
    Comment puis-je l'exécuter ?
    Simplement sans le CALL ?

  3. #23
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    691
    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 : 691
    Points : 996
    Points
    996
    Par défaut
    Citation Envoyé par Hepil Voir le message
    1 - si je tape CHKAS_INT, j'ai une erreur qui me dit que la commande n'existe pas dans la bibliothèque courante *LIBL
    2 - si je charge ma bibliothèque TRUST (go trust) : j'ai exactement le même message
    3 - si je tape call CHKAS_INT : alors là c'est bon et le résultat est là
    Sur la ligne de commande, cela indique juste que CHKAS_INT est un programme, et non une commande.
    Si en revanche le CALL CHKAS_INT fonctionne dans l'interface de STRSQL, c'est qu'il y a une procédure stockée SQL.

    Je vais essayer d'être plus explicite concernant les données retournées.
    Quand tu appelles un programme, il peut retourner des données (à la manière d'une fonction). Ceci fonctionnera si tu appelles le programme dans SQL via une procédure stockée.
    En revanche, il se peut que le programme tente d'afficher des données (écran vert). Pour faire un parallèle avec la commande WRKACTJOB, celle ci t'affiche la liste des travaux. Là, tu as besoin d'être sous l'émulateur dans l'environnement d'exécution pour que çà fonctionne. Et un appel dans SQL via une procédure stockée ne fonctionnera alors pas.
    Que fait exactement le programme CHKAS_INT ?

  4. #24
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    691
    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 : 691
    Points : 996
    Points
    996
    Par défaut
    Citation Envoyé par Hepil Voir le message
    oui je comprends, il s'agit de la commande system AS400
    Comment puis-je l'exécuter ?
    Simplement sans le CALL ?
    Çà n'est pas possible à priori. Car WRKSYSSTS sort des données sur écran ou imprimante.

    Edit : Toutefois pour information, on peut appeler une commande en passant un CALL au programme d'exécution de commande QCMDEXC, et la commande en paramètre.
    call qcmdexc ('commande', longueurCommande)
    Attention, longueurCommande demande parfois d'être défini dans SQL avec un format spécial, respectant l'antique format décimal CL (15 dont 5).

  5. #25
    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
    Il manque dans ton print screen le F11 pour avoir le détail des tes E-S. Tu t'es arrêté trop tôt.
    Rajoute aussi un print de ton CHKAS_INT.


    m4k-Hurrican Sur la ligne de commande, cela indique juste que CHKAS_INT est un programme, et non une commande.
    Si en revanche le CALL CHKAS_INT fonctionne dans l'interface de STRSQL, c'est qu'il y a une procédure stockée SQL.
    Pas forcément, je peux appeler n'importe quelle programme via STRSQL.

    Larry57

  6. #26
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut
    External name correspond au nom AS/400 (ou plutot iSeries, pardon power, pardon i5, pardon i tout court)
    Là tu lui donnes une commande ...
    Il faut EXTERNAL NAME TRUST.nomduprogramme

    Que fait CHKAS_INT et surtout que retourne-t-il comme paramètre ?

  7. #27
    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
    A l'époque, on a fait une présentation ici.

    http://www.common.lu/WEBSITE/COMMON/...rogramming.pdf

  8. #28
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    691
    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 : 691
    Points : 996
    Points
    996
    Par défaut
    Citation Envoyé par larry57 Voir le message
    Pas forcément, je peux appeler n'importe quelle programme via STRSQL.
    J'avais jamais fait gaffe ! Il faut dire que j'utilise plutôt l'interface SQL d'Opnav. je viens d'en apprendre une moi !

  9. #29
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par m4k-Hurrican Voir le message
    Sur la ligne de commande, cela indique juste que CHKAS_INT est un programme, et non une commande.
    Si en revanche le CALL CHKAS_INT fonctionne dans l'interface de STRSQL, c'est qu'il y a une procédure stockée SQL.

    Je vais essayer d'être plus explicite concernant les données retournées.
    Quand tu appelles un programme, il peut retourner des données (à la manière d'une fonction). Ceci fonctionnera si tu appelles le programme dans SQL via une procédure stockée.
    En revanche, il se peut que le programme tente d'afficher des données (écran vert). Pour faire un parallèle avec la commande WRKACTJOB, celle ci t'affiche la liste des travaux. Là, tu as besoin d'être sous l'émulateur dans l'environnement d'exécution pour que çà fonctionne. Et un appel dans SQL via une procédure stockée ne fonctionnera alors pas.
    Que fait exactement le programme CHKAS_INT ?

    je viens de le lancer d'une ligne de command AS400 (pas dans SQL) et ca marche : OK
    Ce "programme donne un état des occupations disques sur un serveurs de prod

    Dans l'interface STRSQL, si je tape CALL CHKAS_INT, ça marche aussi !!!

  10. #30
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par FORMULARY Voir le message
    External name correspond au nom AS/400 (ou plutot iSeries, pardon power, pardon i5, pardon i tout court)
    Là tu lui donnes une commande ...
    Il faut EXTERNAL NAME TRUST.nomduprogramme
    nom du programme AS400 ? je ne l'ai pas ! TRUST est une bibliothèque et je lance GO TRUST sur la console AS400 pour afficher le menu

    donc la clé serait TRUST/TRUST ?

    et alors où devrais-je mettre ma ligne de commande dans cette procédure ?

    Que fait CHKAS_INT et surtout que retourne-t-il comme paramètre ?
    voir screen-shot ci-dessous stp ... je n'ai rien d'autre là...
    Images attachées Images attachées  

  11. #31
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par m4k-Hurrican Voir le message
    ...
    Quand tu appelles un programme, il peut retourner des données (à la manière d'une fonction). Ceci fonctionnera si tu appelles le programme dans SQL via une procédure stockée.
    En revanche, il se peut que le programme tente d'afficher des données (écran vert). Pour faire un parallèle avec la commande WRKACTJOB, celle ci t'affiche la liste des travaux. Là, tu as besoin d'être sous l'émulateur dans l'environnement d'exécution pour que çà fonctionne. Et un appel dans SQL via une procédure stockée ne fonctionnera alors pas.
    Que fait exactement le programme CHKAS_INT ?



    Oui je vois bien, mais ne peut-on pas rediriger le flux txt vers l'application dot.net ?

  12. #32
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par larry57 Voir le message
    Il manque dans ton print screen le F11 pour avoir le détail des tes E-S. Tu t'es arrêté trop tôt.
    Rajoute aussi un print de ton CHKAS_INT.

    ...
    Larry57
    done
    Images attachées Images attachées  

  13. #33
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut
    je viens de le lancer d'une ligne de command AS400 (pas dans SQL) et ca marche : OK
    Ce "programme donne un état des occupations disques sur un serveurs de prod
    Attention : l'interface dotnet travaille en SQL et peut appeler un programme à condition que celui-ci retourne un result set.
    Si le programme affiche quelque chose, ça ne marchera pas en dotnet (via la commande SQL call)

    Note: Depuis strsql, si on tape call monprog, c'est un call système qui est lançé si le programme n'est pas un programme SQLRPGLE.
    On peut donc appeler un programme comme QTOCCFCP depuis STRSQL. On aura le menu du CFGTCP !

  14. #34
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par FORMULARY Voir le message
    Attention : ...

    Note: ...
    On peut donc appeler un programme comme QTOCCFCP depuis STRSQL. On aura le menu du CFGTCP !
    euhhh tu peux me la refaire celle-là ?


    je vois juste que le langage ne serait pas bon (paramètre à changer dans la création de ma requête ?) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    
    ...
    "LANGUAGE RPGLE "
    ...

  15. #35
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    je dois vous laisser
    bonne fin de soirée et un grand merci à vous tous

  16. #36
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut
    L'objet iDB2Command de dotnet permet de passer un ordre SQL à l'AS/400.
    Par exemple un ordre CREATE TABLE ...

    Mais on peut passer un ordre SELECT ... FROM ...
    Dans ce cas, il faut récupérer le résultat du record set. Apparemment, iDB2DATAREADER permet de faire cela.

    Plus compliqué : On crée une procédure stockée que l'on appelle par un CALL (SQL).
    Dans ce cas, il faut que le programme soit un SQLRPGLE et retourne un record set.
    Je suppose qu'en principe, iDB2DATAREADER devrait récupérer aussi le record set.

    Le programme CHKAS_INT ne retourne pas de record set. Il affiche un écran avec des infos disques et autres.
    Et si dotnet appelle le programme, c'est un service AS/400 qui le traitera. Il ne pourra pas afficher d'écran et se plantera.
    Il faudrait créer un programme AS/400 qui soit la copie du CHKAS_INT mais qui retourne les informations dans un record set.
    Dans ce cas, vous devriez pouvoir appeler ce programme depuis dotnet avec iDB2Command et récupérer les infos avec iDB2DataReader

    Je ne sais pas si j'ai été suffisamment clair, mais je ne vois pas comment l'expliquer mieux ...

  17. #37
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    je suis de retour...
    oui j'ai bien compris
    Il faut aussi travailler du côté AS400

    Je ne pourrai pas tout faire mais grâce à toi, je pourrai à présent "préparer" le travail pour les dév As400
    Merci

    Je dois reprendre un peu tout cela et avancer dans mon dév aujourd'hui.
    De retour dans les prochaines heures, minutes peut-être ...


  18. #38
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    Dans la liste ci-dessous, je vais trier les "commandes" en deux groupes :
    Les lignes que je peux traiter en dot net d'un côté et celles que je ne pourrai pas (comme ligne 8 : CHKAS_INT)

    0001 ?TRAIT_CMD
    0002 WRKDSKSTS
    0003 WRKACTJOB
    0004 DSPMSG MSGQ(QSYSOPR) ASTLVL(*BASIC)
    0005 DSPLOG ??PERIOD((230000 *CURRENT)) ??JOB(SAV_JOUR SAVFFTP)
    0006 DSPLOG ??PERIOD((230000 *CURRENT)) ??JOB(SAV_HEBDO SAV_HEBDO2 HEBDO1 HEBDO2 SAVFFTP)
    0007 DSPLOG ??PERIOD((230000 *CURRENT)) ??JOB(SAV_MENS SAV_MENS2 MENSUEL1 MENSUEL2 SAVFFTP)
    0008 CALL PGM(TRUST/CHKAS_INT)
    0010 WRKOBJPDM LIB(*CURLIB)
    0011 DSPMSG ASTLVL(*BASIC)
    0012 WRKSPLF
    0020 GO MENU(TRUST/BRMS_EX)
    0021 GO MENU(TRUST/BRMS_CFG)
    0030 CALL PGM(TRUST/ERRLOG)
    0040 WRKLNK OBJ('/Openprocess/OPDST/async_alr/*') OBJTYPE(*ALL) DETAIL(*EXTENDED) DSPOPT(*ALL)
    0090 SIGNOFF

    Ce sont toutes les lignes cachées derrière mon menu TRUST de l'AS400 (sur la console).
    Je souhaitais les exécuter dans dot.net, sans passer par le menu TRUST

  19. #39
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut
    Toutes les options affichent un écran. Seule exception : L'option 90 Fin de session.
    Si tu veux développer ça sous dotnet, recherche plutôt sur google des programmes qui utilisent des API pour faire la même chose.
    Bon courage !

  20. #40
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    bonjour et merci de ta réponse

    je comprends bien ce que tu m'annonces en ce début de semaine ensoleillé ...
    une catastrophe !


    bon, je vais finir mon dév dot net et j'ai rendu paramétrable toutes les lignes de commandes liées à l'AS400 au sein du fichier bien connu App.config

    Selon les derniers posts, il faut juste redéfinir les flux sortants des commandes AS400 (ci-dessus) de l'écran vers un dataSet exploitable en Dot net.
    Ceci peut se faire par un dév AS400 (retouche des programmes préalablement copiés)

    Ceci n'affectera pas mon dév Dot net, s'il est bien paramétrable bien sûr

    Ce serait ma conclusion ...
    Qu'en pensez-vous ?

    cdt

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Exécution des programmes .net
    Par psy4duKod dans le forum Framework .NET
    Réponses: 10
    Dernier message: 18/07/2007, 00h23
  2. [UBUNTU] Exécuter des programmes java
    Par hammag dans le forum Ubuntu
    Réponses: 6
    Dernier message: 21/04/2006, 23h50
  3. Comment exécuter un programm
    Par Murieyaya dans le forum Langage
    Réponses: 2
    Dernier message: 13/12/2005, 10h50
  4. Comment exécuter un programme externe ?
    Par spikto dans le forum Langage
    Réponses: 12
    Dernier message: 27/06/2005, 16h18
  5. Réponses: 1
    Dernier message: 23/02/2005, 11h23

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