Lecture de la MQ via la nouvelle LBMQM
Posté : lun. 18 avr. 2022, 11:54:12
Bonjour,
Dans le cadre de la nouvelle LIBMQM au lieu de la qmqm, j'essaye d'écrire le pgm ci-dessous qui récupéré les message depuis la MQ:
Hdatfmt(*eur)
HDEBUG(*YES)
DMQOPEN1 PR EXTPROC('MQOPEN')
D* Connection handle
D HCONN 10I 0 VALUE
D* Object descriptor
D OBJDSC 468A
D* Options that control the action of MQOPEN
D OPTS 10I 0 VALUE
D* Object handle
D HOBJ 10I 0
D* Completion code
D CMPCOD 10I 0
D* Reason code qualifying CMPCOD
D REASON 10I 0
DMQGET1 PR EXTPROC('MQGET')
D* Connection handle
D HCONN 10I 0 VALUE
D* Object handle
D HOBJ 10I 0 VALUE
D* Message descriptor
D MSGDSC 364A
D* Options that control the action of MQGET
D GMO 112A
D* Length in bytes of the Buffer area
D BUFLEN 10I 0 VALUE
D* Area to contain the message data
D BUFFER * VALUE
D* Length of the message
D DATLEN 10I 0
D* Completion code
D CMPCOD 10I 0
D* Reason code qualifying CMPCOD
D REASON 10I 0
DMQCLOSE1 PR EXTPROC('MQCLOSE')
D* Connection handle
D HCONN 10I 0 VALUE
D* Object handle
D HOBJ 10I 0
D* Options that control the action of MQCLOSE
D OPTS 10I 0 VALUE
D* Completion code
D CMPCOD 10I 0
D* Reason code qualifying CMPCOD
D REASON 10I 0
*-- Specification F ------------------------------------------------
FARC1999IN o e disk
*****12056 ******
// Connection handle
D HCONN S 10I 0
// Options
D OPTS S 10I 0
// Object handle
D HOBJ S 10I 0
// Completion codes
D OpenCode S 10I 0
// CompletionCode
D CCODE S 10I 0
// Reasons
D REASON S 10I 0
D ConnReason S 10I 0
// Buffer
D Buffer S 60A
// Buffer length
D BUFLEN S 10I 0 INZ(%LEN(Buffer))
// Actual Message length received
D MESLEN S 10I 0
*****12056 ******
*-- Specification D ------------------------------------------------
Das_erreur s 254
Dai_occurs s 8 0
* HAU Gestion du message ORDERS jusqu'à 3680 segments de 1000 caractères
* Das_cpt s 2 0
Das_cpt s 4 0
* HAU Fin
Das_dta s 1000
D/copy cmqr
D MQOD DS qualified
D/COPY CMQODG
*--- Message Descriptor --------------------------------------------
D MQMD DS qualified
D/copy cmqmdr
*--- Get message options -------------------------------------------
D mqgmo ds qualified
I/copy cmqgmor
*-- Parametre d'entree ---------------------------------------------
C *entry plist
C parm as_qmsg 16
C parm as_perreu 2
C parm as_reason 10
C parm as_IDEMET 20
C parm as_IDDEST 20
*-- MQCONN implicite sur AS400, utilisation handle par defaut ------
C* z-add HCDEFH HCONN
*-- Longueur du message --------------------------------------------
C z-add 4194304 BUFLEN
*-- Initialisation du code retour erreur ---------------------------
C eval as_perreu='00'
*-- Initialisation du header du message ----------------------------
C eval as_erreur =' '
C z-add 0 ai_occurs
*-- Ouverture de la QMSG -------------------------------------------
C exsr open_qmsg
C exsr gest_erreur
C if REASON<>RCNONE
C eval as_perreu='02'
C exsr fin_pgm
C endif
C exsr init_qmsg
*-- Boucle de lecture des messages ---------------------------------
C exsr get_qmsg
C exsr gest_erreur
C if REASON<>RCNONE
C eval as_perreu='03'
C exsr fin_pgm
C endif
*-- Fermeture de la QMSG -------------------------------------------
C exsr close_qmsg
C exsr gest_erreur
C if REASON<>RCNONE
C eval as_perreu='06'
C exsr fin_pgm
C endif
*-Fin du programme
C exsr fin_pgm
*-- Sous-routine ---------------------------------------------------
*--- Ouverture de la queue MSG sans option -------------------------
C open_qmsg begsr
C CALLP MQOPEN1(HCONN :
C MQOD :
C OPTS :
C HOBJ :
C CCODE :
C REASON)
C endsr
*--- Initialisation de la queue MSG --------------------------------
C init_qmsg begsr
C *like define HOBJ ab_hobjmsg
C *like define CCODE ab_compcodemsg
C z-add HOBJ ab_hobjmsg
C z-add CCODE ab_compcodemsg
C endsr
*--- GET dans la queue MSG -----------------------------------------
*--- Accept truncated, conversion and no sync point ----------------
C get_qmsg begsr
C CALLP MQGET1(HCONN :
C HOBJ :
C MQMD :
C mqgmo :
C BUFLEN :
C Buffer :
C MESLEN :
C CCODE :
C REASON)
C z-add 1 as_cpt
C eval as_IDEMET = %subst(as_dta:20:20)
C eval as_IDDEST = %subst(as_dta:40:20)
* HAU Gestion du message ORDRSP jusqu'à 3680 segments de 1000 caractères
* HAU Optimisation on s'arrête au premier enreg à blanc
C as_dta downe ' '
* HAU Fin
C eval Z1000I = as_dta
C write FIC1000IF
* Récup de la ligne suivante (1000 caractères)
C add 1 as_cpt
C* eval as_dta = BUFFER(as_cpt)
C enddo
C endsr
*--- Gestion des erreurs MQSERIES ----------------------------------
C gest_erreur begsr
C if REASON<>RCNONE
C movel REASON as_reason
C endif
C endsr
*--- Fermeture de la queue MSG -------------------------------------
C close_qmsg begsr
C CallP MQCLOSE1(HConn :
C HOBJ :
C OPTS :
C CCODE :
C REASON)
C endsr
*--- Sortie du programme -------------------------------------------
C fin_pgm begsr
C eval *inlr=*on
C dump
C return
C endsr
le problème c'est que quand je fait la compilation il me reste trois message d'erreur suivant:
*RNF7535 30 1544 013604 Le type et les attributs du paramètre 4 ne correspondent
pas à ceux du prototype.
*RNF7536 30 1546 013607 Le type du paramètre 6 indiqué pour l'appel ne correspond
pas au prototype.
*RNF7086 00 63 002000 RPG traite les groupages du fichier FARC1999I. INFDS mis à
jour uniquement lorsque les blocs de données sont
transférés.
++> Le premier et le 2éme sont dans l'instruction ci-dessous pour les variables mqgmo et Buffer
C CALLP MQGET1(HCONN :
C HOBJ :
C MQMD :
C mqgmo :
C BUFLEN :
C Buffer :
C MESLEN :
C CCODE :
C REASON)
Pouvez-vous m'aider pour la résolution de ces deux anomalie?
Dans le cadre de la nouvelle LIBMQM au lieu de la qmqm, j'essaye d'écrire le pgm ci-dessous qui récupéré les message depuis la MQ:
Hdatfmt(*eur)
HDEBUG(*YES)
DMQOPEN1 PR EXTPROC('MQOPEN')
D* Connection handle
D HCONN 10I 0 VALUE
D* Object descriptor
D OBJDSC 468A
D* Options that control the action of MQOPEN
D OPTS 10I 0 VALUE
D* Object handle
D HOBJ 10I 0
D* Completion code
D CMPCOD 10I 0
D* Reason code qualifying CMPCOD
D REASON 10I 0
DMQGET1 PR EXTPROC('MQGET')
D* Connection handle
D HCONN 10I 0 VALUE
D* Object handle
D HOBJ 10I 0 VALUE
D* Message descriptor
D MSGDSC 364A
D* Options that control the action of MQGET
D GMO 112A
D* Length in bytes of the Buffer area
D BUFLEN 10I 0 VALUE
D* Area to contain the message data
D BUFFER * VALUE
D* Length of the message
D DATLEN 10I 0
D* Completion code
D CMPCOD 10I 0
D* Reason code qualifying CMPCOD
D REASON 10I 0
DMQCLOSE1 PR EXTPROC('MQCLOSE')
D* Connection handle
D HCONN 10I 0 VALUE
D* Object handle
D HOBJ 10I 0
D* Options that control the action of MQCLOSE
D OPTS 10I 0 VALUE
D* Completion code
D CMPCOD 10I 0
D* Reason code qualifying CMPCOD
D REASON 10I 0
*-- Specification F ------------------------------------------------
FARC1999IN o e disk
*****12056 ******
// Connection handle
D HCONN S 10I 0
// Options
D OPTS S 10I 0
// Object handle
D HOBJ S 10I 0
// Completion codes
D OpenCode S 10I 0
// CompletionCode
D CCODE S 10I 0
// Reasons
D REASON S 10I 0
D ConnReason S 10I 0
// Buffer
D Buffer S 60A
// Buffer length
D BUFLEN S 10I 0 INZ(%LEN(Buffer))
// Actual Message length received
D MESLEN S 10I 0
*****12056 ******
*-- Specification D ------------------------------------------------
Das_erreur s 254
Dai_occurs s 8 0
* HAU Gestion du message ORDERS jusqu'à 3680 segments de 1000 caractères
* Das_cpt s 2 0
Das_cpt s 4 0
* HAU Fin
Das_dta s 1000
D/copy cmqr
D MQOD DS qualified
D/COPY CMQODG
*--- Message Descriptor --------------------------------------------
D MQMD DS qualified
D/copy cmqmdr
*--- Get message options -------------------------------------------
D mqgmo ds qualified
I/copy cmqgmor
*-- Parametre d'entree ---------------------------------------------
C *entry plist
C parm as_qmsg 16
C parm as_perreu 2
C parm as_reason 10
C parm as_IDEMET 20
C parm as_IDDEST 20
*-- MQCONN implicite sur AS400, utilisation handle par defaut ------
C* z-add HCDEFH HCONN
*-- Longueur du message --------------------------------------------
C z-add 4194304 BUFLEN
*-- Initialisation du code retour erreur ---------------------------
C eval as_perreu='00'
*-- Initialisation du header du message ----------------------------
C eval as_erreur =' '
C z-add 0 ai_occurs
*-- Ouverture de la QMSG -------------------------------------------
C exsr open_qmsg
C exsr gest_erreur
C if REASON<>RCNONE
C eval as_perreu='02'
C exsr fin_pgm
C endif
C exsr init_qmsg
*-- Boucle de lecture des messages ---------------------------------
C exsr get_qmsg
C exsr gest_erreur
C if REASON<>RCNONE
C eval as_perreu='03'
C exsr fin_pgm
C endif
*-- Fermeture de la QMSG -------------------------------------------
C exsr close_qmsg
C exsr gest_erreur
C if REASON<>RCNONE
C eval as_perreu='06'
C exsr fin_pgm
C endif
*-Fin du programme
C exsr fin_pgm
*-- Sous-routine ---------------------------------------------------
*--- Ouverture de la queue MSG sans option -------------------------
C open_qmsg begsr
C CALLP MQOPEN1(HCONN :
C MQOD :
C OPTS :
C HOBJ :
C CCODE :
C REASON)
C endsr
*--- Initialisation de la queue MSG --------------------------------
C init_qmsg begsr
C *like define HOBJ ab_hobjmsg
C *like define CCODE ab_compcodemsg
C z-add HOBJ ab_hobjmsg
C z-add CCODE ab_compcodemsg
C endsr
*--- GET dans la queue MSG -----------------------------------------
*--- Accept truncated, conversion and no sync point ----------------
C get_qmsg begsr
C CALLP MQGET1(HCONN :
C HOBJ :
C MQMD :
C mqgmo :
C BUFLEN :
C Buffer :
C MESLEN :
C CCODE :
C REASON)
C z-add 1 as_cpt
C eval as_IDEMET = %subst(as_dta:20:20)
C eval as_IDDEST = %subst(as_dta:40:20)
* HAU Gestion du message ORDRSP jusqu'à 3680 segments de 1000 caractères
* HAU Optimisation on s'arrête au premier enreg à blanc
C as_dta downe ' '
* HAU Fin
C eval Z1000I = as_dta
C write FIC1000IF
* Récup de la ligne suivante (1000 caractères)
C add 1 as_cpt
C* eval as_dta = BUFFER(as_cpt)
C enddo
C endsr
*--- Gestion des erreurs MQSERIES ----------------------------------
C gest_erreur begsr
C if REASON<>RCNONE
C movel REASON as_reason
C endif
C endsr
*--- Fermeture de la queue MSG -------------------------------------
C close_qmsg begsr
C CallP MQCLOSE1(HConn :
C HOBJ :
C OPTS :
C CCODE :
C REASON)
C endsr
*--- Sortie du programme -------------------------------------------
C fin_pgm begsr
C eval *inlr=*on
C dump
C return
C endsr
le problème c'est que quand je fait la compilation il me reste trois message d'erreur suivant:
*RNF7535 30 1544 013604 Le type et les attributs du paramètre 4 ne correspondent
pas à ceux du prototype.
*RNF7536 30 1546 013607 Le type du paramètre 6 indiqué pour l'appel ne correspond
pas au prototype.
*RNF7086 00 63 002000 RPG traite les groupages du fichier FARC1999I. INFDS mis à
jour uniquement lorsque les blocs de données sont
transférés.
++> Le premier et le 2éme sont dans l'instruction ci-dessous pour les variables mqgmo et Buffer
C CALLP MQGET1(HCONN :
C HOBJ :
C MQMD :
C mqgmo :
C BUFLEN :
C Buffer :
C MESLEN :
C CCODE :
C REASON)
Pouvez-vous m'aider pour la résolution de ces deux anomalie?