다음을 통해 공유


Report로 캐스팅된 InfoObject에 바인딩

Note참고

이 페이지에서는 Crystal Reports for Visual Studio에서 사용할 수 없지만 업그레이드 버전에서는 사용할 수 있는 기능을 설명합니다. Crystal Reports for Visual Studio에 대한 자세한 내용은 "Crystal Reports for Visual Studio의 정의"를 참조하십시오. 업그레이드된 버전에 대한 자세한 내용은 "업그레이드 옵션"을 참조하십시오.

개체 모델

이 보고서 바인딩 시나리오에는 InfoObject가 사용됩니다("InfoObject 개체 모델(BOE)을 통한 보고서 바인딩" 참조).

보고서 위치

Crystal Reports 서버 또는 BusinessObjects Enterprise의 서버에 저장됩니다.

설명

InfoObject 개체 모델은 Crystal Reports 서버 또는 BusinessObjects Enterprise에서 제공됩니다. 시스템의 모든 Enterprise 항목(보고서, 사용자, 그룹, 서버, 서버 그룹, 폴더)은 프로그래밍 방식으로 상호 작용할 수 있는 정보 개체로 취급됩니다. 개체 모델의 모든 정보 개체는 동일한 이름의 상응하는 클래스로 표현됩니다. 이러한 클래스는 InfoObject에서 상속합니다.

이 개체 모델을 사용하여 보고서를 바인딩하려면 Crystal Reports 서버 또는 BusinessObjects Enterprise에서 InfoObject 인스턴스로 래핑된 보고서를 검색합니다. 이 InfoObject 인스턴스에 바인딩하려면 CrystalReportViewer 컨트롤의 ReportSource 속성을 InfoObject 인스턴스에 할당합니다.

장점

  • 특정 매개 변수를 통해 특정 시간에 실행하여 FTP, SMTP, 디스크 또는 프린터에 출력되도록 보고서의 일정을 처리하는 데 편리합니다.

단점

InfoObject 형식으로 래핑되고 Report로 캐스팅된 보고서에 바인딩하려면

  • Crystal Reports 서버 또는 BusinessObjects Enterprise가 설치되어 있고 제대로 작동해야 합니다.
  • Crystal Reports 서버 또는 BusinessObjects Enterprise SDK(.NET 어셈블리 포함)가 개발 컴퓨터에 설치되어 있어야 합니다.
    Note참고

    개발 컴퓨터에 Crystal Reports 서버 또는 BusinessObjects Enterprise를 설치한 경우에는 설치 항목에 SDK가 함께 포함되어 있습니다.

  • Crystal Reports 서버 또는 BusinessObjects Enterprise 서버의 이름을 찾아 기록해 둡니다. 이 예제의 경우 서버 이름은 "BOE01"입니다.
Note참고

