通过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

posted @ 2010-09-19 23:52  Sunmoonfire  阅读(2554)  评论(3编辑  收藏  举报