Письма об одобрении / отклонении рабочего процесса Sitecore - PullRequest
6 голосов
/ 13 июня 2011

Мы работаем над реализацией некоторого пользовательского кода в рабочем процессе на сайте Sitecore 6.2.Наш рабочий процесс в настоящее время выглядит примерно так:

example sitecore workflow

Наша цель проста: отправьте электронное письмо отправителю, независимо от того, была ли его версия контента утверждена или отклонена на шаге «Ожидает утверждения» вместе скомментарии, которые сделал рецензент.Для этого мы добавляем действие под шагами «Утвердить» и «Отклонить» следующим образом:

sitecore workflow with actions

У нас две большие проблемы при попытке написать этот код

  1. Похоже, не существует простого способа определить, какая команда была выбрана (временное решение - передать аргумент на шаге действия, но я бы лучше определил, какой был выбран)
  2. Я не могу получить комментарии в этом состоянии рабочего процесса (хотя я могу получить их, это следующее состояние)

Для дальнейшего контекста, вот код, который у меня есть:

var contentItem = args.DataItem;
var contentDatabase = contentItem.Database;
var contentWorkflow = contentDatabase.WorkflowProvider.GetWorkflow(contentItem);
var contentHistory = contentWorkflow.GetHistory(contentItem);

//Get the workflow history so that we can email the last person in that chain.
if (contentHistory.Length > 0)
{
    //contentWorkflow.GetCommands
    var status = contentWorkflow.GetState(contentHistory[contentHistory.Length - 1].NewState);

    //submitting user (string)
    string lastUser = contentHistory[contentHistory.Length - 1].User;

    //approve/reject comments
    var message = contentHistory[contentHistory.Length - 1].Text;

    //sitecore user (so we can get email address)
    var submittingUser = sc.Security.Accounts.User.FromName(lastUser, false);
}

Ответы [ 4 ]

8 голосов
/ 13 июня 2011

Я получил следующий код. Я до сих пор не вижу хорошего способа провести различие между командами, но вместо этого внедрил два отдельных класса (один для утверждения, другой для отказа):

public void Process(WorkflowPipelineArgs args)
{
    //all variables get initialized
    string contentPath = args.DataItem.Paths.ContentPath;
    var contentItem = args.DataItem;
    var contentWorkflow = contentItem.Database.WorkflowProvider.GetWorkflow(contentItem);
    var contentHistory = contentWorkflow.GetHistory(contentItem);
    var status = "Approved";
    var subject = "Item approved in workflow: ";
    var message = "The above item was approved in workflow.";
    var comments = args.Comments;

    //Get the workflow history so that we can email the last person in that chain.
    if (contentHistory.Length > 0)
    {
        //submitting user (string)
        string lastUser = contentHistory[contentHistory.Length - 1].User;
        var submittingUser = Sitecore.Security.Accounts.User.FromName(lastUser, false);

        //send email however you like (we use postmark, for example)
        //submittingUser.Profile.Email
    }
}
3 голосов
/ 13 июня 2011

Я ответил на очень похожий вопрос .

В основном вам нужно получить Действие Почтового рабочего процесса , а затем вам необходимо его расширить, чтобы использовать оригиналэлектронная почта отправителя.

0 голосов
/ 13 октября 2016

Это даст вам GUID для таких команд, как отправить, отклонить и т. Д.

args.CommandItem.ID 

Это даст вам GUID для таких штатов, как Черновик, Утверждено и т. Д.

args.CommandItem.ParentID
0 голосов
/ 14 июня 2011

Самый простой способ получить сам элемент команды - ProcessorItem.InnerItem.Parent

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...