Hola Ayudenme a analizar este código, por fis!!!
Tengo un problema con la impresión del contenido de un query q es llamado por un archivo php(o pueden ser varios, no estoy segura), pues no encuentro las variables q tengo q llamar y todas las q he impreso, salen como Object o Array.
Dicho query se encuentra en el archivo var_reporter_mssql.xml y es lo siguiente:
Código xml:
Ver original<?xml version="1.0" ?>
<SQLLIST database="MSSQL" module="VAR_REPORTER">
<SQL ID="GET_DETAIL_DN_ALL"
QUERY=" SELECT app_id as APP_ID, convert(varchar(40),call_id) as CALL_ID, convert(char(19),tz_date,120) as TZ_DATE, ani as ANI ,dnis as DNIS,
ivr_duration as IVR_DURATION, case end_action when ''01'' then ''Call End'' when ''02'' then ''Transfer'' else ''Abandon'' end as END_ACTION,
case ivr_result when ''S'' then ''Success'' when ''F'' then ''Failure'' else ''Unknown'' end as IVR_RESULT ,
ivr_reason as IVR_REASON
FROM app_calls WITH ( INDEX ( IX_call_ani ) )
WHERE tz_date >= CONVERT(DATETIME, :VAR_UTC_DT_START ,120 ) and tz_date < CONVERT(DATETIME, :VAR_UTC_DT_END ,120 ) and ani in ( :VAR_DN_1 , :VAR_DN_2 , :VAR_DN_3 , :VAR_DN_4 , :VAR_DN_5 , :VAR_DN_6 , :VAR_DN_7 , :VAR_DN_8 , :VAR_DN_9 , :VAR_DN_10 ) ORDER BY ani, tz_date desc "/>
<SQL ID="GET_DETAIL_DN_APP"
QUERY=" SELECT app_id as APP_ID, convert(varchar(40),call_id) as CALL_ID, convert(char(19),tz_date,120) as TZ_DATE, ani as ANI ,dnis as DNIS, ivr_duration as IVR_DURATION, case end_action when ''01'' then ''Call End'' when ''02'' then ''Transfer'' else ''Abandon'' end as END_ACTION, case ivr_result when ''S'' then ''Success'' when ''F'' then ''Failure'' else ''Unknown'' end as IVR_RESULT , ivr_reason as IVR_REASON FROM app_calls WITH ( INDEX ( IX_call_ani ) ) WHERE tz_date >= CONVERT(DATETIME, :VAR_UTC_DT_START ,120 ) and tz_date < CONVERT(DATETIME, :VAR_UTC_DT_END ,120 ) and app_id = :VAR_APP_ID and ani in ( :VAR_DN_1 , :VAR_DN_2 , :VAR_DN_3 , :VAR_DN_4 , :VAR_DN_5 , :VAR_DN_6 , :VAR_DN_7 , :VAR_DN_8 , :VAR_DN_9 , :VAR_DN_10 ) ORDER BY ani , tz_date desc " /> </SQLLIST>
Este archivo es llamado por el archivo vwm_sql_xml.php mediante el siguiente código en PHP:
Código php:
Ver originalfunction load_xml()
{ ...
$xmlFilePath = $CN_ROOT . $SEP . "php" . $SEP . "xml" .$SEP . strtolower($MODULE_ID) . "_" . strtolower($VWM_INI ["DBTYPE"]) . ".xml"; /*Asignación de la variable con el nombre de archivo var_reporter_mssql.xml */ ....
//Load the XML file into a String
if ( ! ($tempArray = file($xmlFilePath) ) ) { $VWM_LOGGER->Log("Cannot Read XML File " . " - " . $xmlFilePath, "ERROR", "1103"); return false;
}
//implode result
//Load XML into a DOM object
if ( ! ($this->sqlDOM = @xmldoc($xmlStr) ) ) {
....
}
$this->xmlFile = $xmlFilePath;
return true;
}
function get_sql($sql_id) /*función para obtener el ID del query SQL del archivo var_reporter_mssql.xml indicado arriba*/
{
global $VWM_LOGGER;
$retSQL = "";
....
En el código anterior hay una función q obtiene el ID del SQL q puede ser "GET_DETAIL_DN_APP" o "GET_DETAIL_DN_ALL" segun el archivo xml y lo guarda en la variable $sql_id.
Si no me equivoco, después de esto se va a presentarlo en la web mediante el archivo var_report_viewer.php con ayuda de entre otros archivos del left_side_menu.php, q es donde se le telcea en el campo de texto cualquier número de 10 digitos.
El código de var_report_viewer.php es:
Código php:
Ver originalif ($_GET["DN1"] != '')
{
$DN1 = $_GET["DN1"];
$DN2 = $_GET["DN2"];
$DN3 = $_GET["DN3"];
$DN4 = $_GET["DN4"];
$DN5 = $_GET["DN5"];
$DN6 = $_GET["DN6"];
$DN7 = $_GET["DN7"];
$DN8 = $_GET["DN8"];
$DN9 = $_GET["DN9"];
$DN10 = $_GET["DN10"];
}
$printURL = "var_report_viewer.php?" .
"ReportType=" . $ReportType .
"&Application=" . $RepApplication .
"&StartDate=" . $RepStartDate .
"&StartTime=" . $RepStartTime .
"&EndDate=" . $RepEndDate .
"&EndTime=" . $RepEndTime .
"&RepInterval=" . $RepInterval.
"&SCF=" . $RepSCF .
"&Print=Y";
....
//Handle information
//Find application Name
if ($RepApplication == "ALL")
{
$RepContext = "All DNIS Applications";
}
else
{
$RepContext = get_app_name($RepApplication);
}
//Find Reports Name and set Reports File
switch ($ReportType)
{
case "DETALLE_LLAMADA" : $ReportName = "Listado de llamadas realizadas por Dn";
$ReportFile = "var_calls_listing.php";
$sqlID = "GET_DETAIL_DN";
break;
case "SAVEFILE" : $ReportName = "Save Download File";
$ReportFile = "var_download_file.php";
$sqlID = "GET_DOWNLOAD";
$dwl_type = $_GET["DwlReportType"];
$sqlID .= "_".$dwl_type;
.....
//Prepare Dates for SQL. Add 1 day to end date if time is not specified
if ($RepStartTime == -1 and $RepEndTime == -1)
{
$RepEndDTInt = dateadd("d",1,$RepEndDTInt);
}
$sqlStartDate = date("Y-m-d H:i:s", $RepStartDTInt); $sqlEndDate = date("Y-m-d H:i:s", $RepEndDTInt); if ($ReportType == "DETALLE_LLAMADA" )
{
$RepStartDTInt = dateadd("m",-1,$RepEndDTInt);
$RepEndDTInt = dateadd("s",-1,$RepEndDTInt);
$sqlEndDate = date("Y-m-d H:i:s", $RepEndDTInt); $sqlStartDate = date("Y-m-d H:i:s", $RepStartDTInt); echo "Fecha de inicio: " . $sqlStartDate . "<br>";
echo "Fecha de fin: " . $sqlEndDate . "<br>";
if ($RepApplication != "ALL") {
$sqlID .= "_APP";
$sql_params = array ( "APP_ID" => $RepApplication , "UTC_DT_START" => $sqlStartDate ,
"UTC_DT_END" => $sqlEndDate,
"DN_1" => $DN1,
"DN_2" => $DN2,
"DN_3" => $DN3,
"DN_4" => $DN4,
"DN_5" => $DN5,
"DN_6" => $DN6,
"DN_7" => $DN7,
"DN_8" => $DN8,
"DN_9" => $DN9,
"DN_10" => $DN10 );
} else {
$sqlID .= "_ALL";
"UTC_DT_START" => $sqlStartDate ,
"UTC_DT_END" => $sqlEndDate,
"DN_1" => $DN1,
"DN_2" => $DN2,
"DN_3" => $DN3,
"DN_4" => $DN4,
"DN_5" => $DN5, "DN_6" => $DN6, "DN_7" => $DN7, "DN_8" => $DN8, "DN_9" => $DN9, "DN_10" => $DN10);
}
}
elseif ($ReportType == "SCF_ANALYSIS" )
{
$sql_params = array ( "APP_ID" => $RepApplication , "SCF_ID" => $RepSCF,
"UTC_DT_START" => $sqlStartDate ,
"UTC_DT_END" => $sqlEndDate);
}
elseif ($RepApplication != "ALL")
{
$sqlID .= "_APP";
$sql_params = array ( "APP_ID" => $RepApplication , "UTC_DT_START" => $sqlStartDate ,
"UTC_DT_END" => $sqlEndDate);
}
else
{
$sqlID .= "_ALL";
$sql_params = array ( "UTC_DT_START" => $sqlStartDate , "UTC_DT_END" => $sqlEndDate);
}
....
$repData = $varSQL->get_array();
....
Al final siempre q elijo el tipo de aplicación "GET_DETAIL_DN_ALL" o "GET_DETAIL_DN_APP" me aparece el siguiente error en el log:
Código txt:
Ver original"2010-11-25 18:29:10 : ERROR : 1250 : Cannot find size for variable :VAR_DN_1 found in SQL SELECT app_id as APP_ID, convert(varchar(40),call_id) as CALL_ID, convert(char(19),tz_date,120) as TZ_DATE, ani as ANI ,dnis as DNIS, ivr_duration as IVR_DURATION, case end_action when ''01'' then ''Call End'' when ''02'' then ''Transfer'' else ''Abandon'' end as END_ACTION, case ivr_result when ''S'' then ''Success'' when ''F'' then ''Failure'' else ''Unknown'' end as IVR_RESULT , ivr_reason as IVR_REASON FROM app_calls WITH ( INDEX ( IX_call_ani ) ) WHERE tz_date >= CONVERT(DATETIME, :VAR_UTC_DT_START ,120 ) and tz_date < CONVERT(DATETIME, :VAR_UTC_DT_END ,120 ) and ani in ( :VAR_DN_1 , :VAR_DN_2 , :VAR_DN_3 , :VAR_DN_4 , :VAR_DN_5 , :VAR_DN_6 , :VAR_DN_7 , :VAR_DN_8 , :VAR_DN_9 , :VAR_DN_10 ) ORDER BY ani, tz_date desc
2010-11-25 18:29:10 : ERROR : 1203 : Error Binding variables
2010-11-25 18:29:10 : ERROR : 1250 : DoSQL: Parsing failed
2010-11-25 18:29:10 : ERROR : 20201 : ClientIP[192.168.55.29] No se puede obtener informacion para: Listado de llamadas realizadas por Dn"
Este log es presentado mediante el archivo vwm_db_mssql.php, su código es:
Código php:
Ver original......
class tlraDBSQL
{
.....
//Instantiate with a Statement
function tlraDBSQL($argSQL)
{
.... //Create Array of variables and bound them
if ( ! ($this->create_param_array() ) )
{
$VWM_LOGGER->Log("Error Binding variables ", "ERROR", "1203"); return false;
}
$this->dbBatchSize = $pre_fetch;
return true;
}
function create_param_array()
{
global $VWM_LOGGER;
$tempSQL = $this->dbSQL;
$curPos = 0;
$this->dbParamDef = "";
$this->dbParams = array(); $data_info = new vwm_data_info();
while ( ($curPos = strpos($tempSQL,":VAR")) > 0) {
$varEnd = strpos($tempSQL," ",$curPos); //Check if variable is at the end
if ($varEnd <=0) $varEnd = strlen($tempSQL); $ParamName = substr($tempSQL, $curPos, $varEnd - $curPos); $ParamKey = substr($ParamName,5); {
$varSize = $data_info->getsize($ParamKey); $varType = $data_info->gettype($ParamKey);
if ($varSize === -1)
{
$VWM_LOGGER->Log("Cannot find size for variable " . $ParamName . /*Error que presenta en el log */ " found in SQL " .$this->dbSQL, "ERROR", "1250");
return false;
}
......?>
Cualquier comentario es bueno. Muchisimas gracias por su ayuda.
Spider Marsh