Partager via


Procédure pas à pas : création d'un composant WebPart de recherche de contenu d'entreprise personnalisé

Avec Recherche de contenu d'entreprise dans Microsoft Office SharePoint Server 2007, vous pouvez personnaliser l'apparence et les fonctionnalités des pages du centre de recherche et composants WebPart à partir du navigateur. Toutefois, si vous souhaitez faire des personnalisations qui ne sont pas possibles par le biais du navigateur, vous pouvez créer des composants WebPart personnalisés qui utilisent le modèle objet de requête pour exécuter des requêtes sur le composant de recherche.

Dans cette procédure, vous allez créer un composant WebPart de recherche personnalisé et l'ajouter à votre site. Le composant WebPart décrit dans cette procédure fournit une fonctionnalité de recherche très basique.

Les tâches suivantes sont présentées :

  • Création du projet pour le composant WebPart

  • Codage du composant WebPart

  • Déploiement du composant WebPart

Conditions préalables requises

Pour effectuer cette procédure, les éléments suivants sont indispensables :

  • Microsoft Visual Studio 2005 installé sur votre ordinateur de développement

  • Microsoft Office SharePoint Server 2007 installé sur votre ordinateur de développement

  • Autorisations de créer et modifier des pages du site Centre de recherche

Configuration du projet du composant WebPart de recherche personnalisé

Pour créer le projet pour le composant WebPart

  1. Dans Visual Studio 2005, dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet.

  2. Dans Types de projets, sous C#, sélectionnez Windows.

  3. Sous Modèles, sélectionnez Bibliothèque de contrôles Web. Dans le champ Nom, entrez CustomSearchWebPart, puis cliquez sur OK.

La prochaine étape consiste à ajouter les références requises à votre projet WebPart.

Notes

La configuration de l'environnement de développement prise en charge pour Microsoft Office SharePoint Server 2007 consiste à développer localement sur un serveur équipé de Microsoft Office SharePoint Server 2007.

Pour ajouter des références au projet CustomSearchWebPart

  1. Dans le menu Projet, cliquez sur Ajouter une référence.

  2. Sous l'onglet .NET, sélectionnez chacune des références suivantes, puis cliquez sur OK après chaque sélection.

    • System.Data

    • System.XML

    • Microsoft.SharePoint

    • Microsoft.Office.Server

    • Microsoft.Office.Server.Search

Avant d'ajouter le code au composant WebPart, remplacez le fichier de classes par défaut par un nouveau fichier de classes.

Pour créer le fichier de classes pour le composant WebPart

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit de la souris sur WebCustomControl1.cs, puis cliquez sur Supprimer pour supprimer la classe par défaut créée avec le projet.

  2. Dans le menu Projet, cliquez sur Ajouter un nouvel élément.

  3. Dans la boîte de dialogue Ajouter un nouvel élément, cliquez sur Contrôle Web personnalisé, entrez clsSearchQuery.cs, puis cliquez sur Ajouter.

Écriture du code du composant WebPart de recherche personnalisé

Vous allez maintenant modifier le code par défaut inclus dans le nouveau fichier de classes.

Pour modifier le code par défaut dans clsSearchQuery

  1. Ajoutez les directives d'espace de noms suivantes dans la partie supérieure du code dans clsSearchQuery.cs :

    using System.Drawing;
    using System.Data;
    using System.Xml;
    using System.Xml.Serialization;
    using Microsoft.SharePoint.WebPartPages;
    using Microsoft.Office.Server;
    using Microsoft.Office.Server.Search.Query;
    
  2. Dans la ligne de code suivante, remplacez WebControl par WebPart :

    public class clsSearchQuery : WebControl
    
  3. Ajoutez la ligne de code suivante au-dessus de la déclaration de classe pour clsSearchQuery :

    [XmlRoot(Namespace = "CustomSearchWebPart")]
    

Maintenant vous êtes prêt à écrire le code pour interroger le composant de recherche et afficher le contenu du composant WebPart.

Pour ajouter les contrôles enfants du composant WebPart et les rendre

  1. Ajoutez le code suivant sous la déclaration de classe :

            Button cmdSearch;
            TextBox txtQueryText;
            Label lblQueryResult;
            DataGrid grdResults;
    
  2. Remplacez la méthode CreateChildControls par le code suivant :

    protected override void CreateChildControls()
            {
                Controls.Clear();
                txtQueryText = new TextBox();
                this.Controls.Add(txtQueryText);
                cmdSearch = new Button();
                cmdSearch.Text = "Start Search";
                cmdSearch.Click += new EventHandler(cmdSearch_Click);
                this.Controls.Add(cmdSearch);
                lblQueryResult = new Label();
                this.Controls.Add(lblQueryResult);
            }
    
  3. Ajoutez un événement Click pour cmdSearch à l'aide du code suivant :

            void cmdSearch_Click(object sender, EventArgs e)
            {
                if (txtQueryText.Text != string.Empty)
                {
                  keywordQueryExecute(txtQueryText.Text);
                }
                else
                {
                  lblQueryResult.Text = "You must enter a search word.";
                }
              }
    

