if ($param_name != "page" && $param_name != "uri") {
        $moveToPage .= "&" . urlencode($param_name) . "=" . urlencode($_GET[$param_name]);
    }
}
$moveToPage .= "&page=";
// 3. Execute the report
$output_params = array();
$output_params[RUN_OUTPUT_FORMAT] = $_GET['format'];
if ($_GET['format'] == RUN_OUTPUT_FORMAT_HTML) {
    $page = 0;
    if ($_GET['page'] != '') {
        $page = $_GET['page'];
    }
    $output_params[RUN_OUTPUT_PAGE] = $page;
}
$result = ws_runReport($currentUri, $report_params, $output_params, $attachments);
// 4.
if (is_soap_fault($result)) {
    $errorMessage = $result->getFault()->faultstring;
    echo $errorMessage;
    exit;
}
$operationResult = getOperationResult($result);
if ($operationResult['returnCode'] != '0') {
    echo "Error executing the report:<br><font color=\"red\">" . $operationResult['returnMessage'] . "</font>";
    exit;
}
if (is_array($attachments)) {
    if ($_GET['format'] == RUN_OUTPUT_FORMAT_PDF) {
        header("Content-type: application/pdf");
        echo $attachments["cid:report"];
 /**
  * Rutina principal de entrada .
  *
  * @param type $reportServerUser
  * @param type $reportServerPassword
  * @param type $formatOutput
  */
 protected function executeReport($reportServerUser, $reportServerPassword, $formatOutput)
 {
     try {
         // recogemos los que seran parametros del reporte y los parseamos
         // para generar el formato requerido.
         $input_params =& $this->getInputReportParamsList();
         $report_params =& $this->getReportParams($input_params);
         // El formato de salida del reporte.
         $output_params = array();
         $output_params[RUN_OUTPUT_FORMAT] = $formatOutput;
         // ejecutamos el reporte , via SOAP.
         $currentUri = $this->getReportURI();
         $result = ws_runReport($reportServerUser, $reportServerPassword, $currentUri, $report_params, $output_params, $attachments);
         // verficamos si el reporte pudo ser ejecutado.
         if (is_soap_fault($result)) {
             $errorMessage = $result->getFault()->faultstring;
             $this->outputError(strlen($errorMessage) > 0 ? $errorMessage : 'Reporte no procesado , error en proceso');
             die;
         }
         // Verificamos si el reporte fue ejecutado este fue exitoso.
         $operationResult = getOperationResult($result);
         if ($operationResult['returnCode'] != '0') {
             $msg = 'Error executing the report:<br><font color="red">' . $operationResult['returnMessage'] . '</font>';
             $this->outputError($msg);
             die;
         }
         // si el reporte tiene attachments (en jasper es la manera de emitir)
         // segun el formato se imprime, solo soportamos PDF y XLS.
         if (is_array($attachments)) {
             $contents = $attachments["cid:report"];
             if ($output_params[RUN_OUTPUT_FORMAT] == RUN_OUTPUT_FORMAT_PDF) {
                 header("Content-type: application/pdf");
                 $answer = $this->createReportOutputFile($contents);
                 if ($answer === FALSE) {
                     $this->outputError('Error grabando archivo de salida...');
                 } else {
                     echo $answer;
                 }
                 // readfile($tn);
                 //print_r(array_keys($attachments));
             } else {
                 if ($output_params[RUN_OUTPUT_FORMAT] == RUN_OUTPUT_FORMAT_XLS) {
                     header('Content-type: application/xls');
                     header('Cache-Control: must-revalidate');
                     header('Pragma: public');
                     header('Content-Description: File Transfer');
                     header('Content-Disposition: attachment; filename="reportxxx.xls"');
                     $answer = $this->createReportOutputFile($contents);
                     if ($answer === FALSE) {
                         $this->outputError('Error grabando archivo de salida...');
                     } else {
                         echo $answer;
                     }
                     //                    readfile($tn);
                 }
             }
             //  die();
         } else {
             $this->outputError('No se encontro contenido del reporte...');
         }
     } catch (Exception $ex) {
         $this->outputError($ex->getMessage());
     }
 }