How to change date format in Sitecore Experience Profile

Recently I came across a requirement that asked to change the date format for Experience Profile, after googling some I found something on stack overflow, that gave me a good base for this change

However, I could not exactly change what I needed 

Those two dates values were in different places , and the code provided failed to achieve the result. In order to achieve that I made some modifications

The following change was performed in Sitecore.NET 9.0.2 (rev. 180604)

experience-profile-1

You can download all the code on the following link or , do step by step on this Tutorial

1)Step one, add a reference to “Sitecore.Cintel.Client” on your Project

2)Create a file called “CustomClientFactory.cs”

using Sitecore.Cintel.Client;
using Sitecore.Cintel.Client.Transformers;

namespace Project.Pipelines
{
public class CustomClientFactory : ClientFactory
{
public new static CustomClientFactory Instance { get; set; } = new CustomClientFactory();

public new ResultSetExtender GetResultSetExtender()
{
return new ResultSetExtender(this.GetResultSetHelper(), this.GetTimeConverter(), this.GetTextConverter());
}
public new TimeConverter GetTimeConverter()
{
return new MyTimeConverter(this.GetRepository(), this.GetContextUtil());
}
}
}

3) Create a file called “MyTimeConverter.cs”

using Sitecore.Cintel.Client.Transformers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Project.Pipelines
{
public class MyTimeConverter : TimeConverter
{
public MyTimeConverter(Sitecore.Cintel.Client.Repository repository, Sitecore.Cintel.Client.ContextUtil contextUtil)
: base(repository, contextUtil)
{
}

public override string FormatDateTime(DateTime time)
{
return base.FormatDateTime(time, “MM.dd.yyyy HH:mm:ss“);
}
}
}

4) Create a file called “MyResultSetExtender.cs”

using Sitecore.Cintel.Client.Transformers;
using System.Data;

namespace Project.Pipelines
{

public class MyResultSetExtender : ResultSetExtender
{
public MyResultSetExtender() : this(
Sitecore.Cintel.Client.ClientFactory.Instance.GetResultSetHelper(),
new MyTimeConverter(Sitecore.Cintel.Client.ClientFactory.Instance.GetRepository(), Sitecore.Cintel.Client.ClientFactory.Instance.GetContextUtil()),
Sitecore.Cintel.Client.ClientFactory.Instance.GetTextConverter())
{
}

public MyResultSetExtender(
Sitecore.Cintel.Client.Transformers.ResultSetHelper resultSetHelper, TimeConverter timeConverter,
Sitecore.Cintel.Client.Transformers.TextConverter textConverter)
: base(resultSetHelper, CustomClientFactory.Instance.GetTimeConverter(), textConverter)
{
}
}
}

Now those base files are created, Now let’s rewrite some Sitecore DLLS in oder to achieve the result

5) Create a file called “OverviewResultTransformer.cs”

using Sitecore.Cintel.Client;
using Sitecore.Cintel.Client.Transformers;
using Sitecore.Cintel.Commons;
using Sitecore.Cintel.Endpoint.Transfomers;
using Sitecore.Cintel.Reporting.Contact.JourneyOutcomeDetail;
using Sitecore.Diagnostics;
using System.Data;

namespace Project.Pipelines
{
public class OverviewResultTransformer : IIntelResultTransformer, IResultTransformer
{
private readonly ResultSetExtender extender;

public OverviewResultTransformer()
{
this.extender = CustomClientFactory.Instance.GetResultSetExtender();
}

public OverviewResultTransformer(ResultSetExtender extender)
{
this.extender = extender;
}

public object Transform(ResultSet resultSet)
{
Assert.ArgumentNotNull((object)resultSet, nameof(resultSet));
string sourceColumnName = “LatestVisitStartDateTime”;
this.extender.AddRecency(resultSet, sourceColumnName);
this.extender.AddFormattedTime(resultSet, sourceColumnName, “FormattedTime”, “T”);
this.extender.AddFormattedTime(resultSet, sourceColumnName, “FormattedDate”, “MM dd yyyy”);
this.extender.AddDuration(resultSet, “AverageVisitDuration”, “AverageVisit”);
this.extender.AddLocationDisplayName(resultSet, “LatestVisitCityDisplayName”, “LatestVisitRegionDisplayName”, “LatestVisitCountryDisplayName”, “LatestVisitLocationDisplayName”);
return (object)resultSet;
}
}
}

