Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }