Передача нескольких параметров из пользовательской веб-части в службу отчетов Reporting Services - PullRequest
4 голосов
/ 02 апреля 2010

Я работаю со службами Reporting Services в режиме Sharepoint, я могу показать отчет в средстве просмотра отчетов служб Sql Server Reporting, отчет имеет несколько параметров. У меня вопрос, как передать более одного параметра из пользовательской веб-части этот отчет.

Я могу передать один параметр, реализовав интерфейс ITransformableFilterValues ​​в пользовательской веб-части, и я хочу передать несколько параметров.

Пример: если в отчете есть 2 параметра, то я должен иметь возможность сопоставить каждый из элементов управления в веб-части.

Ответы [ 2 ]

6 голосов
/ 18 июня 2010

Вот код для пользовательской веб-части:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using aspnetwebparts = System.Web.UI.WebControls.WebParts;
//using Microsoft.Office.Server.Utilities;
using wsswebparts = Microsoft.SharePoint.WebPartPages;
//using Microsoft.SharePoint.Portal.WebControls;
using System.Collections.ObjectModel;
using Microsoft.SharePoint.Utilities;
using System.Data;
using System.Collections;

namespace CustomWebPart
{
    /// <summary>
    /// Used to provide filter values for the status report.
    /// </summary>
    public class StatusReportFiler : aspnetwebparts.WebPart, wsswebparts.ITransformableFilterValues
    {
        DropDownList ddlCategory;
        ListItem lstItem;
        Label lblCaption; 

        public virtual bool AllowMultipleValues
        {
            get
            {
                return false;
            }
        }
        public virtual bool AllowAllValue
        {
            get
            {
                return true;
            }
        }

        public virtual bool AllowEmptyValue
        {
            get
            {
                return false;
            }
        }
        public virtual string ParameterName
        {
            get
            {
                return "Category";
            }
        }



        public virtual ReadOnlyCollection<string> ParameterValues
        {
            get
            {
                string[] values = this.GetCurrentlySelectedCategory();
                return values == null ?
                    null :
                    new ReadOnlyCollection<string>(values);
            }
        }


        protected override void CreateChildControls()
        {


            lblCaption = new Label();
            lblCaption.Text = "&nbsp; Category:&nbsp;";

            Controls.Add(lblCaption);

            ddlCategory = new DropDownList();
            ddlCategory.AutoPostBack = true;

            lstItem = new ListItem();
            lstItem.Text = "Select All Category";
            lstItem.Value = "0";
            ddlCategory.Items.Add(lstItem);
            lstItem = null;


            lstItem = new ListItem();
            lstItem.Text = "BING";
            lstItem.Value = "Bing";
            ddlCategory.Items.Add(lstItem);
            lstItem = null;

            lstItem = new ListItem();
            lstItem.Text = "Google";
            lstItem.Value = "Google";
            ddlCategory.Items.Add(lstItem);
            lstItem = null;


            Controls.Add(ddlCategory);



           // base.CreateChildControls();
        }


        [aspnetwebparts.ConnectionProvider("Category Filter", "ITransformableFilterValues", AllowsMultipleConnections = true)]
        public wsswebparts.ITransformableFilterValues SetConnectionInterface()
        {
            return this;
        }
        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
        }

        public string[] GetCurrentlySelectedCategory()
        {
            string[] selCategory = new string[1];
            selCategory[0] = ddlCategory.SelectedValue;
            return selCategory;
        }

        protected override void RenderContents(HtmlTextWriter htmlWriter)
        {


            /*htmlWriter.Write("<table border=\"0\" width=\"100%\">");
            htmlWriter.Write("<tr><td>");
            lblCaption.RenderControl(htmlWriter);
            htmlWriter.Write("</td></tr>");
            htmlWriter.Write("<tr><td>");
            lblCaption.RenderControl(htmlWriter);
            htmlWriter.Write("</td></tr>");
            htmlWriter.Write("</table>");*/

            this.EnsureChildControls();
            RenderChildren(htmlWriter);

        }

    }
}
  1. После создания этой веб-части разверните ее в SharePoint. Создайте страницу веб-части в Sharpoint, добавьте пользовательскую веб-часть на страницу. Как только вы добавите его, вы сможете увидеть выпадающий список со значениями в веб-части.

  2. В другом разделе «Добавить веб-часть» добавьте веб-часть ReportView Sevices Sql Server ReportViewer, задайте URL-адрес отчета в разделе свойств и нажмите «Применить». Этот отчет должен иметь то же имя параметра, что и в пользовательской веб-части.

  3. В настраиваемой веб-части нажмите «Правка» -> «Подключения» -> «Отправить фильтр категории» в -> ReportViewer - AAAA (это, как я думаю, имя отчета). Откроется окно с разделом сопоставления, сопоставьте параметр «Категория файла с фильтром» в отчете и нажмите «Готово». Это передаст значение из веб-части в отчет.

Надеюсь, это поможет.

1 голос
/ 02 апреля 2010

Я не уверен в режиме интеграции с SharePoint, но ReportServer правильно принимает параметры, переданные через строку URL.

...