zoukankan      html  css  js  c++  java
  • 通过SharePoint Web服务更新审批状态

    启用审批的SharePoint列表,如果我们通过对象模型修改其中一条已批准的列表项,Update后会导致该列表项回到待定状态。不过好在对象模型里有强大的SystemUpdate,可以不动声色的修改列表项。可是,如果你是通过SharePoint Web Service中的Lists.asmx的UpdateListItems进行的修改,就没有这么幸运了。

    引用SharePoint SDK中的描述:每个 Method 元素的 Cmd 属性通过指定下列值之一确定对项目执行的操作:

    • Delete -- 删除项。

    • New -- 创建项。

    • Update -- 修改项。

    对于我们上面所说的情况,Cmd只能写作“Update”。

    网上常见的写法如下:

    <Batch OnError="Continue">
    <Method ID="1" Cmd="Update">
    <Field Name="ID">3634</Field>
    <Field Name="FileRef">3634;#Lists/Fichesroyjs/3634_.000</Field>
    <Field Name="_ModerationStatus">0</Field>
    </Method>
    </Batch>
    

    修改文档库的审批状态(无效)

    可是,这样运行的结果始终是待定。即使在更新中包含了<Field Name="_ModerationStatus">0</Field>也是一样。或许你会想到Update两次,这里可以直接告诉你结果,还是待定。

    那么到底如何添加或修改列表项,并且保证审批状态为已审批呢?

    答案最后是在论坛上找到的。通过Web Service执行审批时,应该使用“Moderate”命令,而不是“Update”命令。

    写法如下:

    <Batch>
    <Method ID='1' Cmd='Moderate'>
    <Field Name='ID'>6</Field>
    <Field Name='_ModerationStatus'>0</Field>
    </Method>
    </Batch>
    

    修改某列表中ID为6的列表项的审批状态为“已批准”

    下面附上一个完整的更新列表项并自动批准例子。其中最重要的还是Cmd="Moderate"这一句:

    public static XmlNode UpdateListItemApprove()
    {
    listservice.Lists listProxy = new listservice.Lists();
    string xml = "<Batch OnError='Continue'><Method ID='1' Cmd='Moderate'><Field Name='ID'>167</Field><Field Name='PublishToHomePage' Type='Boolean'>1</Field><Field Name=\"_ModerationStatus\" >0</Field></Method></Batch>";
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(xml);
    XmlNode batchNode = doc.SelectSingleNode("//Batch");
    listProxy.Url = "http://puremoss/it/_vti_bin/lists.asmx";
    listProxy.UseDefaultCredentials = true;
    XmlNode resultNode = listProxy.UpdateListItems("通知", batchNode);
    return resultNode;
    }
    

    本例中,我们更新了通知列表中ID为167的项,将字段“是否发布到首页”(该栏的内部名称为PublishToHomePage)改为“是”。由于该列表项之前已经被审批通过,所以仍然要“保持”其审批状态为“已批准”。

    那么再进一步,大胆猜测如果使用Moderate命令,但根本不更新审批状态(_ModerationStatus)为已批准。还会影响列表项的审批状态吗?

    经过一番实验,确定只要是使用Moderate命令,就不会对审批状态有影响。因此,上面代码中的<Field Name='_ModerationStatus'>0</Field>完全可以不写!

    有图为证:

    这是一条已批准的列表项(原本的状态) 

    运行后更改了“是否发布到主页”为是,但未影响其审批状态 

     发现版本也没有发生变化

    参考资料

    Approve from web service

    Approve a document by Webservice

  • 相关阅读:
    第四次上机作业
    第十一周作业
    Java第九次上机作业
    Java第八次上机作业
    Java第七次上机作业
    第八周作业
    Java第六次上机作业
    第七周作业
    Java第五次上机作业
    第六周作业
  • 原文地址:https://www.cnblogs.com/Sunmoonfire/p/1831379.html
Copyright © 2011-2022 走看看