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
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;
Na seguinte linha, substituir WebControlSystem.Web.UI.WebControls.WebParts.WebPart com codificar.
public class SearchProducts : WebControl
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
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;
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 }
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