酢ろぐ!

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

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

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

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

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

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

*** VB.NET

|vb| 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#

|cs| 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)側の処理も作成していきます。

|vb| 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:ほげほげ」と、メッセージボックスに表示される事を確認します。

** 参照にした記事