2014-10-31 11 views
5

tôi tạo một mục Sitecore qua Glass.Mapper như thế này:Làm thế nào để áp dụng các giá trị tiêu chuẩn để một mục được tạo ra với Glass.Mapper

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

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

này hoạt động, ngoại trừ các giá trị tiêu chuẩn trên các mẫu xe không được áp dụng - hoặc nếu chúng bị chúng bị ghi đè ngay lập tức bởi các thuộc tính Xe mới. Vì vậy, nếu đối tượng Car có giá trị null cho thuộc tính Color, thì giá trị rỗng này được ghi vào trường thay vì giá trị "xanh lục" từ các giá trị chuẩn trên mẫu Ô tô.

Tôi đã tìm kiếm một cách hợp lý để thực hiện điều này thông qua Glass.Mapper, nhưng không tìm thấy gì cả. Có cách nào để thực hiện điều này thông qua Glass.Mapper không?

Trả lời

5

Có một cách để làm điều này, sử dụng ghi đè Create phương pháp mà trông như thế này:

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

Vì vậy, mã của bạn sẽ trông như thế này:

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

Chúng tôi đang chạy vào cùng một vấn đề và đây là cách chúng tôi có được nó.

+0

trình một cách hoàn hảo! Tôi đoán nó có nghĩa là khi bạn tạo một mục mới từ một đối tượng, bạn sẽ nhận được * chính xác * những gì nằm trong đối tượng đó mà không có mặc định, nhưng khi bạn chỉ tạo nó từ một tên bạn nhận được một mục với các giá trị chuẩn được áp dụng. –

+2

@ T.J.Kjaer Tôi phải không đồng ý điều này "có ý nghĩa" - những gì * sẽ * có ý nghĩa là có một phương pháp tạo đúng tên cho biết liệu các giá trị chuẩn sẽ được áp dụng hay không :) –

1

Bạn có thể đặt lại các trường bạn muốn quay lại giá trị chuẩn bằng cách gọi phương thức Reset() của Sitecore được bao trong 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(); 
} 

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

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