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

ASP.NET 보고 응용 프로그램에서 사용자 정의 오류를 해결하는 방법 > 온라인 스터디

본문 바로가기

ActiveReports.NET

온라인 스터디

시작하기 ASP.NET 보고 응용 프로그램에서 사용자 정의 오류를 해결하는 방법

페이지 정보

작성자 GrapeCity 작성일 2022-06-15 16:34 조회 401회 댓글 0건

본문

웹 사이트의 품질은 웹 사이트가 얼마나 잘 작동하는지 외에도 실패 방식이 얼마나 적절한지에 따라 판단할 수 있습니다. ActiveReports와 관련하여 오류(스택 추적)가 발생하면 웹 뷰어의 알림 상자 스타일 상자에 오류를 표시하고 개발자에게 오류를 처리할 수 있는 방법을 남기거나 오류를 로깅합니다. "오류"를 다르게 처리해야 한다는 점을 지적하는 것이 중요합니다. 사용자에게 오류가 있음을 알려야 하지만 스택 덤프를 통해 알리고 싶지는 않을 것입니다. 이는 개발자의 입장에서도 마찬가지인데, 개발자는 오류가 발생했다는 그 자체보다는 오류의 원인에 더 관심이 많습니다.

다행스럽게도, ActiveReports에서 애플리케이션 오류를 처리하는 방법을 완벽하게 사용자 정의할 수 있습니다. ActiveReports가 통합된 큰 웹 사이트가 있는 시나리오를 생각해 보겠습니다. 데이터를 가져오기 위해 ActiveReports는 서버에 연결합니다.

개발자는 스스로 통제할 수 없는 많은 이유로 인해 데이터베이스에 대한 연결이 항상 유효할 것이라고 약속할 수 없습니다. 웹 사이트와 데이터베이스 서버와의 연결이 끊어진 경우에는 사용자에게 스택 덤프 또는 서버 오류를 제공하여 사용자가 불편을 겪지 않도록 하고자 합니다. 문제 해결에 관한 도움을 얻을 수 있는 여러 가지 방법도 제공하고 싶습니다. 또한 사용자가 DB 연결에 문제가 있음을 눈치채기를 원치 않고 그저 문제가 있으며 고객 지원팀에 연락하여 문제를 보고하여 해결할 수 있다고 알려주고 싶습니다.

이 샘플에서는 이러한 문제를 처리할 수 있는 방식을 보여 주고 웹 환경에서 ActiveReports와 관련된 오류를 처리하는 방법을 보여 드립니다. ActiveReports와 관련된 문제가 있는 경우 사용자는 사용자 정의 오류 페이지로 리디렉션됩니다. IT 담당자 정보를 표시하고 사용자 모르게 지원팀 또는 IT 팀에 오류를 이메일로 보낼 수 있습니다. 먼저, 웹 사이트에 오류를 사용자 정의 방식으로 처리하려고 한다고 알려야 합니다. 이는 web.config 파일을 적절하게 설정하여 수행할 수 있습니다. Web.config의 System.Web 태그에서는 다음 항목을 추가해야 합니다.

<customErrors mode="On" defaultRedirect="~/Oops.aspx" redirectMode="ResponseRewrite">  
</customErrors>  


또한 다음 설정이 필요할 수 있습니다.

 <appSettings>
   <add key="owin:AutomaticAppStartup" value="false" />
   <add key="owin:appStartup" value="MyNameSpace.Global" />
 </appSettings>


이 섹션에서는 요청 실행 중 처리할 수 없는 오류 발생 시 해야 할 일을 구성할 수 있습니다. 특히, 개발자가 오류 스택 추적 대신 HTML 오류 페이지가 표시되도록 구성할 수 있습니다. 오류를 알아서 처리하고 싶다고 웹 사이트에 알렸기 때문에 웹 사이트에 CustomErrors라는 폴더를 만들고 Oops.aspx라는 WebForm을 만들어야 합니다.

이 시나리오에서 Oops.aspx 페이지에는 기술 지원 정보가 표시됩니다. WebForm에는 "Hello from Opps Page" 등과 같은 일반 텍스트를 추가할 수 있습니다. CustomError 처리를 활성화했고 고객 오류 페이지에 대한 링크를 설정했으므로 이제 ActiveReports 보고서에 대한 뷰어가 있는 Default.aspx 페이지로 다시 돌아가 보겠습니다.

