3

VBA を使用してアイテムを SharePoint リストに追加しようとしています。ユーザーが何かをインストールする必要がないので、Microsoft Soap Type Library を使用しています。次のようにコードします。

Sub test()

Dim soap As MSSOAPLib.SoapClient
Dim XMLstr As String
Dim listid As String
Dim listname As String

Set soap = New SoapClient
Call soap.mssoapinit(bstrwsdlfile:="http://wss/mySharepointSite/_vti_bin/lists.asmx?wsdl")


listid = "{e285aa1a-my-list-ID-d446cdbf091e}"
listname = "thisList"

XMLstr = "<Method ID='1' Cmd='New'>" & _
            "<Field Name='ID'>New</Field>" & _
            "<Field Name='personID'>1337</Field>" & _
        "</Method>"

soap.UpdateListItems listid, XMLstr

End Sub

またはを最初のパラメーターとしてsoap.UpdateListItems使用するかどうかに関係なく、行に「型の不一致」エラーが発生し続けます。どのタイプのパラメータを渡す必要があるかを判断するために WSDL を読み取ろうとしましたが、理解できません。ここで何を渡す必要がありますか?listidlistname

編集:代わりに Microsoft Soap Type Library 3.0 を使用し、MSSOAPLib.SoapClient->MSSOAPLib30.SoapClient30bstrwsdlfile->を変更して、次par_wsdlfileのように囲むXMLstrことで機能するようになりました。

<Batch OnError='continue' ListVersion='1' ViewName='" & ListView & "'>

...

</Batch>

ユーザーに MSSoap 3.0 のインストールを要求せずにこれを行う方法を模索中です。

4

2 に答える 2

3

MSXML2.XMLHTTPを介して送信されたHTTP POSTとしてXMLを送信することで、これを解決しました。次のようにコードします。

Function updateSharePointList(listURL as string, list As String) As DOMDocument

Dim xmlhtp As New MSXML2.XMLHTTP
Dim XMLDOC As New DOMDocument
Dim xmlstr as String

xmlstr = "<?xml version=""1.0"" encoding=""utf-8""?>" & _
"<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">" & _
  "<soap12:Body>" & _
    "<UpdateListItems xmlns=""http://schemas.microsoft.com/sharepoint/soap/"">" & _
      "<listName>" & list & "</listName>" & _
      "<updates>" & _
        "<Batch OnError='continue' ListVersion='1'>" & _
        "<Method ID='1' Cmd='New'>" & _
            "<Field Name='ID'>New</Field>" & _
            'all of your field updates go here, e.g.: 
            "<Field Name='userID'>1337</Field>" & _
            "<Field Name='comment'>first!</Field>" & _
        "</Method>" & _
        "</Batch>" & _
        "</updates>" & _
    "</UpdateListItems>" & _
  "</soap12:Body>" & _
"</soap12:Envelope>"

With xmlhtp
        .Open "POST", listURL, False
        .setRequestHeader "Host", "wss"
        .setRequestHeader "Content-Type", "application/soap+xml; charset=utf-8"

        .send xmlstr

        XMLDOC.LoadXML .responseText
        Set updateSharePointList = XMLDOC

End With

End Function

これには、Microsoft XML への参照が必要です (「Microsoft XML、v6.0」を使用しました)。AFAIK は、VBA 参照の標準セットに含まれています。DLL の登録は必要ありません。この関数は、 によって返された結果 XML を含む DOMDocument を返しますUpdateListItems。これを解析して、エラー チェックを行うことができます。

于 2012-06-20T17:32:25.940 に答える
0

コードから次の行を削除します。<Field Name='ID'>New</Field>

于 2012-07-09T12:43:31.993 に答える