Crystal Reports for Eclipse Developer Guide

To implement a custom report designer page UI (example)

Before you can complete the steps in this example, you must have a plug-in project includes the com.businessobjects.crystalreports.designer.sdk library, defines the com.businessobjects.crystalreports.designer.sdk.ReportEditorPage extension point, and contains a class that extends the org.eclipse.ui.part.EditorPart class.
This example shows how to create UI components for a custom page. This UI contains a list of the parameter fields in the report. Users can select the parameters and delete them from the report.
  1. Add the import statements that are used in this example.
    import java.util.Iterator;
    
    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.Label; 
    import org.eclipse.swt.widgets.List;
    
    import com.crystaldecisions.sdk.occa.report.application.DataDefController;
    import com.crystaldecisions.sdk.occa.report.application.ParameterFieldController;
    import com.crystaldecisions.sdk.occa.report.data.IField;
    import com.crystaldecisions.sdk.occa.report.data.IParameterField;
    import com.crystaldecisions.sdk.occa.report.lib.ReportSDKException;
  2. Add a list, button, label and list viewer members to the class.
    public class MyReportPage extends EditorPart 
    {
      private List paramList;
      private Label paramLabel;
      private Button paramButton;
      private ListViewer listViewer;
      private ICrystalReportsEditor myEditor;
    
      ...
    }
  3. Create the user interface components in the createPartControl method.
    Initialize the layout.
    public void createPartControl(Composite parent) 
    {
      Composite composite = new Composite(parent, SWT.NULL);
      GridLayout layout = new GridLayout();
      layout.numColumns = 4;
      composite.setLayout(layout);
    Create a label.
      paramLabel = new Label(composite, SWT.CENTER);
      paramLabel.setText("Parameter Fields");
    Create a list.
      paramList = new List(composite, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
    Create a list viewer and initialize it by adding a content provider and a label provider. The label provider uses the getFormulaForm method to get the description of the parameter fields.
      listViewer = new ListViewer(paramList);
      listViewer.setContentProvider(new ArrayContentProvider());
      listViewer.setLabelProvider(new LabelProvider()
      {
        public String getText(Object element)
        {
          IField field = (IField) element;
          return field.getFormulaForm();
        }
      });
    Add a listener that enables the button when a list item is selected.
      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);
        }
      });
    Create the button object and add a listener to handle button clicks.
    Note: The widgetSelected method deletes the selected parameter fields when the button is pressed.
      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);
          }
        }
      });
    }
Example: Implementing a UI
import java.util.Iterator;

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.Label; 
import org.eclipse.swt.widgets.List;

import com.crystaldecisions.sdk.occa.report.application.DataDefController;
import com.crystaldecisions.sdk.occa.report.application.ParameterFieldController;
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 
{
  private List paramList;
  private Label paramLabel;
  private Button paramButton;
  private ListViewer listViewer;
  private ICrystalReportsEditor myEditor;

  ...

  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();
      }
    });
  
    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);
        }
      }
    });
  }
}



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