1

更新: メソッド パラメーターで複雑な型を何らかの方法で送信する必要があると考えました - VBA でこれを行うにはどうすればよいですか?

VBA をコーディングするのはこれが初めてであり、問​​題を解決する方法について可能な限りの指針をいただければ幸いです。基本的に、私は小さな SOAP サービスを作成しましたが、正常に動作します - SoapUI でテストしました - だから、他のアプリケーションがそれを消費できるはずです。

サービスが生成する WSDL は hereです。おそらく、VBScript の SOAPClient で使用するのはあまり友好的ではありません。

実際にそれを使用するコードを少しまとめようとしています(以下のVBScript)-グーグルで見つけた例の上に構築しました。次のエラーが生成されます。

Incorrect number of parameters supplied for SOAP request HRESULT=0x80070057

Module Module1

    Dim WSDLFileName As String
    Dim base64attachment As String
    Dim attachment_filename As String
    Dim summary As String
    Dim SoapClient
    Dim res

    Sub Main()
        WSDLFileName = "http://localhost:7777/?wsdl"
        base64attachment = "UG9ydG1hbiBpcyBwb3J0Zm9saW8gbWFuYWdlbWVudCBzb2Z0d2FyZSB0byBoZWxwIFBNTyBrZWV"
        attachment_filename = "test_file.txt"
        summary = "test issue with summary"
        SoapClient = CreateObject("MSSOAP.SoapClient30")
        SoapClient.MSSoapInit(WSDLFileName)
        res = SoapClient.CreateJiraIssueWithBase64Attachment(summary, base64attachment, attachment_filename)
        Console.Out.WriteLine(res)
    End Sub

End Module

任意のポインターが役立ちます、私はここで迷っています。

次のような応答が作成されるはずです。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:open="open.JiraAdapter">
   <soapenv:Header/>
   <soapenv:Body>
      <open:CreateJiraIssueWithBase64Attachment>
         <open:summary>some summary</open:summary>
         <open:base64attachment>BASE64CODEDFILE</open:base64attachment>
         <open:attachment_filename>NAME of the file attached</open:attachment_filename>
      </open:CreateJiraIssueWithBase64Attachment>
   </soapenv:Body>
</soapenv:Envelope>
4

1 に答える 1

0

サービス レスポンスに複合型オブジェクトが含まれています。

<xs:element name="CreateJiraIssueWithBase64AttachmentResult" type="s0:Status" minOccurs="0" nillable="true"/>

複合型を使用できるようにするには、"MSSOAP.SoapSerializer30" を使用して要求を作成し、"MSSOAP.SoapReader30" を使用して応答を読み取る必要があります。

SOAP UI は、正しい要求構造 (タグ、名前空間、およびアクション) を確認するのに役立ちます。そのようなものだと思います

Connector = CreateObject("MSSOAP.HttpConnector30") 
Connector.Property("EndPointURL") = "url"
Connector.Property("UseSSL") = True
Connector.Connect
Connector.Property("SoapAction") = "CreateJiraIssueWithBase64Attachment"
Connector.BeginMessage

Serializer = CreateObject("MSSOAP.SoapSerializer30")
Serializer.Init(Connector.InputStream)
Serializer.StartEnvelope
Serializer.StartBody
Serializer.StartElement("CreateJiraIssueWithBase64Attachment";"open.jiraAdapter.test")
Serializer.StartElement("summary";"open.jiraAdapter.test")
Serializer.WriteString("another test issue for JUR")
Serializer.EndElement
Serializer.StartElement("base64attachment";"open.jiraAdapter.test")
Serializer.WriteString("Y29kZTogaHR0cDovL3Bhc3RlYmluLmNvbS9EbUx3N0oycQ0KeG1sOiBodHRwOi8vcGFzdGViaW4uY29tLzE3Q2MxVjJM")
Serializer.EndElement 
Serializer.StartElement("attachment_filename";"open.jiraAdapter.test")
Serializer.WriteString("readme.txt")
Serializer.EndElement   
Serializer.EndElement   
Serializer.EndBody
Serializer.EndEnvelope    
Connector.EndMessage

Reader = CreateObject("MSSOAP.SoapReader30")
Reader.Load(Connector.OutputStream)  
/// Reader.Body.xml - response

これがお役に立てば幸いです。

于 2013-05-04T12:35:12.880 に答える