Sitecore工作流程批准/拒绝电子邮件

时间:2011-06-13 13:07:22

标签: c# asp.net sitecore sitecore6

我们正在努力在Sitecore 6.2网站的工作流程上实现一些自定义代码。我们的工作流程目前如下所示:

example sitecore workflow

我们的目标很简单:在“等待批准”步骤中,通过电子邮件向提交者报告其内容修订是否已获批准或拒绝,以及审阅者所做的评论。为此,我们在“批准”和“拒绝”步骤下添加了一个操作,如下所示:

sitecore workflow with actions

我们在尝试编写此代码时遇到两个大问题

  1. 似乎没有任何简单的方法来确定选择了哪个命令(解决方法是在操作步骤中传递参数,但我更倾向于检测选择了哪个)
  2. 我似乎无法在此工作流状态下获得评论(我可以让他们成为下一个州)但
  3. 有关更多上下文,这是我到目前为止的代码:

    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 个答案:

答案 0 :(得分:8)

我最终得到了以下代码。我仍然没有看到区分命令的好方法,而是实现了两个单独的类(一个用于批准,一个用于拒绝):

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
    }
}

答案 1 :(得分:3)

我已回答非常similar question

基本上你需要获得Mail Workflow Action,然后你需要进一步扩展它以使用原始提交者的电子邮件。

答案 2 :(得分:0)

获取命令项本身的最简单方法是ProcessorItem.InnerItem.Parent

答案 3 :(得分:0)

这将为您提供诸如提交,拒绝等命令的GUID。

args.CommandItem.ID 

这将为您提供诸如草稿,已批准等状态的GUID。

args.CommandItem.ParentID