如何使用MS Access / VBA获取Sharepoint组中的用户列表

时间:2011-07-27 21:44:10

标签: vba sharepoint-2010 ms-access-2007

我正在创建一个与SharePoint 2010列表集成的MS Access 2007应用程序作为数据源。

我需要检查作为特定Sharepoint用户组成员的用户,以支持我在应用程序中构建的一些功能。有没有办法从VBA代码中确定sharepoint用户与组的关系?感谢。

2 个答案:

答案 0 :(得分:1)

我通过SOAP使用CAML查询,然后将响应提供给XML解析器

可能需要一些微调,但这会让你大部分都在那里。我使用类似的东西。

它可能看起来很复杂,但一切都很好,您只需要更改社区的URL。

启用'Debug.Print .responseText和'debug.print .status来调试任何问题。状态为200表示已找到该网站。

function start_here()

set user_list = get_users("http://sites.company.com/sites/00672")

for each n in user_list
    debug.print str(n), userlist(str(n))
next

end function

Function get_users(site_URL)

Dim xmlDoc
Set xmlDoc = CreateObject("Msxml2.DOMDocument")

request = "<?xml version='1.0' encoding='utf-8'?>" + _
        "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" + _
        " xmlns:xsd='http://www.w3.org/2001/XMLSchema'" + _
        " xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>" + _
            "<soap:Body>" + _
                "<GetUserCollectionFromSite xmlns='http://schemas.microsoft.com/sharepoint/soap/directory/' />" + _
            "</soap:Body>" + _
        "</soap:Envelope>"

    With CreateObject("Microsoft.XMLHTTP")
      .Open "Get", site_URL & "/_vti_bin/usergroup.asmx", False, Null, Null
      .setRequestHeader "Content-Type", "text/xml; charset=utf-8"
      .setRequestHeader "SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/directory/GetUserCollectionFromSite"
      .send request
      'Debug.Print .status
      'Debug.Print .responseText
       xmlDoc.LoadXML (.responseText)
     End With

Set nodesCollection = xmlDoc.SelectNodes("//Users/User")
Set ID = xmlDoc.createNode(1, "xml", "")
Set user_name = xmlDoc.createNode(1, "xml", "")

Set user_col = New Collection

    For Each nodeElement In nodesCollection
        Set ID = nodeElement.Attributes.getNamedItem("ID")
        Set user_name = nodeElement.Attributes.getNamedItem("Name")
        user_col.Add user_name.Text), Str(ID.Text)
    Next

Set get_users = user_col

end function

答案 1 :(得分:0)

我认为函数中有一个小的错字。...

代替: user_col。添加user_name.Text),Str(ID.Text)

应该-没有多余的): user_col。添加user_name.Text,Str(ID.Text)