/// <summary> /// Defines the sorting property and direction for querying SharePoint Search. /// </summary> /// <param name="keywordQuery">Keyword object</param> /// <param name="searchObject">Search object</param> /// <param name="isMatterSearch">Boolean flag which determines current search is for matters or documents</param> /// <returns></returns> private KeywordQuery GetSortByProperty(KeywordQuery keywordQuery, SearchObject searchObject, Boolean isMatterSearch) { string matterIDRefiner = string.Empty; try { ////Sorting by specified property 0 --> Ascending order and 1 --> Descending order if (!string.IsNullOrWhiteSpace(searchObject.Sort.ByProperty)) { keywordQuery = AddSortingRefiner(keywordQuery, searchObject.Sort.ByProperty, searchObject.Sort.Direction); //// Add Matter ID property as second level sort for Client.MatterID column based on Search Matter or Search Document if (searchSettings.ManagedPropertyClientID == searchObject.Sort.ByProperty || searchSettings.ManagedPropertyDocumentClientId == searchObject.Sort.ByProperty) { if (isMatterSearch) { matterIDRefiner = searchSettings.ManagedPropertyMatterId; } else { matterIDRefiner = searchSettings.ManagedPropertyDocumentMatterId; } keywordQuery = AddSortingRefiner(keywordQuery, matterIDRefiner, searchObject.Sort.Direction); } } } catch (Exception exception) { customLogger.LogError(exception, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, logTables.SPOLogTable); throw; } return keywordQuery; }
/// <summary> /// Prepares and returns the keyword query to get data from SharePoint Search based on filtering condition. /// </summary> /// <param name="client">The client object</param> /// <param name="searchObject">The search object.</param> /// <param name="keywordQuery">The keyword query.</param> /// <param name="filterCondition">The filter condition.</param> /// <param name="managedProperty">The managed property.</param> /// <param name="isMatterView">If the user is pinning a matter, this will be true, else will be false.</param> /// <returns>It returns a Keyword Query object.</returns> private KeywordQuery KeywordQueryMetrics(Client client, SearchObject searchObject, KeywordQuery keywordQuery, string filterCondition, string managedProperty, bool isMatterView) { KeywordQuery result = null; try { if (generalSettings.IsTenantDeployment) { keywordQuery.QueryText = searchObject.SearchTerm; } else { keywordQuery.QueryText = "(" + searchObject.SearchTerm + " AND site:" + client.Url + ")"; } keywordQuery.RefinementFilters.Add(filterCondition); if (isMatterView) { keywordQuery.RefinementFilters.Add(string.Concat(managedProperty, ServiceConstants.COLON, ServiceConstants.DOUBLE_QUOTE, true, ServiceConstants.DOUBLE_QUOTE)); } else { string[] invalidExtensions = searchSettings.FindDocumentInvalidExtensions.Split(','); string chunk = string.Empty; foreach (string extension in invalidExtensions) { chunk = chunk + "equals" + ServiceConstants.OPENING_BRACKET + ServiceConstants.DOUBLE_QUOTE + extension + ServiceConstants.DOUBLE_QUOTE + ServiceConstants.CLOSING_BRACKET + ServiceConstants.COMMA; } chunk = chunk.Remove(chunk.Length - 1); keywordQuery.RefinementFilters.Add(string.Concat("not" + ServiceConstants.OPENING_BRACKET + "FileType", ServiceConstants.COLON, ServiceConstants.OPERATOR_OR + ServiceConstants.OPENING_BRACKET + chunk + ServiceConstants.CLOSING_BRACKET + ServiceConstants.CLOSING_BRACKET )); keywordQuery.RefinementFilters.Add(string.Concat(managedProperty, ServiceConstants.COLON, "equals", ServiceConstants.OPENING_BRACKET + ServiceConstants.DOUBLE_QUOTE + "1" + ServiceConstants.DOUBLE_QUOTE + ServiceConstants.CLOSING_BRACKET )); } keywordQuery.TrimDuplicates = false; if (0 < searchObject.PageNumber && 0 < searchObject.ItemsPerPage) { keywordQuery.StartRow = (searchObject.PageNumber - 1) * searchObject.ItemsPerPage; keywordQuery.RowLimit = searchObject.ItemsPerPage; } result = keywordQuery; } catch (Exception exception) { customLogger.LogError(exception, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, logTables.SPOLogTable); throw; } return result; }
/// <summary> /// Returns the query to filter the matters/ documents for common filters. /// </summary> /// <param name="searchObject">The search object.</param> /// <param name="keywordQuery">The keyword query.</param> /// <param name="isMatterView">Flag to identify matters/documents view.</param> /// <returns>It returns a keyword query object.</returns> private KeywordQuery FilterCommonDetails(SearchObject searchObject, KeywordQuery keywordQuery, bool isMatterView) { try { if (null != searchObject && null != keywordQuery) { if (null != searchObject.Filters.DateFilters) { string lastModifiedTime = searchSettings.ManagedPropertyLastModifiedTime; //// Add refiner for Modified date value if (!isMatterView) { lastModifiedTime = searchSettings.ManagedPropertyDocumentLastModifiedTime; } keywordQuery = AddDateRefinementFilter(keywordQuery, searchObject.Filters.DateFilters.ModifiedFromDate, searchObject.Filters.DateFilters.ModifiedToDate, lastModifiedTime); ////// Add refiner for Created date value keywordQuery = AddDateRefinementFilter(keywordQuery, searchObject.Filters.DateFilters.CreatedFromDate, searchObject.Filters.DateFilters.CreatedToDate, searchSettings.ManagedPropertyCreated); } } } catch (Exception exception) { customLogger.LogError(exception, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, logTables.SPOLogTable); throw; } return keywordQuery; }
/// <summary> /// Returns the query to filter the matters. /// </summary> /// <param name="searchObject">The search object.</param> /// <param name="keywordQuery">The keyword query.</param> /// <returns>It returns a keyword query object.</returns> private KeywordQuery FilterMattersUtility(SearchObject searchObject, KeywordQuery keywordQuery) { try { if (null != searchObject && null != keywordQuery && null != searchObject.Filters) { /* New refinement filters for list view control */ if (!string.IsNullOrWhiteSpace(searchObject.Filters.Name)) { keywordQuery.RefinementFilters.Add(string.Concat(searchSettings.ManagedPropertyMatterName, ServiceConstants.COLON, ServiceConstants.DOUBLE_QUOTE, searchObject.Filters.Name, ServiceConstants.DOUBLE_QUOTE)); } if (!string.IsNullOrWhiteSpace(searchObject.Filters.ClientName)) { keywordQuery.RefinementFilters.Add(string.Concat(searchSettings.ManagedPropertyClientName, ServiceConstants.COLON, ServiceConstants.DOUBLE_QUOTE, searchObject.Filters.ClientName, ServiceConstants.DOUBLE_QUOTE)); } if (null != searchObject.Filters.ResponsibleAttorneys && !string.IsNullOrWhiteSpace(searchObject.Filters.ResponsibleAttorneys)) { keywordQuery.RefinementFilters.Add(string.Concat(searchSettings.ManagedPropertyResponsibleAttorney, ServiceConstants.COLON, ServiceConstants.DOUBLE_QUOTE, searchObject.Filters.ResponsibleAttorneys, ServiceConstants.DOUBLE_QUOTE)); } if (null != searchObject.Filters.PracticeGroup && !string.IsNullOrWhiteSpace(searchObject.Filters.PracticeGroup)) { var pgList = searchObject.Filters.PracticeGroup.Split(',').ToList(); var filterValues = FormFilterQuery(searchSettings.ManagedPropertyPracticeGroup, pgList); keywordQuery.RefinementFilters.Add(filterValues); //keywordQuery.RefinementFilters.Add(string.Concat(searchSettings.ManagedPropertyPracticeGroup, ServiceConstants.COLON, ServiceConstants.DOUBLE_INVERTED_COMMA, searchObject.Filters.PracticeGroup, ServiceConstants.DOUBLE_INVERTED_COMMA)); } if (!string.IsNullOrWhiteSpace(searchObject.Filters.AreaOfLaw)) { //keywordQuery.RefinementFilters.Add(string.Concat(searchSettings.ManagedPropertyAreaOfLaw, ServiceConstants.COLON, ServiceConstants.DOUBLE_INVERTED_COMMA, searchObject.Filters.AreaOfLaw, ServiceConstants.DOUBLE_INVERTED_COMMA)); var areaList = searchObject.Filters.AreaOfLaw.Split(',').ToList(); var filterValues = FormFilterQuery(searchSettings.ManagedPropertyAreaOfLaw, areaList); keywordQuery.RefinementFilters.Add(filterValues); } if (null != searchObject.Filters.SubareaOfLaw && !string.IsNullOrWhiteSpace(searchObject.Filters.SubareaOfLaw)) { var subAreaList = searchObject.Filters.SubareaOfLaw.Split(',').ToList(); var filterValues = FormFilterQuery(searchSettings.ManagedPropertySubAreaOfLaw, subAreaList); keywordQuery.RefinementFilters.Add(filterValues); //keywordQuery.RefinementFilters.Add(string.Concat(searchSettings.ManagedPropertySubAreaOfLaw, ServiceConstants.COLON, ServiceConstants.DOUBLE_INVERTED_COMMA, searchObject.Filters.SubareaOfLaw, ServiceConstants.DOUBLE_INVERTED_COMMA)); } if (null != searchObject.Filters.ProjectID && !string.IsNullOrWhiteSpace(searchObject.Filters.ProjectID)) { keywordQuery.RefinementFilters.Add(string.Concat(searchSettings.ManagedPropertyMatterId, ServiceConstants.COLON, ServiceConstants.DOUBLE_INVERTED_COMMA, searchObject.Filters.ProjectID, ServiceConstants.DOUBLE_INVERTED_COMMA)); } if (null != searchObject.Filters.DateFilters) { ////// Add refiner for Open date value keywordQuery = AddDateRefinementFilter(keywordQuery, searchObject.Filters.DateFilters.OpenDateFrom, searchObject.Filters.DateFilters.OpenDateTo, searchSettings.ManagedPropertyOpenDate); } } } catch (Exception exception) { customLogger.LogError(exception, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, logTables.SPOLogTable); throw; } return keywordQuery; }
/// <summary> /// Prepares and returns the query to filter the documents. /// </summary> /// <param name="searchObject">The search object.</param> /// <param name="keywordQuery">The keyword query.</param> /// <returns>It returns a Keyword Query object.</returns> internal KeywordQuery FilterDocuments(SearchObject searchObject, KeywordQuery keywordQuery) { string filterValues = string.Empty; try { if (null != searchObject && null != keywordQuery) { if (null != searchObject.Filters) { keywordQuery = AddDateRefinementFilter(keywordQuery, searchObject.Filters.FromDate, searchObject.Filters.ToDate, searchSettings.ManagedPropertyCreated); if (null != searchObject.Filters.DocumentAuthor && !string.IsNullOrWhiteSpace(searchObject.Filters.DocumentAuthor)) { keywordQuery.RefinementFilters.Add(string.Concat(searchSettings.ManagedPropertyAuthor, ServiceConstants.COLON, ServiceConstants.DOUBLE_QUOTE, searchObject.Filters.DocumentAuthor, ServiceConstants.DOUBLE_QUOTE)); } if (0 < searchObject.Filters.ClientsList.Count && !string.IsNullOrWhiteSpace(searchObject.Filters.ClientsList[0])) { filterValues = FormFilterQuery(searchSettings.ManagedPropertyDocumentClientName, searchObject.Filters.ClientsList); keywordQuery.RefinementFilters.Add(filterValues); } /* New refinement filters for list view control */ if (!string.IsNullOrWhiteSpace(searchObject.Filters.Name)) { if (searchObject.Filters.Name.Length > 70) { searchObject.Filters.Name = searchObject.Filters.Name.Replace(searchObject.Filters.Name.Substring(70, searchObject.Filters.Name.Length - 70), "*"); } keywordQuery.RefinementFilters.Add(string.Concat(searchSettings.ManagedPropertyFileName, ServiceConstants.COLON, ServiceConstants.DOUBLE_QUOTE, searchObject.Filters.Name, ServiceConstants.DOUBLE_QUOTE)); } if (!string.IsNullOrWhiteSpace(searchObject.Filters.ProjectName)) { keywordQuery.RefinementFilters.Add(string.Concat(searchSettings.ManagedPropertyMatterName, ServiceConstants.COLON, ServiceConstants.DOUBLE_QUOTE, searchObject.Filters.ProjectName, ServiceConstants.DOUBLE_QUOTE)); } if (!string.IsNullOrWhiteSpace(searchObject.Filters.ClientName)) { keywordQuery.RefinementFilters.Add(string.Concat(searchSettings.ManagedPropertyDocumentClientName, ServiceConstants.COLON, ServiceConstants.DOUBLE_QUOTE, searchObject.Filters.ClientName, ServiceConstants.DOUBLE_QUOTE)); } if (null != searchObject.Filters.DocumentCheckoutUsers && !string.IsNullOrWhiteSpace(searchObject.Filters.DocumentCheckoutUsers)) { keywordQuery.RefinementFilters.Add(string.Concat(searchSettings.ManagedPropertyDocumentCheckOutUser, ServiceConstants.COLON, ServiceConstants.DOUBLE_QUOTE, searchObject.Filters.DocumentCheckoutUsers, ServiceConstants.DOUBLE_QUOTE)); } if (!string.IsNullOrWhiteSpace(searchObject.Filters.PracticeGroup)) { keywordQuery.RefinementFilters.Add(string.Concat(searchSettings.ManagedPropertyPracticeGroup, ServiceConstants.COLON, ServiceConstants.DOUBLE_QUOTE, searchObject.Filters.PracticeGroup, ServiceConstants.DOUBLE_QUOTE)); } } keywordQuery = FilterCommonDetails(searchObject, keywordQuery, false); } } catch (Exception ex) { customLogger.LogError(ex, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, logTables.SPOLogTable); throw; } return keywordQuery; }
/// <summary> /// Returns the query to filter the matters. /// </summary> /// <param name="searchObject">The search object.</param> /// <param name="keywordQuery">The keyword query.</param> /// <returns>It returns a keyword query object.</returns> private KeywordQuery FilterMatters(SearchObject searchObject, KeywordQuery keywordQuery) { string filterValues = string.Empty; try { if (null != searchObject && null != keywordQuery) { if (null != searchObject.Filters) { if (null != searchObject.Filters.AOLList && 0 < searchObject.Filters.AOLList.Count && !string.IsNullOrWhiteSpace(searchObject.Filters.AOLList[0])) { filterValues = FormFilterQuery(searchSettings.ManagedPropertyAreaOfLaw, searchObject.Filters.AOLList); keywordQuery.RefinementFilters.Add(filterValues); } if (null != searchObject.Filters.PGList && 0 < searchObject.Filters.PGList.Count && !string.IsNullOrWhiteSpace(searchObject.Filters.PGList[0])) { filterValues = FormFilterQuery(searchSettings.ManagedPropertyPracticeGroup, searchObject.Filters.PGList); keywordQuery.RefinementFilters.Add(filterValues); } keywordQuery = AddDateRefinementFilter(keywordQuery, searchObject.Filters.FromDate, searchObject.Filters.ToDate, searchSettings.ManagedPropertyOpenDate); if (null != searchObject.Filters.ClientsList && 0 < searchObject.Filters.ClientsList.Count && !string.IsNullOrWhiteSpace(searchObject.Filters.ClientsList[0])) { filterValues = FormFilterQuery(searchSettings.ManagedPropertyClientName, searchObject.Filters.ClientsList); keywordQuery.RefinementFilters.Add(filterValues); } } keywordQuery = FilterMattersUtility(searchObject, keywordQuery); keywordQuery = FilterCommonDetails(searchObject, keywordQuery, true); } } catch (Exception ex) { customLogger.LogError(ex, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, logTables.SPOLogTable); throw; } return keywordQuery; }