让数据成为企业发展的驱动力!

软件项目如何集成报表工具


软件公司开发项目时,报表功能已成为必不可少的一部分。客户的报表需求千变万化,研发出来的东西客户不满意,二次开发或推翻重写现象屡见不鲜。报表部分功能复杂,再加上复杂的业务逻辑,稍微一点变动的需求,都需要花费更多的时间来调整完善,开发成本高,人员变动时很难维护。无法快速的调整报表功能,使整个研发周期变长,严重时会导致项目交付延后。选择可动态调整,快速形成需求报表的报表工具能最快解决项目报表功能。

盈帆报表工具可快速的制作、生成报表,并可以整体打包,作为整体项目的一个模块项目内部中使用代码调用进行模块化的项目集,也可以作为单独的报表系统服务来进行项目集成。

盈帆报表工具作为单独的报表系统服务时,分为设计与展现两部分,设计部分是单独的在线设计器,根据实际需求是否进行设计器的集成。设计器主要负责报表的设计,设计好的模板再通过后台分配进行展示。集成展现部分主要是获取展示的报表内容,再进行集成显示。

盈帆报表作为单独系统服务时,提供以下几种方法进行集成

一、单点登录

通过http请求直接跳过登陆界面,登陆到相应的用户展示界面中。具体的请求方式如下:http://IP:8099/EFReport/loginWithoutPage?account=demo&password=123

二、获取用户SessionId进行集成

获取用户的SessionID,再使用SessionId来获取分配好的报表展示页面,获取的最终展示界面进行项目集成

1.获取sessionid,代码部分如下

public String getAuth() throws Exception {

      String sessionid = null;

      // 1、创建HttpClient

      CloseableHttpClient client = HttpClients.createDefault();

      // 2、封装请求参数

      List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>(2);

   //demo是实际的用户名称

      list.add(new BasicNameValuePair("command", "demo"));

   //使用对称加密,123是账号“demo”的实际密码,"123456789ABCDEFG"是对称加密的KEY值。KEY"123456789ABCDEFG"必须是16位的,此KEY需要与webapps\ROOT\WEB-INF\classes\ application.properties文件里的AES.KEY一致

      list.add(new BasicNameValuePair("certificate", AES.encrypt("123", "123456789ABCDEFG")));

      // 3、转化参数

      UrlEncodedFormEntity refe = new UrlEncodedFormEntity(list, "UTF-8");

      // 4、创建HttpPost

      HttpPost post = new HttpPost("http:// IP:8099/EFReport/authentication");

      post.setHeader("Accept", "text/plain;charset=UTF-8");

      // 5、设置参数

      post.setEntity(refe);

      // 6、执行请求

      CloseableHttpResponse resp = client.execute(post);

      // 7、获取实体

      HttpEntity entity = resp.getEntity();

      // 8、获取返回实体内数据

      String result = EntityUtils.toString(entity, "UTF-8");

      if ("OK".equals(result)) {

          Header[] headers = resp.getHeaders("Set-Cookie");

          String str = headers[0].getValue();

          sessionid = str.substring(0, str.indexOf(";"));

      }

      // 9、关闭

      resp.close();


      return sessionid;

   }

2.通过获取的sessionid,获取当前用户的可预览的报表名称。

//获取第一步的sessionid

String global_session_id = getAuth();

请求地址如下:"http:// IP:8099/EFReport/r_menu;<%=global_session_id%>",返回的是JSON格式的数据。

下图显示的是通过上述方式,返回的数据界面,用户报表菜单树的JSON格式。    

3.通过获取的sessionid、模板名称、参数,获取当前用户可预览的报表内容请求地址如下:

"http:// IP:8099/EFReport/r_report;<%=global_session_id%>?file=<%=URLEncoder.encode("日期参数",
"UTF-8")%>&
params="


带有实际的模板参数请求如下:

"http:// IP:8099/EFReport/r_report;<%=global_session_id%>?file=<%=URLEncoder.encode("日期参数",
"UTF-8")%>&params=<%=URLEncoder.encode("param1=2016-1-10;param2=2018-05-01",
"UTF-8")%>"


下图显示的是通过带有参数的请求方式,返回的界面。

    

三、跳过权限直接集成

获取报表服务的公,通过算法获取token,再通过获取的token,模板名称,参数获取当前用户可预览的报表。

1.获取公

请求地址如下:“http:// IP:8099/EFReport/thirdSys/getPublic

2.获取token

获取当前计算机时间GMT时间,使用RSA算法,获取token

   public String getToken() throws Exception {

//获取当前的毫秒数

      String data = String.valueOf(System.currentTimeMillis());

   //通过时间与公使用RSA算法获取token,红色部分为获取的公

      String encryptData = RsaUtils.encrypt(data,RsaUtils.getPublicKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDmVtO9QRTBBVUzDzhtSU9aVjv46dlQUiMGZRt9uz0h/T1Ty6X2nF1on0EG7fUgg3yU+XepD/AQlZFzLtpuI7TPhA67CoecmhRhCdUHN4u6FOGhQjyNl9PPL1gYF4YwW94BX5HPKg1nOdpmkkB/pdJ5cpobjYD0R0xgelmG1nkRWQIDAQAB"));

   

      return encryptData;

   }

3.获取报表区域

通过获取的token,模板名称,参数获取当前用户可预览的报表。


实际http请求如下:

http:// IP:8099/EFReport/report/checkSheet?file=<%=URLEncoder.encode("日期参数","UTF-8")%>&params=&token=<%=getToken()%>

带有实际的模板参数请求如下:

http:// IP:8099/EFReport/report/checkSheet?file=<%=URLEncoder.encode("日期参数","UTF-8")%>&params=<%=URLEncoder.encode("param1=2016-1-10;param2=2018-05-01","UTF-8")%>&token=<%=getToken()%>


下图显示的是通过带有参数的请求方式,返回的界面。

http:// IP:8099/EFReport/report/checkSheet?file=%E6%97%A5%E6%9C%9F%E5%8F%82%E6%95%B0&params=param1%3D2016-1-10%3Bparam2%3D2018-05-01&token=JyraKnXWLabFB/5FYL13wJVhWBjcyAPkgtDySdcZ3xJHqKm7lekK0rbDw7WZ3ISUTcvAIaD4PJX9ynaFX8RDThU8gWow12uiBgmiC49iv2dIByd7vHMR/ml2YChEXs5wc5pxL+1iWxcFlybgX8szjfV0lxlDsa3hwJiLReVbkys=


    

四、公开模板

1.设置模板公开

将需要集成的模板,在后台模板管理中,编辑模板,是否公开属性设置为“是”。

    

2.获取报表区域

通过模板名称、参数,获取报表。http请求如下:

http://IP:8099/EFReport/report/checkSheet?file=<%=URLEncoder.encode("日期参数","UTF-8")%>&params=

带有实际的模板参数请求如下:

http:// IP:8099/EFReport/report/checkSheet?file=<%=URLEncoder.encode("日期参数","UTF-8")%>&params=<%=URLEncoder.encode("param1=2016-1-10;param2=2018-05-01","UTF-8")%>


下图显示的是通过带有参数的请求方式,返回的界面。

http:// IP:8099/EFReport/report/checkSheet?file=%E6%97%A5%E6%9C%9F%E5%8F%82%E6%95%B0&params=param1%3D2016-1-10%3Bparam2%3D2018-05-01

    

   

盈帆报表工具提供了以上几种集成方式,根据实际需求可快速的将报表内容集成到项目中,解决项目的报表需求。