Compartilhar via


Etapa 2: Adicionar o código para a Web Part de Pesquisa personalizada

O personalizado pesquisa Web Part descrito neste explicação passo a passo constrói uma consulta pesquisa sintaxe SQL com base no usuário entrada e o envia para o componente Pesquisar da empresa osssearchshort. A Web Part, em seguida, converte os resultados da pesquisa em XML e aplica um transformação XSLT para exibir os resultados no navegador.

Etapa 2 descreve a codificar você deve adicionar para o Web Part.

Dica

O transformação XSLT é apresentada Etapa 3: Criar o código de transformação XSLT.

Para modificar a codificar usar como padrão em SearchProducts

  1. Adicione o seguinte diretivas Namespace perto de parte superior da codificar em SearchProducts.cs.

    using System.Web.UI.WebControls.WebParts;
    using Microsoft.Office.Server.Search.Query;
    using Microsoft.SharePoint;
    using System.Data;
    using System.Xml;
    using System.Xml.Xsl;
    using System.IO;
    
  2. Na seguinte linha, substituir WebControlSystem.Web.UI.WebControls.WebParts.WebPart com codificar.

    public class SearchProducts : WebControl
    
  3. Adicione a seguinte linha de codificar acima o declaração de classe para SearchProducts.

    [XmlRoot(Namespace = "SearchBDCWebPart")]
    

Você está pronto gravar a codificar consulta o componente pesquisa e em seguida, processar o conteúdo a Web Part.

Para adicionar controles filho da Web Part e processá-los

  1. Adicione o seguinte codificar abaixo a declaração de classe.

    Table table;
    Label lblID;
    TextBox txtID;
    CompareValidator checkID;
    Label lblName;
    TextBox txtName;
    Button cmdSearch;
    Label lblResults;
    Xml xmlResults;
    Panel xmlPanel;
    
  2. Substituir o CreateChildControls CreateChildControls método usando a seguinte codificar.

    protected override void CreateChildControls()
    {
        Controls.Clear();
    //Create a table control to use for positioning the controls
        table = new Table();
        table.Width = Unit.Percentage(100);
        for(int i =0; i<5; i++)
        {
            TableRow row= new TableRow();
            TableCell cell = new TableCell();
            row.Cells.Add(cell);
            table.Rows.Add(row);
        }
    //Create the controls for ProductID input
        lblID = new Label();
        lblID.Text = "Product ID is:";
        lblID.Width = Unit.Pixel(150);
        txtID = new TextBox();
        txtID.ID = "txtID";
    /*
    The CompareValidator control is used here to validate
    that the value entered for ProductID is an integer 
    */
        checkID = new CompareValidator();
        checkID.ControlToValidate = "txtID";
        checkID.Operator = ValidationCompareOperator.DataTypeCheck;
        checkID.Type = ValidationDataType.Integer;
        checkID.Text = "ProductID must be an integer.";
    //Add the controls for the ProductID to the table
        table.Rows[0].Cells[0].Controls.Add(lblID);
        table.Rows[0].Cells[0].Controls.Add(txtID);
        table.Rows[0].Cells[0].Controls.Add(checkID);
        table.Rows[0].Cells[0].Height = Unit.Pixel(40);
    //Create the controls for Product Name input.           
        lblName = new Label();
        lblName.Text = "Product Name contains:";
        txtName = new TextBox();
    //Add the controls for the Product Name to the table
        table.Rows[1].Cells[0].Controls.Add(lblName);
        table.Rows[1].Cells[0].Controls.Add(txtName);
        table.Rows[1].Cells[0].Height = Unit.Pixel(40);
    //Create the search button and add to the table control
        cmdSearch = new Button();
        cmdSearch.Click += new EventHandler(cmdSearch_Click);
        cmdSearch.Text = "Search Products";
        table.Rows[3].Cells[0].Controls.Add(cmdSearch);
        table.Rows[3].Cells[0].Height = Unit.Pixel(40);
    //Create a label to display the search message
        lblResults = new Label();
        table.Rows[4].Cells[0].Controls.Add(lblResults);
        table.Rows[4].Cells[0].Height = Unit.Pixel(40);
    //Add the table to the controls collection 
    }
    
  3. Adicionar um evento clique para cmdSearch , usando o seguinte codificar.

    void cmdSearch_Click(object sender, EventArgs e)
    {
        string strName = txtName.Text;
        string strID = txtID.Text;
    /*
    Validate that the user entered something.
    If not, prompt the user to enter an ID or search term.
    */    
        if (strName == "" & strID == "")
        {
            lblResults.Text = "You must enter a Product ID or a Product name term for the Product Search.";
        }
        else
        {
            returnResults(buildSQL(strName, strID));   
        }
    }
    

