如何使用Web Service新建和更新Wiki页面的内容
2014-01-14 16:17
603 查看
公司内部有很多部门都创建了Wiki库,来做知识共享。公司是Hosting的SharePoint环境,不能写服务器端代码,要操作Wiki只能通过Web Service来完成,所以,碰到两个情况:
1)Wiki库中已经有了几百篇的文章,文章中有些文字需要更新,几百篇文章手动更新肯定累死;
2)有人想写个程序,自动将包含图片的Word文档内容新建成Wiki;
说白了,其实就是如何使用SharePoint Web Service来新建和更新Wiki页面。
在SharePoint里面,Wiki虽然也可以看成是List,但是又有些特殊,每篇Wiki就是一个aspx页面,Wiki的内容则存储在Wiki条目的WikiField字段里面。
1)对于更新Wiki页面的内容,我们可以使用Lists.asmx的UpdateListItems来完成:
以下是一个批量替换Wiki内容中的一段文字的代码示例:
2)对于新建Wiki页面,我们不能使用Lists.asmx的UpdateListItems,通过传递<Method ID='1' Cmd='New'>…命令来完成,一个办法是使用Copy.asmx,复制Wiki库中的一个Wiki页面,生成一个新的Wiki页面,更新它的WikiField字段。
引用自:http://blog.knowsky.com/177404.htm
1)Wiki库中已经有了几百篇的文章,文章中有些文字需要更新,几百篇文章手动更新肯定累死;
2)有人想写个程序,自动将包含图片的Word文档内容新建成Wiki;
说白了,其实就是如何使用SharePoint Web Service来新建和更新Wiki页面。
在SharePoint里面,Wiki虽然也可以看成是List,但是又有些特殊,每篇Wiki就是一个aspx页面,Wiki的内容则存储在Wiki条目的WikiField字段里面。
1)对于更新Wiki页面的内容,我们可以使用Lists.asmx的UpdateListItems来完成:
以下是一个批量替换Wiki内容中的一段文字的代码示例:
Lists.Lists SPLists = new Lists.Lists(); SPLists.Credentials = System.Net.CredentialCache.DefaultCredentials; SPLists.Url = strListsSvrURL; //拼更新列表字段的XML XmlDocument doc = new XmlDocument(); XmlElement batch = doc.CreateElement("Batch"); batch.SetAttribute("OnError", "Continue"); batch.SetAttribute("ListVersion", "1"); //获取Wiki库的所有Wiki条目 XmlNode ListItems = SPLists.GetListItems(strWikiLibName, null, null, null, null, null, null); foreach (XmlNode ListItem in ListItems.ChildNodes[1].ChildNodes) { if (ListItem.Attributes != null) { try { batch.InnerXml += "<Method ID='1' Cmd='Update'>" + "<Field Name='ID'>" + ListItem.Attributes["ows_ID"].Value + "</Field>" + "<Field Name='WikiField'><![CDATA[" + ListItem.Attributes["ows_WikiField"].Value.Replace(strOriginal, strNew) + "]]></Field>" + "</Method>"; } catch { } } } SPLists.UpdateListItems(strWikiLibName, batch);
2)对于新建Wiki页面,我们不能使用Lists.asmx的UpdateListItems,通过传递<Method ID='1' Cmd='New'>…命令来完成,一个办法是使用Copy.asmx,复制Wiki库中的一个Wiki页面,生成一个新的Wiki页面,更新它的WikiField字段。
string strWikiHomeURL = "http://site/wiki/home.aspx"; Copy.Copy SPListCopy = new Copy.Copy(); SPListCopy.Credentials = System.Net.CredentialCache.DefaultCredentials; SPListCopy.Url = strCopySvrURL; Copy.FieldInformation[] HomePagefieldInformation; byte[] HomePageContentBytes; uint myGetUint = SPListCopy.GetItem( strWikiHomeURL, out HomePagefieldInformation, out HomePageContentBytes); //Wiki Page Title string WikiName = "New" + DateTime.Now.ToString(); WikiName = WikiName.Replace("/", "").Replace(":", "").Replace(" ",""); Copy.FieldInformation headerInformation = new Copy.FieldInformation(); headerInformation.DisplayName = "Name"; headerInformation.InternalName = "LinkFilename"; headerInformation.Type = Copy.FieldType.Note; headerInformation.Value = WikiName; Copy.FieldInformation contentType = new Copy.FieldInformation(); contentType.DisplayName = "ContentType"; contentType.InternalName = "ContentType"; contentType.Type = Copy.FieldType.Text; contentType.Value = "Wiki Page"; Copy.FieldInformation wikiField = new Copy.FieldInformation(); wikiField.DisplayName = "Wiki Content"; wikiField.InternalName = "WikiField"; wikiField.Type = Copy.FieldType.Text;
引用自:http://blog.knowsky.com/177404.htm
相关文章推荐
- 如何设计页面布局,菜单和正式内容?使用div还是分部视图?
- Yii:如何在CGridView列表控件使用了Ajax方式更新数据的情况下返回前一个页面
- 如何使用python自动登录路由器且获取页面内容
- 如何使用JS实现页面内容随机显示
- 实例讲解如何使用CSS保持页面内容宽高比
- 如何使用angularjs实现抓取页面内容
- 跨浏览器javascript的使用-动态的更新页面内容
- sql server 2008 如何使用正则更新替换字段内容
- win10终端如何使用curl命令来抓取页面源码和内容
- 用户控件中使用了Javascript ,把2个控件放在页面上,那么页面上会有2个同名的javascript函数,如何处理
- 小随笔——PHP清空页面内容、在html中嵌套使用
- 如何使用 Visual C# 2005 或 Visual C# .NET 通过 DataSet 对象更新数据库
- Myeclipse2015 Jrebel插件的安装、配置、使用(新建.java文件、给类添加新方法、新属性、修改代码等,不用重启tomcat即可更新)
- 如何使用vim命令修改或新建文件
- JSP 最佳实践: 使用JSTL来更新JSP页面
- ScriptManager和UpdatePanel控件联合使用实现页面异步局部更新的效果
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(10):服务器端和客户端数据类型的自动转换:以XML方式序列化数据、小结
- ubuntu下如何使用mysql/python中如何调用sql新建一个数据库
- 如何让iframe使用父页面的js文件,不用每次去服务器做请求
- firefox提示 内容编码错误 无法显示您尝试查看的页面,因为它使用了无效或者不支持的压缩格式。