Vous êtes maintenant prêt à ajouter le code pour accéder au modèle objet Requête. Cet exemple de code utilise la classe Microsoft.Office.Server.Search.Query.KeywordQuery pour exécuter la requête de recherche, passant l'objet Microsoft.Office.Server.ServerContext comme valeur du paramètre. La requête de recherche est une simple requête par mot clé qui recherche les enregistrements dont la propriété Author correspond à l'objet de la recherche.

Pour exécuter la requête par mot clé

  1. Ajoutez le code suivant à la classe clsSearchQuery :

    private void keywordQueryExecute(string strQueryText)
            {
                KeywordQuery kRequest = new KeywordQuery(ServerContext.Current);
                string strQuery = "author:" + strQueryText;
                kRequest.QueryText = strQuery;
                //to return relevant results
                kRequest.ResultTypes |= ResultType.RelevantResults;
                ResultTableCollection resultTbls = kRequest.Execute();
                if ((int)ResultType.RelevantResults != 0)
                {
                    ResultTable tblResult = resultTbls [ResultType.RelevantResults];
                    if (tblResult.TotalRows == 0)
                    {
                      lblQueryResult.Text = "No Search Results Returned.";
                    }
                    else
                    {
                        ReadResultTable(tblResult);
                    }
    
                }
    }
    
  2. Pour lire les données de résultats de la recherche, la méthode keywordQueryExecute appelle la méthode ReadResultTable. Ajoutez le code suivant pour ReadResultTable :

    void ReadResultTable(ResultTable rt)
            {
                DataTable relResultsTbl = new DataTable();
                relResultsTbl.TableName = "Relevant Results";
                DataSet ds = new DataSet("resultsset");
                ds.Tables.Add(relResultsTbl);
                ds.Load(rt,LoadOption.OverwriteChanges,relResultsTbl);
                fillResultsGrid(ds);
            }
    
  3. La méthode ReadResultTable appelle la méthode fillResultsGrid pour lier le DataSet des résultats de recherche au DataGrid grdResults. Ajoutez le code pour fillResultsGrid :

    private void fillResultsGrid(DataSet grdDs)
            {
    //Instantiate the DataGrid, and set the DataSource
                grdResults = new DataGrid();
                grdResults.DataSource = grdDs;
    //Set the display properties for the DataGrid.
                grdResults.GridLines = GridLines.None;
                grdResults.CellPadding = 4;
                grdResults.Width = Unit.Percentage(100);
                grdResults.ItemStyle.ForeColor = Color.Black;
                grdResults.ItemStyle.BackColor = Color.AliceBlue;
                grdResults.ItemStyle.Font.Size = FontUnit.Smaller;
                grdResults.ItemStyle.Font.Name = "Tahoma";
                grdResults.HeaderStyle.BackColor = Color.Navy;
                grdResults.HeaderStyle.ForeColor = Color.White;
                grdResults.HeaderStyle.Font.Bold = true;
                grdResults.HeaderStyle.Font.Name = "Tahoma";
                grdResults.HeaderStyle.Font.Size = FontUnit.Medium;
    
    /*Turn off AutoGenerate for the columns, so that the DataGrid
    doesn't automatically bind to all of the columns
    in the search results set.
    Then create and configure only the columns you want to
    include in the DataGrid.
    */
                grdResults.AutoGenerateColumns = false;
                HyperLinkColumn colTitle = new HyperLinkColumn();
                colTitle.DataTextField = "Title";
                colTitle.HeaderText = "Title";
                colTitle.DataNavigateUrlField = "Path";
                grdResults.Columns.Add(colTitle);
                BoundColumn colAuthor = new BoundColumn();
                colAuthor.DataField = "Author";
                colAuthor.HeaderText = "Author";
                grdResults.Columns.Add(colAuthor);
    //Bind the data to the DataGrid
                grdResults.DataBind();
    //Add the DataGrid to the controls
                Controls.Add(grdResults);
            }
    

Déploiement du composant WebPart de recherche personnalisé

Étant donné que le composant WebPart de recherche personnalisé que vous créez à partir de cet exemple n'a pas de nom fort, vous ne pouvez pas le déployer sur le cache d'assembly global. Vous devez le déployer sur le répertoire _app_bin de votre site.