Você está pronto para adicionar a codificar a construção a texto consulta de pesquisa usando o Referência de sintaxe SQL de pesquisa da empresa.

A construção de consulta de pesquisa texto completo

  • Adicione o seguinte codificar para o ProductSearch ProductSearch classe:

    private string buildSQL(string stName, string stID)
    {
    //This is the scope ID for the AdventureWorks 
    //Business Data Catalog application
        string BDCscopeID = "4";
    //Use the StringBuilder class for the syntax string
        StringBuilder sbSQL = new StringBuilder();
        sbSQL.Append("SELECT ProductName,ProductID,ProductNumber,Path FROM SCOPE() WHERE scope='");
        sbSQL.Append(BDCscopeID);
        sbSQL.Append("'");
        if (stName != "")
        {
            sbSQL.Append(" AND CONTAINS(ProductName,'");
            sbSQL.Append(stName);
            sbSQL.Append("')");
        }
        if (stID != "")
        {
            sbSQL.Append(" AND ProductID=");
            sbSQL.Append(stID);
        }
        return sbSQL.ToString();
    }
    

Agora você está pronto para adicionar a codificar para acessar o modelo objeto de consulta. Esta amostra de código usa a classe Microsoft.Office.Server.Search.Query.FullTextSqlQuery T:Microsoft.Office.Server.Search.Query.FullTextSqlQuery para executar a consulta pesquisa, passando o objeto SPSite SPSite para o valor do parâmetro.

O exemplo acessa os resultados no formato XML usando o WriteXml WriteXML método do DataSet DataSet classe. Os resultados XML é passado para o controle da Web XML que transforma o XML, usando uma versão modificada do transformação XSLT a partir de Core Search Results Web Part.

Para executar o consulta de pesquisa texto completo

  • Adicione o seguinte codificar para o ProductSearch ProductSearch classe:

    private void returnResults(string strSQL)
    {
        try
        {
    /*
    Create the XML control to use for displaying the results, and the Panel
    control to use as a container for the XML control.
    */   
            xmlPanel = new Panel();
            xmlResults = new Xml();
            xmlPanel.Controls.Add(xmlResults);
            Controls.Add(xmlPanel);
            HttpContext context = HttpContext.Current;
    //Specify the path for the XSL        
            string path = context.Request.MapPath("/_layouts/productXSL.xsl");
    
    //Replace <siteName> with the name of your site    
            string sPath = "http://<siteName>";
            FullTextSqlQuery sqlQuery = new FullTextSqlQuery(new SPSite(sPath));
    //Specify result type to return 
            sqlQuery.ResultTypes = ResultType.RelevantResults;
    //Specify the full text search query string
            sqlQuery.QueryText = strSQL;
    //Return the search results to a ResultTableCollection        
            ResultTableCollection results = sqlQuery.Execute();
    //Create a ResultTable for the relevant results table
            ResultTable relResults = results[ResultType.RelevantResults];
    
    //Count the number of rows in the table; 0 = no search results        
            int x = relResults.RowCount;
            if (x !=0)
            {
                lblResults.Text = x.ToString();
                DataTable dtresults = new DataTable();
                dtresults.TableName = "Result";
                dtresults.Load(relResults, LoadOption.OverwriteChanges);
                StringWriter writer = new StringWriter();
                DataSet ds = new DataSet("All_Results");
                ds.Tables.Add(dtresults);
                ds.WriteXml(writer, XmlWriteMode.IgnoreSchema);
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(writer.ToString());
                XslTransform trans = new XslTransform();
                trans.Load(path);
                xmlResults.Document = doc;
                xmlResults.Transform = trans;
            }
            else
            {
    //Send XML for an empty result set to the XML control         
                XmlDocument doc = new XmlDocument();
                doc.LoadXml("<All_Results></All_Results>");
                XslTransform trans = new XslTransform();
                trans.Load(path);
                xmlResults.Document = doc;
                xmlResults.Transform = trans;
            }
        }
        catch (Exception ex1)
        {
            lblResults.Text = ex1.ToString();
        }
    }
    

Você pode localizar o completo codificar para o exemplo classe SearchProducts em Código de exemplo de classe da Web Part exemplo: Adventureworks pesquisa.

Consulte também

Outros recursos

Walkthrough: Criando uma Parte da Web ASP.NET para o exemplo de aplicativos de dados AdventureWorks Business
Etapa 1: Configurar o projeto para a Web Part de Pesquisa personalizada
Etapa 3: Criar o código de transformação XSLT
Etapa 4: implantar o Web Part de Pesquisa personalizada
Etapa 5: Teste o Web Part de pesquisa BDC