Crystal Reports for Eclipse Developer Guide

Sample code for a custom report page

This section contains the source code for a class that implements a custom report page. To use this class, create a plug-in project that uses the Crystal Reports Designer SDK, create a com.businessobjects.crystalreports.designer.sdk.ReportEditorPage extension point, and connect the extension point to this class.
Example: 
import java.util.Iterator;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label; 
import org.eclipse.swt.widgets.List;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IPropertyListener;
import org.eclipse.ui.part.EditorPart;

import com.businessobjects.crystalreports.designer.sdk.ICrystalDocumentChangedEvent;
import com.businessobjects.crystalreports.designer.sdk.ICrystalDocumentChangedListener;
import com.businessobjects.crystalreports.designer.sdk.ICrystalReportsEditor;
import com.businessobjects.crystalreports.designer.sdk.ICrystalReportsEditorPage;
import com.crystaldecisions.sdk.occa.report.application.AdvancedClientDocumentEvent;
import com.crystaldecisions.sdk.occa.report.application.DataDefController;
import com.crystaldecisions.sdk.occa.report.application.IAdvancedClientDocumentEventListener;
import com.crystaldecisions.sdk.occa.report.application.IReportClientDocument;
import com.crystaldecisions.sdk.occa.report.application.ParameterFieldController;
import com.crystaldecisions.sdk.occa.report.data.Fields;
import com.crystaldecisions.sdk.occa.report.data.IDataDefinition;
import com.crystaldecisions.sdk.occa.report.data.IField;
import com.crystaldecisions.sdk.occa.report.data.IParameterField;
import com.crystaldecisions.sdk.occa.report.lib.ReportSDKException;

public class MyReportPage extends EditorPart implements ICrystalReportsEditorPage,
    ICrystalDocumentChangedListener, IAdvancedClientDocumentEventListener
{
  ICrystalReportsEditor myEditor;
  private List paramList;
  private Label paramLabel;
  private Button paramButton;
  private ListViewer listViewer;
 
  public void init(IEditorSite site, IEditorInput input)
  {
    setSite(site);
    setInput(input);
  }

  public void createPartControl(Composite parent) 
  {
    Composite composite = new Composite(parent, SWT.NULL);
    GridLayout layout = new GridLayout();
    layout.numColumns = 4;
    composite.setLayout(layout);

    paramLabel = new Label(composite, SWT.CENTER);
    paramLabel.setText("Parameter Fields");
    
    paramList = new List(composite, SWT.V_SCROLL | SWT.MULTI | 
        SWT.BORDER | SWT.H_SCROLL);

    listViewer = new ListViewer(paramList);
    listViewer.setContentProvider(new ArrayContentProvider());
    listViewer.setLabelProvider(new LabelProvider()
    {
      public String getText(Object element)
      {
        IField field = (IField) element;
        return field.getFormulaForm();
      }
    });
    listViewer.addSelectionChangedListener(new ISelectionChangedListener ()
    { 
      public void selectionChanged(SelectionChangedEvent event)
      {
        ListViewer listViewer = (ListViewer)event.getSource();
        StructuredSelection selection = (StructuredSelection)listViewer.getSelection();
        if (!selection.isEmpty())
          paramButton.setEnabled(true);
      }
     });

    paramButton = new Button (composite, SWT.PUSH | SWT.CENTER);
    paramButton.setText("Delete Parameter Field");
    paramButton.addSelectionListener (new SelectionAdapter()
    {
      public void widgetSelected (SelectionEvent e)
      {
        DataDefController controller = null;
        try
        {
          controller = myEditor.getReportClientDocument().getDataDefController();
          ParameterFieldController parameterFieldController = controller.getParameterFieldController();
          StructuredSelection selection = (StructuredSelection) listViewer.getSelection ();
          Iterator itr = selection.iterator();
          while(itr.hasNext())
            parameterFieldController.remove((IParameterField)itr.next());
        }
        catch (ReportSDKException e1)
        {
          e1.printStackTrace();
        }
        finally
        {
          ((Button) e.getSource()).setEnabled(false);
        }
      }
    });
  }

  public boolean attachOnStart()
  {
    return false;
  }

  public void attachToEditor(ICrystalReportsEditor editor)
  {
    myEditor = editor;
    setInput(myEditor.getEditorInput());
  
    myEditor.addDocumentChangedListener(this);
    documentChangedHelper(null, myEditor.getReportClientDocument(), true);
   
    myEditor.addPropertyListener (new IPropertyListener ()
    {
      public void propertyChanged(Object source, int propID)
      {
         if (propID == IEditorPart.PROP_INPUT)
             setInput (myEditor.getEditorInput());
      }
    });
  }

  public void documentChanged(ICrystalDocumentChangedEvent evt)  
  {
    IReportClientDocument oldDoc = evt.getOldDocument();
    IReportClientDocument newDoc = evt.getNewDocument();
    boolean mainChanged = evt.isMainReportChanged();
    documentChangedHelper(oldDoc, newDoc, mainChanged);
  }
  
  public void documentChangedHelper(IReportClientDocument oldReport, IReportClientDocument newReport, boolean mainChanged)
  {
    if (mainChanged)
    {
      if (oldReport != null)
        oldReport.getMainReport().removeAdvancedClientDocumentEventListener(this);
      if (newReport != null)
        newReport.getMainReport().addAdvancedClientDocumentEventListener(this);
    
      if (newReport == null)
        return;

      IDataDefinition definition = null;
      try 
      {
        definition = newReport.getDataDefController().getDataDefinition();
      } 
      catch(ReportSDKException e)
      {
        e.printStackTrace();
      }

      if (definition != null)
      {
        Fields parameters;
        parameters = definition.getParameterFields();
        listViewer.setInput(parameters);
      }
      else
      {
        listViewer.setInput(null);
      }
    }
  }    

  public void onAdded(AdvancedClientDocumentEvent event)
  {
     listViewer.refresh();
  }

  public void onChanged(AdvancedClientDocumentEvent event)
  {
    listViewer.refresh();
  }

  public void onRemoved(AdvancedClientDocumentEvent event)
  {
    listViewer.refresh();
  }

  public void doSave(IProgressMonitor monitor){}
  public void doSaveAs(){}
  public boolean isDirty(){return false;}
  public boolean isSaveAsAllowed(){return false;}
  public void setFocus(){}
}



SAP BusinessObjects
http://www.sap.com/sapbusinessobjects/
Support services
http://service.sap.com/bosap-support/
Product Documentation on the Web
http://help.sap.com/