通过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>完全可以不写!
有图为证:
这是一条已批准的列表项(原本的状态)
运行后更改了“是否发布到主页”为是,但未影响其审批状态
发现版本也没有发生变化
参考资料
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!