CAML查询以获取特定行

问题描述 投票:0回答:1

我使用Excel VBA使用SOAP请求获取SharePoint列表。

我能够获取所有记录。

如何获取具有特定卷号的名称?

以下是Excel VBA代码段。

Public Function retrieveSharepoint()
Dim currentId As String, ACP As String, DL As String
Dim returnedRow As Object
Dim setNode As Object
Dim sURL As String
    Dim sEnv As String
    Dim xmlhtp As New MSXML2.XMLHTTP60
    Dim xmlDoc As New DOMDocument60
    sURL = "https://sites.com/sites/project/project_ext/_vti_bin/lists.asmx"
    sEnv = "<?xml version=""1.0"" encoding=""utf-8""?>"
    sEnv = sEnv & "<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://schemas.xmlsoap.org/soap/envelope/"">"
    sEnv = sEnv & "  <soap12:Body>"
    sEnv = sEnv & "    <GetListItems xmlns=""http://schemas.microsoft.com/sharepoint/soap/"">"
    sEnv = sEnv & "         <listName>{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxx}</listName>"
    sEnv = sEnv & "    </GetListItems>"
    sEnv = sEnv & "  </soap12:Body>"
    sEnv = sEnv & "</soap12:Envelope>"

    With xmlhtp
        .Open "post", sURL, False
        .setRequestHeader "Content-Type", "text/xml; charset=utf-8"
        .setRequestHeader "soapAction", "http://schemas.microsoft.com/sharepoint/soap/GetListItems"
        .send sEnv
        xmlDoc.LoadXML (.responseText)
        For Each returnedRow In .responseXML.getElementsByTagName("z:row")
            currentId = returnedRow.getAttribute("ows_Roll_x0020_Number")
            ACP = returnedRow.getAttribute("ows_Name")
            DL = returnedRow.getAttribute("ows_Last_x0020_Name")
        Next
        MsgBox .responseText
    End With

End Function

目前我可以获取所有记录。

excel-vba soap sharepoint vba excel
1个回答
0
投票

只需使用Query元素:

/编辑

好的,我已经检查过Postman,并且正确的SOAP XML就是例如:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soapenv:Body>
        <GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
            <listName>{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxx}</listName>
            <query>
                <Query>
                    <Where>
                        <Eq>
                            <FieldRef Name='ID' />
                            <Value Type='Number'>260</Value>
                        </Eq>
                    </Where>
                </Query>
            </query>
        </GetListItems>
    </soapenv:Body>
</soapenv:Envelope>

所以,你的代码应该是这样的:

sEnv = sEnv & "         <listName>{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxx}</listName>"
sEnv = sEnv & "         <query><Query><Where><Eq><FieldRef Name='Roll_x0020_Number' /><Value Type='Number'>#YOUR NUMBER#</Value></Eq></Where></Query></query>"

补充参考:Lists.GetListItems

© www.soinside.com 2019 - 2024. All rights reserved.