How to generate multiple birt report under a only function

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Ha Nguyen
    New Member
    • Aug 2009
    • 21

    How to generate multiple birt report under a only function

    I have a following problem: I have a birt report that is used to print detail according to input parameters(of 1 company). Normally, it runs ok.
    Now i use a FOR loop (List of company) under that function to generate a list of reports using input parameters(of in turn company). Reports are separated according to compayId.
    But when run that function there is only first report of the list that is generated.
    What is error?.
  • anurag275125
    New Member
    • Aug 2009
    • 79

    #2
    give the code for your problem??

    Comment

    • ThatThatGuy
      Recognized Expert Contributor
      • Jul 2009
      • 453

      #3
      what are you using show some code

      Comment

      • Ha Nguyen
        New Member
        • Aug 2009
        • 21

        #4
        Hi all,
        This is my codes:

        package web.group.payme ntAdviceB;

        import java.sql.Connec tion;
        import java.sql.SQLExc eption;
        import java.util.HashM ap;
        import java.util.Map;

        import birtEngine.Birt Engine;
        import birtEngine.DbPa rams;

        import com.enablecompu ting.data.DbUti ls;
        import com.enablecompu ting.data.VODbU tils;
        import com.enablecompu ting.web.action .*;
        import com.enablecompu ting.web.action .access.LoginCo ntext;
        import com.enablecompu ting.web.core.* ;

        import javax.servlet.* ;
        import javax.servlet.h ttp.*;

        import org.eclipse.bir t.report.engine .api.EngineCons tants;
        import org.eclipse.bir t.report.engine .api.HTMLRender Context;
        import org.eclipse.bir t.report.engine .api.HTMLRender Option;
        import org.eclipse.bir t.report.engine .api.IReportEng ine;
        import org.eclipse.bir t.report.engine .api.IReportRun nable;
        import org.eclipse.bir t.report.engine .api.IRunAndRen derTask;

        import paymentAdviceB. PaymentAdviceBS SB;
        import paymentAdviceB. PaymentAdviceBV O;

        public class PrintPaymentAdv iceBR1AllAction extends Action
        {
        public void perform(HttpSer vletRequest request,
        HttpServletResp onse response, ServletConfig servletConfig,
        DataContext dataContext) throws ActionException
        {
        IReportEngine birtReportEngin e = null;
        Connection conn=null;
        try
        {
        conn=DbUtils.ge tConnection();
        HttpSession session = request.getSess ion(true);
        LoginContext loginContext = LoginContext.ge tLoginContext(s ession);
        String groupId = (String) loginContext.ge t("groupId");

        String[] keyFieldNames=n ull;
        String[] keyTypes=null;
        Object[] keyFieldValues= null;
        String key = request.getPara meter("key");
        String keyType = request.getPara meter("keyType" );
        String keyValue = request.getPara meter("keyValue ");
        if (keyValue != null && keyValue.length () > 0 && key != null
        && key.length() > 0 && keyType != null && keyType.length( ) > 0)
        {
        keyFieldNames = new String[] {key, "groupId"};
        keyTypes = new String[] {keyType, VODbUtils.KEY_T YPE_EQUALS};
        keyFieldValues = new Object[] {keyValue, groupId};
        }
        else
        {
        keyFieldNames = new String[] {"groupId"};
        keyTypes = new String[] {VODbUtils.KEY_ TYPE_EQUALS};
        keyFieldValues = new Object[] {groupId};
        }

        PaymentAdviceBV O[] paymentAdviceBV Os = PaymentAdviceBS SB.getInstance( )
        .find(keyFieldN ames, keyTypes, keyFieldValues,
        new String[] {"pANo"}, new String[] {"ASC"}, 0,
        -1);
        if(paymentAdvic eBVOs!=null)
        {
        ServletContext sc = request.getSess ion().getServle tContext();
        birtReportEngin e = BirtEngine.getB irtEngine(sc);
        IRunAndRenderTa sk task=null;
        for(int i=0; i<paymentAdvice BVOs.length;i++ )
        {
        response.setCon tentType("appli cation/pdf");
        response.setHea der("Content-Disposition",
        "inline; filename=paymen tAdviceBDetail" +i+".pdf");

        // headers added to overcome ie ssl on pdf problem.
        response.setHea der("Cache-Control", "");
        response.setHea der("Pragma", "");


        Map params = new HashMap();

        params.put("gro upId", groupId);
        params.put("paI d", paymentAdviceBV Os[i].id);



        // setup image directory
        HTMLRenderConte xt renderContext = new HTMLRenderConte xt();

        HashMap contextMap = new HashMap();
        contextMap.put( EngineConstants .APPCONTEXT_HTM L_RENDER_CONTEX T,
        renderContext);

        IReportRunnable design;

        // Open report design
        String reportName = "group/paymentAdviceB/paymentAdviceBD etail.rptdesign ";
        design = birtReportEngin e.openReportDes ign(sc
        .getRealPath("/WEB-INF/birt")
        + "/" + reportName);
        // create task to run and render report
        task = birtReportEngin e
        .createRunAndRe nderTask(design );
        task.setAppCont ext(contextMap) ;

        task.setParamet erValues(params );
        task.setParamet erValue("dbDriv erClass", DbParams.DB_DRI VER_CLASS);
        task.setParamet erValue("dbDriv erUrl", DbParams.DB_DRI VER_URL);
        task.setParamet erValue("dbUser ", DbParams.DB_USE R);
        task.setParamet erValue("dbPass word", DbParams.DB_PAS SWORD);

        // set output options
        HTMLRenderOptio n options = new HTMLRenderOptio n();
        options.setOutp utFormat(HTMLRe nderOption.OUTP UT_FORMAT_PDF);
        options.setOutp utStream(respon se.getOutputStr eam());
        task.setRenderO ption(options);

        // run report
        task.run();

        }
        task.close();
        }

        }
        catch (Exception e)
        {
        e.printStackTra ce();
        // throw new ServletExceptio n( e );
        }
        finally
        {
        try
        {
        if(conn!=null)
        conn.close();
        }catch(SQLExcep tion e)
        {}

        }
        }
        }


        Please help me,
        Thanks in advance,
        Ha

        Comment

        • jkmyoung
          Recognized Expert Top Contributor
          • Mar 2006
          • 2057

          #5
          Please use [ code ] tags when posting. Plus, please comment your code better. It is really hard to see what is going on.
          Eg:
          Where are you getting the data?
          How are you selecting the company names?

          Comment

          • Ha Nguyen
            New Member
            • Aug 2009
            • 21

            #6
            Sorry all, because i am a newbie, so how i dont know to use [code]tags.
            My question is that if can i use a FOR loop to export a type of report for a list (eg: companies).
            this is my code for that:
            //find company list according to a few conditions
            PaymentAdviceBV O[] paymentAdviceBV Os = PaymentAdviceBS SB.getInstance( )
            .find(keyFieldN ames, keyTypes, keyFieldValues,
            new String[] {"pANo"}, new String[] {"ASC"}, 0,
            -1);
            // if companies exist
            if(paymentAdvic eBVOs!=null)
            {
            ServletContext sc = request.getSess ion().getServle tContext();
            birtReportEngin e = BirtEngine.getB irtEngine(sc);
            IRunAndRenderTa sk task=null;

            // Use the FOR loop to export in turn companies's report
            for(int i=0; i<paymentAdvice BVOs.length;i++ )
            {
            response.setCon tentType("appli cation/pdf");
            response.setHea der("Content-Disposition",
            "inline; filename=paymen tAdviceBDetail" +i+".pdf");

            // headers added to overcome ie ssl on pdf problem.
            response.setHea der("Cache-Control", "");
            response.setHea der("Pragma", "");

            Map params = new HashMap();
            params.put("gro upId", groupId);
            params.put("paI d", paymentAdviceBV Os[i].id); // company id

            // setup image directory
            HTMLRenderConte xt renderContext = new HTMLRenderConte xt();

            HashMap contextMap = new HashMap();
            contextMap.put( EngineConstants .APPCONTEXT_HTM L_REN DER_CONTEXT,
            renderContext);

            IReportRunnable design;

            // Open report design - only use 1 type of report for all companies
            String reportName = "group/paymentAdviceB/paymentAdviceBD etail.rptdesign ";
            design = birtReportEngin e.openReportDes ign(sc
            .getRealPath("/WEB-INF/birt")
            + "/" + reportName);
            // create task to run and render report
            task = birtReportEngin e
            .createRunAndRe nderTask(design );
            task.setAppCont ext(contextMap) ;

            task.setParamet erValues(params );
            task.setParamet erValue("dbDriv erClass", DbParams.DB_DRI VER_CLASS);
            task.setParamet erValue("dbDriv erUrl", DbParams.DB_DRI VER_URL);
            task.setParamet erValue("dbUser ", DbParams.DB_USE R);
            task.setParamet erValue("dbPass word", DbParams.DB_PAS SWORD);

            // set output options
            HTMLRenderOptio n options = new HTMLRenderOptio n();
            options.setOutp utFormat(HTMLRe nderOption.OUTP UT_FO RMAT_PDF);
            options.setOutp utStream(respon se.getOutputStr eam() );
            task.setRenderO ption(options);

            // run report
            task.run();

            }
            task.close();
            }


            If did i explain clearly?

            Please help me
            Ha

            Comment

            • Ha Nguyen
              New Member
              • Aug 2009
              • 21

              #7
              Hi all,
              I have just resolved my problem. We can use a LOOP to run a list of report. But only export them to disk, not display all of them when running report (only display 1 of them).
              Thanks for attension.
              Ha

              Comment

              Working...