我正在创建一个与SharePoint 2010列表集成的MS Access 2007应用程序作为数据源。
我需要检查作为特定Sharepoint用户组成员的用户,以支持我在应用程序中构建的一些功能。有没有办法从VBA代码中确定sharepoint用户与组的关系?感谢。
答案 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)