Proposito
El siguiente ejemplo esta basado en los ejemplos anteriores, pero en esta ocasión nuestro propósito es obtener todos los atributos (nombre y ubicación) de un proyecto o carpeta especifica cuando el atributo tenga más de dos representaciones.
Ficheros a descargar
El procedimiento os los podéis descargar haciendo clic aquí.
Explicación del código
A continuación se explica el código linea a linea o bien se puede abrir el procedimiento descargado desde MicroStrategy Command Manager (Menú Archivo > Abrir Procedimiento) donde podéis encontrar las líneas de código con el detalle de lo que realiza cada paso.
// Creado por MiguelTroyano.com // Encabezado del resultado printOut( "Nombre;Ubicación"); // Obtenemos todos los atributos de un proyecto ResultSet rsAtributos = executeCapture("LIST ALL ATTRIBUTES FOR PROJECT '" + sNombreProyecto + "';"); // Comenta la linea anterior y descomenta la siguiente si quieres los atributos de una carpeta en concreto // Tambien debes crear una variable de entrada llamada sRutaInicial // ResultSet rsAtributos = executeCapture("LIST ALL ATTRIBUTES IN FOLDER '" + sRutaInicial + "' FOR PROJECT '" + sNombreProyecto + "';"); ResultSet rsPropiedades = null; // Creamos la variable que albergara el numero de representaciones Integer contadorRepresentacion = 0; // Nos posicionamos en el primer atributo encontrado rsAtributos.moveFirst(); // Mientras que existan atributos entramos en el bucle while (!rsAtributos.isEof()){ // Se declaran las varibables para guardar el nombre y la ruta del atributo String sNombreAtributo = rsAtributos.getFieldValueString(DisplayPropertyEnum.NAME); String sRutaAtributo = rsAtributos.getFieldValueString(DisplayPropertyEnum.PATH); // Obtenemos todas las propiedades de los atributos rsPropiedades = executeCapture("LIST PROPERTIES FOR ATTRIBUTE '" + sNombreAtributo + "' IN FOLDER '" + sRutaAtributo + "' FOR PROJECT '" + sNombreProyecto + "';"); // Nos posicionamos en la primera propiedad del atributo correspondiente rsPropiedades.moveFirst(); // Se decara una variable para almacenar el ID del atributo String sIdentificadorAtributo = rsPropiedades.getFieldValueString(DisplayPropertyEnum.ID); // Accedemos al Result Set ATTRIBUTE_FORM ResultSet rsAttributeForms = (ResultSet)rsPropiedades.getFieldValue(DisplayPropertyEnum.ATTRIBUTE_FORM); rsAttributeForms.moveFirst(); // Mientras que existan resultados entramos en el bucle while(!rsAttributeForms.isEof()){ // Sumamos una representación al contador contadorRepresentacion++; // Nos posicionamos en el siguiente elemento por si tiene más de uno rsAttributeForms.moveNext(); } // Si el atributo tiene mas de tres representaciones mostramos el nombre y la ruta if ( contadorRepresentacion >=3 ) { printOut( sNombreAtributo+ ";" + sRutaAtributo); } // Opcionalmente puedes poner este texto para los que no cumplen la condicion else { // printOut("El atributo " + sNombreAtributo + " no tiene más de dos representaciones"); } // Ponemos el contador a cero para el siguiente atributo contadorRepresentacion = 0; // Nos posicionamos en el siguiente atributo por si tiene más de uno rsAtributos.moveNext(); }
Si se observa el código, el procedimiento va leyendo todos los atributos y buscando todas sus representaciones para despues mostrarnos solo aquellas que tienen 3 o más representaciones. Nos mostrara el nombre y su ubicación.
El procedimiento tiene dos parametros de entrada que debes informar antes de ejecutarlo:
- sNombreProyecto: nombre exacto del proyecto donde debe buscar los atributos.
Resultado
Los mensajes de la ejecución es el siguiente:
Recuerda que si lo ejecutas mediante la linea de comandos podrás guardar los resultados directamente en un fichero de texto e importarlos y tratarlos con excel o cualquier herramienta similar.