Se proporcionará una instancia de esta clase en los metodos abstractos que el
* programador puede utilizar para cambiar el comportamiento de las acciones genericas
* del framework. También en el metodo correspondiente a las acciones particulares.
*
*
* Con los metodos proporcionados se podran manejar los datos obtenidos desde la REQUEST
* de una forma racional (por campo, por tupla o por matriz de datos). Toda esta informacion
* viene organizada por operacion; de modo que se proporcionara la informacion segun la accion
* que este ejecutandose.
*
*
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License v.2
* @version $Id: IgepComunicaUsuario.php,v 1.59 2018-08-11 11:48:43 belenguer_jor Exp $
* @author David Pascual
* @author Keka: Bermejo
* @author Vero Navarro
* @author Raquel Borjabad
* @author Toni Felix
* @author Jorge Belenguer
*
* @package gvHidra
*/
class IgepComunicaUsuario
{
const OPERACION_EXTERNAL = 'external';
const OPERACION_ACTUALIZAR = 'actualizar';
const ATRIBUTO_TIPO = 'tipo';
const ATRIBUTO_PARTE_DECIMAL = 'parteDecimal';
const ATRIBUTO_COMPONENTE = 'component';
const ATRIBUTO_VALUECHECKED = 'valueChecked';
const ATRIBUTO_VALUEUNCHECKED = 'valueUnchecked';
const ATRIBUTO_RADIO = 'Radio';
/**
* Instancia de IgepComunicacion
* @var IgepComunicacion
*/
public $comunica;
/**
* Datos utilizados en las inseciones para las listas
* @var array
*/
public $datosPreinsertados;
/**
* Coleccion (array) de las listas definidas en el panel
* @var gvHidraList[]
*/
public $listasPanel;
/**
* Objeto de la clase IgepMensaje que se creará en el caso de que el programador haga uso del método showMessage
* @var IgepMensaje
*/
public $obj_mensaje = null;
/**
* Información del panel que llega a través del JSON.
*
* @var array
*/
// REDMINE #23228
public $_infoPanel;
/**
* Constructor. Recibe como parámetro una instancia viva de la clase
* IgepComunicacion.
*
* @param IgepComunicacion $comunica
* @param array $datosPreinsertados
* @param gvHidraList[] $listasPanel
*/
public function __construct( & $comunica, & $datosPreinsertados, & $listasPanel )
{
$this->comunica = & $comunica;
$this->datosPreinsertados = & $datosPreinsertados;
$this->listasPanel = & $listasPanel;
} //Fin del constructor
/**
* Reinicializa el acceso a datos.
*
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
*/
public function reset( $parametroOperacion='' )
{
$this->comunica->reset( $parametroOperacion );
} //Fin de reset
/**
* Establece la operación que va a ser origen de los datos.
*
* @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar)
*/
public function setOperation( $parametroOperacion )
{
$this->comunica->setOperation( $parametroOperacion );
} //Fin de setOperation
/**
* Devuelve cual es el origen de los datos actual.
*
* @return string
*/
public function getOperation()
{
return $this->comunica->getOperation();
} //Fin de getOperation
/**
* Devuelve el modo activo para una acción de interfaz dada.
*
* Los modos posibles son
*
* - fil : Filtro o modo de búsqueda ,
* - lis : Listado o modo de tabla ,
* - strong>edi : Edición o modo de ficha .
*
* @return string
*/
public function getActiveMode()
{
return $this->comunica->getPanel();
} //Fin de getActiveMode
/**
* Método que devuelve el estado del panel de trabajo activo de gvhidra.
*
* @return string $panel Panel de entre los tipos soportados:
*
* - R : Lectura ,
* - W : Edición ,
* - I : Inserción.
*
* @return string
*/
public function getStatePanel()
{
return $this->comunica->getStatePanel();
} //Fin de getStatePanel
/**
* Método que asigna el estado del panel de trabajo activo de gvhidra.
*
* @return string $state Panel de entre los tipos soportados:
*
* - R : Lectura ,
* - W : Edición ,
* - I : Inserción.
*
* @return string
*/
// REDMINE #23120
public function setStatePanel($state)
{
$this->comunica->setStatePanel($state);
} //Fin de setStatePanel
/**
* Cuando se trabaja con un conjunto de fichas múltiple, se utiliza para establecer la fila
* (registro/tupla del conjunto) sobre la que estamos trabajando, por defecto, es la ficha que
* se está visializando (esta activa)
*
* @param integer $indice Indice de 0..nRegs que indica la tuplas
*/
public function setIndex( $indice )
{
$this->comunica->int_filaActual = $indice;
} //Fin de setIndex
/**
* Devuelve el valor del indice del cursor sobre el origen de datos actual.
*
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return integer
*/
public function getIndex( $parametroOperacion='' )
{
return $this->comunica->getIndex( $parametroOperacion );
} //Fin de getIndex
/**
* Devuelve el registro activo sobre el origen de datos actual (cursor)
*
* @param string $parametroOperacion (Opcional) El tipo de operación, si no se indica se coge el fijado para la instancia
* @return array
*/
public function currentTupla( $parametroOperacion='' )
{
return $this->comunica->currentTupla( $parametroOperacion );
} ///Fin de currentTupla
/**
* Devuelve el campo indicado como párametro del registro activo sobre el
* origen de datos actual (cursor)
*
* @param string $nombreCampo Nombre del campo
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function getSrcImg( $nombreCampo, $parametroOperacion='' )
{
return $this->comunica->getCampo( $nombreCampo, $parametroOperacion );
} //Fin de getSrcImg
/**
* Devuelve el campo indicado como párametro del registro activo sobre el
* origen de datos actual (cursor)
*
* @param string $nombreCampo Nombre del campo
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function getValue( $nombreCampo, $parametroOperacion='' )
{
return $this->comunica->getCampo( $nombreCampo, $parametroOperacion );
} //Fin de getValue
/**
* Devuelve el campo indicado como párametro del registro activo sobre el
* origen de datos actual (cursor)
*
* El id del botón se encuentra en la matriz m_datos_externalTpl con clave 'idBtn'
* p.ej.
* [m_datos_externalTpl] => Array
(
[0] => Array
(
[action] => Registro__accionParticular
[idBtn] => miBoton
[checkForm] => 1
[claseManejadora] => Registro
[gvhpanel] => edi
)
)
* @return string
*/
// REDMINE #23120
public function getIdBtn( )
{
return $this->comunica->getIdBtn( );
} //Fin de getIdBtn
/**
* Devuelve el campo indicado como párametro del registro activo sobre el
* origen de datos actual (cursor)
*
* @param string $nombreCampo Nombre del campo
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function getSelected( $nombreCampo, $parametroOperacion='' )
{
return $this->comunica->getCampo( $nombreCampo, $parametroOperacion );
} //Fin de getSelected
/**
* Devuelve el campo indicado como párametro del registro activo sobre el
* origen de datos actual (cursor)
*
* @param string $nombreCampo Nombre del campo
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function getNodeSelected( $nombreCampo, $parametroOperacion='' )
{
return $this->comunica->getNodeSelectedTree( $nombreCampo, $parametroOperacion );
} //Fin de getSelected
/**
* Devuelve el valor antiguo del campo indicado como párametro del registro activo
*
* @param string $nombreCampo Nombre del campo
* @return mixed
*/
public function getOldValue( $nombreCampo )
{
return $this->comunica->getOldValue( $nombreCampo );
} //Fin de getOldValue
/**
* Establece el valor de una lista
*
* @param string $nombreCampo Nombre del campo
* @param string $valorCampo Valor del campo
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function setSelected( $nombreCampo, $valorCampo, $parametroOperacion='' )
{
return $this->comunica->setCampo( $nombreCampo, $valorCampo, $parametroOperacion );
} //Fin de setSelected
/**
* Establece el valor de una lista
*
* @param string $nombreCampo Nombre del campo
* @param string $index Índice de la opción de la lista a marcar como seleccionada
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
// REDMINE #23167
public function setSelectedIndex( $nombreCampo, $index, $parametroOperacion='' )
{
$defLista = $this->getList($nombreCampo);
$lista = $defLista->getList();
// REDMINE #23263
if (is_array($index)) // lista múltiple
{
$num = count($index);
for($i=0;$i<$num;$i++)
{
$valor[] = $lista[$index[$i]]['valor'];
}
}
else {
$valor = $lista[$index]['valor'];
}
return $this->comunica->setCampo( $nombreCampo, $valor, $parametroOperacion );
} //Fin de setSelectedIndex
/**
* Establece el valor del un campo check.
*
* @param string $name Nombre del check
* @param boolean $check Checked si o no
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return void
*/
public function setChecked( $name, $check, $parametroOperacion='' )
{
$idCheck = $this->getCheckName( $name );
//Seleccionamos el valor dependiendo si esta seleccionado
$desc = $this->comunica->descCampoPanel[$idCheck];
$value = ($check ? $desc[self::ATRIBUTO_VALUECHECKED] : $desc[self::ATRIBUTO_VALUEUNCHECKED] );
return $this->comunica->setCampo( $name, $value, $parametroOperacion );
} //Fin de setChecked
/**
* Devuelve si un campo check esta marcado o no
*
* @param string $name Nombre del check
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return boolean
*/
public function isChecked( $name, $parametroOperacion='' )
{
//Devolvemos true o false dependiendo del valor del check
$value = $this->comunica->getCampo( $name, $parametroOperacion );
$desc = $this->comunica->descCampoPanel[$name];
$result = ($value == $desc[self::ATRIBUTO_VALUECHECKED]);
return $result;
} //Fin de isChecked
/**
* Establece el valor pasado como parámetro sobre el campo indicado como párametro del
* registro activo sobre el origen de datos actual (cursor)
*
* @param string $nombreCampo Nombre del campo
* @param string $valorCampo Valor del campo
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function setSrcImg( $nombreCampo, $valorCampo, $parametroOperacion='' )
{
return $this->comunica->setCampo( $nombreCampo, $valorCampo, $parametroOperacion );
} //Fin de setSrcImg
/**
* Establece el valor pasado como parámetro sobre el campo indicado como párametro del
* registro activo sobre el origen de datos actual (cursor)
*
* @access public
* @param string $nombreCampo Nombre del campo
* @param string $valorCampo Valor del campo
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function setValue( $nombreCampo, $valorCampo, $parametroOperacion='' )
{
return $this->comunica->setCampo( $nombreCampo, $valorCampo, $parametroOperacion );
} //Fin de setValue
/**
* Establece el valor pasado como parámetro sobre el campo indicado como párametro del
* registro activo sobre el origen de datos actual (cursor)
*
* @access public
* @param string $nombreCampo Nombre del campo
* @param string $valorCampo Valor del campo
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function setTree( $nombreCampo, $valorCampo, $parametroOperacion='' )
{
return $this->comunica->setArbol( $nombreCampo, $valorCampo, $parametroOperacion );
} //Fin de setTree
/**
* Establece el foco en el campo indicado ocmo parámetro del registro activo
*
* @param string $nombreCampo Nombre del campo
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function setFocus( $nombreCampo, $parametroOperacion='' )
{
return $this->comunica->setFocus( $nombreCampo, $parametroOperacion );
} //Fin de setFocus
/**
* Avanza la posición del cursor sobre el origen de datos
* actual (cursor) y devuelve el registro/tupla correspondiente
*
* @param string $nombreCampo Nombre del campo
* @param string $valorCampo Valor del campo
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function nextTupla( $parametroOperacion='' )
{
return $this->comunica->nextTupla( $parametroOperacion );
} //Fin de nextTupla
/**
* Devuelve el registro/tupla correspondiente y
* avanza la posición del cursor sobre el origen de datos
*
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function fetchTupla( $parametroOperacion='' )
{
return $this->comunica->fetchTupla( $parametroOperacion );
} //Fin de fetchTupla
/**
* Sustituye el registro actual de la fuente de datos
* prestablecida por el registro/tupla (array asociativo) pasado
* como parámetro
*
* @param string $nombreCampo Nombre del campo
* @param string $valorCampo Valor del campo
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar). Si no se indica se coge el fijado para la instancia
* @return mixed
*/
public function setTupla( $tupla, $parametroOperacion='' )
{
return $this->comunica->setTupla( $tupla, $parametroOperacion );
} //Fin de setTupla
/**
* Devuelve la matriz de registros correspondiente
* al origen de datos pasado como argumento o prestablecido
*
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function getAllTuplas( $parametroOperacion='' )
{
return $this->comunica->getAllTuplas( $parametroOperacion );
} //Fin de getAllTuplas
/**
* Devuelve la matriz de registros original correspondiente
* al origen de datos pasado como argumento o prestablecido
*
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function getAllTuplasAntiguas( $parametroOperacion='' )
{
return $this->comunica->getAllTuplasAntiguas( $parametroOperacion );
} //Fin de getAllTuplasAntiguas
/**
* Devuelve la matriz de registros original correspondiente
* al origen de datos pasado como argumento o prestablecido
*
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function getAllOldTuplas( $parametroOperacion='' )
{
return $this->comunica->getAllTuplasAntiguas( $parametroOperacion );
} //Fin de getAllOldTuplas
/**
* Establece la matriz de registros correspondiente
* al origen de datos pasado como argumento o prestablecido
*
* @param array $vTuplas Conjunto de tuplas/registros a asignar
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function setAllTuplas( $vTuplas, $parametroOperacion='' )
{
return $this->comunica->setAllTuplas( $vTuplas, $parametroOperacion );
} //Fin de setAllTuplas
/**
* Devuelve los campos correspondientes a la matriz de datos de la operación activa.
*
* @param string $parametroOperacion (Opcional) Indica la operacion de la que se quiere obtener la matriz.
* @return array
*/
public function getAllFields( $parametroOperacion='' )
{
return $this->comunica->getAllFields( $parametroOperacion );
} //Fin de getAllFields
/**
* Devuelve si el origen de datos prestablecido esta vacio o no.
*
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar)
* @return boolean
*/
public function isEmpty( $parametroOperacion='' )
{
return $this->comunica->isEmpty( $parametroOperacion );
} //Fin de isEmpty
/**
* Devuelve el nombre del componente asociado al campo indicado como párametro
*
* @param string $nombreCampo Nombre del campo.
* @return string
*/
public function getComponent( $nombreCampo )
{
return $this->comunica->getComponent( $nombreCampo );
} //Fin de getComponent
/**
* Devuelve un array con los atributos del componente asociado al campo indicado como párametro
*
* @param string $nombreCampo Nombre del campo.
* @return array
*/
public function getComponentAttributes( $nombreCampo )
{
return $this->comunica->getComponentAttributes( $nombreCampo );
} //Fin de getComponentAttributes
/**
* getList obtiene la estructura de la lista
*
* @access public
* @param string $nombreCampo Nombre del campo de la lista.
* @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar).
* @return IgepEstructuraLista
*/
public function getList( $nombreCampo, $parametroOperacion='' )
{
//Comprobamos si es una lista
if( get_class($this->listasPanel[$nombreCampo]) != 'gvHidraList' )
{
return null;
}
$objLista = & $this->listasPanel[$nombreCampo];
//Recogemos el valor del campo
$valorSeleccionado = $this->getValue( $nombreCampo, $parametroOperacion );
//Montamos la lista
//Si no tiene dependencia cogemos el valor de camposPreInsertados
if( !$objLista->hayDependencia() )
{
$listaResultado = $this->datosPreinsertados[$nombreCampo];
}
else
{
//Tenemos que construir la dependencia
$tupla = $this->comunica->currentTupla( $parametroOperacion );
$listaResultado = $objLista->construyeLista( $tupla );
}
$listaResultado['seleccionado'] = $valorSeleccionado;
//Modificar aqui
$objListaStruc = new IgepEstructuraLista( $listaResultado );
return $objListaStruc;
} //Fin de getList
/**
* Establece el contenido de una lista.
*
* @param string $nombreCampo Nombre del campo de la lista.
* @param IgepEstructuraLista $objListaStruc Estructura de la lista
* @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar).
*/
public function setList( $nombreCampo, $objListaStruc, $parametroOperacion= '' )
{
$v_lista = $objListaStruc->getEstructuraListaIgep();
$this->comunica->setList( $nombreCampo, $v_lista, $parametroOperacion );
} //Fin de setList
/**
* Devuelve para una tupla dada la información de un campo de tipo 'FILE'
* que se ha subido al servidor.
*
* @param string $nombreCampo Nombre del campo FILE del que se quiere obtener la información
* @param string $parametroOperacion (Opcional) Indica la operación sobre la que se quiere la tupla
* @return array
*/
public function getFileInfo( $nombreCampo, $pametroOperacion ='' )
{
return $this->comunica->getFileInfo( $nombreCampo, $pametroOperacion );
} //Fin de getFileInfo
/**
* Dada una tupla, establece el color para poder ser representado en una tabla de gvHidra.
*
* @param array $row Tupla a la que se le quiere dar color.
* @param string $color Color que se le va a dar a la tupla.
*/
public function setRowColor( & $row, $color )
{
if( !is_array($row) )
{
die( 'setColorRow_Error: el parámetro row no es un array' );
}
$row['__gvHidraRowColor'] = $color;
} //Fin de setRowColor
/**
* Dada una tupla, establece si ese registro del panel tabular se marca como seleccionado o no.
*
* @param array $row Tupla a la que se le quiere dar color.
* @param boolean $check chequeado o no
*/
public function setRowChecked( & $row, $check )
{
if( !is_array($row) )
{
die( 'setRowChecked_Error: el parámetro row no es un array' );
}
$row['__gvHidraRowChecked'] = $check;
} //Fin de setRowChecked
/* --------------------------FUNCIONES AUXILIARES -------------------------- */
/**
* Prepara los datos antes de realizar una operacion en la BD.
*
* @access private
* @param IgepConexion $conexion
* @param array|string $v_desCampos
*/
private function _prepararOperacion( $conexion, $v_desCampos )
{
$m_datos = $this->getAllTuplas();
$conexion->prepararOperacion( $m_datos, $v_desCampos );
$this->setAllTuplas( $m_datos );
$this->reset();
if( $this->getOperation() == self::OPERACION_ACTUALIZAR )
{
$m_datosAnt = $this->getAllTuplasAntiguas();
$conexion->prepararOperacion( $m_datosAnt, $v_desCampos );
$this->comunica->m_datos_antiguosTpl = $m_datosAnt;
$this->reset();
}
} //Fin de _prepararOperacion
/**
* Este método prepara los datos que vienen de estado FW y los pasa a estado presentación
* Devuelve el resultado por referencia y como valor de retorno.
*
* @param mixed $a_parametros
* @param mixed $a_tipo
* @param mixed $a_decimales Usado cuando convertimos valor individual
* @return mixed
*/
public static function prepararPresentacion( & $a_parametros, $a_tipo, $a_decimales='2' )
{
if( $a_decimales==='' )
{
$a_decimales = '2';
}
if( !is_array($a_parametros) and $a_parametros!=='' and $a_tipo!='' )
{
// le doy estructura de vector para no repetir el codigo
$vector = false;
$a_parametros = array(
array(
'col' => $a_parametros,
),
);
$a_tipo = array(
'col' => array(
self::ATRIBUTO_TIPO => $a_tipo,
self::ATRIBUTO_PARTE_DECIMAL => $a_decimales
),
);
}
else
{
$vector = true;
}
if( is_array($a_tipo) )
{
$transformer = new IgepTransformer();
$carfw = ConfigFramework::getNumericSeparatorsFW();
$caruser = ConfigFramework::getNumericSeparatorsUser();
$transformer->setDecimal(
$carfw['DECIMAL'] ,
$caruser['DECIMAL'] ,
$carfw['GROUP'] ,
$caruser['GROUP']
);
$fechafw = ConfigFramework::getDateMaskFW();
$fechauser = ConfigFramework::getDateMaskUser();
$transformer->setDate( $fechafw,$fechauser );
foreach( $a_parametros as $fila => $tupla )
{
foreach( $a_tipo as $campo => $descTipo )
{
if( !isset($tupla[$campo]) )
{
continue;
}
//ignoramos las listas
if( is_array($a_parametros[$fila][$campo]) )
{
continue;
}
$tipo_efectivo = ( empty($descTipo[self::ATRIBUTO_TIPO]) ? TIPO_CARACTER : $descTipo[self::ATRIBUTO_TIPO] );
if( $tipo_efectivo == TIPO_DECIMAL )
{
$a_parametros[$fila][$campo] = $transformer->expandExponent(
$a_parametros[$fila][$campo] ,
$carfw['DECIMAL'] ,
$carfw['GROUP']
);
}
if( isset($descTipo[self::ATRIBUTO_TIPO]) && ($descTipo[self::ATRIBUTO_TIPO] == TIPO_DECIMAL) )
{
$a_parametros[$fila][$campo] = $transformer->decimalPad( $a_parametros[$fila][$campo], $descTipo[self::ATRIBUTO_PARTE_DECIMAL] );
}
if( empty($a_parametros[$fila][$campo]) )
{
continue;
}
elseif( ($tipo_efectivo == TIPO_FECHA or $tipo_efectivo == TIPO_FECHAHORA) and is_object($a_parametros[$fila][$campo]) )
{
$a_parametros[$fila][$campo] = $a_parametros[$fila][$campo]->format($fechauser.($tipo_efectivo==TIPO_FECHAHORA? ' H:i:s':''));
}
else
{
$a_parametros[$fila][$campo] = $transformer->process($tipo_efectivo, $a_parametros[$fila][$campo]);
}
}
}
}
if( !$vector )
{
$a_parametros = $a_parametros[0]['col'];
}
return $a_parametros;
} //Fin de prepararPresentacion
/**
* Este método permite recuperar un ActionForward (un destino). Esto permite cambiar el destino de
* una accion.
*
* @param string $name Identificador del ActionForward que se quiere recuperar.
* @return ActionForward
*/
public function getForward( $name )
{
$forward = $this->comunica->getForward( $name );
if( empty($forward) )
{
die('Error: no existe el retorno '.$name.', consulte el fichero de mapeo.');
}
return $forward;
} //Fin de getForward
} //End IgepComunicaUsuario