您的位置:首页 > 其它

如何使用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内容中的一段文字的代码示例:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