You can create your own API Endpoints using BellaDati Extensions feature. This tutorial describes how to create an endpoint which exports public Report to PDF.

You can download complete Extension with an endpoint here and import it to BellaDati Extensions. Refer to Importing Extensions section in Extensions documentation.

Preconditions

Tutorial

Step 1. Create an Extension

  1. Go to Manage extensions page that is available in the Extensions section, under Administration menu.
  2. Click on Create extension 
  3. Create an Extension with type Create new page


Step 2. Create an API Endpoint in Extension

After creating the Extension you should be redirected to Extension detail.

  1. In the panel on the left click on API Endpoints
  2. Click on Add button
  3. Name the endpoint and click on Add

Step 3. Write code which will export Report to PDF and send it to client

After creating the Endpoint you should be redirected to Endpoint detail with code editor where you can write/paste your code.

In the Endpoint class are 2 methods, doGet() and doPost(). Each will be executed based on the endpoint call method (GET/POST).

We will call this endpoint as GET so we will write the code in the doGet() method. Refer to the code below:

package com.example;

import com.belladati.extension.BaseExtensionEndpoint;
import org.apache.tapestry5.StreamResponse;

public class MyEndpoint extends BaseExtensionEndpoint {
  
	@Override
	public StreamResponse doGet() {
      	
      try {
        // get parameter value from URL
      	def reportIdParameter = getParameter("reportId");
        int reportId = reportIdParameter.toInteger();
        // export Report to PDF
        File pdfFile = exportToPdf(reportId);
        InputStream is = new FileInputStream(pdfFile);
        
        /**
         * @param is data which are sent to client
         * @param mimeType MIME type of data
         * @param responseStatusCode response status
         */
        // createStreamResponse( InputStream is, String mimeType, int responseStatusCode)
        
       	// send Report exported as PDF to client  
        return createStreamResponse(is, "application/pdf", 200);
      } catch (Exception e) {
            return createStreamResponse(e);
      } 
	}
	@Override
	public StreamResponse doPost() {
		// TODO Auto-generated method stub. Please insert here your code for POST operation.
		return null;
	}
}

Step 4. Endpoint usage

Extension has to be activated before the endpoint can be used. We also have to activate Public access so public users will be able to use the endpoint.

Endpoint is now ready to use so we can try it. 

Clicking on Link above the code editor will open URL with our endpoint. We just have to append parameter "reportId" with ID of Report which should be exported (refer to implementation above).

Your URL should look like this:

https://service.belladati.com/extension/detail:endpoint/104/exportReportToPDF?reportId=12345

Example usage in HTML:

<!--Use relative URL in BellaDati Extension-->
<!--Clicking on the button will open the PDF in browser built-in PDF reader if supported-->
<a href="/extension/detail:endpoint/104/exportReportToPDF?reportId=12345">
	<div class="my-button">
	Export to PDF
	</div>
</a>
 
<!--Using download attribute-->
<!--Clicking on the button will save the file without opening it-->
<a 
	href="/extension/detail:endpoint/104/exportReportToPDF?reportId=12345"
	download
>
	<div class="my-button">
	Export to PDF
	</div>
</a>