Kbase P56034: Example code for sending large XML document from 4GL Adapter to SonicMQ
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  6/11/2007 |
|
Status: Unverified
GOAL:
Example code for sending large XML document from 4GL Adapter to SonicMQ
FACT(s) (Environment):
Progress 9.1x
SonicMQ
FIX:
DEFINE VARIABLE pubsubsession AS HANDLE NO-UNDO.
DEFINE VARIABLE mVariable AS MEMPTR NO-UNDO.
DEFINE VARIABLE hDocument AS HANDLE NO-UNDO.
DEFINE VARIABLE hMessage AS HANDLE NO-UNDO.
DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
DEFINE VARIABLE cDataChunk AS CHARACTER NO-UNDO.
DEFINE VARIABLE iStartingPos AS INTEGER NO-UNDO.
DEFINE VARIABLE iChunkSize AS INTEGER NO-UNDO.
DEFINE VARIABLE iLoopCounter AS INTEGER NO-UNDO.
DEFINE VARIABLE iNumChunks AS INTEGER NO-UNDO.
DEFINE VARIABLE iLastChunk AS INTEGER NO-UNDO.
RUN jms/pubsubsession.p PERSISTENT SET pubsubsession ("-H localhost -S 5162 ").
RUN setBrokerURL IN pubsubsession ("localhost:2506").
RUN SETUSER IN pubsubsession ("Administrator").
RUN setPassword IN pubsubsession("Administrator").
RUN beginSession IN pubsubsession.
RUN createXMLMessage IN pubsubsession (OUTPUT hMessage).
/* Initialize variables */
ASSIGN
cFileName = "Customer.xml"
iStartingPos = 1
iChunkSize = 30000
FILE-INFO:FILE-NAME=cFileName
SET-SIZE(mVariable) = FILE-INFO:FILE-SIZE.
/* LOAD XML file and SAVE it in the Memory Pointer Variable */
CREATE X-DOCUMENT hDocument.
hDocument:LOAD("file", cFileName, FALSE).
hDocument:SAVE("memptr", mVariable).
/* Calculate number of 30000-Byte chunks & Size of Last Chunk */
ASSIGN
iNumChunks = TRUNCATE(GET-SIZE(mVariable) / iChunkSize, 0)
iLastChunk = GET-SIZE(mVariable) MODULO iChunkSize.
/* Add the 30000-Byte chunks to the message */
DO iLoopCounter = 1 TO iNumChunks:
cDataChunk = GET-STRING(mVariable, iStartingPos , iChunkSize).
RUN appendText IN hMessage(cDataChunk).
iStartingPos = iStartingPos + iChunkSize.
END.
/* Add the last chunk to the message */
IF iLastChunk > 0 THEN DO:
cDataChunk = GET-STRING(mVariable, iStartingPos , iLastChunk).
RUN appendText IN hMessage(cDataChunk).
END.
/* Publish the message */
RUN publish IN pubsubsession ("testTopic", hMessage, ?, ?, ?).
/* Cleanup */
RUN deleteMessage IN hMessage.
RUN deleteSession IN pubsubsession.