2017-04-11 4 views
0

Ich habe eine Sitecore-Lösung mit etwa 800.000 Benutzern über zwei Sitecore-Domänen.Erhalten Sie alle Sitecore-Benutzer mit benutzerdefinierten Eigenschaften

Ich muss alle Benutzer mit einer benutzerdefinierten Eigenschaft exportieren.

ich mit diesem Code gestartet .....

var getAllUsers = UserManager.GetUsers(); 
var file = Sitecore.Configuration.Settings.GetSetting("AllUsersFile", @"C:\AllUsers.txt"); 

using (System.IO.StreamWriter datafile = new System.IO.StreamWriter(file)) 
{ 
    datafile.WriteLine("{0},{1},{2}", "email", "domain", "subscribed"); 

    foreach (var user in getAllUsers) 
    { 
     var dn = user.Domain.Name; 
     if (dn == "domain1" || dn == "domain2") 
     { 
      var profile = (UserProfile)user.Profile; 
      var email = profile.Email; 

      if (!string.IsNullOrWhiteSpace(email)) 
      { 
       var domain = user.Domain; 
       var subscribed = profile.GetCustomProperty(Settings.Account.SubscribedToNewsletter).ToBool(); 

       datafile.WriteLine("{0},{1},{2}", email, domain, subscribed ? "1" : "0"); 
      } 
     } 
    } 
} 

var response = new StringBuilder(); 
response.AppendLine("Done."); 
SheerResponse.Alert(response.ToString()); 

Danach 30 Stunden läuft es starb 302.500 dann ausgeführt hatte (kein Fehler, es gerade aufgehört). Ich habe versucht, es wieder von dort zu starten, wo es aufgehört hat, aber das ist genauso langsam.

las ich this Artikel ..

Also den Code geändert ...

List<string> domainsList = new List<string> {"domain1", "domain2"}; 
var file = Sitecore.Configuration.Settings.GetSetting("AllUsersFile", @"C:\AllUsers.txt"); 

using (System.IO.StreamWriter datafile = new System.IO.StreamWriter(file)) 
{ 
    datafile.WriteLine("{0},{1},{2}", "email", "domain", "subscribed"); 
    foreach (string dname in domainsList) 
    { 
     List<User> getAllUsers = Domain.GetDomain(dname).GetUsers().ToList(); 
     foreach (User user in getAllUsers) 
     { 
      var dn = user.Domain.Name; 

      var profile = (UserProfile)user.Profile; 
      var email = profile.Email; 

      if (!string.IsNullOrWhiteSpace(email)) 
      { 
       var subscribed = profile.GetCustomProperty(Settings.Account.SubscribedToNewsletter).ToBool(); 
       datafile.WriteLine("{0},{1},{2}", email, dn, subscribed ? "1" : "0"); 
      } 
     } 
    } 
} 

var response = new StringBuilder(); 
response.AppendLine("Done."); 
SheerResponse.Alert(response.ToString()); 

Die nun seit 6 Stunden laufen und es hat immer noch nicht die Liste der Benutzer aus der ersten Domäne zurückgegeben geschweige denn angefangen, die benutzerdefinierte Eigenschaft für jeden zu bekommen.

Sollte ich erwarten, dass es so lange dauert? Gibt es einen anderen Weg, wie ich das machen kann, das wird nicht so lange dauern?

+0

Es wird sehr lange dauern. Sie sollten sich diese Frage hier ansehen: http://sitecore.stackexchange.com/questions/2674/get-user-by-custom-property –

+0

Welchen Mitgliedsanbieter verwenden Sie? Sie können Te-Exporte außerhalb von Sitecore in SQL ausführen. Eine andere Möglichkeit besteht darin, mit Paging zu arbeiten, genauso wie der Benutzermanager in Sitecore funktioniert, x x user process nimmt und den nächsten übernimmt. Vielleicht nicht schneller, aber Sie können anhalten und dort weitermachen, wo Sie aufgehört haben. –

+0

@JanBluemink Im mit ASP.NET-Mitgliedschaft. Ich kann das meiste von dem, was ich brauche, direkt aus den SQL-Tabellen bekommen, aber ich kann die benutzerdefinierte Eigenschaft, die ich brauche, nicht bekommen. Von dem, was ich sehen kann, muss ich den Benutzer laden und 'user.Profile.GetCustomPropery' verwenden, um dies zu bekommen. Ich schaue auf Paging, wie du sagst, zumindest werde ich anfangen können, wo es aufgehört hat. Vielen Dank – Fred

Antwort

0

Wenn jemand anderes auf dieses Problem stößt, so habe ich es am Ende geschafft.

Ich nahm eine Sicherung der Live-Datenbanken und stellte sie als temporäre Datenbanken wieder her. Bei der Verwendung dieser Datenbanken habe ich meinen Code aktualisiert, um den Benutzer zu löschen, sobald ich die Details hatte, nach denen ich gesucht hatte. Je mehr Benutzer gelöscht wurden, desto schneller lief sie. Wie ich in der Frage sagte, dauerte die erste 300K 30 Stunden, aber nachdem diese gelöscht wurden, dauerte die nächste 100K 1 Stunde.

Keine gute Lösung, aber es war ein einmaliger Datenextrakt.

Verwandte Themen