Un include ou un /copy dans un programme permet de copier avant la compile des lignes de sources dans votre programme ou module.
C’est pour normaliser des parties de code qu’on utilise souvent dans une application, souvent des déclarations
exemple :
DS pour les données programme (SDS)
DS pour les données fichier (INFDS)
Découpage d’un paramétrage applicatif d’une *lda ou autre
etc…
1) Utilisation en CLP
C’est pas forcément le langage où en trouve le plus, mais ça peut avoir du sens si on utilise par exemple une routine d’erreur générale
pgm
DCL….
include erreur1
// votre code
include erreur2
ENDPGM
Vous pouvez préciser le fichier ou le répertoire ou se trouve vos includes
Sur les commandes CRTCLMOD ou CRTBNDCL c’est les paramètres INCFILE ou INCDIR
Vous pouvez indiquer dans votre source le fichier ou la bibliothèque , il est bien sur déconseillé de harcoder la bibliothèque, la gestion de la liste de bibliothèque étant préférable.
2) Utilisation en RPG
on peut utiliser des /copy ou des /include
la syntaxe est la même
libraryname/filename,membername
filename,membername
membername
Encore une fois il est fortement déconseillé d’utiliser la bibliothèque,
d/COPY QSYSINC/QRPGLESRC,ECHKPWD1
ou
d/INCLUDE QSYSINC/QRPGLESRC,ECHKPWD1
en free, elle doivent quand même être codé comme une carte …
on peut faire des includes d’includes par exemple on l’utilise dans l’ILE
sourceA
include prototype1
include prototype2
sourceB
include SourceA
C’est souvent utilisé pour le prototypage de fonction et procédure
Vous pouvez indiquer dans une carte h ou dans ctl-opt en free
COPYNEST( n )
Indique le nombre maximal d’imbrications, n étant une valeur
comprise entre 1 et 2048. Si le mot clé COPYNEST n’est pas
spécifié, 32 est utilisée comme valeur maximale.
Je n’ai jamais vu plus de 5 niveaux …
3) Utilisation dans un SQLRPGLE
Comporte une petite subtilité entre les /copy et les /include sur les variables HOSTs
Paramètre de compile , RPGPOPT de la commande du CRTSQLRPGI
- NONE
Le compilateur n’est pas appelé pour le prétraitement. - LVL1
Le compilateur est appelé pour le prétraitement pour développer / COPY et gérer les directives de compilation conditionnelle à l’exception de la directive / INCLUDE. - LVL2
Le compilateur est appelé pour le prétraitement pour développer / COPY et / INCLUDE et gérer les directives de compilation conditionnelle.
Le conseil est de forcer le paramètre à *LVL2 pour que même les include soit résolus avant la pré-compilations SQL
4) Les copies conditionnées
Pour éviter les inclusions en double suite à plusieurs inclusions venant de plusieurs endroits
Il y a un macro langage qui permet d’indiquer des instructions dans votre sources RPG
A) dans le source à inclure
source1
les instructions ici
à la fin
/define prototype
B) dans le programme ou on veut l’inclusion
/if not defined( prototype )
/include prototype
/endif
ou
/if defined( prototype )
/eof
/endif
5) Conversion RPGIII vers RPGIV
Pour convertir du RPG3 vers RPGIV ,vous avez une commande IBM qui s’appelle CVTRPGSRC, voici comment traiter les includes.
Il y a 2 méthodes possibles :
A) En précisant le paramètre EXPCPY à *YES de la commande CVTRPGSRC ce qui incluera le /copy dans le programme après l’avoir converti
B) Vous devrez commencer par convertir les /copy de votre application
Attention au nom de fichier que vous devrez éventuellement changer en QRPGLESRC par exemple dans les sources
Conclusion
Il peut être intéressant d’utiliser les includes, mais ça nécessite un minimum d’organisation, exemple pour les prototypages ILE
RDI permet de voir directement les includes à partir du source que vous éditez …