gpt4 book ai didi

sitecore - 如何为克隆提供电子邮件通知/工作流程

转载 作者:行者123 更新时间:2023-12-03 08:27:39 26 4
gpt4 key购买 nike

我们想建立一个系统,当克隆的项目更新时,克隆的管理员会收到电子邮件通知。将从该项目创建多个克隆,理想情况下我们希望按语言过滤通知(这样英语克隆的管理员在法语版本更新时不会收到通知)。

有没有一种简单的方法可以在工作流中实现这些?如果是这样,我什至应该尝试将工作流操作挂接到哪个?

我是否需要扩展或覆盖管道才能执行此操作?

交叉发布到 SDN http://sdn.sitecore.net/forum/ShowPost.aspx?PostID=34533#34533

编辑:更多信息:

如果克隆没有覆盖原始项目的字段,那么当原始项目字段被编辑时,客户端中没有通知。更改被直接复制 - 至少在 master 数据库中。但是 - 克隆仍然需要发布到 Web 数据库才能使此更改在线生效。所以我有点卡住了——我的用户需要执行一个操作(发布克隆)但不知道...

我真的很想能够以某种方式挂接到通知事件。

最佳答案

回答我自己的问题此处的代码由该线程中 SDN 上的各种发帖人提供: http://sdn.sitecore.net/forum//ShowPost.aspx?PostID=34012

如果为该线程做出贡献的任何人想要发布答案,那么我会很乐意在到期时给予信任和代表。

首先:John West 指出有几个有趣的私有(private)方法:

private static IEnumerable<Item> GetClonesOfVersion(Item source)
{
Assert.ArgumentNotNull(source, "source");
return (from clone in GetAllClones(source)
where clone.SourceUri == source.Uri
select clone);
}

private static IEnumerable<Item> GetAllClones(Item source)
{
Assert.ArgumentNotNull(source, "source");
return (from link in Globals.LinkDatabase.GetReferrers(source)
select link.GetSourceItem() into clone
where ((clone != null) && (clone.Source != null)) && (clone.Source.ID == source.ID)
select clone);
}

有一张支持票要求将这些公开,否则只需将它们复制到您的项目中即可。

这需要与自定义工作流操作相结合,该操作应该被编译并添加到源项目的工作流中。

下面这个由 Derek Roberti/Lauren Hightower 提供的是强制接受克隆中的通知。 要提供电子邮件通知,我们需要反转逻辑 - 如果克隆有通知,我们不想执行操作,而是要确保在克隆没有通知时执行操作 - 即直接从源项继承编辑后的值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sitecore.Data;
using Sitecore.Data.Items;
using Sitecore.Data.Clones;
using Sitecore.Diagnostics;
using Sitecore.SecurityModel;
using Sitecore;
using Sitecore.Links;

namespace WorkFlowCustom
{
public class ForceCloneAccept
{
public void Process(Sitecore.Workflows.Simple.WorkflowPipelineArgs args)
{
Item workFlowItem = args.DataItem;
List itemList = GetItemClones(workFlowItem, true);

foreach (Item cloneItem in itemList)
{
List list = new List(workFlowItem.Database.NotificationProvider.GetNotifications(cloneItem));
foreach (Notification n in list)
{
if ((n != null) && (workFlowItem != null))
{
n.Accept(cloneItem);
}
}
}
}

protected virtual List GetItemClones(Item item, bool processChildren)
{
Assert.ArgumentNotNull(item, "item");
List list = new List();

using (new SecurityDisabler())
{
foreach (ItemLink link in Globals.LinkDatabase.GetReferrers(item))

{
if (!(link.SourceFieldID != FieldIDs.Source))
{
Item sourceItem = link.GetSourceItem();
if (sourceItem != null)
{
list.Add(sourceItem);
}
}
}
}
if (processChildren)
{
foreach (Item item4 in item.Children)
{
list.AddRange(this.GetItemClones(item4, true));
}

}
return list;
}

}
}

下面是一些关于自定义工作流程和调用操作的一般阅读 Material : http://sdn.sitecore.net/FAQ/API/Cause%20the%20workflow%20to%20invoke%20an%20action.aspx

感谢所有提供的输入!

关于sitecore - 如何为克隆提供电子邮件通知/工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5498534/

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