[ 
https://issues.apache.org/jira/browse/OFBIZ-1348?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

jack_guo updated OFBIZ-1348:
----------------------------

    Attachment: birt.zip

Hi All,

I need some report function for a project, so I try to integrate ofbiz with
the birt, here is some ideas and want to share with you, and if there is any
problems, please let me know.

1. BIRT is the open source project and the license is the Eclipse Public
License that is compatible with Apache;
2. It's a report designer based on Eclipse, and a runtime component that you
can add to your app server. BIRT also offers a charting engine that lets you
add charts to your own application, that's what I need.
3. I want to Ofbiz deal the *.rptdesign as convenient as the jsp;
4.. I want to use the birt servlet to display the rptdesign file as it have
provider full display function, and I can update this code with the birt
easily.

So I create the rpt view handler, this handler doesn't really display the
rpt file but get the display info from the control.xml and pass the
parameters to the birt servlet, and I take the "info" parameter in view-map
as the permission, here is the example:
<handler name="birt" type="view" class="
org.ofbiz.webapp.view.BirtViewHandler" />

<request-map uri="birt">
        <security https="false" auth="false"/>
        <response name="success" type="view" value="testbirt"/>
    </request-map>

<view-map name="testbirt" type="birt" page="/new_report.rptdesign"
info="FACILITY_ADMIN"/>

here is the render code:
 ///////////////////BirtViewHandler //////////////////////////////////////

public class BirtViewHandler implements ViewHandler {

    public static final String module = BirtViewHandler.class.getName();

    protected ServletContext context;

    public void init(ServletContext context) throws ViewHandlerException {
        this.context = context;
     //   context..
    }

    public void render(String name, String page, String info, String
contentType, String encoding, HttpServletRequest request,
HttpServletResponse response) throws ViewHandlerException {
        // some containers call filters on EVERY request, even forwarded
ones,
        // so let it know that it came from the control servlet
       if (request == null) {
              throw new ViewHandlerException("Null HttpServletRequest
object");
          }
          if (page == null || page.length() == 0) {
              throw new ViewHandlerException("Null or empty source");
          }
        String baseURL = request.getScheme( ) + "://"
  + request.getServerName( ) + ":"
  + request.getServerPort( );
        String path=context.getRealPath(page);
        BirtViewHelper.PATH = path;
        BirtViewHelper.PERMISSION = info;
       try{
      response.sendRedirect
(baseURL+"/birt/control/frameset?"+LoginWorker.EXTERNAL_LOGIN_KEY_ATTR+"="+request.getSession().getAttribute(
LoginWorker.EXTERNAL_LOGIN_KEY_ATTR));

     }catch( Exception e){}

    }
}

 ///////////////////END BirtViewHandler
//////////////////////////////////////

 ///////////////////BirtViewHelper//////////////////////////////////////

package org.ofbiz.webapp.view;

public class BirtViewHelper{
 public static String PATH = new String();
 public static String PERMISSION = new String();
}

///////////////////END BirtViewHelper//////////////////////////////////////

here is the permission check in birt servlet :



///////////////////AuthenticateHelper //////////////////////////////////////

package org.eclipse.birt.report.servlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletContext;

import org.ofbiz.security.Security;
import org.ofbiz.entity.GenericValue;
import org.ofbiz.webapp.control.LoginWorker;
import org.ofbiz.webapp.view.BirtViewHelper;

public class AuthenticateHelper {
 public static boolean hasPemission(HttpServletRequest request,
   HttpServletResponse response, ServletContext context)
 {
  LoginWorker.checkExternalLoginKey(request, response) ;
  GenericValue userLogin =
(GenericValue)request.getSession().getAttribute("userLogin");
  Security security = (Security)request.getAttribute("security");
  if (security == null) {
            security = (Security) context.getAttribute("security");
        }

  return security.hasPermission(BirtViewHelper.PERMISSION, userLogin);
 }
}

///////////////////END AuthenticateHelper
//////////////////////////////////////



you can download the BIRT code , place
those code in the framework folder add add this module to the
ofbiz-component.xml, and add the BirtViewHandler.java ,BirtViewHelper.java in
the ofbiz\framework\webapp\src\org\ofbiz\webapp\view.

Birt has a bug when export as word document,  it will be fixed later.


> add the BIRT as the ofbiz component
> -----------------------------------
>
>                 Key: OFBIZ-1348
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-1348
>             Project: OFBiz
>          Issue Type: Improvement
>          Components: framework
>    Affects Versions: SVN trunk
>            Reporter: jack_guo
>             Fix For: SVN trunk
>
>         Attachments: birt.zip
>
>
> put the BIRT run environment to the ofbiz, make the BIRT as the ofbiz 
> component, and let the user can develop the BI more easily and efficiently

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to