이 절차는 "프로젝트 설정"을 통해 생성된 프로젝트에서만 사용할 수 있습니다. 프로젝트 설정에는 이 절차에 필요한 코드 구성 및 특정 네임스페이스 참조가 포함되어 있으므로 해당 구성이 없으면 절차를 완료할 수 없습니다. 따라서 이 절차를 시작하기 전에 먼저 "프로젝트 설정"의 단계를 수행해야 합니다.

  1. 게시 마법사를 사용하여 Chart.rpt를 Crystal Reports 서버 또는 BusinessObjects Enterprise 서버에 게시합니다.
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\e2c9s1d7.alert_note(ko-kr,VS.90).gif" alt="Note" class="note" />참고</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>게시 마법사를 사용하는 방법에 대한 자세한 내용은 Crystal Reports Server 또는 BusinessObjects Enterprise 사용 설명서를 참조하십시오.</p>
<p>샘플 보고서에 대한 자세한 내용은 <a href="ms225622(v=vs.90).md">&quot;샘플 보고서 디렉터리&quot;</a>를 참조하십시오.</p></td>
</tr>
</tbody>
</table>
  1. 프로젝트에 다음과 같은 어셈블리 참조를 추가합니다.

    • CrystalDecisions.Enterprise.Framework
    • CrystalDecisions.Enterprise.InfoStore
    • CrystalDecisions.Enterprise.Desktop.Report
  2. 코드 숨김 페이지의 위쪽에 CrystalDecisions.Enterprise 네임스페이스와 CrystalDecisions.Enterprise.Desktop 네임스페이스에 대한 "Imports" [Visual Basic] 또는 "using" [C#] 문을 추가합니다.

``` vb
Imports CrystalDecisions.Enterprise
Imports CrystalDecisions.Enterprise.Desktop
```

``` csharp
using CrystalDecisions.Enterprise;
using CrystalDecisions.Enterprise.Desktop;
```

이제 Crystal Reports 서버 또는 BusinessObjects Enterprise의 보고서가 포함된 InfoObject 인스턴스에 바인딩하는 코드를 추가할 준비가 되었습니다.
  1. "프로젝트 설정"에서 만든 ConfigureCrystalReports() 메서드 내에서 serverName 문자열을 선언하고 이 변수에 Crystal Reports 서버 또는 BusinessObjects Enterprise 서버의 이름을 설정합니다.

    Dim serverName As String = "BOE01"
    
    string serverName = "BOE01";
    
  2. SessionMgr 클래스를 선언하고 인스턴스화합니다.

    Dim mySessionMgr As SessionMgr = New SessionMgr()
    
    SessionMgr sessionMgr = new SessionMgr();
    
  3. 사용자 이름(Administrator), 암호(공백), serverName 변수 및 로그온 유형(secEnterprise)을 SessionMgr 인스턴스의 Logon 메서드에 전달하고 EnterpriseSession 인스턴스를 가져옵니다.

    Dim myEnterpriseSession As EnterpriseSession = mySessionMgr.Logon(
    _
    "Administrator", "", serverName, "secEnterprise")
    
    EnterpriseSession enterpriseSession = sessionMgr.Logon(
    "Administrator", "", serverName, "secEnterprise");
    
  4. EnterpriseSession의 GetService 메서드를 통해 InfoStore 서비스를 EnterpriseService로 가져옵니다.

    Dim myEnterpriseService As EnterpriseService = _
    myEnterpriseSession.GetService("InfoStore")
    
    EnterpriseService enterpriseService =
    enterpriseSession.GetService("InfoStore");
    
  5. 반환된 InfoStore 서비스를 사용하여 InfoStore를 선언하고 인스턴스화합니다.

    Dim myInfoStore As InfoStore = New InfoStore(myEnterpriseService)
    
    InfoStore infoStore = new InfoStore(enterpriseService);
    
  6. 아래 쿼리 문자열을 입력하여 Crystal Reports 서버 또는 BusinessObjects Enterprise에서 보고서를 쿼리합니다.

    Dim queryString As String = "Select SI_ID, SI_NAME, SI_PARENTID
    From CI_INFOOBJECTS " _
    & "Where SI_PROGID='CrystalEnterprise.Report' "
    _
    & "And SI_NAME Like 'Chart'"
    
    string queryString = "Select SI_ID, SI_NAME, SI_PARENTID From
    CI_INFOOBJECTS "
    + "Where SI_PROGID='CrystalEnterprise.Report' "
    + "And SI_NAME Like 'Chart'";
    
  7. InfoStore의 Query 메서드에 쿼리 문자열을 전달하여 쿼리 결과가 포함된 인덱싱된 InfoObjects 클래스를 가져옵니다.

    Dim myInfoObjects As InfoObjects = myInfoStore.Query(queryString)
    
    InfoObjects infoObjects = infoStore.Query(queryString);
    
  8. 인덱싱된 InfoObjects 클래스의 첫 번째 열에서 InfoObject를 가져옵니다.

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\e2c9s1d7.alert_note(ko-kr,VS.90).gif" alt="Note" class="note" />참고</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>인덱싱된 InfoObjects 클래스는 0이 아닌 1부터 시작합니다.</p></td>
</tr>
</tbody>
</table>

``` vb
Dim myInfoObject As InfoObject = myInfoObjects(1)
```

``` csharp
InfoObject infoObject = infoObjects[1];
```
  1. Report 인스턴스를 선언하고 InfoObject를 Report로 캐스팅합니다.

    Dim myReport As Report = CType(myInfoObject, Report)
    
    Report report = (Report)infoObject;
    
  2. CrystalReportViewer 컨트롤의 EnterpriseLogon 속성을 EnterpriseSession 인스턴스로 설정합니다.

    myCrystalReportViewer.EnterpriseLogon = myEnterpriseSession
    
    crystalReportViewer.EnterpriseLogon = enterpriseSession;
    
  3. Report 인스턴스를 CrystalReportViewer 컨트롤에 바인딩합니다.

    myCrystalReportViewer.ReportSource = myReport
    
    crystalReportViewer.ReportSource = report;
    

참고 항목