2014-10-31 6 views
5

ich eine Sitecores Artikel durch die Glass.Mapper wie folgt aus:Wie Standardwerte auf ein Element mit Glass.Mapper erstellt anwenden

var homeItem = sitecoreContext.GetHomeItem<HomeItem>(); 

// Create the car item 
ICar car = sitecoreService.Create(homeItem.BooksFolder, new Car { Tires = 4, Seats=4}); 

Dies funktioniert, mit Ausnahme der Standardwerte auf der Auto-Vorlage nicht angewendet - oder wenn sie es sind, werden sie sofort von den neuen Car-Eigenschaften überschrieben. Wenn also das Auto-Objekt für die Color-Eigenschaft den Wert Null hat, wird diese Null in das Feld anstatt des "grünen" Werts aus den Standardwerten der Car-Vorlage geschrieben.

Ich habe nach einem vernünftigen Weg gesucht, dies durch Glass.Mapper zu tun, habe aber nichts gefunden. Gibt es eine Möglichkeit, dies durch Glass.Mapper zu tun?

Antwort

5

Es gibt einen Weg, dies zu tun, verwenden Sie die Überschreibung der Methode erstellen, die wie folgt aussieht:

var homeItem = sitecoreContext.GetHomeItem<HomeItem>(); 

var carName = "Some New Name"; 

// Create the car item 
// I don't know what the type of BooksFolder is so you would put that in the place of Folder. 
ICar car = sitecoreService.Create<Car, Folder>(homeItem.BooksFolder, carName); 
car.Tires = 4; 
car.Seats = 4; 

sitecoreService.Save(car); 

Wir liefen:

T Create<T, TK>(TK parent, string newName, Language language = null, bool updateStatistics = true, bool silent = false) where T : class where TK : class; 

So Ihr Code wie folgt aussehen würde in das gleiche Thema und so haben wir es geschafft.

+0

perfekt funktioniert! Ich denke, es ist sinnvoll, wenn Sie ein neues Objekt aus einem Objekt erstellen, erhalten Sie * genau * das, was in diesem Objekt ohne Standardwerte ist, aber wenn Sie es nur aus einem Namen erstellen, erhalten Sie ein Objekt mit angewendeten Standardwerten. –

+2

@ T.J.Kjaer Ich würde widersprechen, das "macht Sinn" - was * sinnvoll wäre, ist eine richtig benannte create-Methode, die angibt, ob Standardwerte angewendet werden oder nicht :) –

1

Sie können die gewünschten Felder auf die Standardwerte zurücksetzen, indem Sie die ResetContext-Methode von Sitecore aufrufen, die im EditContext eingeschlossen ist.

var homeItem = sitecoreContext.GetHomeItem<HomeItem>(); 

// Create the car item 
ICar car = sitecoreService.Create(homeItem.BooksFolder, new Car { Tires = 4, Seats=4}); 

using(new EditContext()) 
{ 
    car.Fields["Color"].Reset(); 
} 

Siehe http://firebreaksice.com/how-to-reset-individual-sitecore-fields-to-standard-values/

Verwandte Themen