Automatización e informe avanzados con cqperl

El código cqperl del ejemplo siguiente genera un informe.

Perl

# nightlysubmits.pl - Un script Perl para listar todos los
# defectos que están, actualmente, en estado de envío.

use CQPerlExt;

# Todo el trabajo de Rational ClearQuest se lleva a cabo a través de un objeto Session. 
# Cqperl obtiene un objeto Session con el método Build de CQSession
# al que se puede acceder desde el módulo Perl CQPerlExt.
#   Referencia de API: Objeto Session->Build

$session = CQSession::Build();

# Una vez que se haya obtenido la sesión, se debe iniciar la sesión. Para
# ello, se utiliza el método UserLogon. Se debe especificar el
# nombre de usuario, la contraseña y el nombre de base de datos. El cuarto
# parámetro, dbset, generalmente, se deja en blanco.
#   Referencia de API: Objeto Session->Método UserLogon

$session->UserLogon("admin","","SAMPL","");

# La generación de una consulta implica la creación de un objeto QueryDef.
# Para ello, se utiliza un método del objeto Session denominado 
# BuildQuery. Su único parámetro es el Entitydef 
# (también denominado "tipo de registro") que se desea consultar. 
# En este caso, se va a utilizar "Defect"
#   Referencia de API: Objeto Session->Método Build Query

#                  Objeto QueryDef

#                  Objeto EntityDef->Propiedad Name

$querydef = $session->BuildQuery("Defect");

# El paso siguiente (como al crear una consulta a través del cliente de Rational 
# ClearQuest) es decidir los campos que van a estar en el Conjunto 
# de resultados de la consulta. Para ello, se utiliza el método 
# BuildField del objeto QueryDef. Se desea ver el ID, 
# el titular y el emisor.
#   Referencia de API: Objeto QueryDef->Método BuildField

$querydef->BuildField("id");

$querydef->BuildField("headline");

$querydef->BuildField("submitter");

# A continuación, se deben compilar los filtros para la consulta.
# Para ello, se debe construir un árbol de objetos
# FilterOperator. La creación de un objeto FilterOperator de nivel superior
# para cualquier árbol se realiza con el método BuildFilterOperator
# del objeto QueryDef. El método BuildFilterOperator
# toma un parámetro, el operador booleano que va a
# determinar el comportamiento de cada subárbol. Si sólo hay
# un filtro, puede ser AND u OR. Para especificar
# el operador booleano correcto, seleccione la constante BoolOp 
# adecuada y el prefijo de Perl. En este caso, se utiliza AND, por
# lo que la constante es $CQPerlExt::CQ_BOOL_OP_AND. 
#   Referencia de API: Objeto QueryDef->Método BuildFilterOperator

#                  Constantes de BoolOp
#                  Convenios de notación para Perl

$rootfilternode = 
   $querydef->BuildFilterOperator($CQPerlExt::CQ_BOOL_OP_AND);

# Una vez que se dispone de la raíz FilterOperatorNode, se le asigna
# un filtro. En este caso, estado es igual a enviado. Se utiliza
# el método BuildFilter del objeto QueryFilterNode
# para hacerlo. Se debe tener en cuenta que el tercer parámetro de BuildFilter
# debe ser una referencia de Perl a una matriz.
#   Referencia de API: Objeto QueryFilterNode->Método BuildFilter
#                  Constantes de BoolOp
#                  Convenios de notación para Perl

@statetest = "Submitted";

$rootfilternode->BuildFilter("State",
                             $CQPerlExt::CQ_COMP_OP_EQ,
                             \@statetest);

# Se ha creado la definición de Query y ahora se 
# debe ejecutar. Para ello se debe volver al objeto Session
# y utilizar el método BuildResultSet. Su único parámetro 
# es el objeto QueryDef que se ha creado previamente. Una vez 
# que el objeto ResultSet está preparado, se ejecuta la consulta.
#   Referencia de API: Objeto Session->Método BuildResultSet
#                  Objeto ResultSet->Método Execute

$resultset = $session->BuildResultSet($querydef);

$resultset->Execute();

# A continuación, se va a preparar la impresión de una cabecera para la salida.

printf("%13.13s %50.50s %9.9s\n","id","headline","submitter");

printf("%13.13s %50.50s %9.9s\n",

       "-------------",

       "--------------------------------------------------",

       "---------");

# Ahora, se debe cruzar el conjunto del resultado e imprimir la salida.
# Se debe realizar a través del método MoveNext del objeto
# ResultSet. Devuelve $CQPerlExt::CQ_SUCCESS siempre que haya
# filas para ver. Se utiliza GetColumnValue para obtener los
# datos de dicha fila del conjunto del resultado.
#   Referencia de API: Objeto ResultSet->Método MoveNext
#                  Objeto ResultSet->Método GetColumnValue

while ($resultset->MoveNext() == $CQPerlExt::CQ_SUCCESS) {

    printf("%-13.13s %-50.50s %-9.9s\n",

           $resultset->GetColumnValue(1),

           $resultset->GetColumnValue(2),

           $resultset->GetColumnValue(3));

# Ya ha finalizado y, por lo tanto, puede liberar la sesión

CQSession::Unbuild($session); 


Comentarios