6) Create a file called “LatestEventResultTransformer.cs”

using Sitecore.Cintel.Client;
using Sitecore.Cintel.Client.Transformers;
using Sitecore.Cintel.Commons;
using Sitecore.Cintel.Endpoint.Transfomers;
using Sitecore.Cintel.Reporting.Contact.JourneyOutcomeDetail;
using Sitecore.Diagnostics;
using System.Data;

namespace Project.Pipelines
{
public class LatestEventResultTransformer : IIntelResultTransformer, IResultTransformer
{
private readonly ResultSetExtender extender;

public LatestEventResultTransformer()
{
this.extender = CustomClientFactory.Instance.GetResultSetExtender();
}

public LatestEventResultTransformer(ResultSetExtender extender)
{
this.extender = extender;
}

public object Transform(ResultSet resultSet)
{
Assert.ArgumentNotNull((object)resultSet, nameof(resultSet));
this.extender.AddTimeWithRecency(resultSet, “EventDateTime”);
this.extender.AddLocationDisplayName(resultSet, “LatestVisitCityDisplayName”, “LatestVisitRegionDisplayName”, “LatestVisitCountryDisplayName”, “LatestVisitLocationDisplayName”);
return (object)resultSet;
}
}
}

7) create a file called “JourneyResultTransformer.cs”

using Project.Pipelines;
using Sitecore.Cintel.Client;
using Sitecore.Cintel.Client.Transformers;
using Sitecore.Cintel.Commons;
using Sitecore.Cintel.Endpoint.Transfomers;
using Sitecore.Cintel.Reporting.Contact.JourneyOutcomeDetail;
using Sitecore.Diagnostics;
using System.Data;
namespace Project.Pipelines
{
public class JourneyResultTransformer : IIntelResultTransformer, IResultTransformer
{
private readonly ResultSetExtender _extender;

public JourneyResultTransformer()
{
this._extender = CustomClientFactory.Instance.GetResultSetExtender();
}

public JourneyResultTransformer(ResultSetExtender extender)
{
this._extender = extender;
}

public object Transform(ResultSet resultSet)
{
return (object)resultSet;
}
}

8) Create a file called “JourneyOutcomeDetailResultTransformer.cs”

using Sitecore.Cintel.Client;
using Sitecore.Cintel.Client.Transformers;
using Sitecore.Cintel.Commons;
using Sitecore.Cintel.Endpoint.Transfomers;
using Sitecore.Cintel.Reporting.Contact.JourneyOutcomeDetail;
using Sitecore.Diagnostics;
using System.Data;

namespace Project.Pipelines
{
public class JourneyOutcomeDetailResultTransformer : IIntelResultTransformer, IResultTransformer
{
private readonly ResultSetExtender resultSetExtender;

public JourneyOutcomeDetailResultTransformer()
{
this.resultSetExtender = CustomClientFactory.Instance.GetResultSetExtender();
}

public JourneyOutcomeDetailResultTransformer(ResultSetExtender extender)
{
this.resultSetExtender = extender;

}

public object Transform(ResultSet resultSet)
{
Assert.ArgumentNotNull((object)resultSet, nameof(resultSet));
this.resultSetExtender.AddTimeWithRecency(resultSet, ((object)Schema.OutcomeDateTime).ToString());
this.resultSetExtender.AddDuration(resultSet, ((object)Schema.InteractionDuration).ToString(), “TimeOnPage”);
return (object)resultSet;
}
}
}

Now let’s create a config file Ex “Dateformate.ExperienceEditor.config”

Download the file here

The name spaced is “Project.Pipelines” and the dll file is “Project”

don’t forget to change the namespace and also the DLL name on this config file

Stack Exchange inspiration :

https://sitecore.stackexchange.com/questions/855/how-do-you-change-the-date-format-in-sitecore-experience-profile-journey-timelin