Xuất báo cáo ssrs sang html theo chương trình C#

Không có cách nào để lấy số hàng trên mỗi trang trong báo cáo. Vì vậy để xuất từng trang ra excel riêng bạn cần xuất DataSet mà bạn được gán vào ReportDataSource và cần gán kích thước hàng để xuất mỗi trang trong mã phía sau dựa trên kích thước bạn đã cung cấp lúc thiết kế cho báo cáo

Kiểm tra ví dụ này. Bây giờ hãy tham khảo và sửa mã của bạn

Trong ví dụ này, tôi đã sử dụng thư viện ClosedXml để xuất sang excel

Bạn có thể tham khảo bài viết dưới đây để biết thêm chi tiết

HTML




không gian tên

C#

using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using ClosedXML.Excel;

Mã số

C#

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        ReportViewer1.ProcessingMode = ProcessingMode.Local;
        ReportViewer1.LocalReport.ReportPath = Server.MapPath("~/Report.rdlc");
        Customers dsCustomers = GetData("select * from customers");
        ReportDataSource datasource = new ReportDataSource("Customers", dsCustomers.Tables[0]);
        ReportViewer1.LocalReport.DataSources.Clear();
        ReportViewer1.LocalReport.DataSources.Add(datasource);
    }
}

private Customers GetData(string query)
{
    string conString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    SqlCommand cmd = new SqlCommand(query);
    using (SqlConnection con = new SqlConnection(conString))
    {
        using (SqlDataAdapter sda = new SqlDataAdapter())
        {
            cmd.Connection = con;

            sda.SelectCommand = cmd;
            using (Customers dsCustomers = new Customers())
            {
                sda.Fill(dsCustomers, "DataTable1");
                return dsCustomers;
            }
        }
    }
}

