2014-10-31 4 views
5

utworzyć element Sitecore przez Glass.Mapper tak:Jak stosować standardowych wartości do elementu utworzonego z Glass.Mapper

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

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

To działa, oprócz standardowych wartości na szablonie samochodu nie są stosowane - lub jeśli są one natychmiastowo nadpisywane przez nowe właściwości samochodu. Więc jeśli obiekt Car ma wartość null dla właściwości Color, ta wartość pusta zostanie zapisana w polu zamiast "zielonej" wartości ze standardowych wartości w szablonie Car.

Szukałem rozsądnego sposobu, aby to zrobić poprzez Glass.Mapper, ale nie znalazłem nic. Czy można to zrobić za pomocą Glass.Mapper?

Odpowiedz

5

Jest sposób, aby to zrobić, należy użyć nadpisanie metody Create, które wygląda następująco:

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

Więc twój kod będzie wyglądać następująco:

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); 

biegaliśmy w ten sam problem i tak to obejdziemy.

+0

działa idealnie! Sądzę, że ma to jakiś sens, że gdy tworzysz nowy obiekt z obiektu, dostajesz * dokładnie * to, co jest w tym obiekcie bez wartości domyślnych, ale kiedy po prostu utworzysz go z nazwy, otrzymasz element z zastosowanymi wartościami standardowymi. –

+2

@ T.J.Kjaer Musiałbym nie zgadzać się z tym "ma sens" - co * byłoby * sensowne, to mieć odpowiednio nazwaną metodę tworzenia wskazującą, czy wartości standardowe byłyby zastosowane, czy nie :) –

1

Możesz zresetować pola, które chcesz przywrócić, do standardowych wartości, wywołując metodę Reset() Sitecore'a zawiniętą w EditContext.

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(); 
} 

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

Powiązane problemy