Procedimiento para mostrar atributos con más de 2 representaciones en Command Manager

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.

Escribir un comentario