Pour déployer le composant WebPart de recherche personnalisé sur votre site

  1. Copiez CustomSearchWebPart.dll dans le répertoire _bin de votre site. Le chemin d'accès ressemble à ceci :

    \Inetpub\wwwroot\wss\VirtualDirectories\Site\_app_bin
    

    Notes

    Si vous ne connaissez pas le chemin d'accès de l'application de votre site, recherchez-le dans le Gestionnaire des services Internet.

  2. Ouvrez la console du Gestionnaire des services Internet, développez le nœud Sites Web, cliquez avec le bouton droit de la souris sur l'application de votre site, puis cliquez sur Propriétés.

  3. Cliquez sur l'onglet Répertoire de base.

    Le champ Chemin d'accès local contient le chemin d'accès à l'application.

Pour enregistrer le composant WebPart de recherche personnalisé comme SafeControl

  1. Ouvrez le fichier web.config du site auquel vous souhaitez ajouter le composant WebPart de recherche personnalisé. Ce fichier se situe dans le dossier racine du site.

  2. Ajoutez la balise <SafeControl/> suivante à la section <SafeControls> </SafeControls> de web.config :

    <SafeControl Assembly="CustomSearchWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Namespace="CustomSearchWebPart" TypeName="*" Safe="True" />
    
  3. Enregistrez vos modifications, puis fermez le fichier web.config.

Pour créer le fichier de définition du composant WebPart de recherche personnalisé

  1. Ouvrez un nouveau fichier dans un éditeur de texte comme le Bloc-notes et ajoutez le code XML suivant :

    <?xml version="1.0"?>
    <WebPart xmlns="https://schemas.microsoft.com/WebPart/v2">
       <Assembly>CustomSearchWebPart, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=null</Assembly>
       <TypeName>CustomSearchWebPart.clsSearchQuery</TypeName>
       <Title>Custom Search Web Part</Title>
    </WebPart>
    
  2. Nommez le fichier CustomSearchWebPart.dwp et enregistrez-le.

    Notes

    Si vous ne travaillez pas sur le serveur Office SharePoint Server 2007, vous devez copier le fichier sur un serveur Office SharePoint Server 2007 pour terminer cette étape.

Pour enregistrer le composant WebPart de recherche personnalisé comme SafeControl

  1. Ouvrez le fichier web.config du site auquel vous souhaitez ajouter le composant WebPart de recherche personnalisé.

  2. Ajoutez la balise <SafeControl/> suivante à la section <SafeControls> de web.config :

    <SafeControl Assembly="CustomSearchWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Namespace="CustomSearchWebPart" TypeName="*" Safe="True" />
    

Pour déployer le composant WebPart de recherche personnalisé sur votre site

  • Copiez CustomSearchWebPart.dll dans le répertoire _bin de votre site. Le chemin d'accès ressemble à ceci :

    \Inetpub\wwwroot\wss\VirtualDirectories\Site
    

Étapes suivantes

Le code complet de l'exemple de classe clsSearchQuery est disponible dans la rubrique Exemple : code du composant WebPart de recherche de contenu d'entreprise personnalisée.

Une fois le composant WebPart déployé, vous pouvez le tester.

Pour tester le composant WebPart de recherche personnalisé

  1. Ouvrez le site Centre de recherche dans votre navigateur, cliquez sur le menu Actions du site, puis cliquez sur Créer une page.

  2. Dans le champ Nom de l'URL, entrez customsearchwebparttest.

  3. Dans le champ Titre, entrez Page de test du composant WebPart de recherche personnalisé.

  4. Dans la liste Mise en page, sélectionnez Page de recherche (Page d'accueil).

  5. Pour créer la page, cliquez sur Créer.

  6. Avec la page customsearchwebparttest.aspx ouverte dans le navigateur, cliquez sur le lien Ajouter un composant WebPart dans la zone supérieure.

  7. Dans la boîte de dialogue Ajouter des composants WebPart, cliquez sur le lien Galerie et options des composants WebPart avancés.

  8. Cliquez sur le lien Parcourir, puis sélectionnez Importer.

  9. Cliquez sur Parcourir, recherchez l'endroit où vous avez enregistré le fichier CustomSearchWebPart.dwp, sélectionnez-le, puis cliquez sur Ouvrir.

    Le composant WebPart de recherche personnalisé devrait maintenant apparaître dans la boîte de dialogue. Vous pouvez le glisser-déposer sur la page pour l'utiliser.

Voir aussi

Référence

Microsoft.Office.Server.Search.Query.KeywordQuery

Autres ressources

Procédure pas à pas : Création d'un composant WebPart ASP.NET pour l'exemple d'application de données métier AdventureWorks
Mise en route avec les composants WebPart de recherche de contenu d'entreprise personnalisé
Vue d'ensemble du modèle objet de requête de la recherche de contenu d'entreprise
Référence de syntaxe de mots-clés Recherche de contenu d'entreprise