Vous êtes-vous déjà demandé comment reproduire l’effet de filtre dans SharePoint 2007? J’ai une mauvaise nouvelle pour vous! Cependant, ne vous inquiétez pas, car j’ai une solution pour vous. Je suis en train de développer une web part qui crée un filtre de recherche programmable, capable de reproduire certaines des fonctionnalités des restrictions avancées de recherche de propriétés.
Le code actuel
Voici le code que j’ai développé jusqu’à présent:
// Import des namespaces nécessaires
using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Data;
using System.Drawing;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.Office.Server;
using Microsoft.Office.Server.Search.Query;
namespace CustomWebParts
{
[Guid("01482ed3-b90c-428d-bacd-706267645f89")]
public class CustomDateSearch : System.Web.UI.WebControls.WebParts.WebPart
{
// Déclaration des contrôles
Label lblDateSearch;
Label lblQueryResults;
DropDownList ddlYear;
Button btnSearch;
DateTime dtToday;
DateTime dtPastYear;
DateTime dtPast2Years;
DateTime dtPast5Years;
String strPastYear;
String strPast2Years;
String strPast5Years;
String strSelectedValue;
DataGrid grdResults;
public CustomDateSearch()
{
}
protected override void CreateChildControls()
{
base.CreateChildControls();
// Initialisation des variables DateTime
dtToday = DateTime.Today;
dtPastYear = dtToday.AddYears(-1);
dtPast2Years = dtToday.AddYears(-2);
dtPast5Years = dtToday.AddYears(-5);
// Initialisation des variables String
strPastYear = dtPastYear.ToString().Remove(10);
strPast2Years = dtPast2Years.ToString().Remove(10);
strPast5Years = dtPast5Years.ToString().Remove(10);
// Création du label
lblDateSearch = new Label();
lblDateSearch.Text = "Recherche par année : ";
this.Controls.Add(lblDateSearch);
// Création de la liste déroulante
ddlYear = new DropDownList();
ddlYear.Items.Add(new ListItem("Sélectionnez une option de recherche", "0"));
ddlYear.Items.Add(new ListItem("Dernière année", strPastYear));
ddlYear.Items.Add(new ListItem("Dernières 2 années", strPast2Years));
ddlYear.Items.Add(new ListItem("Dernières 5 années", strPast5Years));
this.Controls.Add(ddlYear);
// Création du bouton de recherche
btnSearch = new Button();
btnSearch.Text = "Rechercher";
btnSearch.Click += new EventHandler(cmdSearch_Click);
this.Controls.Add(btnSearch);
// Création du label de résultats
lblQueryResults = new Label();
lblQueryResults.ForeColor = Color.Red;
this.Controls.Add(lblQueryResults);
}
void cmdSearch_Click(object sender, EventArgs e)
{
strSelectedValue = ddlYear.SelectedValue.ToString();
if (strSelectedValue != "0")
{
lblQueryResults.Text = "";
keywordQueryExecute(strSelectedValue);
}
else
{
lblQueryResults.Text = "* Vous devez sélectionner une option de recherche !";
}
}
private void keywordQueryExecute(string strQueryText)
{
KeywordQuery kRequest = new KeywordQuery(ServerContext.Current);
string strQuery = "DocumentDate:" + "6/29/2009";
kRequest.SelectProperties.Add("Title");
kRequest.SelectProperties.Add("SiteName");
kRequest.SelectProperties.Add("HitHighlightedProperties");
kRequest.SelectProperties.Add("Path");
kRequest.SelectProperties.Add("Author");
kRequest.SelectProperties.Add("Write");
kRequest.SelectProperties.Add("DocumentDate");
kRequest.SortList.Add("DocumentDate", Microsoft.Office.Server.Search.Query.SortDirection.Ascending);
kRequest.QueryText = strQuery;
kRequest.ResultTypes |= ResultType.RelevantResults;
ResultTableCollection resultsTbls = kRequest.Execute();
if ((int)ResultType.RelevantResults != 0)
{
ResultTable tblResults = resultsTbls[ResultType.RelevantResults];
if (tblResults.TotalRows == 0)
{
lblQueryResults.Text = "* Aucun résultat trouvé !";
}
else
{
ReadResultsTable(tblResults);
}
}
}
void ReadResultsTable(ResultTable rt)
{
DataTable relResultsTbl = new DataTable();
relResultsTbl.TableName = "Résultats pertinents";
DataSet ds = new DataSet("resultsset");
ds.Tables.Add(relResultsTbl);
ds.Load(rt, LoadOption.OverwriteChanges, relResultsTbl);
fillResultsGrid(ds);
}
private void fillResultsGrid(DataSet grdDs)
{
grdResults = new DataGrid();
grdResults.DataSource = grdDs;
grdResults.GridLines = GridLines.None;
grdResults.CellPadding = 4;
grdResults.Width = Unit.Percentage(100);
grdResults.ItemStyle.ForeColor = Color.Black;
grdResults.ItemStyle.BackColor = Color.White;
grdResults.ItemStyle.Font.Size = FontUnit.Smaller;
grdResults.ItemStyle.Font.Name = "Tahoma";
grdResults.AutoGenerateColumns = true;
HyperLinkColumn colSite = new HyperLinkColumn();
colSite.DataTextField = "Title";
colSite.DataNavigateUrlField = "SiteName";
grdResults.Columns.Add(colSite);
BoundColumn colHighLight = new BoundColumn();
colHighLight.DataField = "HitHighlightedProperties";
grdResults.Columns.Add(colHighLight);
HyperLinkColumn colPath = new HyperLinkColumn();
colPath.DataTextField = "Path";
colPath.DataNavigateUrlField = "Path";
colPath.ItemStyle.ForeColor = Color.Green;
grdResults.Columns.Add(colPath);
BoundColumn colAuthor = new BoundColumn();
colAuthor.DataField = "Author";
colAuthor.ItemStyle.ForeColor = Color.Gray;
grdResults.Columns.Add(colAuthor);
BoundColumn colWrite = new BoundColumn();
colWrite.DataField = "Write";
colWrite.ItemStyle.ForeColor = Color.Gray;
colWrite.DataFormatString = "{0:d}";
grdResults.Columns.Add(colWrite);
BoundColumn colDocDate = new BoundColumn();
colDocDate.DataField = "DocumentDate";
colDocDate.ItemStyle.ForeColor = Color.Gray;
colDocDate.DataFormatString = "{0:d}";
grdResults.Columns.Add(colDocDate);
grdResults.DataBind();
Controls.Add(grdResults);
}
}
}
Conclusion
Maintenant, vous savez comment créer un filtre de recherche avancée dans SharePoint 2007 à l’aide de web parts personnalisées. N’hésitez pas à l’adapter à vos besoins spécifiques et à l’utiliser pour améliorer l’expérience de recherche dans votre site SharePoint.
Alors, qu’attendez-vous pour essayer cette fonctionnalité passionnante? Renforcez vos recherches sur SharePoint 2007 et trouvez ce que vous cherchez en un rien de temps!
N’oubliez pas de partager vos expériences avec nous. Bonne recherche!