! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

.NET을 사용하여 RDL 또는 페이지 보고서에서 데이터를 프로그래밍 방식으로 바인딩하는 방법 > 블로그 & Tips

본문 바로가기

ActiveReports.NET

블로그 & Tips

.NET을 사용하여 RDL 또는 페이지 보고서에서 데이터를 프로그래밍 방식으로 바인딩하는 방법

페이지 정보

작성자 GrapeCity 작성일 2021-12-16 10:31 조회 1,546회 댓글 0건

본문

데이터 바인딩은 보고서와 보고서에 표시되는 데이터 간의 연결을 설정합니다. ActiveReports.NET을 사용하면 디자인 타임 시 데이터를 바인딩하지만 다음과 같이 런타임에 데이터를 바인딩해야 하는 경우도 있습니다.

  • 디자인 타임 시 바인딩이 지원되지 않는 데이터베이스(예: MongoDB)를 사용하는 경우

  • 응용 프로그램에 보고서 데이터 바인딩에 다시 사용하고 싶은 기존 데이터 레이어 구현이 있는 경우

이러한 시나리오를 지원하기 위해 ActiveReports.NET에서는 런타임 시 데이터를 바인딩할 수 있는 기능을 제공합니다. 이 문서에서는 디자인 타임에 모의 데이터를 사용하여 보고서를 설계하고 런타임 시 실제 데이터로 교체하기 위한 간단한 프레임워크를 제안합니다. 아래에서 설명하는 절차는 RDL 및 페이지 보고서에만 해당됩니다.


사용 사례

관리자에게 월별 성과 보고서를 제공하는 콜센터 소프트웨어를 작업 중이라고 가정해 보겠습니다. 예를 들어, 관리자는 각 직원이 받은 통화 수, 응답한 통화 수, 평균 통화 시간, 해결 비율을 알아야 합니다. UX 팀은 색상, 글꼴, 서식을 포함한 보고서 디자인을 제공했습니다. 다음은 해당 보고서의 예입니다.

image1


응용 프로그램의 데이터 레이어를 사용하면 지정된 기간에 얻은 통화 레코드의 데이터 소스를 쿼리할 수 있고, 그 결과는 다음과 같은 개체 목록입니다.

public class CallRecord
{
  /// <summary>
  /// Gets or sets the start date of the call
  /// </summary>
  public DateTime StartDate { get; set; }
  /// <summary>
  /// Gets or sets duration of the call in seconds
  /// </summary>
  public float Duration { get; set; }
  /// <summary>
  /// Gets or sets the name of agent handling the call
  /// </summary>
  public string AgentName { get; set; }
  /// <summary>
  /// Gets or sets the value indicating whether the call was answered
  /// </summary>
  public bool Answered { get; set; }      
  /// <summary>
  /// Gets or sets the value indicating whether the call was resolved
  /// </summary>
  public bool Resolved { get; set; }
}


데이터 레이어 인터페이스는 아래와 같습니다.

public interface IDataLayer
{
  IEnumerable<CallRecord> GetPerformanceData(DateTime startDate, DateTime endDate);
}


보고서 디자인

먼저, UX 가이드라인에 따라 보고서를 디자인해야 합니다. 그러나 이 작업을 수행하기 위해 실제 데이터에 액세스할 필요가 없습니다. 모의 데이터를 사용하면 보고서 출력을 생성하기 위해 응용 프로그램을 실행할 필요 없이 Visual Studio 통합 디자이너에서 보고서 디자인과 출력 간에 빠르게 전환할 수 있어 편리합니다.

ActiveReports.NET에서는 보고서를 모의 데이터에 바인딩하는 데 사용할 수 있는 CSV 데이터 공급자(Provider)를 지원합니다. 시뮬레이션된 데이터를 생성하기 위해 사용 가능한 CSV 데이터 생성기는 모두 사용할 수 있습니다(예: extendclass의 데이터 생성기). 데이터가 준비되면 로컬 파일에 저장할 수 있습니다. 예를 들어, 다음은 해당 파일의 일부분을 보여 줍니다.

시작 날짜통화 시간상담원 이름응답함해결함
2021-01-28110.68GregFalseTrue
2021-01-2215.14JimTrueTrue
2021-01-2820.17JimFalseTrue
2021-01-2044.8MarthaFalseFalse


모의 데이터에 바인딩된 새 보고서를 생성하려면 다음 단계를 따라해 주세요.

  1. Visual Studio에서 프로젝트를 엽니다.

  2. ActiveReports 15 RDL 보고서 또는 ActiveReports 15 Page 보고서를 프로젝트에 추가합니다.

  3. 보고서 탐색기를 엽니다.

  4. 데이터 소스를 추가하고 데이터 소스 대화 상자의 유형 드롭다운에서 CSV 공급자를 선택하고 연결 문자열 편집기의 도구 모음에서 편집 아이콘을 클릭합니다.

  5. 열기 버튼을 클릭하고 모의 데이터가 포함된 CSV 파일을 선택합니다.

  6. 미리 보기에서 가져오기 버튼을 클릭합니다. 대화 상자에서 열 목록이 자동으로 채워집니다.

  7. 각 열에 대한 데이터 형식을 설정하고 확인 버튼을 클릭합니다.

