跟踪Sitecore项目历史记录

跟踪Sitecore项目历史记录,sitecore,sitecore6,Sitecore,Sitecore6,Sitecore使用上次更新者、创建者信息跟踪项目更改。 是否可以根据更改者跟踪项目中“字段”的更改?并检索对项目字段所做更改的列表。您可以创建自定义处理程序,并将其添加到Sitecore事件/事件配置中的项目:保存事件: <sitecore> <events> <event name="item:saving"> <handler type="My.Assembly.Namespace.CreateHistoryEntryHan

Sitecore使用上次更新者、创建者信息跟踪项目更改。
是否可以根据更改者跟踪项目中“字段”的更改?并检索对项目字段所做更改的列表。

您可以创建自定义处理程序,并将其添加到Sitecore
事件/事件配置中的
项目:保存
事件:

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

下面的类将信息保存到工作流历史记录存储,因此您可以使用功能区中的历史记录菜单查看信息(请参见屏幕截图),但您可以将其保存到任何其他位置

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

namespace My.Assembly.namespace
{
公共类CreateHistoryEntryHandler
{
受保护的void OnItemSave(对象发送方、事件args args)
{
Item newItem=Event.ExtractParameter(args,0)作为项;
if(newItem==null | | newItem.Database.DataManager.GetWorkflowInfo(newItem)==null)
{
返回;
}
Item originalItem=newItem.Database.GetItem(newItem.ID,newItem.Language,newItem.Version);
newItem.Fields.ReadAll();
IEnumerable fieldNames=newItem.Fields.Select(f=>f.Name);
IEnumerable differences=fieldName.Where(fieldName=>newItem[fieldName]!=originalItem[fieldName]).ToList();
if(differences.Any())
{
string message=string.Format(“项目内容已更改[{0}]”,differences.Aggregate((s1,s2)=>s1+”,“+s2));
AddHistoryEntry(新建项、消息);
}
}
公共静态void AddHistoryEntry(项,字符串文本)
{
WorkflowProvider WorkflowProvider=(item.Database.WorkflowProvider作为WorkflowProvider);
if(workflowProvider!=null&&workflowProvider.HistoryStore!=null)
{
字符串workflowState=GetWorkflowState(项);
workflowProvider.HistoryStore.AddHistory(项、workflowState、workflowState、文本);
}
}
私有静态字符串GetWorkflowState(项)
{
WorkflowInfo=item.Database.DataManager.GetWorkflowInfo(item);
return(info!=null)?info.StateID:String.Empty;
}
}
}