程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 通過SharePoint Web服務更新審批狀態

通過SharePoint Web服務更新審批狀態

編輯:關於.NET

啟用審批的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 }

本例中,我們更新了通知列表中ID為167的項,將字段“是否發布到首頁”( 該欄的內部名稱為PublishToHomePage)改為“是”。由於該列表項之前已經被審 批通過,所以仍然要“保持”其審批狀態為“已批准”。

那麼再進一步,大膽猜測如果使用Moderate命令,但根本不更新審批狀態 (_ModerationStatus)為已批准。還會影響列表項的審批狀態嗎?

經過一番實驗,確定只要是使用Moderate命令,就不會對審批狀態有影響。因 此,上面代碼中的<Field Name='_ModerationStatus'>0</Field>完 全可以不寫!

有圖為證:

這是一條已批准的列表項(原本的狀態) 

運行後更改了“是否發布到主頁”為是,但未影響其審批狀態 

發現版本也沒有發生變化

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved