2015-09-29 12 views
5

Tôi hy vọng tôi đã không nhận được kết thúc không chính xác của thanh ở đây (vì tài liệu sitecore không phải là điều tuyệt vời!)Tôi vẫn có thể truy cập vào một mặt tiếp xúc sitecore sau khi phiên bị xóa?

Tôi muốn có một cách để lưu trữ thông tin đối với khách truy cập, tôi mới hợp lý để sitecore , nhưng các giải pháp contact facets seemed the ideal, khá nhiều thực hiện từ cho từ từ liên kết ở trên, cho đến khi nó nhấn sản xuất tôi đã khá hài lòng với nó. Khi tôi lưu trữ thông tin nó vẫn tồn tại, tôi có thể đọc nó:

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

và đặt thông tin và mọi thứ có vẻ tuyệt vời. Tôi cũng có thể thấy sitecore SC_ANALYTICS_GLOBAL_COOKIE được thiết lập, mọi thứ dường như tuyệt vời. Sau đó, tôi đã thực hiện một số kiểm tra kỹ lưỡng hơn ...

Vấn đề có vẻ là dữ liệu không tồn tại lâu dài. Nếu tôi đặt một số thông tin vào khía cạnh nó sẽ treo xung quanh trong một giờ hoặc lâu hơn (tôi có thể đóng trình duyệt của mình, nhìn vào các trang web khác, v.v.) và tôi sẽ có thể truy cập nó nhưng sau một số lượng thời gian "nó chỉ là tất cả biến mất.

Sau khi xem xét lại các tài liệu (có tôi đã đề cập rằng họ đang không phải là rất tốt) tôi nhận thấy một cảnh báo trong một câu mà tôi không nhìn thấy trước đây:

Vâng, tôi có thể tạo một trang web dưới dạng chỉ đọc số nhân viên . Điều đó sẽ cho tôi thấy rằng dữ liệu facet liên hệ đang được lưu trữ ít nhất là trong bộ nhớ. Nhưng còn lưu trữ vĩnh viễn thì sao?

Giữ, tôi nghĩ đây là bộ nhớ vĩnh viễn ?! Vì vậy, ví dụ cho thấy một số mã để đọc "khía cạnh".

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> 

Nhưng khía cạnh này dường như chỉ tồn tại trong một khoảng thời gian ngắn. Sau đó nó tiếp tục:

Đối với lý do hiệu suất Sitecore chỉ ghi dữ liệu liên lạc để XDB khi các ends.This phiên có nghĩa là nếu tôi nhìn trong MongoDB ...

nó sau đó đi vào để hiển thị các dữ liệu trong nó mới hợp thời trang sáng tạo mongoDb thực hiện. Nhưng việc sử dụng nó là gì ở mongo nếu tôi không thể truy cập và sử dụng thông tin đó một cách có lập trình!

Vì vậy, điều này đặt ra câu hỏi làm cách nào để truy cập thông tin liên hệ này sau khi phiên bị hủy?

tức là người dùng đăng nhập vào trang web của tôi -> Tôi thêm một số thông tin vào khía cạnh liên lạc của họ -> họ trở lại vào ngày hôm sau -> Tôi muốn đọc thông tin mà tôi thêm vào trước

Có một số tài liệu khác mà nói về việc truy cập dữ liệu này trong experience profile, đến index into Lucenein the Experience platform (tại sao có hai sản phẩm có cùng tên chính xác ?!) nhưng không có gì để nói cách truy cập thông tin này trong chính trang web đó, bằng mã.


Để thêm vào các ý kiến ​​của Dmytro Shevchenko:

  • tôi có thể nhìn thấy một người sử dụng của tôi trong "Hồ sơ kinh nghiệm" và tôi có thể thấy thăm của tôi đến trang web.
  • Tôi biết người dùng này đã có thêm thông tin về khía cạnh của tôi vì nó đã kích hoạt một số mã.
  • tôi có thể tìm thấy người dùng của tôi (từ id của đưa ra khỏi chuỗi truy vấn trong trang hồ sơ kinh nghiệm) trong Mongo Db
  • Nhưng khi tôi nhìn vào người sử dụng trong MongoDB thông tin bổ sung là không có.
  • một số hồ sơ tiếp xúc có dữ liệu này nhưng người khác thì không

Vì vậy, nó dường như là một vấn đề với văn bản thông tin mới để Mongo ... Có ai có bất kỳ sự giúp đỡ hoặc kinh nghiệm tương tự điều này?

+1

* "làm cách nào để truy cập thông tin liên hệ này sau khi phiên bị hủy?" * - bạn có cần truy cập liên hệ với các khía cạnh * bên ngoài * của phiên web (ví dụ: từ dịch vụ nền) không? Hay bạn cần truy cập các khía cạnh của liên hệ trong phiên web mới của cùng một liên hệ? –

+0

Phiên web mới của cùng một liên hệ – Liam

+3

Trong trường hợp đó, dữ liệu sẽ có ở đó. Bạn có chắc đó là cùng một liên hệ chính xác mà bạn đang làm việc trong một phiên web khác không? Kiểm tra 'ContactID'. –

Trả lời

2

Sau rất nhiều gỡ lỗi, không quan trọng và thử nghiệm, tôi cuối cùng cũng đã tìm ra điều này. Vấn đề của tôi, nó bật ra, không phải là văn bản cho mongo nó đã được đọc trở lại của mongo một khi nó đã được viết.

Tài liệu sitecore dường như (như thường lệ) để hoàn toàn bỏ lỡ một phần khá cơ bản trong công việc của việc này. Khoảng một phần ba của way down the docs it states:

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

Các "EnsureAttribute" phương pháp là tương đương với việc khai báo một biến giá trị-type.


Ok, điều này rất gây hiểu lầm. Điều này EnsureAttribute dường như làm là tải dữ liệu cho các khía cạnh vào lớp hiện tại từ mongo. Nếu bạn không làm điều này cho mỗi thuộc tính trong khía cạnh của bạn thì nó không đặt giá trị từ mongoDb! Đây là lỗi của tôi, tôi đã không "đảm bảo" mọi tài sản trong lớp.

Vì vậy, những gì đã xảy ra là,

  • tôi đặt dữ liệu của tôi vào khía cạnh
  • dữ liệu khía cạnh vẫn còn trong phiên và tôi có thể thấy, truy cập nó thay đổi nó, vv.
  • Dữ liệu được cuối cùng đỏ ửng vào Mông Cổ (XDB nếu bạn phải)
  • trở về người sử dụng, hệ thống nhận ra chúng một cách chính xác (không có nhu cầu để xác định người sử dụng, các SC_ANALYTICS_GLOBAL_COOKIE thực hiện điều này cho bạn)
  • Nhưng nó không tải dữ liệu (ra khỏi mongo và trở lại vào phiên) trừ khi bạn "đảm bảo" nó.

Vì vậy, các EnsureAttribute không "khai báo một kiểu giá trị" (đây chỉ là hoàn toàn sai lầm trong quan điểm của tôi) nó tải dữ liệu ra của MongoDB và vào hiện tại Session.

0

Tôi nghĩ rằng bước bạn có thể bị thiếu ở đây là phương thức Tracker.Current.Session.Identify() để xác định một liên hệ đã biết. Dữ liệu trong api Tracker chỉ kéo dài cho phiên hiện tại và bạn cần tải số liên lạc đó vào phiên.

Việc triển khai xDB dựa vào địa chỉ liên hệ tự xác định khi họ truy cập trang web, bằng cách đăng nhập hoặc đăng ký ví dụ.

Khi họ đã đăng nhập, bạn có thể sử dụng số nhận dạng duy nhất, ví dụ: địa chỉ email và chuyển thông tin này đến phương thức xác định - Tracker.Current.Session.Identify("Email Address of the visitor").

Khi bạn đã gọi phương thức này, nếu người dùng đã tự xác định trước đó, dữ liệu liên hệ sẽ được tải vào phiên hiện tại và mọi thông tin khía cạnh hiện có sẽ có sẵn trong Tracker Api.

+0

Nhưng tôi không có bất kỳ người dùng nào thông tin tại thời điểm này, họ là một người dùng ẩn danh. Các dữ liệu tồn tại nhưng dường như không được flushing vào ví dụ mongo. Tôi không rõ làm thế nào điều này sẽ giúp? – Liam

+0

Bạn có thể giải thích * Việc thực hiện xDB dựa vào một số liên lạc tự nhận dạng khi họ truy cập trang web *? Ở đâu trong tài liệu hiện nó nói điều này? Điều này dường như không phù hợp với các ý kiến ​​từ @Dmytro (ở trên) hoặc bất cứ điều gì mà tôi đã đọc về nó trên trang web sitecore? – Liam

0

Vấn đề của bạn liên quan đến cách bạn kéo liên hệ: Nếu bạn đang trong yêu cầu trang, bạn nên truy cập liên hệ hiện tại qua Tracker.Current.Contact. mã của bạn không có trong yêu cầu trang nhưng người dùng có thể có phiên trực tiếp, sử dụng ContactManager với các phương pháp được mô tả ở trên. Nếu liên hệ không có trong phiên trực tiếp ngay bây giờ, bạn nên sử dụng ContactRepository. Xem ví dụ về cách sử dụng tại đây. Được sao chép từ https://sitecore.stackexchange.com/questions/3319/why-are-custom-xdb-facets-being-overwritten-on-session-end được trả lời bởi Dmitry Shevchenko.

Các vấn đề liên quan