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);