public virtual CompositionFetchResult GetCompositionData(ApplicationMetadata application, CompositionFetchRequest request, JObject currentData) { var applicationCompositionSchemas = CompositionBuilder.InitializeCompositionSchemas(application.Schema); var compostionsToUse = new Dictionary <string, ApplicationCompositionSchema>(); if (request.CompositionList != null) { foreach (var compositionKey in request.CompositionList.Where(applicationCompositionSchemas.ContainsKey)) { //use only the passed compositions amongst the original list compostionsToUse.Add(compositionKey, applicationCompositionSchemas[compositionKey]); } } else { //use them all compostionsToUse = (Dictionary <string, ApplicationCompositionSchema>)applicationCompositionSchemas; } var entityMetadata = MetadataProvider.SlicedEntityMetadata(application); Dictionary <string, EntityRepository.SearchEntityResult> result; if (request is PreFetchedCompositionFetchRequest) { //this might be a list or either a single entity, depending whether it´s coming from a list report or from the after save operation var listOfEntities = ((PreFetchedCompositionFetchRequest)request).PrefetchEntities; result = _collectionResolver.ResolveCollections(entityMetadata, compostionsToUse, listOfEntities); return(new CompositionFetchResult(result, listOfEntities.FirstOrDefault())); } var cruddata = EntityBuilder.BuildFromJson <Entity>(typeof(Entity), entityMetadata, application, currentData, request.Id); result = _collectionResolver.ResolveCollections(entityMetadata, compostionsToUse, cruddata, request.PaginatedSearch); return(new CompositionFetchResult(result, cruddata)); }