设为首页 收藏本站
查看: 928|回复: 0

[经验分享] 使用Sharepoint 2007中的webservice操作列表

[复制链接]

尚未签到

发表于 2015-9-25 10:38:07 | 显示全部楼层 |阅读模式
Sharepoint中提供了很多开箱即用的Web Service,使用这些web service我们可以进行远程调用, 在"web server extensions\12\ISAPI"(其通常位于C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI")之下的"Microsoft Shared"目录中有大部分Web Services的物理文件。用于管理中心工具的管理Web Service位于ADMISAPI文件夹中,其在管理中心控制台里是一个名为"_vti_adm"的虚拟目录。当你创建了一个SharePoint站点时,它将包含一个名为"_vti_bin"的虚拟目录,以指向这个位置。IIS不为子站点包含任何应用程序或虚拟目录,它们只是包含通过 SharePoint元数据和HttpModules实现的对_vti_bin虚拟目录的映射。当然web service支持的功能没有sharepoint的对象模型丰富,不过基本都有了,本文主要说下Lists.asmx中的一些常用功能。
DSC0000.jpg

下面是一些常用的功能,关于其中一些CAML的使用请参考这篇文章http://www.cnblogs.com/carysun/archive/2011/01/12/moss-caml.html
1.得到Lists对象

static SPListsWS.Lists GetSPListWS()

        {

            SPListsWS.Lists spListsWS = new SPListsWS.Lists();

            if (UrlListSite != null && UrlListSite.Length > 0)

            {

                spListsWS.Url = UrlListSite;

            }

            if (SPWSUsername != null && SPWSUsername.Length > 0)

            {

                spListsWS.Credentials = new System.Net.NetworkCredential(SPWSUsername, SPWSUserPassword, SPWSDomain);

            }

            else

                spListsWS.Credentials = System.Net.CredentialCache.DefaultCredentials;


            return spListsWS;

        }

2.得到列表ID

static string GetSPListID(SPListsWS.Lists spListsWS, string listName,

            ref bool sourceFieldFound, ref bool targetFieldFound)

        {

            string listID;

            XmlNode aNode;

            XmlNode GetListResult;

            IEnumerator ienum;


            GetListResult = spListsWS.GetList(listName);


            listID = GetListResult.Attributes["ID"].Value;


            return listID;

        }


3.得到列表的item,可以通过CAML进行条件筛选
       static XmlNode GetListItems(SPListsWS.Lists spListsWS)

        {

            string rowLimit = "1000000", xDocQueryString, xDocFieldsString;

            //string getAllRecordsQuery = "<Query><Where><Gt><FieldRef Name=\"ID\" /><Value Type=\"Counter\">-1</Value></Gt></Where></Query>";

            string getAllRecordsQuery = "<Query><Where><Eq><FieldRef Name=\"a\" /><Value Type=\"String\">Approved</Value></Eq></Where></Query>";

            XmlNode result = null;

            XmlDocument xDocQuery = null, xDocFields;


            xDocQueryString = ConfigurationManager.AppSettings["SPListItemQueryString"];

            if (xDocQueryString != null && xDocQueryString.Length > 0)

            {

                xDocQuery = new XmlDocument();

                xDocQuery.LoadXml(xDocQueryString);

            }

            else

            {

                xDocQuery = new XmlDocument();

                xDocQuery.LoadXml(getAllRecordsQuery);

            }


            xDocFieldsString = "<ViewFields><FieldRef Name=\"ID\"></FieldRef>" +

                "<FieldRef Name=\"" + SourceField + "\"></FieldRef>" +

                "<FieldRef Name=\"" + TargetField + "\"></FieldRef>" +

                "</ViewFields>";

            xDocFields = new XmlDocument();

            xDocFields.LoadXml(xDocFieldsString);


           // result = spListsWS.GetListItems(ListName, null, xDocQuery, xDocFields, rowLimit, null, null);

            result = spListsWS.GetListItems(ListName, null, null, null, rowLimit, null, null);


            return result;

        }

4.更新列表中的item,使用CAML的方式
  static bool UpdateListItem(SPListsWS.Lists spListsWS, string strlistItemID, string newHistoryValue)

        {

            bool sucess = false;

            string strErrorCode = null;

            long lngErrorCode = -1;

            XmlDocument xDocSyncCmd = new XmlDocument();

            XmlNode xNodeResult;

            string updateCommand;


            updateCommand = "<Batch OnError=\"Continue\">" +

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

                "<Field Name=\"ID\">" + strlistItemID + "</Field>" +

                "<Field Name=\"" + TargetField + "\">" + EscapeIllegalChars(newHistoryValue) + "</Field>" +

                "</Method>" +

                "</Batch>";


            xDocSyncCmd.LoadXml(updateCommand);

            xNodeResult = spListsWS.UpdateListItems(ListName, xDocSyncCmd);

            xNodeResult = xNodeResult.FirstChild;

            xNodeResult = xNodeResult.FirstChild;

            if (xNodeResult.Name == "ErrorCode")

            {

                strErrorCode = xNodeResult.InnerXml;

                if (long.TryParse(strErrorCode.Replace("0x",""), out lngErrorCode))

                {

                    if (lngErrorCode == 0)

                    {

                        sucess = true;

                    }

                }

            }


            return sucess;

        }




static void UpdateListItemsHistory(SPListsWS.Lists spListsWS, XmlNode listItems)

        {

            IEnumerator ienum;

            XmlNode current, xNodeCommentHistory, xNodeEditorHistory, xDataNode = null;

            XmlAttribute xAttribCommentHistory, xAttribRecordCount;

            string strlistItemID, currHistoryValue, newHistoryValue;


            ienum = listItems.GetEnumerator();

            while (ienum.MoveNext())

            {

                current = (XmlNode)ienum.Current;

                if (current.Name == "rs:data")

                {

                    xDataNode = current;

                    xAttribRecordCount = xDataNode.Attributes["ItemCount"];

                    if (xAttribRecordCount != null)

                        long.TryParse(xAttribRecordCount.Value, out TotalRecords);


                    break;

                }

            }


            ienum = xDataNode.GetEnumerator();

            while (ienum.MoveNext())

            {

                current = (XmlNode)ienum.Current;

                if (current.Name == "z:row")

                {

                    strlistItemID = current.Attributes["ows_ID"].Value;

                    xAttribCommentHistory = current.Attributes["ows_" + TargetField];

                    if (xAttribCommentHistory != null)

                        currHistoryValue = current.Attributes["ows_" + TargetField].Value;

                    else

                        currHistoryValue = "";

                    xNodeCommentHistory = spListsWS.GetVersionCollection(ListName, strlistItemID, SourceField);

                    xNodeEditorHistory = spListsWS.GetVersionCollection(ListName, strlistItemID, "Editor");

                    newHistoryValue = ConcatenateHistory(xNodeCommentHistory, xNodeEditorHistory);

                    if (currHistoryValue != newHistoryValue)

                    {

                        UpdateListItem(spListsWS, strlistItemID, newHistoryValue);

                    }

                }

            }

        }


基本这些是最常用的功能了

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118558-1-1.html 上篇帖子: Sharepoint开发笔记 下篇帖子: 在SharePoint 2010上给用户操作菜单增加一个操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表