WebViewer 미들웨어를 설정하려면 다음 코드를 사용하여 Global.asax.cs를 업데이트해야 합니다.

protected void Application_Start(object sender, EventArgs e)
      {
​
           this.UseReporting(settings =>
          {
               settings.UseCompression = true;
          });
      }


Default.aspx 페이지(Default.aspx.cs)에 대한 VB 또는 CS 코드 숨김으로 이동해 보겠습니다. 기본 보고서 보기 웹 페이지에서 다음과 같이 표시됩니다.

protected void Page_Load(object sender, EventArgs e){
       var rpt = new MyReport();
       arWebViewer.Report = rpt;
}  


이 경우에는 보고서에서 새 객체를 만들고, 보고서를 실행하고, 뷰어에 바인딩합니다. 이로 인해 발생하는 모든 오류를 처리하기 위해 해당 코드 주위에 Try, Catch 문 몇 개를 추가해야 합니다. 아래 코드를 참조하십시오.

protected void Page_Load(object sender, EventArgs e){
    if (!IsPostBack){
        var rpt = new MyReport();
        //test
        //rpt.ReportStart += Rpt_ReportStart;
        try{
            rpt.Run();
            arWebViewer.Report = rpt;
        } catch (GrapeCity.ActiveReports.ReportException ex){
            throw new GrapeCity.ActiveReports.ReportException(ex.Message);
        }                
    }
}

private void Rpt_ReportStart(object sender, EventArgs e){
    throw new GrapeCity.ActiveReports.ReportException();
}


JSViewer의 경우 사용자 정의 저장소를 사용해야 할 수 있으며 코드의 모양을 다음과 같을 수 있습니다.

protected void Application_Start(object sender, EventArgs e){
    this.UseReporting(settings =>{
        settings.UseCompression = true;
        settings.UseCustomStore(GetReport);
    });
         
}

protected object GetReport(string name){
    var rpt = new MyReport();
    try{
        rpt.Run();
    }
    catch (GrapeCity.ActiveReports.ReportException ex){
        throw new GrapeCity.ActiveReports.ReportException(ex.Message);
    }
    return rpt;
}


이러한 방식으로, ActiveReports에서 발생하는 모든 오류는 ex에 예외로 catch되고 서버에 로깅됩니다. 오류가 감지되면 웹 사이트는 web.config를 살펴보고 사용자를 customError 처리기 리디렉션으로 리디렉션합니다. 오류로부터 사용자의 관심을 돌리기 위한 것이 목적이라면 여기까지만 하면 됩니다. 오류를 catch하고 새 페이지에 오류를 표시하거나, 디스크의 파일에 오류를 쓰거나, 오류 보고서를 이메일로 보내려면 Oops.aspx.cs 파일(Oops.aspx 페이지의 숨김 코드)에 코드를 추가해야 합니다.

protected void Page_Load(object sender, EventArgs e){  
    string js = "" + (String)GetValue()+";";  
    ClientScript.RegisterStartupScript(Page.GetType(), "UniqueKeyForThisScript", js, false);  
}  
  
private string GetValue(){  
    Exception ex = Server.GetLastError();  
    if ( ex != null ){  
        if( ex.GetBaseException() != null){  
            ex = ex.GetBaseException();  
        }  
    }  
    return ex.ToString();  
}  


따라서 기본적으로 여기서 할 일은 서버에서 LastError를 가져와 null이 아닌지 확인하는 것입니다. 문자열을 Page_Load로 반환합니다. 여기서 개발자로서 오류와 관련하여 할 일을 사용자 정의할 수 있습니다. 위 코드에서는 디버깅을 위해 페이지에 문자열을 삽입했습니다. 해당 코드는 File.IO 쓰기 또는 이메일 보내기 기능으로 바꿀 수 있습니다.

샘플을 다운로드하여 확인해 보세요.




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

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

댓글목록

등록된 댓글이 없습니다.

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

카테고리

태그1

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