【问题标题】:Connecting to IBM MQ from UFT从 UFT 连接到 IBM MQ
【发布时间】:2023-04-05 04:36:01
【问题描述】:

我一直在尝试从 UFT 向 MQ 读写消息。我正在使用 dotnet 工厂实例。当我在访问队列和读写消息时遇到问题时,我已经达到了能够连接到 MQ 的地步。

代码如下。

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 ' 给出 true

现在我想用这个方法

public MQQueue AccessQueue(string queueName, int openOptions)

实例 IBM.WMQ.MQQueueManager。有人可以指导我做同样的事情并让我知道如何推送消息并从提到的队列中读取消息

谢谢

【问题讨论】:

    标签: ibm-mq qtp hp-uft


    【解决方案1】:

    经过大量谷歌搜索和阅读 IBM 文档后,我能够从 UFT 在 MQ 中放置和获取消息。 ..在对我有用的代码sn-p下面..希望这对某人有所帮助..我正在分别处理PUT和GET,因此代码中可能会有一些重复。

    先决条件..您必须从 IBM 站点下载 MQ 客户端并将其安装在安装了 UFT 的 PC 上。.IBM MQ 客户端是免费软件

      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"
    

    ' 这部分代码是从网上的一个帖子中公然复制的。再次找到后会发布链接

    '让应用程序 (UFT) 以客户端模式连接到队列管理器

     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 
    

    现在从 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
    

    【讨论】: