Я пытаюсь реализовать базовое окно подтверждения Javascript в команде рабочего процесса (например, «вы уверены, что хотите это отредактировать?»). В зависимости от того, нажимают ли пользователи «да» или «нет», я хочу перейти в другое состояние рабочего процесса. Вот код, который у меня сейчас есть (некоторая логика удалена):
[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();
}
}
}
Я новичок в модели Pipeline, особенно в отношении 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();
}
}