読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Excel VBAからXML WebService(SOAP)を利用してみた その2

Excel

Excel VBAからXML WebService(SOAP)を利用する その1 - 酢ろぐ!」で、思ったより簡単にSOAPを扱える事が判りました。

任意のクラスオブジェクトを受け取る事が、Excel VBAで可能なのかも含めて、サンプルコードを書いてみました。

サーバー(ASP.NET WebService)側の処理

今回は以下のWebMethodを用意しました。GetTimeLineメソッドに対して要求があると、固定のステータスIDとステータス(Post内容)が格納されたStatusInfo型のクラスオブジェクトを返します。

VB.NET
Public Class StatusInfo
    Public StatusID As String
    Public Status As String
End Class

<WebMethod()> _
Public Function GetTimeLine(ByVal userID As String, _
                            ByVal password As String) As StatusInfo

    Dim info As New StatusInfo
    info.StatusID = "000000000001"
    info.Status = "ほげほげ"

    Return info
End Function
C#
public class StatusInfo
{
    public string StatusID;
    public string Status;
}

[WebMethod()]
public StatusInfo GetTimeLine(string userID, string password)
{
    StatusInfo info = new StatusInfo();
    info.StatusID = "000000000001";
    info.Status = "ほげほげ";
    
    return info;
}

クライアント(Excel VBA)側の処理

クライアント(Excel VBA)側の処理も作成していきます。

Sub SoapAccessSample2()

    ' SOAPClientオブジェクトの生成
    Dim oSOAPClient As Object
    Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
    
    ' mssoapinitメソッドは、WSDLファイルを入力として使って、
    ' SOAPClientオブジェクトを初期化します。
    ' 識別されたサービスが、初期化の際にSOAPClientオブジェクトにバインドされます。
    ' これにより、サービス内に定義されている操作を使用出来る様になります。
    Call oSOAPClient.mssoapinit("http://localhost/HogeWebService/Service1.asmx?wsdl")

    ' GetTimeLineサービスを使用する
    Dim statusInfo As Object
    Set statusInfo = oSOAPClient.GetTimeLine("USRID", "PASS")
    
    ' 結果を表示
    MsgBox (statusInfo(0).Text & ":" & statusInfo(1).Text)
End Sub

実行して「000000000001:ほげほげ」と、メッセージボックスに表示される事を確認します。