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 :

Débutant AS400 : RPG IV


Sujet :

AS/400

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2021
    Messages : 12
    Points : 1
    Points
    1
    Par défaut Débutant AS400 : RPG IV
    Bonjour,

    Etant actuellement alternant dans une boîte possédant un as400, je suis amené à développer des applications/programmes en RPG cependant j'ai vraiment beaucoup de mal et je n'arrive pas à me faire aux concepts du RPG...

    Je travailles actuellement sur un projet mais je bloque totalement, savez-vous comment je peux m'améliorer ? y a t-il des personnes en mesure de me venir en aide ?

    Merci d'avance pour vos réponses !! (;

  2. #2
    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
    Bonjour,

    Sans aucune connaissance du RPG, çà n'est pas évident.
    Surtout si c'est du vieux RPG (II, III, ou même IV en mode à l'ancienne). Dans ce cas c'est même difficile pour des habitués comme moi, car la lisibilité n'était pas le point fort de ces outils.
    Il y a des concepts à connaître, en particulier le cycle, très puissant quand on sait l'utiliser, mais qui n'est plus trop d'actualité en programmation moderne. S'ils ne l'utilisent pas, tant mieux pour toi.
    Il faut avoir quelques connaissances de base sur l'OS, l'environnement de travail, la BD.
    Après les livres (dispos en PDF) fournis par IBM comme l'ILE_RPG_Reference (suivi du n° de version), seront un précieux atout pour ce qui est du code lui-même. Tu y trouveras beaucoup de choses.

    Maintenant, prendre un alternant sur un langage qu'il ne connait pas du tout, c'est un peu chaud.
    Ils n'ont pas moyen de te faire suivre une formation, même rapide ?

    Sur les forums on pourra toujours t'aider, mais on ne pourra pas être derrière toi non plus.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2021
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par m4k-Hurrican Voir le message
    Bonjour,

    Sans aucune connaissance du RPG, çà n'est pas évident.
    Surtout si c'est du vieux RPG (II, III, ou même IV en mode à l'ancienne). Dans ce cas c'est même difficile pour des habitués comme moi, car la lisibilité n'était pas le point fort de ces outils.
    Il y a des concepts à connaître, en particulier le cycle, très puissant quand on sait l'utiliser, mais qui n'est plus trop d'actualité en programmation moderne. S'ils ne l'utilisent pas, tant mieux pour toi.
    Il faut avoir quelques connaissances de base sur l'OS, l'environnement de travail, la BD.
    Après les livres (dispos en PDF) fournis par IBM comme l'ILE_RPG_Reference (suivi du n° de version), seront un précieux atout pour ce qui est du code lui-même. Tu y trouveras beaucoup de choses.

    Maintenant, prendre un alternant sur un langage qu'il ne connait pas du tout, c'est un peu chaud.
    Ils n'ont pas moyen de te faire suivre une formation, même rapide ?

    Sur les forums on pourra toujours t'aider, mais on ne pourra pas être derrière toi non plus.
    Oui je l'utilise beaucoup l'ILE RPG REFERENCE FILE mais il y'a pleins de choses que je ne comprends pas, je trouve que c'est super différent des autres langages...
    Et pour être honnête je ne sais pas par où commencer, j'ai l'impression de me noyer dedans. Pour ce qui est d'une formation je suis quasi sûr que c'est impossible d'autant plus que c'est un contrat d'un an je les vois mal payer la formation plusieurs milliers d'euros ...

    Je m'en doute bien, vous n'êtes pas des formateurs après tout (enfin je suppose) mais si quelqu'un pouvait me guider ce serait top

  4. #4
    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
    Çà n'est pas si différent que çà.
    Dans le RPG, il faut savoir que tu as une structure immuable, au niveau du source.

    A la base le RPG était conçu pour des machines qu'on appelait des tabulatrices.
    On insérait des cartes perforées, qui indiquait le traitement à exécuter.
    Dans le RPG on a donc classé le code de la même manière. Ce fonctionnement par cartes a été conservé, même s'il a beaucoup évolué.
    Les cartes avaient elle même des structures en colonnes, et çà a été reproduit dans le RPG.
    On commence par la carte H (comme Header), qui définit les paramètres principaux du programmes.
    Puis les cartes F (File), dans lesquelles ont défini les fichiers, leur type (écran, imprimante, disque, spécial, ...), le type d'accès (Entrée/Sortie), si il y a une clé d'accès, si le fichier est défini en interne ou externe, etc...
    Ensuite tu avais les cartes E pour les tableaux, qui normalement ont été remplacées par des cartes D bien plus polyvalentes.
    Les cartes D (Data) justement, permettent de définir des données.
    Les cartes I (Input), si tu as des fichiers définis en interne, ou si tu veux renommer des champs.
    Les cartes C (Calculation), avec le code d'exécution.
    Puis les cartes O (Output), avec les sorties.

    Aujourd'hui, avec le RPG moderne, il n'y a plus de structures en colonnes, tout est en "free". Seul l'ordre des lignes a été conservé (Définition programme, fichiers, données, code).
    Si tu utilises SQL, même la partie fichier peut disparaitre.

    Mais avant tout, il faut avoir quelques infos :
    - Sur quelles versions travailles tu ? (OS / RPG)
    - Dois tu créer de nouveaux modules / programmes ou maintenir un existant ?
    - Si tu dois maintenir de l'existant, dans quel format est-il (RPG II, III, IV, free ou non) ?

  5. #5
    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 COURS RPG
    Bonjour,

    Il y a pas mal de cours gratuits et en français sur le site de VOLUBIS.

    Je t'invite à y jeter un coup d'oeil.
    Pour ce qui est de l'aide, soumet ton problème et on pourra sans doute y réponse.

    Larry57

  6. #6
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Un éditeur US spécialisé sur l'IBM i et ses ouvrages sur le RPG :

    https://www.mc-store.com/collections/programming

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2021
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par m4k-Hurrican Voir le message
    Çà n'est pas si différent que çà.
    Dans le RPG, il faut savoir que tu as une structure immuable, au niveau du source.

    A la base le RPG était conçu pour des machines qu'on appelait des tabulatrices.
    On insérait des cartes perforées, qui indiquait le traitement à exécuter.
    Dans le RPG on a donc classé le code de la même manière. Ce fonctionnement par cartes a été conservé, même s'il a beaucoup évolué.
    Les cartes avaient elle même des structures en colonnes, et çà a été reproduit dans le RPG.
    On commence par la carte H (comme Header), qui définit les paramètres principaux du programmes.
    Puis les cartes F (File), dans lesquelles ont défini les fichiers, leur type (écran, imprimante, disque, spécial, ...), le type d'accès (Entrée/Sortie), si il y a une clé d'accès, si le fichier est défini en interne ou externe, etc...
    Ensuite tu avais les cartes E pour les tableaux, qui normalement ont été remplacées par des cartes D bien plus polyvalentes.
    Les cartes D (Data) justement, permettent de définir des données.
    Les cartes I (Input), si tu as des fichiers définis en interne, ou si tu veux renommer des champs.
    Les cartes C (Calculation), avec le code d'exécution.
    Puis les cartes O (Output), avec les sorties.

    Aujourd'hui, avec le RPG moderne, il n'y a plus de structures en colonnes, tout est en "free". Seul l'ordre des lignes a été conservé (Définition programme, fichiers, données, code).
    Si tu utilises SQL, même la partie fichier peut disparaitre.

    Mais avant tout, il faut avoir quelques infos :
    - Sur quelles versions travailles tu ? (OS / RPG)
    - Dois tu créer de nouveaux modules / programmes ou maintenir un existant ?
    - Si tu dois maintenir de l'existant, dans quel format est-il (RPG II, III, IV, free ou non) ?

    Désolé de la réponse tardive je n'avais pas accès au forum depuis un ordinateur, oui je développe en free, et je dois développer un programme en free.
    Il doit permettre de saisir des Interventions sur des tickets d'incidents => sur un écran on aurait un menu de "sélection", "création", "suppression" d'interventions.

    En gros ce que j'appelle une "intervention" c'est un sorte de compte rendu de réponse à un ticket d'incident, ce compte rendu il serait à remplir via différents champs numérique et alphanumériques .
    Vous comprenez l'idée? (dites moi ce qui n'est pas clair, je peux essayer de vous illustrer ça en créant des fichier "DSPF" je pense... )

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2021
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par larry57 Voir le message
    Bonjour,

    Il y a pas mal de cours gratuits et en français sur le site de VOLUBIS.

    Je t'invite à y jeter un coup d'oeil.
    Pour ce qui est de l'aide, soumet ton problème et on pourra sans doute y réponse.

    Larry57

    Oui j'ai regardé les cours de volubis mais je n'arrive pas à appliquer tout ça aux tâches que je dois faire : (je te remets ce que je souhaite faire comme programme en dessous)

    ~~~~~~~~~~
    Je dois développer un programme en free.
    Il doit permettre de saisir des Interventions sur des tickets d'incidents => sur un écran on aurait un menu de "sélection", "création", "suppression" d'interventions.

    En gros ce que j'appelle une "intervention" c'est un sorte de compte rendu de réponse à un ticket d'incident, ce compte rendu il serait à remplir via différents champs numérique et alphanumériques .
    Vous comprenez l'idée? (dites moi ce qui n'est pas clair, je peux essayer de vous illustrer ça en créant des fichier "DSPF" je pense... )
    ~~~~~~~~~~

  9. #9
    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
    Ce genre de programme est normalement relativement aisé à écrire en RPG free, même si le résultat final en ergonomie utilisateur est plus que moyen.

    Bon, je passerai sur le fait que nombreux sont ceux (comme nous) qui ont abandonné les "écrans verts".
    On a encore des programmes qui les utilisent et qu'on maintient, mais tout ce qui est nouveau est sur interface graphique (Web ou VB.net dans notre cas).

    Dans ton cas, il faut que tu crées ton fichier écran (et donc ses différents formats), avec les outils qui vont bien, et ensuite dans le RPG, tu lis et écris les différents formats (ordre EXFMT).
    La subtilité dans les échanges avec un fichier Workstation (écran donc), ce sont les zones "spéciales", comme les indicateurs, et les touches de fonction.
    Suis les modèles existants, pour garder toujours la même méthodologie, afin de faciliter la maintenance.
    J'avoue que moi j'ai souvent fait l'inverse, étant donné que c'est moi qui doit tout maintenir, j'ai toujours avancé vers plus de modernité quand je le pouvais. Et c'est un des reproches qu'on peut faire à mon ERP, on a 3 interfaces différentes selon les modules (écrans verts, Web, VB.net). Mais petit à petit je migre tout vers VB.net.
    Le RPG me sert pourtant toujours, j'ai un grand nombre de procédures SQL qui sont des modules ou programmes de service en RPG.

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2021
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par m4k-Hurrican Voir le message
    Ce genre de programme est normalement relativement aisé à écrire en RPG free, même si le résultat final en ergonomie utilisateur est plus que moyen.

    Bon, je passerai sur le fait que nombreux sont ceux (comme nous) qui ont abandonné les "écrans verts".
    On a encore des programmes qui les utilisent et qu'on maintient, mais tout ce qui est nouveau est sur interface graphique (Web ou VB.net dans notre cas).

    Dans ton cas, il faut que tu crées ton fichier écran (et donc ses différents formats), avec les outils qui vont bien, et ensuite dans le RPG, tu lis et écris les différents formats (ordre EXFMT).
    La subtilité dans les échanges avec un fichier Workstation (écran donc), ce sont les zones "spéciales", comme les indicateurs, et les touches de fonction.
    Suis les modèles existants, pour garder toujours la même méthodologie, afin de faciliter la maintenance.
    J'avoue que moi j'ai souvent fait l'inverse, étant donné que c'est moi qui doit tout maintenir, j'ai toujours avancé vers plus de modernité quand je le pouvais. Et c'est un des reproches qu'on peut faire à mon ERP, on a 3 interfaces différentes selon les modules (écrans verts, Web, VB.net). Mais petit à petit je migre tout vers VB.net.
    Le RPG me sert pourtant toujours, j'ai un grand nombre de procédures SQL qui sont des modules ou programmes de service en RPG.

    Si simple que ça? je suis en train d'essayer de faire les écrans dont je pense avoir besoin, j'aimerai avoir mon menu puis lorsque je veux créer ou modifier une intervention je veux changer de page, tu comprends?

    Qu'entends tu par Workstation et EXFMT?

    oui au niveau de mes dspf j'essaie de rester fidèle à ceux déjà existant !

  11. #11
    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
    Workstation c'est le type de fichier déclaré dans ton RPG.
    Il faut voir que les E/S écran ou imprimante, sont gérées (et c'est parfaitement logique), comme des fichiers. Workstation pour les écrans, Printer pour les imprimantes.

    Tu écris donc sur l'écran (Sortie, ordre Write), et tu le lis (Entrée, ordre Read).
    L'ordre EXFMT fait les deux en une seule opération, ce qui est pratique dans la plupart des cas.

    Tu crées les formats dans ton DSPF, le 1er étant ton choix d'option, ton deuxième l'écran de saisie.
    Éventuellement, si tu veux que tout soit sur le même écran lors de l'affichage, tu utilises le mot-clé OVERLAY dans ton DDS sur ton 2ème format pour qu'il n'écrase pas le 1er.
    Ensuite tu codes ton RPG de manière propre, avec des boucles qui répondent aux touches de fonction pressées.

    Note :
    Personnellement, je n'utilise plus depuis longtemps les indicateurs de touches de fonction (*inKA, *inKB, etc...) ou les indicateurs liés par DDS (*in01 lié à CF01 par exemple).
    Je trouve çà d'une absence de lisibilité totale pour les indicateurs *inK* , et source d'erreurs pour les indicateurs liés (déjà que 99 çà fait peu parfois, si on en exclu 24 çà empire les choses).
    Qui plus est, certaines touches sont difficiles à récupérer (est-ce vraiment la touche entrée qui a été pressée ? etc...)
    J'utilise donc la DataStructure du fichier écran. J'ai un membre source que j'incorpore au code avec un simple /COPY et comme çà je peux gérer mes touches de fonction de manière bien plus lisible, du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DoW  SDA_Key <> $F3;     
    ...
    Au cas où çà intéresse voilà le source à importer (moi je l'ai appelé DSPF_DS) :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    D                                                                                              
    D* Data structure sur l'écran                                                                  
    D ECRANINFDS      DS                                                                           
    D  DEV_DSP              197    206                                         * Device name       
    D  NUM_ROWS             152    153B 0                                      * Nombre lignes     
    D  NUM_COLS             154    155B 0                                      * Nombre colonnes   
    D  PGM_DEV              241    250                                         * Program device    
    D  DEV_DSC              251    260                                         * Dev description   
    D  USER_ID              261    270                                         * User ID           
    D  DEV_CLASS            271    271                                         * Device class      
    D  DEV_TYPE             272    277                                         * Device type       
    D  SDA_Key              369    369                                         * Key pressed       
    D  CS                            5I 0 Overlay(ECRANINFDS:370)              * Cursor location   
    D  SDA_RRN              378    379B 0                                      * N° enreg ss-fich  
    D  MajMinCode           401    404                                         * Code err. maj/min 
    D                                                                                              
    d $F1             C                   Const(X'31')                                             
    d $F2             C                   Const(X'32')                                             
    d $F3             C                   Const(X'33')                                             
    d $F4             C                   Const(X'34')                                             
    d $F5             C                   Const(X'35')                                             
    d $F6             C                   Const(X'36')                                             
    d $F7             C                   Const(X'37')                                             
    d $F8             C                   Const(X'38')                                        
    d $F9             C                   Const(X'39')                                        
    d $F10            C                   Const(X'3A')                                        
    d $F11            C                   Const(X'3B')                                        
    d $F12            C                   Const(X'3C')                                        
    d $F13            C                   Const(X'B1')                                        
    d $F14            C                   Const(X'B2')                                        
    d $F15            C                   Const(X'B3')                                        
    d $F16            C                   Const(X'B4')                                        
    d $F17            C                   Const(X'B5')                                        
    d $F18            C                   Const(X'B6')                                        
    d $F19            C                   Const(X'B7')                                        
    d $F20            C                   Const(X'B8')                                        
    d $F21            C                   Const(X'B9')                                        
    d $F22            C                   Const(X'BA')                                        
    d $F23            C                   Const(X'BB')                                        
    d $F24            C                   Const(X'BC')                                        
    d $Clear          C                   Const(X'BD')                                        
    d $Enter          C                   Const(X'F1')                                        
    d $Help           C                   Const(X'F3')                                        
    d $RollDown       C                   Const(X'F4')                                        
    d $PageUp         C                   Const(X'F4')                                        
    d $RollUp         C                   Const(X'F5')                                        
    d $PageDown       C                   Const(X'F5')                                        
    d $Print          C                   Const(X'F6')                                             
    d $Back           C                   Const(X'F8')                                             
    d $Auto           C                   Const(X'3F')

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2021
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par m4k-Hurrican Voir le message
    Workstation c'est le type de fichier déclaré dans ton RPG.
    Il faut voir que les E/S écran ou imprimante, sont gérées (et c'est parfaitement logique), comme des fichiers. Workstation pour les écrans, Printer pour les imprimantes.

    Tu écris donc sur l'écran (Sortie, ordre Write), et tu le lis (Entrée, ordre Read).
    L'ordre EXFMT fait les deux en une seule opération, ce qui est pratique dans la plupart des cas.

    Tu crées les formats dans ton DSPF, le 1er étant ton choix d'option, ton deuxième l'écran de saisie.
    Éventuellement, si tu veux que tout soit sur le même écran lors de l'affichage, tu utilises le mot-clé OVERLAY dans ton DDS sur ton 2ème format pour qu'il n'écrase pas le 1er.
    Ensuite tu codes ton RPG de manière propre, avec des boucles qui répondent aux touches de fonction pressées.

    Note :
    Personnellement, je n'utilise plus depuis longtemps les indicateurs de touches de fonction (*inKA, *inKB, etc...) ou les indicateurs liés par DDS (*in01 lié à CF01 par exemple).
    Je trouve çà d'une absence de lisibilité totale pour les indicateurs *inK* , et source d'erreurs pour les indicateurs liés (déjà que 99 çà fait peu parfois, si on en exclu 24 çà empire les choses).
    Qui plus est, certaines touches sont difficiles à récupérer (est-ce vraiment la touche entrée qui a été pressée ? etc...)
    J'utilise donc la DataStructure du fichier écran. J'ai un membre source que j'incorpore au code avec un simple /COPY et comme çà je peux gérer mes touches de fonction de manière bien plus lisible, du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DoW  SDA_Key <> $F3;     
    ...
    Au cas où çà intéresse voilà le source à importer (moi je l'ai appelé DSPF_DS) :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    D                                                                                              
    D* Data structure sur l'écran                                                                  
    D ECRANINFDS      DS                                                                           
    D  DEV_DSP              197    206                                         * Device name       
    D  NUM_ROWS             152    153B 0                                      * Nombre lignes     
    D  NUM_COLS             154    155B 0                                      * Nombre colonnes   
    D  PGM_DEV              241    250                                         * Program device    
    D  DEV_DSC              251    260                                         * Dev description   
    D  USER_ID              261    270                                         * User ID           
    D  DEV_CLASS            271    271                                         * Device class      
    D  DEV_TYPE             272    277                                         * Device type       
    D  SDA_Key              369    369                                         * Key pressed       
    D  CS                            5I 0 Overlay(ECRANINFDS:370)              * Cursor location   
    D  SDA_RRN              378    379B 0                                      * N° enreg ss-fich  
    D  MajMinCode           401    404                                         * Code err. maj/min 
    D                                                                                              
    d $F1             C                   Const(X'31')                                             
    d $F2             C                   Const(X'32')                                             
    d $F3             C                   Const(X'33')                                             
    d $F4             C                   Const(X'34')                                             
    d $F5             C                   Const(X'35')                                             
    d $F6             C                   Const(X'36')                                             
    d $F7             C                   Const(X'37')                                             
    d $F8             C                   Const(X'38')                                        
    d $F9             C                   Const(X'39')                                        
    d $F10            C                   Const(X'3A')                                        
    d $F11            C                   Const(X'3B')                                        
    d $F12            C                   Const(X'3C')                                        
    d $F13            C                   Const(X'B1')                                        
    d $F14            C                   Const(X'B2')                                        
    d $F15            C                   Const(X'B3')                                        
    d $F16            C                   Const(X'B4')                                        
    d $F17            C                   Const(X'B5')                                        
    d $F18            C                   Const(X'B6')                                        
    d $F19            C                   Const(X'B7')                                        
    d $F20            C                   Const(X'B8')                                        
    d $F21            C                   Const(X'B9')                                        
    d $F22            C                   Const(X'BA')                                        
    d $F23            C                   Const(X'BB')                                        
    d $F24            C                   Const(X'BC')                                        
    d $Clear          C                   Const(X'BD')                                        
    d $Enter          C                   Const(X'F1')                                        
    d $Help           C                   Const(X'F3')                                        
    d $RollDown       C                   Const(X'F4')                                        
    d $PageUp         C                   Const(X'F4')                                        
    d $RollUp         C                   Const(X'F5')                                        
    d $PageDown       C                   Const(X'F5')                                        
    d $Print          C                   Const(X'F6')                                             
    d $Back           C                   Const(X'F8')                                             
    d $Auto           C                   Const(X'3F')

    C'est vrai que ta manière de faire est un peu plus parlante, mais concrètement c'est quoi une data structure, parce que j'ai l'impression que cela permet juste de déclarer des variables non?

    Ensuite si je comprends bien tu développes tout ton code dans ton " DoW SDA_Key <> $F3;" afin de ne t'arrêter que si l'utilisateur presses F3?

    J'utilises effectivement l'overlay pour superposer mes format, mais comment puis je faire pour passer d'un écran à un autre après avoir sélectionné une option?

  13. #13
    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
    Quand tu fais ton EXFMT l'écran choisi est affiché, et le système attend que l'utilisateur appuies sur une touche de fonction, sur Entrée, une autre touche spécifique (PageUp/Down, etc...), ou que l'utilisateur ait fini de remplir un champ qui possède le mot-clé CHECK(ER) ou AUTO(RA), qui va rendre le contrôle au programme.
    Si tu veux juste choisir une option en permettant à l'utilisateur d'entrer un chiffre qui affiche alors automatiquement le 2ème écran (en admettant que tes options se limitent à un chiffre de 0 à 9), tu peux définir un champ I/O de 1 position numérique, avec CHECK(ER).
    Associe aussi le mot CHANGE(xx) où xx est un indicateur qui sera *ON si la zone a été changée, *OFF dans le cas contraire.
    Il ne te reste plus qu'à gérer tes boucles normalement.
    Un EXFMT pour afficher l'écran de choix, l'EXFMT de l'écran de saisie si l'utilisateur n'a pas demandé à sortir et si la zone de choix a changé, et le tour est joué.

    Pour les Data Structures, comme leur nom l'indique ce sont des structures de données.
    Elles regroupent des variables à la manière d'un enregistrement. D'ailleurs certaines peuvent justement être définies avec le mot clé LikeRec qui permet de copier la structure d'un enregistrement de fichier.

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2021
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par m4k-Hurrican Voir le message
    Quand tu fais ton EXFMT l'écran choisi est affiché, et le système attend que l'utilisateur appuies sur une touche de fonction, sur Entrée, une autre touche spécifique (PageUp/Down, etc...), ou que l'utilisateur ait fini de remplir un champ qui possède le mot-clé CHECK(ER) ou AUTO(RA), qui va rendre le contrôle au programme.
    Si tu veux juste choisir une option en permettant à l'utilisateur d'entrer un chiffre qui affiche alors automatiquement le 2ème écran (en admettant que tes options se limitent à un chiffre de 0 à 9), tu peux définir un champ I/O de 1 position numérique, avec CHECK(ER).
    Associe aussi le mot CHANGE(xx) où xx est un indicateur qui sera *ON si la zone a été changée, *OFF dans le cas contraire.
    Il ne te reste plus qu'à gérer tes boucles normalement.
    Un EXFMT pour afficher l'écran de choix, l'EXFMT de l'écran de saisie si l'utilisateur n'a pas demandé à sortir et si la zone de choix a changé, et le tour est joué.

    Pour les Data Structures, comme leur nom l'indique ce sont des structures de données.
    Elles regroupent des variables à la manière d'un enregistrement. D'ailleurs certaines peuvent justement être définies avec le mot clé LikeRec qui permet de copier la structure d'un enregistrement de fichier.
    Je vois, je comprends mieux je te remercie j'ai pu faire mes écrans et les lier par un petit programme, mais je suis un peu bloqué pour coder les fonctionnalités F6 créer, '2' modifier, et '4' supprimer, j'ai pensé à passer par une subroutine (SR) mais je ne vois vraiment pas comment agir sur un seul enregistrement du fichier physique...

  15. #15
    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 Facile
    Bonjour,

    Pour la gestion des écrans, je fait plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dow not *inlr;            
     Select;                  
     when wecran = '01';      
      exsr init;              
     when wecran = '02';      
      exsr ecran1;            
     Endsl;                   
    Enddo;
    Après, pour les touches de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    exfmt WIND_01C;        
    select;                
    when *in12;            
     *inlr = *on;          
    // Ajout               
    when *in06;            
     exsr trt_ajout;
    other;
     exsr Autre_chose;
    Endsl;
    Larry57

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2021
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par larry57 Voir le message
    Bonjour,

    Pour la gestion des écrans, je fait plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dow not *inlr;            
     Select;                  
     when wecran = '01';      
      exsr init;              
     when wecran = '02';      
      exsr ecran1;            
     Endsl;                   
    Enddo;
    Après, pour les touches de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    exfmt WIND_01C;        
    select;                
    when *in12;            
     *inlr = *on;          
    // Ajout               
    when *in06;            
     exsr trt_ajout;
    other;
     exsr Autre_chose;
    Endsl;
    Larry57
    Salut Larry,
    quel serait le contenu de tes sr init, ecran1, trt_ajout et Autre_chose???
    et aussi à quoi correspond wecran?

  17. #17
    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 AS_4_sang Voir le message
    Salut Larry,

    quel serait le contenu de tes sr init, ecran1, trt_ajout et Autre_chose???

    Init sert à charger ton écran.
    EXEC SQL
    select * into :ma_table from ma_table where macle = :cle;

    trt_ajout va mettre à jour ou écrire les donnés


    exec sql
    insert

    exec sql
    update

    Autre chose, pour moi, c'est si tu as une liste, tu traites la gestion des lignes de ta liste par exemple.

    Wecran, c'est la variable qui me sert à savoir sur quel écran je suis et aussi à gérer les retours.

    et aussi à quoi correspond wecran?
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    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
    FMON_ECRAN   CF   E             WORKSTN SFILE(WECRAN1S:C1_RRN)      
    D CLE           S             10a  INZ('MA_valeur')
    DWECRAN           s              2A   inz('01')   
    
    D MA_TABLE        e ds                  extname('MA_TABLE')   
    
     *--------------------------------------------------------------------*   
     * Traitement principal                                               *   
     *--------------------------------------------------------------------*   
    Dow not *inlr;          
     Select;                
     when wecran = '01';    
      exsr init;            
     when wecran = '02';    
      exsr ecran1;          
     when wecran = '03';    
      exsr init1;           
     when wecran = '04';    
      exsr ecran2;          
     Endsl;                 
    Enddo;                  
    
     *--------------------------------------------------------------------*    
     * Gestion initialisation                                         *    
     *--------------------------------------------------------------------*    
    C     init          Begsr          
    
                              EXEC SQL 
     select * into :ma_table from ma_table where macle = :cle;     
     wecran ='02';
             
    C                   Endsr                                  
     *--------------------------------------------------------------------*    
     * Gestion écran 1                                                    *    
     *--------------------------------------------------------------------*    
    C     ecran1        Begsr       
    // ça, c'est pour la gestion des messages d'erreur.
     pgmq = '*';       
    *IN55 = *ON;      
    WRITE MSGCTL;     
    
    exfmt WECRAN01;                                             
     select;             
     when *in12;         
      *inlr = *on;       
    when *in09;
     exsr trt_ajout;
    Other;
    Endsl;
    C                   Endsr
    
    pour les messages, il existe un api de gestion, tu trouveras les sources sur le net.
    RemoveMessage(Rmv_PgmQue:Rmv_StkCnt:Rmv_MsgKey:Rmv_Remove:Error_Code);
    
    SndPgmMsg(message: 'USRMSG    *LIBL':%trim(MsgTxt):%Len(MsgTxt):'*INFO':
    '*':*Zero:MsgKey:*Zero);
    Un exemple minimale de programme.

  18. #18
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2021
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par larry57 Voir le message
    Bonjour,

    Pour la gestion des écrans, je fait plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dow not *inlr;            
     Select;                  
     when wecran = '01';      
      exsr init;              
     when wecran = '02';      
      exsr ecran1;            
     Endsl;                   
    Enddo;
    Après, pour les touches de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    exfmt WIND_01C;        
    select;                
    when *in12;            
     *inlr = *on;          
    // Ajout               
    when *in06;            
     exsr trt_ajout;
    other;
     exsr Autre_chose;
    Endsl;
    Larry57
    Je vois merci à toi, qu'en penses tu toi mon cher m4k-Hurrican?

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2021
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Il y a quelqu'un?

  20. #20
    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
    Pas grand chose à répondre.
    Chacun à sa manière de faire.

Discussions similaires

  1. AS400/RPG Impression code bare
    Par Thierry de LILLE dans le forum AS/400
    Réponses: 3
    Dernier message: 05/08/2016, 13h58
  2. Java AS400 active (débutant AS400)
    Par shellshock2000 dans le forum AS/400
    Réponses: 5
    Dernier message: 22/11/2010, 11h53
  3. Mission AS400-RPG possible après une formation AFPR ?
    Par phdevp49 dans le forum Etudes
    Réponses: 0
    Dernier message: 17/10/2009, 17h05
  4. [AS400 RPG] DS EXTERNES
    Par Arrnno dans le forum AS/400
    Réponses: 15
    Dernier message: 05/07/2008, 00h06

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