Recuperar SQL de un informe MicroStrategy con Java

En esta entrada vamos aprender a recuperar SQL de un informe MicroStrategy con Java. Utilizaremos Eclipse como herramienta para escribir y ejecutar el código Java. Partiremos de un tutorial anterior donde aprendimos a iniciar y cerrar sesión correctamente y lo complementaremos con el código de este articulo.

Especificaciones del entorno

  • Microsoft Windows 10
  • MicroStrategy 2020 update 2
  • SDK MicroStrategy 2020
  • Eclipse 2019-12

Proyecto Java

Punto de partida

Este tutorial presupone que ya has creado un Proyecto Java y que se ha creado el paquete y la clase principal estableciendo la conexión al servidor de Microtrategy. Si no es así, puedes seguir este tutorial para realizarlo antes de continuar.

Importación de clases

Para recuperar SQL de un informe en MicroStrategy con Java es necesario importar las siguientes clases adicionales a las que ya has utilizado para iniciar sesión.

  • Escribe después de la definición package las siguientes líneas:
import javax.swing.JOptionPane;
import com.microstrategy.web.objects.WebReportData;
import com.microstrategy.web.objects.WebReportInstance;
import com.microstrategy.web.objects.WebReportSource;
import com.microstrategy.webapi.EnumDSSXMLExecutionFlags;
import com.microstrategy.webapi.EnumDSSXMLResultFlags;
import com.microstrategy.webapi.EnumDSSXMLStatus;

Además para este programa en concreto se necesita incluir la librería externa json-2.8.2.jar al proyecto (botón derecho sobre el proyecto > Properties > Java Build path)

Código para recuperar SQL de un informe

  • Situate entre los métodos main e iniciarSesión
  • Escribe el siguiente código:
public static void recuperarSQLinforme() throws WebObjectsException, 
IllegalArgumentException {
    	 try {
    		  
    		 WebReportSource informeFuente;
    		 WebReportInstance webInstancia;

    		 informeFuente = factory.getReportSource();
    	      
    		 //Especifica el ID del informe a consultar la SQL
    	     String informeID = "EE12B2774A1837A9C14349A072047294";
    	      
    		 informeFuente.setResultFlags(EnumDSSXMLResultFlags.
    		     		 DssXmlResultXmlSQL);
    		 informeFuente.setExecutionFlags(EnumDSSXMLExecutionFlags.
    		     		 DssXmlExecutionGenerateSQL);
    	        
    		 //create report instance 
    		 webInstancia = informeFuente.getNewInstance(informeID);
    		 webInstancia.setAsync(false);
    		 webInstancia.setMaxWait(120000);
    		 webInstancia.setPollingFrequency(250);
              
    		 //Comprobamos el estado del informe
    		 int estadoInforme = 0;
    		 estadoInforme = webInstancia.pollStatus();
                	
    		 if (estadoInforme != EnumDSSXMLStatus.DssXmlStatusResult) { 
    			 System.out.println("Error: el estado del informe es " + estadoInforme);
    		 }

    		 //retrieving report SQL from WebReportData object 
    		 WebReportData resultado = webInstancia.getResults();
    		 String strSQL = "";
    		 strSQL = resultado.getSQL();
    		 System.out.println(strSQL); 
    	 }
    	 catch (WebObjectsException | IllegalArgumentException ex) {
    		 mostrarError(sesionServidor, "Error:" + ex.getMessage());
    		 JOptionPane.showMessageDialog(null, "Error:" 
    		     		 + ex.getMessage());
    	 }
     }

A tener en cuenta

Este programa recupera la SQL del informe sin necesidad de ejecutar el informe.

  • Ubicate en el método main y escribe entre las llamadas a los métodos iniciarSesion y cerrarSesion la llamada al nuevo método escribiendo recuperarSQLinforme();

Resultado

Si ejecutamos el código anterior se mostrara en la consola la SQL del informe que hemos indicado en el código.

Escribir un comentario