2015-09-29 24 views
5

Ich hoffe, ich habe hier nicht das falsche Ende des Stocks bekommen (wie immer die Sitecore-Dokumentation ist elend!)Kann ich weiterhin auf eine Sitecore-Kontaktfacette zugreifen, sobald die Sitzung bereinigt wurde?

Ich wollte eine Möglichkeit, Informationen gegen einen Besucher zu speichern, ich bin relativ neu zu Sitecore , aber die contact facets seemed the ideal Lösung, ziemlich viel Wort für Wort vom obigen Link umgesetzt, bis es Produktion traf, war ich ziemlich zufrieden damit. Wenn ich Informationen speicherte, konnte ich es lesen:

public IMpmVisitorFacet GetMpmVisitorFacet() 
{ 
    return _contact.GetFacet<IMpmVisitorFacet>(_MPMVisitorConfigName); 
} 

und Set Informationen und alles schien großartig. Ich konnte auch sehen, dass der Sitecore SC_ANALYTICS_GLOBAL_COOKIE gesetzt wurde, alles schien wundervoll. Dann habe ich ein paar gründliche Tests gemacht ...

Das Problem scheint zu sein, dass die Daten nicht lange bestehen bleiben. Wenn ich etwas Info in die Facette lege, wird es für eine Stunde oder so herumhängen (ich kann meinen Browser schließen, andere, Websites usw. anschauen) und ich werde darauf zugreifen können, aber nach einem "Betrag von Zeit "es geht einfach alles weg.

die Dokumentation überarbeitet Nachdem (habe ich erwähnt, dass sie nicht sehr gut sind) ich einen Vorbehalt in einem Satz gemerkt, dass ich nicht sehen vor:

Nun, ich eine andere Web-Formular Seite erstellen das liest nur die Mitarbeiter Nummer. Das zeigt mir, dass die Kontaktfacettendaten mindestens im Speicher gespeichert werden. Aber was ist mit permanenter Lagerung?

Warte mal, ich dachte, das war permanenter Speicher ?! Das Beispiel zeigt also einen Code zum Lesen der "Facette".

var contact = Tracker.Current.Contact; 
var data = contact.GetFacet<IEmployeeData>("Employee Data"); 
data.EmployeeId = "ABC123"; 
..... 
<p>Employee data contact facet updated.</p> 
<p>Contact ID: <b><%=contact.ContactId.ToString()%></b></p> 
<p>Employee #: <b><%=data.EmployeeId%></b></p> 

Aber diese Facette scheint nur für eine kurze Zeit zu existieren. Es geht dann auf:

Aus Leistungsgründen nur Sitecores Kontaktdaten an xDB schreibt, wenn die Sitzung ends.This bedeutet, dass wenn ich in MongoDB aussehen ...

es dann geht, zu zeigen Die Daten in seiner neuen glänzenden trendigen MongoDb-Implementierung. Aber was nützt es dem Mongo, wenn ich nicht wirklich auf diese Informationen zugreifen und sie benutzen kann?

Das wirft die Frage auf, wie ich auf diese Kontaktinformationen zugreifen kann, sobald die Sitzung abgebrochen wird?

dh Benutzer meldet sich meine Seite -> füge ich einige Informationen in ihre Kontakt Facette -> sie kommen am nächsten Tag zurück -> ich zuvor die Informationen, die ich hinzugefügt lesen möchten

Es gibt mehrere andere Dokumente sind die Sprechen Sie über den Zugriff auf diese Daten in der experience profile, index into Lucene und in the Experience platform (warum zwei Produkte mit fast den gleichen Namen ?!), aber nichts zu sagen, wie Sie auf diese Informationen in der Website selbst, in Code zugreifen.

  • ich einen Benutzer in der „Erfahrung Profil“ sehen können, und ich kann meine Besuche auf der Website sehen:


    auf die Kommentare von Dmytro Shevchenko hinzuzufügen.

  • Ich weiß, dass dieser Benutzer meine zusätzlichen Facetteninformationen hatte, weil er einen Code ausgelöst hat.
  • kann ich meine Benutzer finden (von der der ID in Seite der Erfahrung Profil aus dem Query-String genommen) in der Mongo Db
  • Aber wenn ich an dem Benutzer in MongoDB sehe die zusätzliche Information nicht da.
  • einige der Kontaktdatensätze haben diese Daten aber andere nicht

So scheint es ein Problem zu sein mit den neuen Informationen zu schreiben Mongo ... Hat jemand eine Hilfe oder eine ähnliche Erfahrung Dies?

+1

* "Wie kann ich auf diese Kontaktinformationen zugreifen, nachdem die Sitzung abgebrochen wurde?" * - Müssen Sie auf einen Kontakt mit seinen Facetten * außerhalb * einer Websitzung (z. B. von einem Hintergrunddienst) zugreifen? Oder müssen Sie in einer neuen Websitzung desselben Kontakts auf die Facetten des Kontakts zugreifen? –

+0

Neue Websitzung desselben Kontakts – Liam

+3

In diesem Fall sollten die Daten vorhanden sein. Sind Sie sicher, dass es sich um den gleichen Kontakt handelt, mit dem Sie in einer anderen Websitzung arbeiten? Überprüfen Sie 'KontaktID'. –

Antwort

2

Nach einer Menge von Debugging, Geigen und Tests habe ich endlich herausgefunden. Mein Problem war, wie sich herausstellte, nicht das Schreiben an Mongo, sondern das Zurücklesen von Mongo, nachdem es einmal geschrieben worden war.

Die Sitecore-Dokumentation scheint (wie immer) einen ziemlich grundlegenden Teil der Arbeit komplett zu vermissen. Etwa ein Drittel des way down the docs it states:

public EmployeeData() 
{ 
    base.EnsureAttribute<string>(FIELD_EMPLOYEE_ID); 
} 

Die „EnsureAttribute“ -Verfahren ist das Äquivalent einer variablen Wert-Typ zu deklarieren.


Ok, das ist sehr irreführend. Was dieser EnsureAttribute scheint zu tun ist, laden Sie die Daten für die Facette in die aktuelle Klasse von Mongo. Wenn Sie dies nicht für jede Eigenschaft in Ihrer Facette tun, dann stellt es nicht den Wert aus dem MongoDb! Das war mein Fehler, ich hatte nicht jede Eigenschaft in der Klasse "sichergestellt".

Also, was ist los war,

  • Ich habe meine Daten in die Facette
  • die Daten Facette in der Session bestehen bleibt und ich kann sehen, es Zugang zu verändern, etc.
  • Die Daten werden schließlich gespült Mongo (XDB, wenn Sie müssen)
  • den Benutzer zurückgibt, das System sie korrekt erkennt (gibt es keine Notwendigkeit, den Benutzer, die SC_ANALYTICS_GLOBAL_COOKIE tut dies für Sie zu identifizieren)
  • Aber es lädt nicht die Daten (aus Mongo und zurück in die Sitzung), wenn Sie es nicht "sicherstellen".

So hat die EnsureAttribute nicht „Wert Typen deklariert“ (dies meiner Meinung nach einfach total falsch ist) er die Daten aus mongodb lädt und in die aktuellen Session.

0

Ich denke, der Schritt, den Sie hier möglicherweise fehlen, ist die Tracker.Current.Session.Identify() Methode, einen bekannten Kontakt zu identifizieren. Die Daten in der Tracker-API dauern nur für die aktuelle Sitzung und Sie müssen den Kontakt in die Sitzung laden.

Die Implementierung von xDB beruht auf einem Kontakt, der sich beim Besuch der Site identifiziert, indem er sich beispielsweise anmeldet oder registriert.

Sobald sie sich eingeloggt haben, können Sie einen eindeutigen Bezeichner, z. B. die E-Mail-Adresse, verwenden und an die Identifizierungsmethode - Tracker.Current.Session.Identify("Email Address of the visitor") - übergeben.

Sobald Sie diese Methode aufgerufen haben und der Benutzer sich selbst zuvor identifiziert hat, werden die Kontaktdaten in die aktuelle Sitzung geladen, und alle vorhandenen Facetteninformationen sind in der Tracker API verfügbar.

+0

Aber ich habe keinen Benutzer Info an dieser Stelle sind sie ein anonymer Benutzer. Die Daten existieren, scheinen aber nicht in die Mongo-Instanz zu gelangen. Mir ist nicht klar, wie das hilft? – Liam

+0

Können Sie erklären * Die Implementierung von xDB beruht auf einem Kontakt, der sich beim Besuch der Site identifiziert *? Wo steht das in der Dokumentation? Das scheint nicht mit den Kommentaren von @Dmytro (oben) oder irgendetwas, was ich darüber auf der Sitecore-Website gelesen habe, zusammenzuhängen? – Liam

0

Ihr Problem liegt darin, wie Sie den Kontakt ziehen: Wenn Sie in einer Seitenanforderung sind, sollten Sie den aktuellen Kontakt über Tracker.Current.Contact zugreifen. Ihr Code befindet sich nicht in einer Seitenanforderung, aber der Benutzer kann eine Live-Sitzung haben. Verwenden Sie den ContactManager mit den oben beschriebenen Methoden. Wenn der Kontakt gerade nicht in einer Live-Sitzung ist, sollten Sie ContactRepository verwenden. Sehen Sie sich ein Beispiel an, wie Sie es hier verwenden können. Kopiert von https://sitecore.stackexchange.com/questions/3319/why-are-custom-xdb-facets-being-overwritten-on-session-end mit Antwort von Dmitry Shevchenko.