公司内部有很多部门都创建了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内容中的一段文字的代码示例:

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

如何使用Web Service新建和更新Wiki页面的内容的更多相关文章

  1. 使用XFire+Spring构建Web Service

    XFire是与Axis 2并列的新一代Web Service框架,通过提供简单的API支持Web Service各项标准协议,帮助你方便快速地开发Web Service应用. 相 对于Axis来说,目 ...

  2. Java与WCF交互(二):WCF客户端调用Java web service【转】

    原文:http://www.cnblogs.com/downmoon/archive/2010/08/25/1807982.html 在上篇< Java与WCF交互(一):Java客户端调用WC ...

  3. 转载——Java与WCF交互(二):WCF客户端调用Java Web Service

    在上篇< Java与WCF交互(一):Java客户端调用WCF服务>中,我介绍了自己如何使用axis2生成java客户端的悲惨经历.有同学问起使用什么协议,经初步验证,发现只有wsHttp ...

  4. 从Web Service和Remoting Service引出WCF服务

    本篇先通过Web Service和Remoting Service创建服务,抛砖引玉,再体验WCF服务.首先一些基本面: 什么是WCF? Windows Communication Foundatio ...

  5. .NET基础拾遗(7)Web Service的开发与应用基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...

  6. 关于WEB Service&WCF&WebApi实现身份验证之WCF篇(2)

    因前段时间工作变动(换了新工作)及工作较忙暂时中断了该系列文章,今天难得有点空闲时间,就继续总结WCF身份验证的其它方法.前面总结了三种方法(详见:关于WEB Service&WCF& ...

  7. Beaglebone Black– 智能家居控制系统 LAS - 网页服务器 Node.js 、Web Service、页面 和 TCP 请求转 UDP 发送

    上一篇,纯粹玩 ESP8266,写入了 init.lua 能收发 UDP.这次拿 BBB 开刀,用 BBB host 一个 web server ,用于与用户交互,数据来自 ESP8266 的 UDP ...

  8. VB.NET,C#.NET调用Web Service,利用visual studio 的实现方法

    下面是一篇文章比较详细,其实具体操作很简单,把Web Service服务地址,利用工具(VS2010),通过添加引用的形式,添加到项目中来就可以应用了. 大家如果这个地方不会操场的话,可以问问我QQ: ...

  9. 2.1 Apache Axis2 快速学习手册之 POJO 构建Web Service

    1. 准备:创建一个Maven Web App 项目 这里让我们使用Maven 模板创建一个Web App 项目 1. New------> Maven Project 2. 使用默认配置,点击 ...

随机推荐

  1. [Forward]Ten Caching Mistakes that Break your App

    Caching large objects, duplicate objects, caching collections, live objects, thread unsafe caching a ...

  2. html 旋转

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 关于Unity中LOD和渲染队列----渲染通道通用指令(一)

    每个shader里面有很多的subshader,如果所以的subshader都不执行的话就,就执行fallback.每个subshader都可以设置一个LOD,整个shader也有一个LOD. 系统就 ...

  4. java-selenium下载百度图片

    package download; import java.io.DataInputStream; import java.io.File; import java.io.FileOutputStre ...

  5. Android N: jack server failed

    在服务器上编译Android N.出现如下错误. Android N 编译时会使用到 jack server,同一台服务器上,各个用户都需要为 jack server 指定不同的端口,否则会产生端口冲 ...

  6. 模式识别之检索---Bag of visual word(词袋模型)

    visual words 视觉单词 http://blog.csdn.net/v_july_v/article/details/8203674 http://blog.csdn.net/pi9nc/a ...

  7. (转)tcp和udp能否发送0字节的数据包

    版权声明:本文为博主原创文章,未经博主允许不得转载. 转自:http://blog.csdn.net/wzx19840423/article/details/6643094  最近去一家牛逼的公司面试 ...

  8. C# 各种输入格式验证#各种输入格式验证

    /// <summary> /// 各种输入格式验证 /// </summary> public class ValidateUtil { private static Reg ...

  9. utf8 ucs4

    这个问题不好回答,首先UTF-8编码只不过是一种Unicode的转换,兼容ASCII.所以,UTF-8编码支持的最大字符编码应该是Unicode支持的最大字符编码. 理论上,UTF-8编码可以支持最大 ...

  10. 相对和绝对路径/cd命令/创建和删除目录mkdir/rmdir/rm命令

    2.6 相对和绝对路径 2.7 cd命令 2.8 创建和删除目录mkdir/rmdir 2.9 rm命令 绝对路径:从根开始的路径:文件所在的路径: 相对路径:相对于当前目录而言的路径:上一级或者下一 ...