sitecore - 跟踪 Sitecore 项目历史记录

标签 sitecore sitecore6

Sitecore 通过上次更新者、创建者信息跟踪项目更改。
是否可以针对更改它们的人跟踪对项目中“字段”所做的更改?并检索对项目字段所做的更改列表。

最佳答案

您可以创建自定义处理程序并将其添加到 item:saving Sitecore 中的事件 events/event配置:

<sitecore>
  <events>
    <event name="item:saving">
      <handler type="My.Assembly.Namespace.CreateHistoryEntryHandler, My.Assembly" method="OnItemSaving" />
    </event>
  </events>
</sitecore>

下面的类将信息保存到工作流历史存储 所以你可以使用 看到它历史功能区菜单(见截图),但你可以将它保存到任何其他地方

Sitecore Workflow History Store - changes of the item fields
namespace My.Assembly.Namespace
{
    public class CreateHistoryEntryHandler
    {
        protected void OnItemSaving(object sender, EventArgs args)
        {
            Item newItem = Event.ExtractParameter(args, 0) as Item;

            if (newItem == null || newItem.Database.DataManager.GetWorkflowInfo(newItem) == null)
            {
                return;
            }

            Item originalItem = newItem.Database.GetItem(newItem.ID, newItem.Language, newItem.Version);

            newItem.Fields.ReadAll();

            IEnumerable<string> fieldNames = newItem.Fields.Select(f => f.Name);

            IEnumerable<string> differences = fieldNames.Where(fieldName => newItem[fieldName] != originalItem[fieldName]).ToList();

            if (differences.Any())
            {
                string message = String.Format("Item content changed [{0}]", differences.Aggregate((s1, s2) => s1 + ", " + s2));
                AddHistoryEntry(newItem, message);
            }
        }

        public static void AddHistoryEntry(Item item, string text)
        {
            WorkflowProvider workflowProvider = (item.Database.WorkflowProvider as WorkflowProvider);
            if (workflowProvider != null && workflowProvider.HistoryStore != null)
            {
                string workflowState = GetWorkflowState(item);
                workflowProvider.HistoryStore.AddHistory(item, workflowState, workflowState, text);
            }
        }

        private static string GetWorkflowState(Item item)
        {
            WorkflowInfo info = item.Database.DataManager.GetWorkflowInfo(item);
            return (info != null) ? info.StateID : String.Empty;
        }
    }
}

关于sitecore - 跟踪 Sitecore 项目历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15355227/

相关文章:

batch-file - 从命令行安装 Sitecore 包

azure - Sitecore 8.1 Lucene 未更新 - 如何确定索引是否已完全构建?

c# - 有没有办法停止 OnItemSaving 事件?

c# - 视觉区分 Sitecore 克隆

Sitecore.Context.User.IsAuthenticated 对于 Extranet\匿名用户返回 true

sitecore - 通过 Lucene.Net 获取最近的文章

Sitecore 在发布前更新字段

database - 当 Web 应用程序使用多个数据库(如 Sitecore 拥有)时,写入数据库如何工作

sitecore - 有没有办法使用与当前上下文不同的语言来检索 Sitecore 项目?

c# - 如何为当前用户(Sitecore)添加新的访客标签?