gpt4 book ai didi

sitecore - 如何使用 Sitecore 中的工作流向原始提交者发送电子邮件?

转载 作者:行者123 更新时间:2023-11-30 23:49:51 44 4
gpt4 key购买 nike

当工作流过程中某个项目被审阅者拒绝时,我如何通知提交者?这似乎是一种很常见的情况,但我只看到“电子邮件操作”项中最基本的字段:

收件人、发件人、主题、消息

是否有用户的系统变量,然后是用户的电子邮件地址?我希望它是这样的:$user.email。

最佳答案

获取 Mail Workflow Action来自共享源工作流操作。

然后,您需要稍微扩展 Populate 上下文,以便更轻松地访问最后一个用户。这是我在我们最近的一个项目中的实现:

    protected virtual void PopulateContext(WorkflowPipelineArgs args)
{
VelocityContext.Put("args", args);
var item = args.DataItem;
VelocityContext.Put("item", item);
VelocityContext.Put("language", item.Language.CultureInfo.EnglishName);
VelocityContext.Put("version", item.Version.Number);
VelocityContext.Put("comment", args.Comments);
VelocityContext.Put("processor", args.ProcessorItem);
VelocityContext.Put("user", Context.User);
Database masterDatabase = Factory.GetDatabase(DatabaseNames.Master);
var workflow = masterDatabase.WorkflowProvider.GetWorkflow(item);
var history = workflow.GetHistory(item);
VelocityContext.Put("history", history);
if (history.Length > 0)
{
string lastUser = history[history.Length - 1].User;
MembershipUser membership = Membership.GetUser(lastUser);
VelocityContext.Put("authorEmail",
membership != null
? membership.Email
: DataAccessSettings.Workflow.WebQueryEmail);
}
VelocityContext.Put("state", workflow.GetState(item));

var nextStateItem = GetNextState(args);
VelocityContext.Put("nextState", nextStateItem != null ? nextStateItem.Name : string.Empty);
VelocityContext.Put("time", DateTime.Now);
VelocityContext.Put("previewUrl", string.Format("http://{0}/?sc_itemid=%7b{1}%7d&sc_mode=preview&sc_lang=en", DataAccessSettings.Site.HostName, item.ID.Guid));
VelocityContext.Put("contentEditorUrl", string.Format("http://{0}/sitecore/shell/Applications/Content%20editor.aspx?fo=%7b{1}%7d&id=%7b{1}%7d&la=en&v=1&sc_bw=1", DataAccessSettings.Site.HostName, item.ID.Guid));
}

/// <summary>
/// Processes the template, expanding all known values
/// </summary>
/// <param name="value">Template to process</param>
/// <returns>Rendered template</returns>
protected virtual string ProcessValue(string value, Item item)
{
var result = new StringWriter();
try
{
Velocity.Evaluate(VelocityContext, result, "Extended mail action", value);
}
catch (ParseErrorException ex)
{
Log.Error(string.Format("Error parsing template for the {0} item \n {1}",
item.Paths.Path, ex), this);
}
return result.GetStringBuilder().ToString();
}

#region helpers

private static Item GetNextState(WorkflowPipelineArgs args)
{
Item command = args.ProcessorItem.InnerItem.Parent;
string nextStateID = command["Next State"];
if (nextStateID.Length == 0)
{
return null;
}

return args.DataItem.Database.Items[ID.Parse(nextStateID)];
}

private string ProcessFieldValue(string fieldName, Item item)
{
string value = item[fieldName];
if (value.Length > 0)
{
return ProcessValue(value, item);
}
return value;
}

#endregion

您可以在设置电子邮件模板时使用 $authoremail。

希望有帮助。

关于sitecore - 如何使用 Sitecore 中的工作流向原始提交者发送电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6063558/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com