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

ASP.NET Core 미들웨어를 사용하여 JavaScript 뷰어 앱에 분석을 추가하기 > 블로그 & Tips

본문 바로가기

ActiveReports.NET

블로그 & Tips

ASP.NET Core 미들웨어를 사용하여 JavaScript 뷰어 앱에 분석을 추가하기

페이지 정보

작성자 GrapeCity 작성일 2022-03-08 09:33 조회 869회 댓글 0건

본문

첨부파일

ActiveReports JavaScript 뷰어를 사용하여 보고서를 표시하는 ASP.NET Core 응용 프로그램을 빌드한 경우를 예로 들겠습니다. 일부 보고서는 다양한 매개 변수를 사용하므로, 보고서가 요청되는 빈도, 보고서에 전달되는 매개 변수, 보고서를 렌더링하는 데 걸리는 시간 등 리포팅 사용에 대한 분석 데이터를 수집해야 하는 경우가 있습니다. 이 작업은 두 가지 하위 단계로 구성됩니다.

  • 분석 데이터 수집

  • 수집된 데이터를 시각화하여 필수 인사이트 얻기

이 문서에서는 ActiveReports JS 뷰어에서 ASP.NET Core 백엔드로 요청을 인터셉트하는 ASP.NET Core 미들웨어에서 첫 번째 하위 작업을 구현하는 방법을 보여줍니다. 매개 변수화된 기본 보고서를 사용하여 프로세스를 단계별로 진행해 보겠습니다.

1. Visual Studio 2022에서 ActiveReports가 즉시 제공하는 프로젝트 템플릿을 사용하여 "ActiveReports 16 JS Viewer Core MVC" 응용 프로그램을 새로 만듭니다.

middleware


2. 자동 생성된 Reports\RdlReport1.rdlx 보고서를 열고 보고서 탐색기를 활성화하고 보고서 매개 변수를 추가한 후 보고서 본문으로 끌어서 놓습니다.

middleware


3. 디버그 모드에서 응용 프로그램을 실행하고 JS 뷰어에 매개 변수 값을 입력한 후 보고서가 예상대로 표시되는지 확인합니다.

middleware


4. 응용 프로그램이 기본적으로 백엔드에 전송된 요청에 대한 ASP.NET Core 진단을 로그에 기록합니다. JS 뷰어가 보고서를 렌더링해야 하는 경우에는 POST 요청 "API/reporting/reports/RdlReport1.rdlx/render"를 백엔드로 전송합니다.

middleware 

5. 보고서 이름 및 매개 변수 값에 액세스하려면 응용 프로그램은 렌더링 요청을 인터셉트하고 필수 정보를 추출한 후 데이터베이스 등과 같은 곳에 저장해야 합니다.

응용 프로그램은 이를 위해서 분기를 미들웨어 파이프라인에 삽입해야 합니다. MapWhen 분기를 사용해 보겠습니다.


6. Startup 클래스의 시작 부분에 다음 코드를 추가합니다. 이 정규식을 사용하여 보고서 이름을 추출합니다.

private static Regex RenderRequestRegex = new Regex("/api/reporting/reports/(.+)/render");


7. Startup 클래스 뒤에 다음 클래스 선언을 추가합니다. 이 클래스를 사용하여 요청에서 보고서 매개 변수 값을 추출하겠습니다.

class RenderRequest  
{  
  public Dictionary<string, object[]> Parameters { get; set; }  
}


8. Newtonsoft.Json 패키지를 프로젝트에 설치합니다.


9. Startup 클래스Configure 메서드를 다음과 같이 수정합니다. JS 뷰어가 위에서 설명한 렌더링 요청을 전송하면 먼저 응용 프로그램은 새 미들웨어 분기를 호출합니다.

그러면 코드는 요청의 경로 및 본문에서 각각 보고서 이름과 매개 변수 값을 추출합니다. 간단히 설명하기 위해 이 정보는 "경고" 레이블을 사용하여 로거 출력에 전송됩니다. 실제 응용 프로그램은 정보를 데이터베이스에 저장할 수 있습니다.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILogger<Startup> logger){
    if (env.IsDevelopment()){
        app.UseDeveloperExceptionPage();
    }
    app.UseWhen(context => RenderRequestRegex.IsMatch(context.Request.Path.Value), (app) =>
    {
        app.Use(async (context, next) =>
        {
            // extract the report name from the request
            var reportName = RenderRequestRegex.Match(context.Request.Path.Value).Groups[1].Value;
            logger.LogWarning($"Report {reportName} has been requested at {DateTime.Now:dd-MM-yyyy HH:mm:ss}");
            context.Request.EnableBuffering();
            using (var reader = new StreamReader(context.Request.Body, encoding: Encoding.UTF8,
            detectEncodingFromByteOrderMarks: false, bufferSize: 1024, leaveOpen: true)){
                var body = await reader.ReadToEndAsync();
                // extract parameters values from the body request
                var renderRequest = Newtonsoft.Json.JsonConvert.DeserializeObject<RenderRequest>(body);
                foreach (var kv in renderRequest.Parameters){
                    logger.LogWarning($"Parameter {kv.Key} has values {string.Join(",", kv.Value)}");
                }
                context.Request.Body.Position = 0;
            }
            await next.Invoke();
        });
    });
    app.UseReporting(settings =>{
        settings.UseEmbeddedTemplates(EmbeddedReportsPrefix, Assembly.GetAssembly(GetType()));
        settings.UseCompression = true;
    });
        ​
    app.UseMvc();
}


10. 응용 프로그램을 다시 실행하고 매개 변수 값을 지정한 후 보고서가 예상대로 렌더링되는지 확인합니다. 로거 출력에는 추가 정보가 포함됩니다. 다음은 해당 발췌 부분을 강조 표시한 것입니다.

middleware


11. 동일한 기법을 사용하여 특정 사용자 그룹에만 특정한 보고서에 대한 액세스를 허가하는 등의 인증을 보고서 렌더링 프로세스에 추가할 수 있습니다.

9단계의 코드와 같이 await next.Invoke(); 행이 호출되지 않는 경우에는 요청 처리가 중단되므로, await next.Invoke()가 조건부로 호출될 수 있습니다.

전체 샘플 코드는 여기에서 사용 가능합니다.




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

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

댓글목록

등록된 댓글이 없습니다.

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

태그1

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