Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace MySiteSharePoint
- {
- public enum SearchOrderDirection
- {
- Asc,
- Desc
- }
- public enum SearchScopeType
- {
- Intranet,
- Knowledge,
- People
- }
- public class SearchQuery
- {
- public bool EnableStemming = false;
- public bool IgnoreAllNoiseQuery = true;
- public bool ImplicitAndBehavior = true;
- public bool IncludeHighConfidenceResults = false;
- public bool IncludeRelevanceResults = false;
- public bool IncludeSpecialTermResults = false;
- public bool TrimDuplicates = true;
- public int RangeCount = 20;
- public int RangeStart = 1;
- public List<string> OutputColumns = new List<string>();
- public List<string> SearchScopes = new List<string>();
- public Dictionary<string, SearchOrderDirection> OrderByColumns = new Dictionary<string, SearchOrderDirection>();
- public List<KeyValuePair<string, string>> SearchFilters = new List<KeyValuePair<string,string>>();
- public SearchQuery(SearchScopeType searchScopeType)
- {
- OutputColumns.Add("Title");
- OutputColumns.Add("Rank");
- OutputColumns.Add("Size");
- OutputColumns.Add("Description");
- OutputColumns.Add("Write");
- OutputColumns.Add("Path");
- if (searchScopeType == SearchScopeType.People)
- {
- this.SearchScopes.Add("People");
- OutputColumns.Add("AccountName");
- OutputColumns.Add("BusinessUnit");
- OutputColumns.Add("Department");
- OutputColumns.Add("FirstName");
- OutputColumns.Add("JobFamily");
- OutputColumns.Add("JobTitle");
- OutputColumns.Add("LastName");
- OutputColumns.Add("Location");
- OutputColumns.Add("Manager");
- OutputColumns.Add("Team");
- OutputColumns.Add("TechnicalSkills");
- OutputColumns.Add("WorkPhone");
- OrderByColumns.Add("LastName", SearchOrderDirection.Asc);
- OrderByColumns.Add("FirstName", SearchOrderDirection.Asc);
- }
- if (searchScopeType == SearchScopeType.Knowledge)
- {
- this.SearchScopes.Add("Knowledge");
- }
- if (searchScopeType == SearchScopeType.Intranet)
- {
- this.SearchScopes.Add("All Sites");
- }
- OrderByColumns.Add("Rank", SearchOrderDirection.Desc);
- }
- public override string ToString()
- {
- if (this.OutputColumns.Count == 0)
- {
- throw new Exception("There must be at least 1 item in the OutputColumns list.");
- }
- if (this.OrderByColumns.Count == 0)
- {
- throw new Exception("There must be at least 1 item in the OrderByColumns list.");
- }
- if (this.SearchFilters.Count == 0)
- {
- throw new Exception("There must be at least 1 item in the SearchFilters list.");
- }
- if (this.SearchScopes.Count == 0)
- {
- throw new Exception("There must be at least 1 item in the SearchScopes list.");
- }
- bool isFirstLoop = true;
- StringBuilder sb = new StringBuilder();
- sb.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
- sb.AppendLine("<QueryPacket xmlns=\"urn:Microsoft.Search.Query\" Revision=\"1000\">");
- sb.AppendLine("<Query domain=\"QDomain\">");
- sb.AppendLine("<SupportedFormats>");
- sb.AppendLine("<Format>urn:Microsoft.Search.Response.Document.Document</Format>");
- sb.AppendLine("</SupportedFormats>");
- sb.AppendLine("<Context>");
- sb.Append("<QueryText language=\"en-US\" type=\"MSSQLFT\"><![CDATA[ SELECT ");
- for(int i = 0; i < this.OutputColumns.Count; i++)
- {
- if (i > 0)
- {
- sb.Append(", ");
- }
- sb.Append(this.OutputColumns[i]);
- }
- sb.Append("FROM portal..scope() WHERE (");
- for(int i = 0; i < this.SearchFilters.Count; i++)
- {
- if (i > 0)
- {
- sb.Append(" AND ");
- }
- if (this.SearchFilters[i].Key.IsNotEmpty())
- {
- sb.AppendFormat("CONTAINS(\"{0}\",'\"{1}\"')", this.SearchFilters[i].Key, this.SearchFilters[i].Value);
- }
- else
- {
- sb.AppendFormat("CONTAINS('\"{0}\"')", this.SearchFilters[i].Value);
- }
- }
- sb.Append(") AND (");
- for(int i = 0; i < this.SearchScopes.Count; i++)
- {
- if (i > 0)
- {
- sb.Append(" OR ");
- }
- sb.AppendFormat("(\"SCOPE\" = '{0}')", this.SearchScopes[i]);
- }
- sb.Append(") ORDER BY ");
- isFirstLoop = true;
- foreach (var kvp in this.OrderByColumns)
- {
- if (!isFirstLoop)
- {
- sb.Append(", ");
- }
- sb.AppendFormat("\"{0}\" {1}", kvp.Key, kvp.Value);
- isFirstLoop = false;
- }
- sb.Append("]]></QueryText>");
- sb.Append("</Context>");
- sb.Append("<Range>");
- sb.AppendFormat("<Count>{0}</Count>", this.RangeCount);
- sb.AppendFormat("<StartAt>{0}</StartAt>", this.RangeStart);
- sb.Append("</Range>");
- sb.AppendFormat("<EnableStemming>{0}</EnableStemming>", this.EnableStemming);
- sb.AppendFormat("<IgnoreAllNoiseQuery>{0}</IgnoreAllNoiseQuery>", this.IgnoreAllNoiseQuery);
- sb.AppendFormat("<ImplicitAndBehavior>{0}</ImplicitAndBehavior>", this.ImplicitAndBehavior);
- sb.AppendFormat("<IncludeHighConfidenceResults>{0}</IncludeHighConfidenceResults>", this.IncludeHighConfidenceResults);
- sb.AppendFormat("<IncludeRelevanceResults>{0}</IncludeRelevanceResults>", this.IncludeRelevanceResults);
- sb.AppendFormat("<IncludeSpecialTermResults>{0}</IncludeSpecialTermResults>", this.IncludeSpecialTermResults);
- sb.AppendFormat("<TrimDuplicates>{0}</TrimDuplicates>", this.TrimDuplicates);
- sb.AppendFormat("</Query>");
- sb.AppendFormat("</QueryPacket>");
- return sb.ToString();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement