【问题标题】:Sitecore workflow approval/rejection emailsSitecore 工作流程批准/拒绝电子邮件
【发布时间】:2011-06-13 13:07:21
【问题描述】:

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

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

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

  1. 似乎没有任何简单的方法可以确定选择了哪个命令(解决方法是在操作步骤中传递一个参数,但我更愿意检测选择了哪个)
  2. 我似乎无法在此工作流状态下获取 cmets(但我可以在下一个状态下获取它们)

关于进一步的上下文,这里是我到目前为止的代码:

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

【问题讨论】:

标签: c# asp.net sitecore sitecore6


【解决方案1】:

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

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

【讨论】:

  • 每个命令都必须有自己的类 / Process() 方法...您已经在这里偶然发现了解决方案。本身没有区别,Sitecore 只是调用为每个命令定义的唯一方法。
【解决方案2】:

我已经回答了一个很similar question

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      这将为您提供提交、拒绝等命令的 GUID。

      args.CommandItem.ID 
      

      这将为您提供草案、已批准等状态的 GUID。

      args.CommandItem.ParentID
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-09
        • 2016-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多