private BpmSearchResponseEntity FillBpmResponseEntity(ESHit esHit) { _entityName = esHit.Type; _entitySchema = _userConnection.EntitySchemaManager.GetInstanceByName(_entityName); var responseEntity = new BpmSearchResponseEntity { Id = esHit.Id, EntityName = _entityName, ColumnValues = new Dictionary <string, object>(), FoundColumns = new Dictionary <string, string[]>() }; var columnValues = responseEntity.ColumnValues; var foundColumns = responseEntity.FoundColumns; var availableColumns = _entitySchema.Columns .Where(x => _userConnection.DBSecurityEngine .GetIsEntitySchemaColumnReadingAllowed(_entitySchema.Name, x.IsLookupType ? $"{x.Name}{x.ReferenceSchema.PrimaryColumn.Name}" : x.Name)); if (UseLocalizableGlobalSearchResult) { var entityValues = GetLocalizableEntityValues(_entitySchema, Guid.Parse(esHit.Id), availableColumns); foreach (var column in availableColumns) { columnValues.Add(column.Name, entityValues[column.Name]); AddHighlights(esHit, column, foundColumns, columnValues); } } else { foreach (var column in availableColumns) { if (column.IsLookupType) { AddLookupColumnValue(esHit, column, columnValues); } else { AddColumnValue(esHit, column, columnValues); } AddHighlights(esHit, column, foundColumns, columnValues); } } AddDetailsHighlight(responseEntity, esHit); return(responseEntity); }
private void AddDetailsHighlight(BpmSearchResponseEntity responseEntity, ESHit esHit) { var highlights = esHit.Highlight; if (highlights != null) { var detailsHighlights = esHit.Highlight.Where(s => s.Key.StartsWith(ESConstants.DetailsPrefix) && !s.Key.EndsWith("id")); IEnumerable <IGrouping <string, string[]> > groupedDetailsHighlights = detailsHighlights.GroupBy(x => GetDetailNameByKey(x.Key), x => x.Value); foreach (var detailsHighlight in groupedDetailsHighlights) { var detailEntityName = detailsHighlight.Key.Replace(string.Format("{0}.", ESConstants.DetailsPrefix), ""); var highlightValues = detailsHighlight.Select(x => string.Join(" ... ", x)).ToArray(); var detailCaption = GetDetailCaption(detailEntityName); responseEntity.FoundColumns.Add(detailEntityName, GetHighLightMathces(highlightValues)); responseEntity.ColumnValues.Add(detailEntityName, new { caption = detailCaption, displayValue = _replaceHighlightRegex.Replace(string.Join(" ... ", highlightValues), "") }); } } }