zoukankan      html  css  js  c++  java
  • 如何使用Web Service新建和更新Wiki页面的内容

    公司内部有很多部门都创建了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

  • 相关阅读:
    浅谈软件开发项目的质量控制
    分布式系统稳定性模式
    正确使用 Volatile 变量
    我和 OI 的一些故事
    NOIP2020 退役记
    博弈论基础入门
    [HAOI2008]硬币购物(容斥/背包DP)
    [CF] 1307F Cow and Vacation(思维/贪心)
    [noi.ac 模拟赛8] c(容斥/DP)
    [noi.ac 模拟赛9] A.出征准备(同余最短路)
  • 原文地址:https://www.cnblogs.com/poissonnotes/p/3519249.html
Copyright © 2011-2022 走看看