2016-09-13 1 views
2

J'ai essayé de lire et d'écrire des messages dans MQ à partir de UFT. J'utilise l'instance d'usine dotnet. J'ai atteint jusqu'à un point où je suis capable de se connecter à MQ pendant que je suis confronté à un problème dans l'accès à la file d'attente et lire et écrire des messages.Connexion à IBM MQ à partir de UFT

Le code est le suivant.

strQMgrName = "queue manager name" 
strMQMDllPath = "C:\\Program Files (x86)\\IBM\WebSphere MQ\\bin\\amqmdnet.dll" 
Set oMqEnvironment = DotNetFactory.CreateInstance("IBM.WMQ.MQEnvironment",strMQMDllPath) 
oMqEnvironment.Hostname = "host name" 
oMqEnvironment.Port = "port number" 
oMqEnvironment.Channel = "channel name" 


Set oMQC = DotNetFactory.CreateInstance("IBM.WMQ.MQC",strMQMDllPath) 
' qmanager name,channel name, connection name 
Set oMqQMgr = DotNetFactory.CreateInstance("IBM.WMQ.MQQueueManager",strMQMDllPath,strQMgrName) 

oMqQMgr.isConnected 'donne vrai

Maintenant, je blême d'utiliser la méthode

public MQQueue AccessQueue(string queueName, int openOptions) 

de l'instance IBM.WMQ.MQQueueManager. quelqu'un peut me guider à faire de même et laissez-moi savoir comment je peux pousser des messages et lire les messages de la file d'attente mentionné

Merci

Répondre

2

Après beaucoup de googler et de lire la documentation IBM, j'ai pu mettre et obtenir des messages dans MQ de UFT. .. Ci-dessous dans l'extrait de code qui a fonctionné pour moi .. J'espère que cela aide quelqu'un .. Je travaillais sur PUT et GET séparément, d'où il pourrait y avoir une certaine répétition dans le code.

Condition préalable pour ce .. Vous devez télécharger MQ client à partir du site IBM et l'installer sur PC où UFT est installé .. client IBM MQ est un logiciel gratuit

Dim oMQEnvironment 
    Dim oMQM 
    Dim oMQC 
    Dim oMQMessage 
    Dim oMQQueue 
    Dim intOpenOptions 


    strMQMDLLPath = "C:\\Program Files (x86)\\IBM\WebSphere MQ\\bin\\amqmdnet.dll" 
    strHostName= "Host Name" 
    intPort = "Port Number" 
    strChannel ="Channel Name" 
    strMessage ="UFT Test Message" 
    strMQManager = "Quemanager Name" 
    strMessageQueue = "Queue Name" 

'Cette partie du code est manifestement copié de l'un des messages en ligne. Affichera le lien une fois que je trouve à nouveau

« pour l'application (UFT) pour se connecter à un gestionnaire de file d'attente en mode client

Set oMQEnvironment = DotNetFactory.CreateInstance("IBM.WMQ.MQEnvironment",strMQMDLLPath) 

    'Initize the Environment 
    With oMQEnvironment 
    .HostName = strHostName 
    .Port = intPort 
    .Channel = strChannel 
    End with 

    On Error Resume Next 
    'Create MQ Instatnces 
    Set oMQM = DotnetFactory.CreateInstance("IBM.WMQ.MQQueueManager",strMQMDLLPath) 

    'Check if MQM Connected 
    If Err.Number <> 0 Then 
     Reporter.ReportEvent micFail , "Step: Creating MQM Object" , "Unable to Connect to MQ Manager at" & strHostName 
     'Exit Test 
    End If 

    Set oMQC = DotnetFactory.CreateInstance("IBM.WMQ.MQC",strMQMDLLPath) 
    Set oMQMessage = DotnetFactory.CreateInstance("IBM.WMQ.MQMessage",strMQMDLLPath) 

    'Declare Q open options 
    intOpenOptions = oMQC.MQOO_OUTPUT or oMQC.MQOO_FAIL_IF_QUIESCING ' 16 + 8192 

    'Open the Q to post the messages 
    If strRemoteMQManager = "" Then 
    Set oMQQueue = oMQM.AccessQueue(strMessageQueue , intOpenOptions) 
    Else 
    Set oMQQueue = oMQM.AccessQueue(strMessageQueue , intOpenOptions ,strRemoteMQManager, "","") 
    End If 

    'Format Message 
    With oMQMessage 
    .CharacterSet = 819 
    .WriteString(strMessage) 
    End with 

    'Post Message 
    With oMQQueue 
    .Put(oMQMessage) 
    .Close() 
    End With 

Maintenant, pour faire passer le message de MQ

Dim oMQEnvironment 
Dim oMQM 
Dim oMQC 
Dim oMQMessage 
Dim oMQQueue 

strMQMDLLPath = "C:\\Program Files (x86)\\IBM\WebSphere MQ\\bin\\amqmdnet.dll" 
strHostName= "host name" 
intPort = "port number" 
strChannel ="channel name" 
strMessage ="UFT Test Message" 
strMessageQueue = "message queue intended to access" 
strMQManager = "mq manager name" 
strRemoteMQManager="" 

'Create MQ Instances 
Set oMQC = DotnetFactory.CreateInstance("IBM.WMQ.MQC",strMQMDLLPath) 

'set the properties of the Queue manager 
Set properties = DotNetFactory.CreateInstance("System.Collections.Hashtable") 
       properties.Add oMQC.HOST_NAME_PROPERTY, strHostName 
       properties.Add oMQC.PORT_PROPERTY, intPort 
       properties.Add oMQC.CHANNEL_PROPERTY, strChannel 

'access the queue manager 
Set oMQM = DotnetFactory.CreateInstance("IBM.WMQ.MQQueueManager",strMQMDLLPath,strMQManager,properties) 

'here We are trying to browse the message one by one and keep the messages on the queue. 

'Declare Q open options 
Set oMQQueue = oMQM.AccessQueue(strMessageQueue,oMQC.MQOO_BROWSE) 
Set oMQGetMessageOptions = DotNetFactory.CreateInstance("IBM.WMQ.MQGetMessageOptions",strMQMDLLPath) 
oMQGetMessageOptions.Options = oMQC.MQGMO_BROWSE_FIRST 

Set oMQMessage = DotnetFactory.CreateInstance("IBM.WMQ.MQMessage",strMQMDLLPath) 

    oMQQueue.Get oMQMessage,oMQGetMessageOptions 

Set mqGetNextMsgOpts = DotNetFactory.CreateInstance("IBM.WMQ.MQGetMessageOptions",strMQMDLLPath) 
mqGetNextMsgOpts.Options = oMQC.MQGMO_BROWSE_NEXT 

browseMessages = true 

Do while browseMessages 
     on error resume next 
     messageText = oMQMessage.ReadString(oMQMessage.MessageLength) 
     'Print messageText 
     Set oMQMessage = DotnetFactory.CreateInstance("IBM.WMQ.MQMessage",strMQMDLLPath) 
     oMQQueue.Get oMQMessage,mqGetNextMsgOpts 
     if Err.Number <> 0 then browseMessages =false 
     'Clear both MsgID and CorrelID for next use. 
     oMQMessage.MessageId = oMQC.MQMI_NONE 
     oMQMessage.CorrelationId = oMQC.MQCI_NONE   
Loop 

'Cleanup 
Set oMQQueue = Nothing 
Set oMQMessage= Nothing 
Set oMQOpenOptions= Nothing 
Set oMQM= Nothing 
Set oMQEnvironment = Nothing