using
System.Web.UI.WebControls.WebParts;
Microsoft.Office.Server.Search.Administration;
Microsoft.Office.Server.Search.Query;
Microsoft.SharePoint;
Microsoft.SharePoint.WebControls;
SortDirection = Microsoft.Office.Server.Search.Query.SortDirection;
System.Web.UI.DataVisualization.Charting;
private
Button _update;
Chart _chart;
TextBox _flag;
DateTimeControl _fromDate;
DateTimeControl _toDate;
protected
override
void
OnInit(EventArgs e)
{
base
.OnInit(e);
_update =
new
Button() { Text =
"Update"
};
_update.Click += UpdateOnClick;
_chart =
Chart();
_flag =
TextBox();
_fromDate =
DateTimeControl();
_fromDate.SelectedDate = DateTime.Now.AddMonths(-1);
_fromDate.DateOnly =
true
;
_toDate =
_toDate.SelectedDate = DateTime.Now;
_toDate.DateOnly =
}
CreateChildControls()
Controls.Add(
LiteralControl(
"<table style=\"width:400px;border:0;\">"
));
"<tr><td><span>From</span>"
"</td><td colspan=\"2\">"
Controls.Add(_fromDate);
"</td></tr><tr><td><span>To:</span></td><td colspan=\"2\">"
Controls.Add(_toDate);
"</td></tr><tr><td><span>Flag</span></td><td>"
Controls.Add(_flag);
"</td><td>"
Controls.Add(_update);
"</td></tr></table>"
"<div style=\"margin-top:5px;\">"
Controls.Add(_chart);
"</div>"
DataTable GetVesselData(String flag, String dateRangeFrom, String dateRangeTo)
try
var ssaProxy = (SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy(SPServiceContext.GetContext(SPContext.Current.Site));
var keywordQuery =
KeywordQuery(ssaProxy);
keywordQuery.RowLimit = 100;
keywordQuery.SelectProperties.Clear();
//Add properties to return
keywordQuery.SelectProperties.Add(
"Title"
);
"PrimaryDate"
//trim duplicates
keywordQuery.TrimDuplicates =
//Sort the results on a custom field, PrimaryDate (Mangaged Property)
keywordQuery.SortList.Add(
, SortDirection.Descending);
keywordQuery.ResultsProvider = SearchProvider.Default;
keywordQuery.ResultTypes |= ResultType.RelevantResults;
//Create the search query
keywordQuery.QueryText = String.Format(
"FLAG:\"{0}\" AND contenttype:SMARShipMovement AND (PRIMARYDATE>{1} AND PRIMARYDATE<{2})"
, flag, dateRangeFrom, dateRangeTo);
ResultTableCollection searchResults;
searchResults = keywordQuery.Execute();
catch
(Exception)
//"Your query is malformed. Please rephrase your query."
return
DataTable();
if
(searchResults.Exists(ResultType.RelevantResults))
var searchResult = searchResults[ResultType.RelevantResults];
var results =
DataTable { TableName =
"SearchResults"
results.Load(searchResult, LoadOption.OverwriteChanges);
results;
(Exception e)
//Unhandled Exception running query
PopulateChart(DataTable dataTable)
_chart.Width = 315;
_chart.Height = 350;
_chart.AntiAliasing = AntiAliasingStyles.All;
_chart.TextAntiAliasingQuality = TextAntiAliasingQuality.High;
Series s = PlotVesselActivity(dataTable);
ChartArea ca = ChartArea();
_chart.ChartAreas.Add(ca);
_chart.Series.Add(s);
_chart.Visible =
false
static
ChartArea ChartArea()
ChartArea chartArea =
ChartArea();
chartArea.BackColor = Color.Gray;
chartArea.BackSecondaryColor = Color.DarkGray;
chartArea.BackGradientStyle = GradientStyle.TopBottom;
chartArea.AxisY.Title =
"Times In Port"
chartArea.AxisY.IsStartedFromZero =
chartArea.AxisX.Title =
"Vessel"
chartArea.AxisX.Interval = 1;
chartArea;
Series PlotVesselActivity(DataTable dataTable)
var series =
Series();
series.Color = Color.ForestGreen;
series.BackSecondaryColor = Color.GreenYellow;
series.BorderColor = Color.Firebrick;
series.BackGradientStyle = GradientStyle.TopBottom;
var dv =
DataView(dataTable);
var groupedData = dv.ToTable(
,
[] {
});
groupedData.Columns.Add(
"Count"
typeof
(
int
foreach
(DataRow row
in
groupedData.Rows)
row[
] = dataTable.Compute(
"Count(Title)"
"Title = '"
+ row[
] +
"'"
var xpoint = 0;
(DataRow r
var p =
DataPoint
XValue = xpoint,
YValues =
double
[] { Convert.ToDouble(r[
].ToString()) },
Name = r[
].ToString(),
AxisLabel = r[
].ToString()
xpoint++;
series.Points.Add(p);
series;
UpdateOnClick(
object
sender, EventArgs eventArgs)
(Page.IsPostBack)
var results = GetVesselData(_flag.Text, _fromDate.SelectedDate.ToShortDateString(), _toDate.SelectedDate.ToShortDateString());
PopulateChart(results);
Matthew Yarlett edited Revision 1. Comment: Added a link to another forum question (in June) about SharePoint Search
Matthew Yarlett edited Original. Comment: Fixed a link