protected void btnExport_Click(object sender, EventArgs e)
{
    // Assign record per page in the excel as per the report.
    int rowPerPage = 10;
    Customers dsCustomers = GetData("select CustomerId,ContactName,City,Country from customers");
    DataTable dt = new DataTable();
    for (int j = 0; j < dsCustomers.Tables[0].Columns.Count; j++)
    {
        string columnName = dsCustomers.Tables[0].Columns[j].ColumnName;
        dt.Columns.Add(new DataColumn(columnName));
    }
    for (int i = 0; i < dsCustomers.Tables[0].Rows.Count; i++)
    {
        if ((i > 0 && (i % rowPerPage == 0)))
        {
            GenerateExcel(dt, @"C:\Users\dharmendra\Desktop\Excels\", "Test" + i);
            dt.Clear();
        }
        DataRow dr = dsCustomers.Tables[0].Rows[i];
        dt.Rows.Add(dr.ItemArray);
        if (i == dsCustomers.Tables[0].Rows.Count - 1)
        {
            GenerateExcel(dt, @"C:\Users\dharmendra\Desktop\Excels\", "Test" + i);
            dt.Clear();
        }
    }
}

private void GenerateExcel(DataTable dt, string filePath, string fileName)
{
    XLWorkbook wb = new XLWorkbook();
    wb.Worksheets.Add(dt, fileName);
    wb.SaveAs(filePath + fileName + ".xlsx");
}

Ảnh chụp màn hình

Xuất báo cáo ssrs sang html theo chương trình C#

Trên nút Xuất, nhấp vào các tệp được tạo trong thư mục đã chỉ định

Bạn có thể xuất báo cáo SSRS sang định dạng bên ngoài khác thông qua mã. Đoạn mã sau minh họa việc sử dụng phương thức Xuất để xuất báo cáo SSRS sang định dạng Microsoft Word (DOCX). Ví dụ này sử dụng mẫu được tạo trong Bắt đầu nhanh

Trong Dynamics CRM, người dùng có thể tự chạy báo cáo trên một bản ghi hoặc xem (danh sách các bản ghi) nhưng có một số trường hợp đặc biệt khi bạn cần chạy và tải xuống báo cáo theo chương trình. Ví dụ

  1. Tự động chạy báo cáo trên một bản ghi, sau đó tạo tệp PDF/Word/Excel và đính kèm vào bản ghi email sau đó gửi cho khách hàng
  2. Cung cấp API cho hệ thống bên ngoài để thực hiện báo cáo và tải xuống tệp PDF
  3. Tạo nút ruy-băng tùy chỉnh để cho phép người dùng tải xuống báo cáo PDF trực tiếp thay vì mở báo cáo tiêu chuẩn trong CRM và tải xuống tệp PDF

Để thực hiện việc này, chúng tôi cần gọi dịch vụ báo cáo theo chương trình để thực thi và tạo tệp PDF

Dưới đây là các bước chúng tôi sẽ làm trong bài viết này

 

Thiết lập dịch vụ báo cáo

Đảm bảo bạn cài đặt dịch vụ báo cáo cho CRM. Làm theo tài liệu này nếu bạn chưa cài đặt

Nếu bạn cài đặt dịch vụ báo cáo đúng cách, bạn có thể mở "Trình quản lý cấu hình dịch vụ báo cáo"

Xuất báo cáo ssrs sang html theo chương trình C#

Mở "URL dịch vụ web", bạn sẽ thấy URL máy chủ báo cáo

Xuất báo cáo ssrs sang html theo chương trình C#

Nếu bạn mở URL Dịch vụ Web, bạn có thể xem các báo cáo của mình

Xuất báo cáo ssrs sang html theo chương trình C#

Dịch vụ web báo cáo là URL ở trên nối với chuỗi "reportexecution2005. asmx"

Trong trường hợp này, dịch vụ báo cáo là http. //xxx-dev/ReportServer/reportexecution2005. asmx

Nếu bạn mở URL này trong trình duyệt, bạn sẽ thấy liên kết phản hồi XML này

Xuất báo cáo ssrs sang html theo chương trình C#

Hãy lưu ý URL này vì bạn sẽ cần nó cho bước tiếp theo

 

Tạo tham chiếu web đến dịch vụ báo cáo

Mở giải pháp của bạn (mã nguồn) trong studio trực quan, sau đó thêm tham chiếu Dịch vụ cho dự án

Xuất báo cáo ssrs sang html theo chương trình C#

Nhấp vào nút Nâng cao

Xuất báo cáo ssrs sang html theo chương trình C#

 

Nhấp vào Thêm tài liệu tham khảo web

Xuất báo cáo ssrs sang html theo chương trình C#

 

Nhập url dịch vụ báo cáo vào hộp URL

Xuất báo cáo ssrs sang html theo chương trình C#

Sau khi thêm thành công, bạn có thể thấy dịch vụ báo cáo được thêm vào dự án của mình trong Tham chiếu web

Xuất báo cáo ssrs sang html theo chương trình C#

Gần như đã sẵn sàng để thực hiện báo cáo bằng C#

 

Xuất bản báo cáo để sử dụng bên ngoài

Vì chúng tôi sẽ thực hiện các báo cáo từ bên ngoài, chúng tôi cần xuất bản chúng để sử dụng bên ngoài

Mở báo cáo, sau đó chọn Hành động \ Xuất bản báo cáo để sử dụng bên ngoài

Xuất báo cáo ssrs sang html theo chương trình C#

 

Thực thi báo cáo và tạo tệp PDF bằng C#

Cho đến bây giờ, nó đã sẵn sàng để viết mã của bạn để thực hiện báo cáo

public byte[] RenderSSRSReport(string userName, string passWord, string domain, string reportingServiceUrl,
    string reportName, ParameterValue[] parameters, string formatType)
{
    byte[] result = null;
    string historyID = null;
    // Create a device information for the report
    string devInfo = "" +
                        "False" +
                        "False" +
                        "False" +
                        "True" +
                        "True" +
                        "True" +
                        "";
    // Init some output parameters
    string encoding;
    string extension;
    string mimeType;
    Warning[] warnings = null;
    string[] streamIDs = null;

    // Create a network credential to authenticate with the reporting service
    NetworkCredential cred = new NetworkCredential(userName, passWord, domain);

    // Init reporting execution service with network credential.
    var reportService = new ReportExecutionService()
    {
        Url = reportingServiceUrl,
        Credentials = cred
    };


    try
    {
        ExecutionHeader execHeader = new ExecutionHeader();

        reportService.ExecutionHeaderValue = execHeader;
        reportService.LoadReport(reportName, historyID);

        if (parameters != null)
        {
            reportService.SetExecutionParameters(parameters, "en-us");
        }

        result = reportService.Render(formatType, devInfo, out extension, out mimeType, out encoding, out warnings, out streamIDs);
    }
    catch (Exception ex)
    {
        if (ex is SoapException)
        {
            SoapException sexc = ex as SoapException;
            _trace.Trace($"Error generating report - {sexc?.Detail?.InnerText}");
            throw;
        }
        else
        {
            _trace.Trace($"Error generating report - {ex?.Message}");
            throw;
        }
    }

    // result is byte[]
    return result;
}

Giải thích các thông số

  1. báo cáoUrl dịch vụ. đây là URL dịch vụ báo cáo, chẳng hạn như http. //xxx-dev/ReportServer/reportexecution2005. asmx
  2. tên người dùng, mật khẩu, tên miền. là tài khoản của bạn trong CRM. Bạn sẽ thực hiện báo cáo thay cho người dùng này và sử dụng người dùng này để truy xuất dữ liệu CRM cho báo cáo
  3. tên báo cáo. là tên của báo cáo bao gồm tiền tố. mô hình là
    • string.Format("/{0}/{1}", reportPathPrefix, reportName);
    • Normally, the report prefix has patter: _MSCRM
    • Để biết chính xác tên báo cáo và tiền tố, bạn có thể mở báo cáo của mình trong máy chủ báo cáo
    • Xuất báo cáo ssrs sang html theo chương trình C#
    • Xuất báo cáo ssrs sang html theo chương trình C#
  4. thông số. là tham số đầu vào của báo cáo, nó có loại ParameterValue[]
    • Xuất báo cáo ssrs sang html theo chương trình C#
    • Bạn có thể tạo các thông số báo cáo như thế này
    • List parameterValuesList = new List();
      parameterValuesList.Add(
          new ParameterValue()
          {
              Name = "EventId",
              Value = "32dc46c5-dd00-48f7-9f3b-bfd152676b11"
          }
      );
      return parameterValuesList.ToArray();
  5. định dạngType. định dạng đầu ra. Ví dụ PDF, Word

Đoạn mã trên sẽ trả về một byte[], bạn cũng có thể chuyển đổi thành chuỗi base64 nếu cần

string base64 = System.Convert.ToBase64String(reportContentAsByteArray);

Phần kết luận

  1. Chúng tôi có thể hiển thị và tải xuống các báo cáo theo chương trình để điều chỉnh cho một số quy trình tự động phức tạp
  2. Phương pháp này chỉ được hỗ trợ cho CRM tại chỗ vì bạn không có quyền truy cập vào dịch vụ báo cáo trong CRM trực tuyến
  3. Đối với CRM trực tuyến, bạn có thể chuyển đổi báo cáo SSRS sang PowerBi sau đó

Dynamics 365 Xuất PDF từ báo cáo SSRS theo chương trình

thẻ

API

Thao tác dữ liệu

Lặn sâu

Hội nhập

lập trình

Báo cáo

hướng dẫn

Xuất báo cáo ssrs sang html theo chương trình C#

nguyễn văn hảo

Xin chào, tôi tên là Hảo, tôi là nhà phát triển Dynamics CRM tại ELCA Việt Nam. Tôi tốt nghiệp Đại học Khoa học Tự nhiên Thành phố Hồ Chí Minh Việt Nam. Tôi chủ yếu làm việc trên CRM trực tuyến và tại chỗ. Tôi cũng làm việc trên các công nghệ Power Platform như Power Automate, Power Apps Component Framework. Tôi có cơ hội làm việc với Microsoft trong 2 dự án CRM (online). Tôi có một số kinh nghiệm với việc di chuyển dữ liệu SSIS và Azure Data Factory