Когато работиме със Silverlight имаме възможност да използваме LINQ to XML за извличане на данни от резултатите от SharePoint Web Services. Тези дни разгледах LINQ to XML и никога повече не бих работил с XmlDocument обектите (:
Ето няколко примера:
GetListItems() – това е метод от Lists.asmx, и ето му отговора:
<listitems xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"
xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<rs:data ItemCount="13">
<z:row ... ows_ContentType="Task" ows_Title="New Task 1" ... />
... more rows here
</rs:data>
</listitems>
За да извлечем заглавията на list items и да ги подредим в List<string> обект:
private List<string> ProcessListResults(SPListsWS.GetListItemsCompletedEventArgs e)
{
string result = e.Result.ToString();
XNamespace ns = "#RowsetSchema";
XElement results = new XElement(e.Result);
var listItems = from x in results.Descendants(ns + "row")
where x.Attribute("ows_Title") != null
select x;
List<string> itemsList = new List<string>();
foreach (var item in listItems)
{
string title = item.Attribute("ows_Title").Value;
itemsList.Add(title);
}
return itemsList;
}
GetUserInfo() – Този метод е от usergroup.asmx и ни дава информация за user в текущия SPSite обект (взима го от скрития user list). Ето отговора:
<GetUserInfo xmlns="http://schemas.microsoft.com/sharepoint/soap/directory/">
<User ID="7" Sid="S-1-5-21-347908140-582334945-263120918-1111" Name="Radi"
LoginName="DEV\radi" Email="" Notes="" IsSiteAdmin="False"
IsDomainGroup="False" />
</GetUserInfo>
И как извлиам LoginName:
public static string GetLoginFromServiceResponse(XElement result)
{
XNamespace ns = "http://schemas.microsoft.com/sharepoint/soap/directory/";
XName xUser = XName.Get("User", ns.NamespaceName);
XName xUserInfo = XName.Get("GetUserInfo", ns.NamespaceName);
XElement user = result.Element(xUser);
if (user != null) { return user.Attribute("LoginName").Value; }
return null;
}
Това което подавам на метода е “e.Result.ToString()” от отговора.
Очаквайте още!