public SearchRequestDto AppendMultiLocciChangeHistoryQuery(CompositionPreFilterFunctionParameters preFilter) { var dto = preFilter.BASEDto; dto.SearchValues = null; dto.SearchParams = null; var ciNum = preFilter.OriginalEntity.GetAttribute("cinum"); dto.AppendWhereClauseFormat("wonum in (select recordkey from maximo.multiassetlocci where((cinum = '{0}')) and(recordkey = wochange.wonum and recordclass = 'CHANGE'))".Fmt(ciNum)); return(dto); }
public SearchRequestDto AppendMultiLocciTicketHistoryQuery(CompositionPreFilterFunctionParameters preFilter) { var dto = preFilter.BASEDto; dto.SearchValues = null; dto.SearchParams = null; var assetNum = preFilter.OriginalEntity.GetAttribute("assetnum"); dto.AppendWhereClauseFormat("ticketid in (select recordkey from MULTIASSETLOCCI multi where multi.assetnum = '{0}' and RECORDCLASS in ({1}) )", assetNum, "'CHANGE','INCIDENT','PROBLEM','SR'"); return(dto); }
public SearchRequestDto AppendImacMultiLocciTicketHistoryQuery(CompositionPreFilterFunctionParameters preFilter) { var dto = preFilter.BASEDto; dto.SearchValues = null; dto.SearchParams = null; var assetNum = preFilter.OriginalEntity.GetAttribute("assetnum"); //as of HAP-882 dto.AppendWhereClauseFormat(@"ticketid in (select recordkey from MULTIASSETLOCCI multi where multi.assetnum = '{0}' and RECORDCLASS in ({1}) ) " + "or (imac.classificationid = '81515700' and imac.description = 'Decommission of {0}')", assetNum, "'CHANGE','INCIDENT','PROBLEM','SR'"); dto.IgnoreWhereClause = true; return(dto); }
public SearchRequestDto AppendRelatedRecordWCToWorklog(CompositionPreFilterFunctionParameters preFilter) { var dto = preFilter.BASEDto; var ticketId = dto.ValuesDictionary["recordkey"].Value; var originalClass = dto.ValuesDictionary["class"].Value as string; dto.SearchValues = null; dto.SearchParams = null; var sb = new StringBuilder(); var unionWhereClauses = new List <string>(); if (ticketId is ICollection) { ticketId = string.Join("','", ticketId.As <List <String> >()); sb.AppendFormat("((worklog.recordkey in ('{0}') ) AND ( worklog.class = '{1}' )) ", ticketId, originalClass); foreach (var application in _applications) { unionWhereClauses.Add(@" (worklog.recordkey in (select relatedrecord.relatedreckey as relatedreckey from RELATEDRECORD as relatedrecord where relatedrecord.recordkey in ('{0}') AND relatedrecord.class = '{1}' AND RELATEDRECCLASS = '{2}' ) and worklog.class = '{2}')".Fmt( ticketId, originalClass, application)); } dto.ExtraLeftJoinSection = "left join relatedrecord rr on (rr.RECORDKEY = worklog.RECORDKEY and worklog.CLASS = rr.CLASS and rr.RELATEDRECKEY in ('{0}'))".Fmt(ticketId); dto.AppendProjectionField(new ProjectionField("relatedrecordkey", "rr.RELATEDRECKEY")); } else { sb.AppendFormat("((worklog.recordkey = '{0}' ) AND ( worklog.class = '{1}' )) ", ticketId, originalClass); foreach (var application in _applications) { unionWhereClauses.Add(@" (worklog.recordkey in (select relatedrecord.relatedreckey as relatedreckey from RELATEDRECORD as relatedrecord where relatedrecord.recordkey = '{0}' AND relatedrecord.class = '{1}' AND RELATEDRECCLASS = '{2}' ) and worklog.class = '{2}')".Fmt(ticketId, originalClass, application)); } } dto.WhereClause = sb.ToString(); dto.UnionWhereClauses = unionWhereClauses; return(dto); }
private void FetchAsync(SlicedEntityMetadata entityMetadata, EntityAssociation collectionAssociation, IDictionary <string, ApplicationCompositionSchema> compositionSchemas, IEnumerable <AttributeHolder> entitiesList, ContextHolder ctx, Dictionary <string, EntityRepository.SearchEntityResult> results, PaginatedSearchRequestDto paginatedSearch) { Quartz.Util.LogicalThreadContext.SetData("context", ctx); var lookupAttributes = collectionAssociation.Attributes; var collectionEntityMetadata = MetadataProvider.Entity(collectionAssociation.To); var targetCollectionAttribute = EntityUtil.GetRelationshipName(collectionAssociation.Qualifier); var applicationCompositionSchema = compositionSchemas[collectionAssociation.Qualifier] as ApplicationCompositionCollectionSchema; if (applicationCompositionSchema == null) { throw ExceptionUtil.InvalidOperation("collection schema {0} not found", collectionAssociation.Qualifier); } var lookupattributes = lookupAttributes as EntityAssociationAttribute[] ?? lookupAttributes.ToArray(); var attributeHolders = entitiesList as AttributeHolder[] ?? entitiesList.ToArray(); var matchingResultWrapper = new CollectionMatchingResultWrapper(); var searchRequestDto = BuildSearchRequestDto(applicationCompositionSchema, lookupattributes, matchingResultWrapper, attributeHolders, collectionEntityMetadata, paginatedSearch); searchRequestDto.QueryAlias = collectionAssociation.To; var firstAttributeHolder = attributeHolders.First(); if (applicationCompositionSchema.PrefilterFunction != null) { var dataSet = DataSetProvider.GetInstance().LookupDataSet(entityMetadata.ApplicationName); //we will call the function passing the first entry, altough this method could have been invoked for a list of items (printing) //TODO: think about it var preFilterParam = new CompositionPreFilterFunctionParameters(entityMetadata.AppSchema, searchRequestDto, firstAttributeHolder, applicationCompositionSchema); searchRequestDto = PrefilterInvoker.ApplyPreFilterFunction(dataSet, preFilterParam, applicationCompositionSchema.PrefilterFunction); } EntityRepository.SearchEntityResult queryResult = null; if (paginatedSearch == null) { //if thereĀ“s no pagination needed we can just do one thread-query queryResult = EntityRepository.GetAsRawDictionary(collectionEntityMetadata, searchRequestDto); } else { var tasks = new Task[2]; tasks[0] = Task.Factory.NewThread(() => { queryResult = EntityRepository.GetAsRawDictionary(collectionEntityMetadata, searchRequestDto); }); // one thread to count results for paginations tasks[1] = Task.Factory.NewThread(() => { paginatedSearch.TotalCount = EntityRepository.Count(collectionEntityMetadata, searchRequestDto); }); Task.WaitAll(tasks); // add paginationData to result // creating a new pagination data in order to have everything calculated correctly queryResult.PaginationData = new PaginatedSearchRequestDto( paginatedSearch.TotalCount, paginatedSearch.PageNumber, paginatedSearch.PageSize, paginatedSearch.SearchValues, paginatedSearch.PaginationOptions ); } // one thread to fetch results results.Add(collectionAssociation.Qualifier, queryResult); if (attributeHolders.Length == 1) { //default scenario, we have just one entity here firstAttributeHolder.Attributes.Add(targetCollectionAttribute, queryResult.ResultList); return; } MatchResults(queryResult, matchingResultWrapper, targetCollectionAttribute); }