image2


보고서 디자이너가 새 데이터 집합을 자동으로 생성하고 필드를 채웁니다. 이제 보고서를 디자인할 수 있습니다. 미리 보기 탭에서 출력을 확인하고 디자인 탭으로 다시 돌아와 필요한 경우 조정하는 식으로 작업합니다.


런타임 시 실제 데이터 제공

실제 응용 프로그램에서 데이터는 CallRecord 개체 목록을 반환하는 데이터 레이어에서 가져옵니다. ActiveReports.NET에서는 IEnumerable 인터페이스를 입력으로 구현하는 모든 개체를 수락하는 개체 데이터 공급자를 제공합니다. 따라서 가장 먼저 보고서의 데이터 소스 유형을 수정해야 합니다.

  1. Visual Studio에서 보고서가 열려 있는지 확인합니다.

  2. 보고서 탐색기에서 데이터 소스 항목을 선택하고 편집 버튼을 클릭합니다.

  3. 유형 다운로드에서 개체 공급자를 선택하고 확인 버튼을 클릭합니다.

  4. 변경 사항을 저장합니다.

미리 보기 탭에서 보고서를 미리 보면 아래와 같은 오류 메시지가 표시됩니다.

GrapeCity.ActiveReports.ReportException: 예기치 않은 오류가 발생했습니다. 추가 정보: ‘설정된 데이터가 없습니다. 사용할 IEnumerable을 지정하십시오.

응용 프로그램 코드는 LocateDataSource 이벤트 처리기에서 개체 데이터 공급자에 대한 데이터를 제공해야 합니다. 예를 들어, 다음 코드는 응용 프로그램 리소스에서 보고서 정의를 로드하고 LocateDataSource 이벤트 처리기를 추가하며 보고서 출력을 PDF 문서로 내보내 메모리에 저장합니다.

internal System.IO.Stream GenerateReportOutput(IDataLayer dataLayer, System.DateTime startDate, System.DateTime endDate)
{
  using (var reportStream =GetType().Assembly.GetManifestResourceStream("RuntimeDataBinding.CallCenterPerformace.rdlx"))
  using (var reader = new System.IO.StreamReader(reportStream))
  {
      var rpt = new GrapeCity.ActiveReports.PageReport(reader);
      var pdfRe = new GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension();
      var output = new GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider();
      rpt.Document.LocateDataSource += (sender, args) =>
      {
          args.Data = dataLayer.GetPerformanceData(startDate, endDate);
      };
      rpt.Document.Render(pdfRe, output);
      return output.GetPrimaryStream().OpenStream();
  }
}


LocateDataSource 이벤트

LocateDataSource 이벤트는 런타임 데이터 바인딩의 토대입니다. 이벤트 처리기는 보고서에서 데이터를 얻어야 하는 경우 보고서 엔진이 호출합니다. 이벤트 처리기는 LocateDataSourceEventArgs 인스턴스의 Data 속성을 보고서가 데이터 소스로 사용할 데이터 개체로 설정해야 합니다. 여러 데이터 공급자가 런타임 데이터 바인딩을 지원합니다. 다음 표에는 허용 가능한 데이터 형식 및 LocateDataSource 발생 조건과 함께 데이터 공급자 목록이 나와 있습니다.

 데이터 공급자

 LocateDataSource 이벤트 발생 조건

 허용 가능한 데이터 형식

 OBJECT

 항상

 IEnumerable

 XML

 데이터 소스의 ConnectionString이 비어 있는 경우

XmlReader, XmlDocument, IXPathNavigable 

 DATASET

 항상

 DataTable, DataView, DataSet

 CSV

 데이터 소스의 ConnectionString이 비어 있는 경우

 CSV 데이터가 포함된 문자열

 JSON

 데이터 소스의 ConnectionString이 비어 있는 경우

 JSON 데이터가 포함된 문자열


이벤트 처리기에 전달되는 LocateDataSourceEventArgs 인스턴스는 여러 보고서를 위해 LocateDataSource 처리기가 호출되는 경우 다음과 같은 유용한 속성도 노출합니다. 예를 들어, 보고서에 하위 보고서가 포함된 경우 기본 보고서 이외에 각 하위 보고서 인스턴스에 대해 LocateDataSource 이벤트 처리기가 호출됩니다.

 속성

 설명

 매개 변수

 이름 및 값을 포함한 보고서 데이터 집합 매개 변수 목록

 데이터 집합

 데이터가 요청되는 보고서 데이터 집합

 보고서

 데이터가 요청되는 보고서 정의


마지막으로, JSViewer를 사용하고 런타임 시 데이터를 제공하려는 경우 UseReporting 미들웨어에 대해 LocateDataSource 이벤트 처리기가 설정됩니다. 예를 들어 다음과 같습니다.
app.UseReporting(settings =>
{
  settings.SetLocateDataSource((args) =>
  {
      var startDate = (DateTime)args.Parameters[0].Value;
      var endDate = (DateTime)args.Parameters[1].Value;
      return _dataLayer.GetPerformanceData(startDate, endDate);
  });
});



지금 바로 ActiveReports.NET을 다운로드하여 직접 테스트해보세요!

 
  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.