public IEnumerable <T> As <T>() where T : class { var options = new GetItemsByFuncOptions((database) => _item.Children); options.Copy(_getModelOptions); return(new LazyItemEnumerable <T>(options, _service, _lazyLoadingHelper)); }
/// <summary> /// Maps data from the CMS value to the .Net property value /// </summary> /// <param name="mappingContext">The mapping context.</param> /// <returns>System.Object.</returns> public override object MapToProperty(AbstractDataMappingContext mappingContext) { var scConfig = Configuration as SitecoreLinkedConfiguration; var scContext = mappingContext as SitecoreDataMappingContext; var item = scContext.Item; var linkDb = global::Sitecore.Globals.LinkDatabase; var options = new GetItemsByFuncOptions(); options.Copy(mappingContext.Options); scConfig.GetPropertyOptions(options); options.ItemsFunc = new Func <Database, IEnumerable <Item> >(database => { //ME - i am not sure this is correct but there is an odd behaviour of references // languges come back as invariant, going with default language in this scenario var references = new Func <IEnumerable <Item> >(() => { var itemLinks = linkDb.GetReferences(item); return(itemLinks.Select(x => x.GetTargetItem())); }); IEnumerable <Item> items; switch (scConfig.Option) { case SitecoreLinkedOptions.All: var itemLinks1 = references(); var itemLinks2 = linkDb.GetReferrers(item); items = itemLinks1.Union(itemLinks2.Select(x => x.GetSourceItem())); break; case SitecoreLinkedOptions.References: items = references(); break; case SitecoreLinkedOptions.Referrers: var itemLinks4 = linkDb.GetReferrers(item); items = itemLinks4.Select(x => x.GetSourceItem()); break; default: items = new List <Item>(); break; } return(items); }); var result = scContext.Service.GetItems(options); return(result); }
/// <summary> /// Maps data from the CMS value to the .Net property value /// </summary> /// <param name="mappingContext">The mapping context.</param> /// <returns>System.Object.</returns> public override object MapToProperty(AbstractDataMappingContext mappingContext) { var scContext = mappingContext as SitecoreDataMappingContext; var scConfig = Configuration as SitecoreChildrenConfiguration; Func <Database, IEnumerable <Item> > getItems = (database) => ItemManager.GetChildren(scContext.Item, SecurityCheck.Enable, ChildListOptions.None); var options = new GetItemsByFuncOptions(getItems); options.Copy(mappingContext.Options); scConfig.GetPropertyOptions(options); return(scContext.Service.GetItems(options)); }
public void ProcessItems_ResetsOptionsTemplateIdAndEnforceTemplateForEachChild() { //Assign using (var database = new Db { new DbItem("TestItem") { new DbItem("Child1"), new DbItem("Child2"), new DbItem("Child3") } }) { var getItemOptions = new GetItemsByFuncOptions { ItemsFunc = _ => database.GetItem("/sitecore/content/TestItem").Children.ToArray(), TemplateId = null, EnforceTemplate = SitecoreEnforceTemplate.Default }; var receivedOptions = new List <GetItemByItemOptions>(); var receivedTemplateIds = new List <ID>(); var receivedEnforceTemplate = new List <SitecoreEnforceTemplate>(); var service = Substitute.For <ISitecoreService>(); service.GetItem(Arg.Any <GetItemByItemOptions>()) .ReturnsNull() .AndDoes(x => { var options = x.Arg <GetItemByItemOptions>(); receivedOptions.Add(options); receivedTemplateIds.Add(options.TemplateId); receivedEnforceTemplate.Add(options.EnforceTemplate); // Emulate ConfigureOptionsForTypeTask overwriting TemplateId and EnforceTemplate options.TemplateId = ID.NewID; options.EnforceTemplate = SitecoreEnforceTemplate.TemplateAndBase; }); var lazyItemEnumerable = new LazyItemEnumerable <Stub>(getItemOptions, service, new LazyLoadingHelper()); //Act lazyItemEnumerable.ProcessItems(); //Assert Assert.AreEqual(3, receivedOptions.Count); foreach (var options in receivedOptions) { // Received options should have been modified from original values Assert.IsNotNull(options.TemplateId); Assert.AreEqual(options.EnforceTemplate, SitecoreEnforceTemplate.TemplateAndBase); } foreach (var id in receivedTemplateIds) { // Received values should be original value Assert.IsNull(id); } foreach (var enforceTemplate in receivedEnforceTemplate) { // Received values should be original value Assert.AreEqual(enforceTemplate, SitecoreEnforceTemplate.Default); } } }
public AbstractGetItemsByFuncBuilder(GetItemsByFuncOptions options) : base(options) { _options = options; }