2010-01-22 40 views
4

在Sitecore中,可以設置工作流程,以便更改項目的某個字段不會導致項目進入審批狀態?Sitecore項目特定字段的工作流程

我們希望有幾個字段可編輯且可立即發佈,同時強制更改某個特定字段的工作流。該字段如果已編輯,則會將該項傳遞給「等待批准」狀態。

我沒有發現如何在reference中執行此操作。

因爲我已經寫了這個片段就是出的Steve's reply一些代碼和一個例子:

class Filter 
{ 
    public void Process(WorkflowPipelineArgs args) 
    { 
     Database master = Factory.GetDatabase("master"); 
     Item item = args.DataItem; 
     IWorkflow wf = master.WorkflowProvider.GetWorkflow(item); 
     AllowPublishIfNoChangeToBodyField(item, wf); 
    } 

    /// <summary> 
    /// If the item's 'Body' field was not modified change the workflow state to Pending Publication 
    /// by running the Approve and Submit for Publication command 
    /// </summary> 
    /// <param name="item"></param> 
    /// <param name="wf"></param> 
    void AllowPublishIfNoChangeToBodyField(Item item, IWorkflow wf) 
    { 
     using (new Sitecore.SecurityModel.SecurityDisabler()) 
     { 
      if (true//pseudo code for now: body wasn't modified) 
      { 
       wf.Execute("{command-id}", item, "allow edits and publishing of all fields other than 'Body'", false); 
      } 
     } 
    } 
} 

的問題是「命令」重寫任何狀態變化我做出了的「下一狀態」 「行動」中的項目。

回答

7

聽起來像一個自定義工作流操作會做的伎倆,當用戶提交更改並以編程方式檢查字段上的更改時觸發它。

如果進行了更改,則會將工作流程移入「正在等待審批」狀態,如果不是簡單退出並讓其進入自動發佈狀態。

在sdn上有一個標題爲「Changing the Workflow State on an Item via API」的片段,我沒有嘗試過,但它應該可以做到這一點。

+0

Steve, 我已更新我的問題,包括一些新的代碼。工作流程的更改(我已驗證狀態已更改,item.State.GetWorkflowState())在操作後未保存。我認爲在我的行動之後,正在處理將狀態切換到命令的「下一個狀態」字段的「命令」的其餘部分。有什麼想法嗎? 謝謝! – David

相關問題