MSMQ and Navision

From Navision it is possible to read and write to a MSMQ using the automation Microsoft Message Queue 3.0 Object Library. This is however not my preferred way, because you have to handle Messages IDs by yourself. Which means, if you don’t have to answer back with the same message id, this is an ok way to handle the queues, else you have to program your own ID handling or use a 3’d part application for this purpose.

To send messages through the MSMQs do the following:

First create the QueueInfo instans and open the Queue with send access

CREATE(QueueInfo);
QueueInfo.PathName := '.\private$\testqueue';
Queue := QueueInfo.Open(2,0); //2=MS_SEND_ACCESS, 0 = MQ_DENY_NONE

Then create the Message

CREATE(MSMQ_Message);
MSMQ_Message.Label := ‘Test Message’;
MSMQ_Message.Body := ‘This is a test’;

Send the Message to the Queue

MSMQ_Message.Send(Queue);

and finally close the queue

Queue.Close;
CLEAR(MSMQ_Message);
CLEAR(Queue);

To read messages do the following:

First create the QueueInfo instans and open the Queue with receive access

CREATE(QueueInfo);
QueueInfo.PathName := '.\private$\queue_request';
Queue := QueueInfo.Open(1,0); //1=MS_RECEIVE_ACCESS, 0 = MQ_DENY_NONE

Then Create the Message Instans and read (purge) the first message:

CREATE(MSMQ_Message);
MSMQ_Message := Queue.Receive;
Body := MSMQ_Message.Body;

and finally close the queue

Queue.Close;
CLEAR(MSMQ_Message);
CLEAR(Queue);

In both examples the following variables was used:

  • Queue is the automation 'Microsoft Message Queue 3.0 Object Library'.MSMQQueue
  • MSMQ_Message is the automation 'Microsoft Message Queue 3.0 Object Library'.MSMQMessage
  • QueueInfo is the automation 'Microsoft Message Queue 3.0 Object Library'.MSMQQueueInfo

Be the first to comment

Leave a Reply

Your email address will not be published.


*


This site uses Akismet to reduce spam. Learn how your comment data is processed.