Sitecore 工作流审批/拒绝邮件

6
我们正在为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);
}

我看过以下内容,但帮助不大:http://trac.sitecore.net/MailWorkflowAction/browser/Trunk/sources/MailAction.cs - sestocker
4个回答

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

每个命令都必须有自己的类/Process()方法...你已经在这里找到了解决方案。实际上并没有区分,Sitecore只是调用为每个命令定义的唯一方法。 - Bryan

3

0

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


0

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

args.CommandItem.ID 

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

args.CommandItem.ParentID

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接