[JAVA] Téléchargez tous les rapports de tableau de bord dans Excel à l'aide de l'API et du service Web de Yellowfin

ExcelDL.gif

Chose que tu veux faire

Comme le titre l'indique, vous pouvez télécharger Excel dans l'article précédent Conditions POST sur la page où vous pouvez télécharger des fichiers Excel avec Fetch et télécharger avec un navigateur. Maintenant que je veux télécharger tous les rapports sur le tableau de bord Yellowfin dans Excel. Dans la version 9.2.2, nous vérifions que vous pouvez faire différentes choses avec BaseAPI, reportAPI, filterAPI, DashboardAPI et le mode code, donc vous avez envie d'obtenir les informations de chaque rapport et de les tourner avec foreach.

Préparer

Après avoir créé le tableau de bord, faites glisser et déposez le widget bouton du widget de code pour le nommer. Exemple) export Cela sera utilisé dans la partie décrite dans le prochain onglet JS.

Placez également le script de service Web qui exporte Excel sous le répertoire d'installation / Yellowfin / appserver / webapps / ROOT /.

Ceci est compatible avec autre qu'Excel, donc même si vous changez le format de la clé POST en un autre PDF / CSV, vous pouvez l'utiliser en faisant correspondre le format à chacun. Si rien n'est fait, il sera généré sous forme de fichier PDF.

output.jsp



<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.*, java.text.*" %>
<%@ page import="com.hof.mi.web.service.*" %>
<%@ page import="java.net.URLEncoder" %>
<%
  String host = "localhost";
  Integer port = 8080;
  String userid = "[email protected]";
  String password = "test";
  String orgid = "1";
  String uuid = request.getParameter("uuid");
  String fname = request.getParameter("fname");
  String path = "/services/ReportService";
  String suffix = "";

  String format = request.getParameter("format");
  String contentType = "application/octet-stream";
  if (format == null) format = "PDF";
  if (format.equals("CSV")) {
    contentType = "text/comma-separated-values";
    suffix = ".csv";
  }
  else if (format.equals("PDF")) {
    contentType = "application/pdf";
    suffix = ".pdf";
  }
  else if (format.equals("XLS")) contentType = "application/vnd.ms-excel";
  else if (format.equals("XLSX")) {
    contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    suffix = ".xlsx";
  }
  else if (format.equals("RTF")) contentType = "application/rtf";
  else if (format.equals("TEXT")) contentType = "text/tab-separated-values";

  HashMap filters = new HashMap();
  boolean cleared = filters.size() == 0;
  Iterator f = request.getParameterMap().keySet().iterator();
  while (f.hasNext()) {
    String key = (String) f.next();
    if (key.startsWith("filter")) {
      if (!cleared) {
        filters.clear();
        cleared = true;
      }
      String value = request.getParameter(key);
      int pipeIndex = value.indexOf("|");
      if (pipeIndex == -1) continue;
      key = value.substring(0, pipeIndex);
      value = value.substring(pipeIndex + 1);
      filters.put(key, value);
    }
  }

  ReportServiceClient rsc = new ReportServiceClient(host, port, userid, password, path);
  i4Report report = rsc.loadReportForUser(uuid, userid, password, orgid);

  f = filters.keySet().iterator();
  while (f.hasNext()) {
    String key = (String) f.next();
    String value = (String) filters.get(key);
    report.setFilter(key, value);
  }

  HashMap elementStorage = new HashMap();
  report.run(elementStorage, format);

  response.setContentType(contentType);
  fname = fname + suffix;

  String encodedFilename = URLEncoder.encode( fname , "UTF-8");
  response.setHeader("Content-Disposition","attachment;" +
  "filename=\"" + encodedFilename + "\"");
  
  
  java.io.BufferedOutputStream o = new java.io.BufferedOutputStream(response.getOutputStream(), 32000);
  o.write(report.renderBinary());
  o.flush();

%>

Onglet JS du tableau de bord

J'utiliserai pleinement l'API Dashboard afin de pouvoir exporter tous les rapports en modifiant légèrement la partie que j'ai faite la dernière fois. Vous pouvez l'obtenir avec eventlistener en spécifiant le nom du bouton installé sur le tableau de bord dans la partie de let button = this.apis.canvas.select ('export');. C'est la partie qui n'est pas expliquée dans les autres article précédent. var dash = this.apis.dashboard; var allrep = dash.getAllReports(); Il appelle l'API du tableau de bord de Yellowfin et obtient toutes les informations du rapport sur le tableau de bord avec getAllReports (). [Partie wiki correspondante de Yellowfin](http://wiki.yellowfinbi.jp/pages/viewpage.action?pageId=6591558#id-%E3%83%80%E3%83%83%E3%82%B7% E3% 83% A5% E3% 83% 9C% E3% 83% BC% E3% 83% 89API-% E3% 83% AC% E3% 83% 9D% E3% 83% BC% E3% 83% 88% E3 % 81% AE% E3% 83% AA% E3% 83% 95% E3% 82% A1% E3% 83% AC% E3% 83% B3% E3% 82% B9) Chaque rapport est tourné par foeach, et uuid et format sont passés par body pour générer un lien.

Si vous souhaitez également obtenir le nom du rapport, vous devez créer jsp pour le service Web, donc la prochaine fois.

Onglet JS



this.onRender = function () {
    //Écrivez le code ici. C'est un endroit idéal pour mettre en place un auditeur d'événement
    let button = this.apis.canvas.select('export');
    button.addEventListener('click', () => {
        var dash = this.apis.dashboard;
        var allrep = dash.getAllReports();
        allrep.forEach( item => {
            var uuid = item.reportUUID;
            var obj = {
                fname: uuid,
                uuid: uuid,
                format: 'XLSX'
                };
            var method = "POST";
            var body = Object.keys(obj).map((key)=>key+"="+encodeURIComponent(obj[key])).join("&");
            var headers = {
              'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
              'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
              'responseType' : "blob",
            };
            fetch("./output_file.jsp", {method, headers, body})
            .then((res)=> res.blob())
            .then(blob => {
                let anchor = document.createElement("a");
                anchor.href = window.URL.createObjectURL(blob);
                anchor.download = uuid+".xlsx";
                anchor.click();})
            .then(console.log)
            .catch(console.error);
        });
    });
};


résultat

Les rapports installés sur le tableau de bord sont en baisse constante. Probablement la première fois, une boîte de dialogue demandant l'autorisation de télécharger apparaîtra du côté du navigateur, donc ce n'est pas grave si vous l'autorisez.

Recommended Posts

Téléchargez tous les rapports de tableau de bord dans Excel à l'aide de l'API et du service Web de Yellowfin
Conseils d'utilisation de Salesforce SOAP et de l'API Bulk en Java