首页 / 软件开发 / .NET编程技术 / 通过SharePoint Web服务更新审批状态
通过SharePoint Web服务更新审批状态2010-11-18 cnblogs Sunmoonfire启用审批的SharePoint列表,如果我们通过对象模型修改其中一条已批准的列 表项,Update后会导致该列表项回到待定状态。不过好在对象模型里有强大的 SystemUpdate,可以不动声色的修改列表项。可是,如果你是通过SharePoint Web Service中的Lists.asmx的UpdateListItems进行的修改,就没有这么幸运了 。引用SharePoint SDK中的描述:每个 Method 元素的 Cmd 属性通过指定下列 值之一确定对项目执行的操作:*Delete -- 删除项。*New -- 创建项。*Update -- 修改项。对于我们上面所说的情况,Cmd只能写作“Update”。网上常见的写法如下:1 <Batch OnError="Continue">
2 <Method ID="1" Cmd="Update">
3 <FIEld Name="ID">3634</Field>
4 <Field Name="FileRef">3634;#Lists/Fichesroyjs/3634_.000</Field>
5 <Field Name="_ModerationStatus">0</Field>
6 </Method>
7 </Batch>
修改文档库的审批状态(无效)可是,这样运行的结果始终是待定。即使在更新中包含了<Field Name="_ModerationStatus">0</Field>也是一样。或许你会想到Update 两次,这里可以直接告诉你结果,还是待定。那么到底如何添加或修改列表项,并且保证审批状态为已审批呢?答案最后是在论坛上找到的。通过Web Service执行审批时,应该使用 “Moderate”命令,而不是“Update”命令。写法如下:1 <Batch>
2 <Method ID="1" Cmd="<strong>Moderate</strong>">
3 <Field Name="ID">6</Field>
4 <Field Name="<strong>_ModerationStatus</strong>">0</Field> ;
5 </Method>
6 </Batch>
修改某列表中ID为6的列表项的审批状态为“已批准”下面附上一个完整的更新列表项并自动批准例子。其中最重要的还是 Cmd="Moderate"这一句:01 public static XmlNode UpdateListItemApprove()
02 {
03 listservice.Lists listProxy = new listservice.Lists();
04 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>";
05 XmlDocument doc = new XmlDocument();
06 doc.LoadXml(xml);
07 XmlNode batchNode = doc.SelectSingleNode("//Batch");
08 listProxy.Url = "http://puremoss/it/_vti_bin/lists.asmx";
09 listProxy.UseDefaultCredentials = true;
10 XmlNode resultNode = listProxy.UpdateListItems("通知", batchNode);
11 return resultNode;
12 }