通过SharePoint Web服务更新审批状态

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

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

  • Delete -- 删除项。

  • New -- 创建项。

  • Update -- 修改项。

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

网上常见的写法如下:

1
2
3
4
5
6
7
<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”命令。

写法如下:

 

1
2
3
4
5
6
<Batch>
<Method ID='1' Cmd='<strong>Moderate</strong>'>
<Field Name='ID'>6</Field>
<Field Name='<strong>_ModerationStatus</strong>'>0</Field>
</Method>
</Batch>

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

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

1
2
3
4
5
6
7
8
9
10
11
12
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 @   Sunmoonfire  阅读(2578)  评论(3编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示