4
我試圖在工作流命令中實現一個基本的Javascript確認框(例如,「你確定要編輯它嗎?」)。根據用戶是否點擊是或否,我想要在工作流程中轉到不同的狀態。這是我現在有(某種邏輯取出)代碼:Sitecore工作流和管道
[Serializable]
public class ConfirmAction
{
public void Process(WorkflowPipelineArgs args)
{
Item currentItem = args.DataItem;
ClientPipelineArgs clientArgs = new ClientPipelineArgs();
Sitecore.Context.ClientPage.Start(this, "DialogProcessor", clientArgs);
}
protected void DialogProcessor(ClientPipelineArgs args)
{
if (args.IsPostBack)
{
if (args.Result != "yes")
{
args.AbortPipeline();
return;
}
}
else
{
Sitecore.Context.ClientPage.ClientResponse.Confirm("Are you sure you want to edit this?");
args.WaitForPostBack();
}
}
}
我是新來的管道模型,特別是關係到Sitecore的,所以我有點在抓救命稻草。我相信我遇到的問題是我沒有辦法從ClientResponse管道中將結果返回到工作流程管道,以告訴它該做什麼。
謝謝。
編輯:
使用燕的信息,我終於想出了以下解決方案:
public void Process(WorkflowPipelineArgs args)
{
Item currentItem = args.DataItem;
ClientPipelineArgs clientArgs = new ClientPipelineArgs();
clientArgs.Parameters.Add("itemID", currentItem.ID.ToString());
clientArgs.Parameters.Add("stateID", currentItem.Fields["__Workflow state"].Value);
Sitecore.Context.ClientPage.Start(this, "DialogProcessor", clientArgs);
}
protected void DialogProcessor(ClientPipelineArgs args)
{
if (args.IsPostBack)
{
if (args.Result != "yes")
{
Item currentItem = Sitecore.Configuration.Factory.GetDatabase("master").GetItem(args.Parameters["itemID"]);
currentItem.Editing.BeginEdit();
currentItem.Fields["__Workflow state"].Value = args.Parameters["stateID"];
currentItem.Editing.EndEdit();
return;
}
SheerResponse.Eval("window.location.reload();");
}
else
{
Sitecore.Context.ClientPage.ClientResponse.YesNoCancel("Are you sure you want to edit this?", "200", "200");
args.WaitForPostBack();
}
}
嗨妍,謝謝你的回答。我已經看過這種方法,但我不清楚如何控制給定項目的工作流程狀態。我覺得這是我需要通過WorkflowPipelineArgs完成的事情。這是不正確的? – raynjamin 2010-12-27 15:03:55