2012-12-12 22 views
2

我有一個「項目」模板,該模板上的工作流程「項目工作流程」以及從項目模板創建的大量項目。如何以編程方式將項目發送到工作流程?

作爲非管理員用戶,當我編輯項目項目時,它將被髮送到工作流程。如果我以管理員身份登錄,則不會發生這種情況,因爲管理員用戶會忽略工作流。

我有一個批量導入過程中,我通過Sitecore的API編輯項:

updateItem.Editing.BeginEdit(); 
updateItem.Versions.AddVersion(); 
updateItem.Fields["x"] = someVal; 
updateItem.Fields["y"] = someOtherVal; 
updateItem.Fields["z"] = yetAnotherVal; 
updateItem.Editing.EndEdit(); 

當我運行這個批量導入代碼作爲管理員,我想我的項目要經過工作流程,使一個人參與批准或拒絕已導入的項目 - 但這種情況沒有發生,因爲管理員用戶忽略了工作流程。

有沒有辦法以編程方式將我修改的項目發送到工作流?有一個Item.State.GetWorkflowState(),但似乎沒有相應的SetWorkflowState()。

+0

Sitecore的版本是6.5.0。 – George

回答

4

未經內容審批人批准發佈內容不是一個好方法。

我不是100%確定這一點,因爲我沒有試過這個。

下面是代碼,我發現:

//add to workflow if requried and place it in start state and then execute the final stage 
Sitecore.Workflows.IWorkflow workflow = master.WorkflowProvider.GetWorkflow(newItem); 
workflow.Start(newItem); 
workflow.Execute(Config.AutoPublishCommandID, newItem, "auto approved", false); 

對於發佈:

//publish to pre-defined targets and langugaes 
Database[] targetDBs = new Database[] {  Sitecore.Configuration.Factory.GetDatabase("web") }; 
Language[] languages = new Language[] { LanguageManager.GetLanguage("en") }; 
Sitecore.Publishing.PublishManager.PublishIncremental(master, targetDBs, languages); 
+1

他沒有提到有關發佈的任何內容,只是希望他的導入項目能夠通過工作流進行處理。但是您提供的解決方案(workflow.Execute)是正確的方法。 –

+0

我已經更新了我的答案,並按照@RuudvanFalier的要求添加了發佈內容。 –

+0

謝謝@PankajTiwari,這似乎很好。我只想要代碼直到workflow.Start() - 我仍然將批准和發佈給實際用戶。 我還發現我可以用'updateItem.Fields [「__ Workflow state」]。Value =「{123ABC -...}」(即手動設置該字段的值)設置工作流程狀態,但是這看起來像更像是這樣做的正確方式。 – George

相關問題