Você está na página 1de 7

12-01-2009

Crystal Smart Viewer


Ligação de uma aplicação MCF a um relatório do Crystal Reports

Prof. Nuno Ramalho


Prof. Nuno Ramalho

Crystal Smart Viewer


Ligação de uma aplicação MCF a um relatório do Crystal Reports

A utilização do Crystal Smart Viewer como interface de visualização de relatórios produzidos no Crystal
Reports possibilita o desenvolvimento de aplicações complexas de cliente/servidor ou multi-camada para o
acesso, preparação e visualização de dados existentes localmente ou através de uma infra-estrutura de rede.

Integração do Smart Viewer ActiveX control numa aplicação MFC


Neste capítulo é demonstrada a criação de uma aplicação MFC com o Microsoft Visual C++ 2008. A
máquina utilizada tem como Sistema Operativo o Microsoft Windows XP SP3 e uma instalação do Crystal
Reports XI Release 2.

A criação de uma aplicação MFC para a apresentação de um relatório do Crystal Reports pode ser feita da
seguinte forma:

1. Criação de um projecto MFC Aplication baseado em caixas de diálogo (Dialog Based).


2. Inserção de um controlo ActiveX para o Crystal Reports (Crystal ActiveX Report Viewer
Control)
3. Integração das classes CrystalReportViewer11 e CRVTrackCursorInfo através das livrarias do
Crystal Report Designer Component Automation Server, também conecido como RDC –
Report Designer Component (Automation server component - Craxdrt.dll e Crystal Report Viewer
control - Crviewer.dll.)
4. Programação da aplicação MFC.

Criação do projecto MFC Aplication, Dialog Based


Começamos por criar um novo projecto: File -> New Project e seleccionamos MFC Aplication.

1
Prof. Nuno Ramalho

Configuramos o nosso projecto como Dialog Based.

Inserção do Crystal ActiveX Report Viewer Control


Para a inserir o controlo ActieX Report Viewer do Crystal Reports podemos clicar com o botão direito do rato
na nossa caixa de dialogo e e escolher a opção

2
Prof. Nuno Ramalho

Escolhemos o Crystal ActiveX Report Viewer Control 11.5

Integração das classes CrystalReportViewer11 e CRVTrackCursorInfo


através das livrarias do RDC
Para adicionar as classes necessárias podemos clicar com o botão direito do rato no nosso projecto e escolher a
opção Add class

3
Prof. Nuno Ramalho

Adicionamos uma MFC Class From ActiveX Control

Vamos adicionar as classes CrystalReportViewer11 e CRVTrackCursorInfo através da livraria


CRViewer.dll (C:\Programas\Business Objects\Common\3.5\crystalreportviewers115\ActiveXControls\ CRViewer.dll)

4
Prof. Nuno Ramalho

Adicionamos a livraria craxdrt.dll. Podemos fazê-lo no ficheiro header stdax.h. Esta livraria expõe a
interface IApplication. A palavra reservada #import adiciona “Prt” ao final do nome de cada interface para
indicar que transformou as interfaces em smart pointers. Os smart pointers facilitam-nos, na medida em que
fazem a gestão do ciclo de vida dos objectos.

Programação da aplicação MFC.


Neste exemplo vamos criar na nossa aplicação um botão para accionar a visualização do relatório. O botão
criado tem o identificador IDC_BUTTON_MOSTRA e a função associada ao clique
OnBnClickedButtonMostra()

No ficheiro header da nossa aplicação (MFCMostraRelatorioCRDlg.h) incluímos a classe


CCrystalReportViewer11 e criamos o objecto m_Viewer que representa uma instância do Smart Viewer
control do Crystal Reports.

Utilizamos a interface IApplicationPtr para declarar um objecto da aplicação (m_Application). Criamos


ainda os objectos m_Report do tipo IReportPtr.

// MFCMostraRelatorioCRDlg.h : header file


//
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////

#include "CCrystalReportViewer11.h"

//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
#pragma once

// CMFCMostraRelatorioCRDlg dialog
class CMFCMostraRelatorioCRDlg : public CDialog
{
// Construction
public:
CMFCMostraRelatorioCRDlg(CWnd* pParent = NULL); // standard constructor

5
Prof. Nuno Ramalho

// Dialog Data
enum { IDD = IDD_MFCMOSTRARELATORIOCR_DIALOG };
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////

CCrystalReportViewer11 m_Viewer;

//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

// Implementation
protected:
HICON m_hIcon;

//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////

IApplicationPtr m_Application;
IReportPtr m_Report;
VARIANT dummy;

//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////

// Generated message map functions


virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButtonMostra();
};

No ficheiro *Dlg.cpp passamos os dados provenientes de m_Viewer para o nosso controlo de ActiveX
IDC_ACTIVEXREPORTVIEWER1

...
...
...

void CMFCMostraRelatorioCRDlg::DoDataExchange(CDataExchange* pDX)


{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_ACTIVEXREPORTVIEWER1, m_Viewer);
}
...
...
...

Na função associada ao nosso botão criamos o seguinte código

void CMFCMostraRelatorioCRDlg::OnBnClickedButtonVer()
{
m_Application.CreateInstance("CrystalRuntime.Application");
m_Report = m_Application->OpenReport("C:\\MovimentosFornecedor1.rpt");
m_Viewer.put_ReportSource(m_Report);
m_Viewer.ViewReport();
}

6