I am working on XDB analytics code upgrade from Sitecore 8.2 to Sitecore 9.3. I have some doubts in custom contact facet. The below code written in Sitecore 8.2 analytics. I would like understand the below analytics code will support in Sitecore 9.3 or Do i need to modify the code to xconnect.
Step1: StartTracking & IdentifyContact
public async Task StartTracking(global::Sitecore.Security.Accounts.User user)
{
IdentifyContact(ScUser);
}
public Contact IdentifyContact(global::Sitecore.Security.Accounts.User user)
{
if (user == null)
return null;
string contactIdentifier = GetContactIdentifier(user);
if (string.IsNullOrEmpty(contactIdentifier) || contactIdentifier.Contains("anonymous") || Tracker.Current == null || Tracker.Current.Session == null)
{
return null;
}
//Tracker.Current.Contact.Identifiers.AuthenticationLevel = AuthenticationLevel.PasswordValidated;
Tracker.Current.Session.IdentifyAs("website", contactIdentifier);
return Tracker.Current.Contact;
}
private Sitecore.Security.Accounts.User _scUser;
protected Sitecore.Security.Accounts.User ScUser
{
get
{
if (_scUser == null)
{
string username = _userProvider.Globalize(Sitecore.Context.Domain.Name, Sitecore.Context.User.LocalName);
_scUser =
Sitecore.Security.Accounts.User.FromName(username, true);
}
return _scUser;
}
}
Step2: Getting Session contact
public Contact GetCurrentContact()
{
if (Tracker.IsActive && Tracker.Current != null && Tracker.Current.Session != null)
{
return Tracker.Current.Session.Contact;
}
return null;
}
Step3: Fetching Contact from GetCurrentContact method
Sitecore.Analytics.Tracking.Contact contact = GetCurrentContact();
string searchFormatPref = _contactRepository.GetSearchResultsFormatPreference(contact);
Step4: Passing analytics Session contact to GetSearchResultsFormatPreference
public string GetSearchResultsFormatPreference(Sitecore.Analytics.Tracking.Contact contact)
{
if (contact == null)
return string.Empty;
IFacetModel facet = contact.GetFacet<FacetModel>(FacetModel.FacetName);
return facet.Preferences.SearchResultsFormat;
}
Step5: Analytics Custom facet Model
public class FacetModel : Facet, IFacetModel
{
public const string FacetName = "Preference";
public int PersonId
{
get; set;
}
public FacetModel()
{
}
}
Step6: facet config
<entities>
<contact>
<facets>
<facet name="Preference" contract="Central.Provider.Sitecore.xDB.Facets.FacetModel, Central.Provider.Sitecore" />
</facets>
</contact>
</entities>
I would like to understand the above functionality and code will support in sitecore 9.3 or not.
Some peoples are telling to use xconnect facet. If i use Xconnect facet I'm facing conversion facet issue.
Example: XConnect facet
public Contact GetCurrentContact()
{
if (Tracker.IsActive && Tracker.Current != null && Tracker.Current.Session != null)
{
return Tracker.Current.Session.Contact;
}
return null;
}
Sitecore.Analytics.Tracking.Contact contact = GetCurrentContact();
GetSearchResultsFormatPreference(contact)
// Getting facet conversion issue in the below line of code if i use xconnect facet because contact is coming from Tracker.Current.Session.Contact
IFacetModel facet = contact.GetFacet<FacetModel>(FacetModel.FacetName)
public string GetSearchResultsFormatPreference(Sitecore.Analytics.Tracking.Contact contact)
{
if (contact == null)
return string.Empty;
IFacetModel facet = contact.GetFacet<FacetModel>(FacetModel.FacetName);
return facet.Preferences.SearchResultsFormat;
}
Can Someone please help me how to proceed the above code in Sitecore 9.3.