步步为营 SharePoint 开发学习笔记系列 十、SharePoint web service 开发(下)

概要

接下来我们介绍Lists.UpdateListItems 在更新 item做法和UserGroup.GetUserCollectionFromSite()的用法,请先学习步步为营 SharePoint 开发学习笔记系列 八、SharePoint web service 开发(上),你将更容易学习web service的开发

Lists.UpdateListItems的用法

更新普通list的item的xml格式

<Batch OnError="Continue" ListVersion="1" 

ViewName="270C0508-A54F-4387-8AD0-49686D685EB2">

   <Method ID="1" Cmd="Update">

      <Field Name="ID">4<Field>

      <Field Name="Field_Name">Value</Field>

   </Method>

   <Method ID="2" Cmd="Update">

      <Field Name="ID" >6</Field>

      <Field Name="Field_Name">Value</Field>

   </Method>

</Batch>

更新folder的item的xml格式

<Batch OnError="Continue" PreCalc="TRUE" 

ListVersion="0" 

ViewName="{EF2F5A21-0FD0-4654-84ED-112B4F5A48F8}">

   <Method ID="1" Cmd="Update">

      <Field Name="ID">3</Field>

      <Field Name="owshiddenversion">1</Field>

      <Field Name="FileRef">

         http://Server/[sites/][Site/]Shared 

         Documents/Folder</Field>

      <Field Name="FSObjType">1</Field>

      <Field Name="BaseName">Name</Field>

   </Method>

</Batch>

更新documents的item的xml格式

<Batch OnError="Continue" PreCalc="TRUE" 

ListVersion="0" 

ViewName="{EF2F5A21-0FD0-4654-84ED-112B4F5A48F8}">

   <Method ID="1" Cmd="Update">

      <Field Name="ID">2</Field>

      <Field Name="owshiddenversion">1</Field>

      <Field Name="FileRef">

         http://Server/[sites/][Site/]Shared 

         Documents/File</Field>

      <Field Name="BaseName">Name</Field>

   </Method>

</Batch>

我们更新item时xml格式的处理

        /// <summary>

        /// Get the approved XML Node that will be used for the insert method of the webservice

        /// </summary>

        /// <param name="batch"></param>

        /// <returns></returns>

        private XmlNode GetUpdateXmlNode(List<ListItemBE> batch)

        {

            StringBuilder xml = new StringBuilder();



            xml.Append(@"<Batch OnError=""Continue"">");

            foreach (ListItemBE listItem in batch)

            {

                xml.AppendFormat(@"<Method ID=""{0}"" Cmd=""Update"">", listItem.Id);

                xml.Append(GetFieldInnerXml(listItem));

                xml.Append("</Method>");

            }

            xml.Append("</Batch>");



            //Get the Batch node

            XmlDocument doc = new XmlDocument();

            doc.LoadXml(xml.ToString());



            XmlNode batchNode = doc.SelectSingleNode("//Batch");

            return batchNode;

        }

更新item时调用sharepoint的web service的处理

        /// <summary>

        /// Insert the items

        /// </summary>

        /// <param name="batch"></param>

        /// <returns></returns>

        private UpdateResultBE UpdateItems(List<ListItemBE> batch)

        {

            //Get the Insert XML Node

            XmlNode batchNode = GetUpdateXmlNode(batch);

            XmlNode result = null;



            _logger.Log("Started batch updating list Items");

            try

            {

                //Call the webservice

                result = _ws.UpdateListItems(_listProperty.ListName, batchNode);

            }

            catch (Exception ex)

            {

                _logger.Log(String.Format("Error updating Items. Exception: {0}. Stack Trace: {1}", ex.Message, ex.StackTrace));

            }



            _logger.Log("Finished batch updating list items");



            //Transform the result into an object



            UpdateResultBE insertResult = new UpdateResultBE(result, _listProperty);

            LogInsertResult(insertResult);



            return insertResult;

        }

UserGroup.GetUserCollectionFromSite用法

首先建立web service的连接,代码如下

        public static SPUserGroupWS.UserGroup GetUserGroupWebService(ListBE listProperty)

        {

            string wsUrl = GetWSUrl(listProperty) + "_vti_bin/usergroup.asmx";

            SPUserGroupWS.UserGroup ws = new SPUserGroupWS.UserGroup();

            ws.Url = wsUrl;

            ws.UseDefaultCredentials = true;

            ws.Credentials = WSHelper.GetCredentials(listProperty.Type);

            return ws;

        }

我们只取两个简单的字段做个示范

    public class UserInfoBE

    {

        public string ID { get; set; }

        public string NTLoginName { get; set; }

    }

获取本站点用户列表的方法

        public List<UserInfoBE> GetUserInfoList()

        {

            List<UserInfoBE> userInfoList = new List<UserInfoBE>();

            UserInfoBE listItem;



            XmlNode nodes = ws.GetUserCollectionFromSite();

            foreach (XmlNode node in nodes)

            {

                if (node.Name == "Users")

                {

                    for (int i = 0; i < node.ChildNodes.Count; i++)

                    {

                        if (node.ChildNodes[i].Name == "User")

                        {

                            listItem = new UserInfoBE();

                            listItem.ID = node.ChildNodes[i].Attributes["ID"].Value;

                            listItem.NTLoginName = node.ChildNodes[i].Attributes["LoginName"].Value;

                            userInfoList.Add(listItem);

                        }

                    }

                }

            }

            return userInfoList;

        }

这样就可以通过web service获取站点用户列表信息,但要注意的是,web service的用户名和密码必须是sharepoint站点的管理员.

总结

学会sharepoint的web service用户对在做sharepoint站点的数据迁移时很有帮助。

作者:spring yang

出处:http://www.cnblogs.com/springyangwc/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

你可能感兴趣的:(web Service)