首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

透過 SharePoint Web 服務更新審批狀態:Moderate 命令的關鍵作用

     編輯:關於.NET

問題背景

啟用審批的 SharePoint 列表,透過物件模型修改已批准項目並 Update 會導致項目回到「待定」狀態。物件模型有 SystemUpdate 可悄無聲息修改,但若用 Web Service Lists.asmx 的 UpdateListItems 則無此幸運。

SDK 文檔與常見誤區

SDK 指出 Method 元素 Cmd 屬性可為 Delete、New、Update。常見寫法包含 _ModerationStatus = 0 (已批准),但運行結果仍為「待定」。甚至嘗試 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>

正確解法:使用 Moderate 命令

論壇發現:透過 Web Service 執行審批時,應使用 "Moderate" 命令,而非 "Update"。

<Batch>
  <Method ID='1' Cmd='Moderate'>
    <Field Name='ID'>6</Field>
    <Field Name='_ModerationStatus'>0</Field>
  </Method>
</Batch>

完整代碼範例:更新列表項並自動批准

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 = "https://puremoss/it/_vti_bin/lists.asmx";
    listProxy.UseDefaultCredentials = true;
    XmlNode resultNode = listProxy.UpdateListItems("通知", batchNode);
    return resultNode;
}

本例更新「通知」列表 ID 167 項,將「是否發布到首頁」改為「是」,並保持審批狀態為「已批准」。關鍵在 Cmd="Moderate"。

深度驗證:Moderate 命令不影響審批狀態

大膽猜測:若用 Moderate 但不更新 _ModerationStatus,是否影響審批狀態?實驗證實:只要用 Moderate 命令,就不會對審批狀態有影響。因此代碼中 <Field Name='_ModerationStatus'>0</Field> 完全可省略!

鐵證如山

  • 原本已批准狀態 原本已批准
  • 修改欄位後仍為已批准 修改「發布到主頁」為是,審批狀態不變
  • 版本號未變 版本號也未變化
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved