Web Page Query Conditions to Open Reporting Service(SSRS) using Url transfer Access Parameters

Web Page Query Conditions to Open Reporting Service(SSRS) using Url transfer Access Parameters

The result:

image

 


實作:

ReportServer Address: http://you-Server/ReportServer/you-folder/you-filename  (ex: http://iverson-pc/ReportServer/Ch5/連動式參數)

image

Reports Adderss: http://you-Server/Reports/you-folder/you-filename (ex: http://iverson-pc/Reports/Ch5/連動式參數)

image

image

 

Web.config

<appSettings>
  <add key="ReportWebServer" value="http://you-Server" /><!-- 依環境設定  According to the environment setting -->
  <add key="ReportVirtualDirectory" value="/ReportServer" /><!-- 依環境設定  According to the environment setting -->
  <add key="ReportWebAppDirectoryDefault" value="/you-folder/" /><!-- 依環境設定  According to the environment setting -->

   <!--this is My Setting-->
  <add key="ReportWebServer" value="http://IVERSON-PC" /><!-- 依環境設定  According to the environment setting -->
  <add key="ReportVirtualDirectory" value="/ReportServer" /><!-- 依環境設定  According to the environment setting -->
  <add key="ReportWebAppDirectoryDefault" value="/PSLK/" /><!-- 依環境設定  According to the environment setting -->
</appSettings>

 

Site.Master


 <script src="<%: Url.Content("~/Scripts/ReportingService_Base.js") %>" type="text/javascript"></script>

 

include My

ReportingService_Base.js


function openReport(ajaxReport) {
    var theForm = $('form#queryform');
    var chunk = theForm.serialize();
    $.ajax({
        type: "POST",
        url: ajaxReport,
        data: chunk,
        timeout: 500000,
        error: function (xhr) {
            alert('error:' + xhr);
        },
        success: function (resultData) {
            openReportWin(resultData);
        }
    });
}

function openReportWin(resultData) {
    jsonObj = eval("(" + resultData + ")");
    if (undefined == jsonObj) {
        return;
    }
    var reportWin = window.open("",jsonObj.PGMID, "location=no,menubar=no,status=no,toolbar=no,resizable=yes");
    reportWin.document.write("<html><body><form id='reportForm' name='reportForm' action='' 
                                                                              method='post' target='_self'></form></body></html>");    
    reportWin.document.reportForm.action = jsonObj.RpURL + encodeURIComponent(jsonObj.RpFilePath);
    var rpForm = $(reportWin.document.reportForm);
    for (i = 0; i < jsonObj.Parameters.length; i++) {
        rpForm.append("<input type='hidden' name='" + jsonObj.Parameters[i].Name + "' 
                                              value='" + jsonObj.Parameters[i].Value + "'>");
    }
    reportWin.document.reportForm.submit();
    setTimeout(function () { reportWin.close(); }, 60000);

}

 

ReportController

public class ReportController
{
        private string _ReportWebServer = "";
        private string _ReportVirtualDirectory = "";
        private string _ReportWebAppDirectoryDefault = "";
        private string _ReportFilePath = "";
        private Dictionary<string, object> _ReportParameters = new System.Collections.Generic.Dictionary<string, object>();

        //指定用於轉譯報表的格式(HTML4.0、MHTML、IMAGE、EXCEL、WORD、CSV、PDF、XML 和 NULL)
        public enum ReportFormats { HTML40, MHTML, IMAGE, EXCEL, WORD, CSV, PDF, XML, NULL };
        public ReportFormats ReportFormat = ReportFormats.HTML40;
        //顯示或隱藏工具列的參數區
        public bool bShowParameters = false;

        public ReportController()
        {
            if (null != System.Web.Configuration.WebConfigurationManager.AppSettings["ReportWebServer"])
            {
                _ReportWebServer = System.Web.Configuration.WebConfigurationManager.AppSettings["ReportWebServer"];
                _ReportWebServer = _ReportWebServer.Trim(new char[] { ' ', '/' });
            }
            if (null != System.Web.Configuration.WebConfigurationManager.AppSettings["ReportVirtualDirectory"])
            {
                _ReportVirtualDirectory = System.Web.Configuration.WebConfigurationManager.
                                                                                                               AppSettings["ReportVirtualDirectory"];
                _ReportVirtualDirectory = _ReportVirtualDirectory.Trim(new char[] { ' ', '/' });
                if ("" != _ReportVirtualDirectory)
                {
                    _ReportVirtualDirectory = "/" + _ReportVirtualDirectory;
                }
            }

            if (null != System.Web.Configuration.WebConfigurationManager.AppSettings["ReportWebAppDirectoryDefault"])
            {
                _ReportWebAppDirectoryDefault = System.Web.Configuration.WebConfigurationManager.
                                                                                                                      AppSettings["ReportWebAppDirectoryDefault"];
                _ReportWebAppDirectoryDefault = _ReportWebAppDirectoryDefault.Trim(new char[] { ' ', '/' });
                if ("" == _ReportWebAppDirectoryDefault)
                {
                    _ReportWebAppDirectoryDefault = "/";
                }
                else
                {
                    _ReportWebAppDirectoryDefault = "/" + _ReportWebAppDirectoryDefault + "/";
                }
            }
        }

        public string ReportWebServer
        {
            get { return _ReportWebServer; }
        }

        public string ReportWebAppDirectoryDefault
        {
            set
            {
                _ReportWebAppDirectoryDefault = value.Trim(new char[] { ' ', '/' });
                if ("" == _ReportWebAppDirectoryDefault)
                {
                    _ReportWebAppDirectoryDefault = "/";
                }
                else
                {
                    _ReportWebAppDirectoryDefault = "/" + _ReportWebAppDirectoryDefault + "/";
                }
            }
            get { return _ReportWebAppDirectoryDefault; }
        }

        public string ReportFilePath
        {
            set { _ReportFilePath = value.Trim(new char[] { ' ', '/' }); }
            get { return _ReportFilePath; }
        }

        public string ReportVirtualDirectory
        {
            set { _ReportVirtualDirectory = "/" + value.Trim(new char[] { ' ', '/' }); }
            get { return _ReportVirtualDirectory; }
        }

        public void AddParameters(string strKey, object objValue)
        {
            try
            {
                strKey = strKey.Trim();
                if (_ReportParameters.ContainsKey(strKey))
                {
                    _ReportParameters[strKey] = null == objValue ? "" : objValue.ToString().Trim();
                }
                else
                {
                    _ReportParameters.Add(strKey, null == objValue ? "" : objValue.ToString().Trim());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public Dictionary<string, object> ReportParameters
        {
            get { return _ReportParameters; }
        }

        public void ClearParameters()
        {
            _ReportParameters.Clear();
        }

        public string OpenReport()
        {
           System.Text.StringBuilder sb = new System.Text.StringBuilder();
           #region 檢查參數
            if ("" == ReportWebServer)
            {
                throw(new Exception("未設定報表伺服器!"));
            }
            else if ("" == ReportFilePath)
            {
                throw(new Exception("未設定報表檔!"));
            }
            #endregion
            #region 加入固定的參數
            AddParameters("rc:Parameters", bShowParameters);        //顯示或隱藏工具列的參數區
            AddParameters("rc:Stylesheet", "HtmlViewer");           //指定要套用至 HTML 檢視器的樣式表
            AddParameters("rs:ParameterLanguage", "zh-TW");   //指定要套用至 HTML 檢視器的樣式表
            AddParameters("rs:Command", "Render");                  //轉譯指定的報表
            AddParameters("rs:Format", (ReportFormat == ReportFormats.HTML40 ? "HTML4.0" : 
                                              Enum.GetName(typeof(ReportFormats), ReportFormat)));  //指定用於轉譯報表的格式
            #endregion

            #region 組報表URL和參數 
            //報表URL
            sb.AppendFormat("{{\"RpURL\":\"{0}{1}?\",", ReportWebServer, ReportVirtualDirectory);
            //開報表的作業,用來控制不同作業開的報表都在不同視窗
            sb.AppendFormat("\"RpFilePath\":\"{0}\",", ReportWebAppDirectoryDefault + ReportFilePath);
            sb.AppendFormat("\"PGMID\":\"{0}\",", "you-filename");
            //參數
            sb.Append("\"Parameters\":[");
            foreach (KeyValuePair<string, object> kvp in ReportParameters)
            {
                sb.AppendFormat("{{\"Name\":\"{0}\",\"Value\":\"{1}\"}},", kvp.Key, kvp.Value);
            }
            sb.Remove(sb.Length - 1, 1);
            sb.Append("]}");
            #endregion

            return sb.ToString();
        }
}

ProductController 繼承 ReportController

public class ProductController : ReportController
{
     public ActionResult Product()
     {
            return View();
     }

     public string AJAX_Report()
     {
          #region 單隻作業自定參數
           //報表檔
           base.ReportFilePath = "you-filename";
          base.ReportWebAppDirectoryDefault = "you-folder";
          //畫面參數
           base.AddParameters("ProductCategory", null == Request["DropDownList_ProductCategory"] ? "" : 
                                                                                       Request["DropDownList_ProductCategory"].Trim());//產品類別
           base.AddParameters("ProductSubcategory", null == Request["DropDownList_ProductSubcategory"] ? "" : 
                                                                                       Request["DropDownList_ProductSubcategory"].Trim());//產品型別
           #endregion
          //開啟報表
           try
          {
               return base.OpenReport();
          }
          catch (Exception ex)
          {
                return ex.ToString();
          }
     }

}

Product.aspx

    <h2>Product</h2>
    <%using (Html.BeginForm("", "Telerik", FormMethod.Post, new { id = "queryform", name = "queryfrom" }))
      { %>
    <table>
        <tr>
            <td>
                產品類別:
            </td>
            <td>
                <%= Html.Telerik().DropDownList()
                    .Name("DropDownList_ProductCategory")
                   .DataBinding(binding => binding.Ajax().Select("Ajax_DropDownList_ProductCategory", "Ajax"))
                    .Placeholder("Select ...")
                              .DropDownHtmlAttributes(new { @class = "validate[required]" })
                   .CascadeTo("DropDownList_ProductSubcategory")
                %>
            </td>
        </tr>
        <tr>
            <td>
                產品型別:
            </td>
            <td>
                <%= Html.Telerik().DropDownList()
                   .Name("DropDownList_ProductSubcategory")
                   .DataBinding(binding => binding.Ajax().Select("Ajax_DropDownList_ProductSubcategory", "Ajax"))
                   .Placeholder("Select ...")
                   .DropDownHtmlAttributes(new { @class = "validate[required]" })
                   .CascadeTo("")
                %>
            </td>
        </tr>
        <tr>
            <td>
                <input type="button" value="Open Report" onclick="doPrint()" />
            </td>
        </tr>
    </table>
<%} %>
<script type="text/javascript">
    function doPrint() {
        openReport("AJAX_Report");
    }
</script>

 

架構設計者: ChihHao(ThinkPower-- 志豪)

參與設計者: Iverson  (ThinkPower-- iverson.huang)

 

iverson.huang 筆記