2011-06-13 85 views
5

我们正在努力在Sitecore 6.2站点的工作流程上实施一些自定义代码。我们的工作流程目前看起来像下面这样:Sitecore工作流程批准/拒绝电子邮件

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

我见过以下内容,但是帮助不大:http://trac.sitecore.net/MailWorkflowAction/browser/Trunk/sources/MailAction.cs – sestocker 2011-06-13 13:28:02

回答

7

我结束了以下代码。我仍然可以看到的命令来区分没有什么好办法,但已经实现,而不是两个独立的类(一个用于批准,一个是拒绝):

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

每个命令都必须有它自己的类/ Process()方法...你已经偶然发现了这里的解决方案。本身没有区别,Sitecore只是调用为每个命令定义的唯一方法。 – Bryan 2011-06-14 18:30:29

0

得到命令项本身最简单方法是ProcessorItem.InnerItem.Parent

0

这会给你的GUID的命令,如提交,拒绝等

args.CommandItem.ID 

这会给你的GUID像草案状态,批准等

args.CommandItem.ParentID 
相关问题