Kbase P122536: 4GL example for MultipartMessage function isMessagePart
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  27/02/2007 |
|
Status: Unverified
GOAL:
4GL example for MultipartMessage function isMessagePart
GOAL:
Using the SonicMQ adapter
FACT(s) (Environment):
OpenEdge 10.1x
FIX:
DEFINE VARIABLE ghPtpSession AS HANDLE NO-UNDO.
DEFINE VARIABLE ghMessage AS HANDLE NO-UNDO.
DEFINE VARIABLE ghXMLMessage AS HANDLE NO-UNDO.
DEFINE VARIABLE ghMessageConsumer AS HANDLE NO-UNDO.
DEFINE VARIABLE gcLongText AS CHARACTER NO-UNDO.
/* Fill a long string.*/
ASSIGN gcLongText = FILL ("A", 100).
RUN jms/ptpsession.p PERSISTENT SET ghPtpSession ("-H localhost -S 5162").
RUN SETUSER IN ghPtpSession ("Administrator").
RUN setPassword IN ghPtpSession ("Administrator").
RUN setBrokerURL IN ghPtpSession ("localhost:2506").
RUN beginSession IN ghPtpSession.
/* Create a text message */
RUN createMultipartMessage IN ghPtpSession (OUTPUT ghMessage).
RUN createTextMessage IN ghPtpSession (OUTPUT ghXMLMessage).
RUN appendText IN ghXMLMessage ( INPUT "test-txt").
RUN addTextPart IN ghMessage (INPUT "<part1>" + gcLongText + "</part1>"
,INPUT "text/xml"
,INPUT "prt1"
).
RUN addTextPart IN ghMessage (INPUT "test"
,INPUT "text/plain"
,INPUT "prt2"
).
RUN addMessagePart IN ghMessage (INPUT ghXMLMessage , "XMLMessagePart").
/* Sends the message to a queue */
RUN sendToQueue IN ghPtpSession ("SampleQ1", ghMessage, ?, ?, ?).
RUN createMessageConsumer IN ghPtpSession
(THIS-PROCEDURE
,"messageConsumer" /* internal procedure */
,OUTPUT ghMessageConsumer
).
RUN receiveFromQueue IN ghPtpSession
("SampleQ1" /* name of queue */
,? /* No message selector */
&nbs.p; ,ghMessageConsumer
).
/* Start receiving messages */
RUN startReceiveMessages IN ghPtpSession.
WAIT-FOR u1 OF THIS-PROCEDURE PAUSE 20.
RUN deleteMessage IN ghMessage.
RUN deleteSession IN ghPtpSession.
PROCEDURE messageConsumer:
DEFINE INPUT PARAMETER phMessage AS HANDLE NO-UNDO.
DEFINE INPUT PARAMETER phMessageConsumer AS HANDLE NO-UNDO.
DEFINE OUTPUT PARAMETER phReply AS HANDLE NO-UNDO.
DEFINE VARIABLE iParts AS INTEGER NO-UNDO.
DEFINE VARIABLE iCounter AS INTEGER NO-UNDO.
DEFINE VARIABLE cPart AS CHARACTER NO-UNDO.
DEFINE VARIABLE mPointer AS MEMPTR NO-UNDO.
ASSIGN iParts = DYNAMIC-FUNCTION ("getPartCount" IN phMessage).
DO iCounter = 1 TO iParts:
MESSAGE "Get part " + STRING (iCounter) VIEW-AS ALERT-BOX.
IF DYNAMIC-FUNCTION("isMessagePart" IN phMessage, INPUT iCounter) THEN
MESSAGE "This part is a message" VIEW-AS ALERT-BOX .
ELSE DO:
DYNAMIC-FUNCTION ("getBytesPartByIndex" IN phMessage,
INPUT iCounter, OUTPUT mPointer).
MESSAGE "part " iCounter " is size: " GET-SIZE (mPointer) SKIP
"contents is: " STRING(mPointer) VIEW-AS ALERT-BOX.
SET-SIZE (mPointer) = 0.
END.
END.
RUN deleteMessage IN phMessage.
APPLY "U1" TO THIS-PROCEDURE.
END PROCEDURE.
.