UNPA_Web Service Mapuche

Buenos dias estamos desarrollando en toba 2.5.0 una aplicación propia que hace uso de algunos de los WS provistos por el SIU-Mapuche. Ahora bien, dado a que necesitamos implementar nuevas operaciones en algunos de los WS que nos devuelvan datos más precisos que requerimos es que estamos probando la secuencia de pasos a realizar para lograr esto. Para lo cual seguimos los siguientes pasos:

  1. Primeramente ya tenemos configurado el certificado del servidor en el cliente, para lo cual corrimos el siguiente comando
    ./toba servicios_web cli_configurar -c [dir instalacion]/instalacion/i__desarrollo/p__prueba/server.crt -s mapuche_agentes -p prueba -i desarrollo
    donde mapuche_agentes hace referencia al WS que se encuentran en: http://[dir_server/mapuche/servicios.php/ServicioWebAgentes

  2. Dentro de ServicioWebAgentes.php copiamos y pegamos la operación getCargosActivos como getCargosActivosUNPA, sólo a efectos de probar como agregar una nueva operación y habilitarla en el SIU-Mapuche. Esto quedo de la siguiente manera:

/** Listado de cargos activos de un agente UNPA
* @param XML $mensaje
Campos:

  • (int) legajo: Legajo del agente

* @return XML $retorno Cargos activos del agente
* (maps to the xs:xml XML schema type )
*/
function op__getCargosActivosUNPA(toba_servicio_web_mensaje $mensaje)
{
$error = self::controles_ok(‘ServicioWebAgentes’,‘getCargosActivosUNPA’, $mensaje);
if ($error != 0) {
return self::get_mensaje_error($error);
}

                    $xml = new SimpleXMLElement($mensaje->get_payload());
                    $legajo = (string) $xml->legajo;
                    $cargos = cargos::get_cargos_agente_filtro($legajo, "map_es_cargo_activo(dh03.nro_cargo) = '1'");
                    $payload = '<ns1:getCargosActivosUNPA xmlns:ns1="'.MAP_URL_SW.'">';
                if(count($cargos) >0){
                            $payload .= payload::get_payload($cargos);
                }else{
                    $payload .= payload::get_payload(array("error"=>'true',"errorTxt"=>mensajeria::get_mensaje('aviso', 'servicios_web', 'sin_cargos_activos')));
                }
                $payload .='</ns1:getCargosActivosUNPA>';
                $retorno =  new toba_servicio_web_mensaje($payload);
                    return $retorno;
            }
  1. Agregamos en la tabla ws_configuracion el registro:

ServicioWebAgentes getCargosActivosUNPA TRUE TRUE TRUE

  1. Verificamos que se visualizara como activa la nueva operación en el SIU-Mapuche. Y efectivamente la visualizamos.

Del lado del cliente:

La idea es listar los cagos activos de un determinado agente y otros datos para lo cual tenemos el siguiente código que lista los cargos activos de un agente en un cuadro:

<?php 02 class ci_cargosActivos extends prueba_ci 03 { 04 //----------------------------------------------------------------------------------- 05 //---- cuadro_cargos_activos -------------------------------------------------------- 06 //----------------------------------------------------------------------------------- 07 08 function conf__cuadro_cargos_activos(prueba_ei_cuadro $cuadro) 09 { 10 //--1- Arma el mensaje 11 $legajo = $this->obtenerAgentes(); 12 echo ($legajo); 13 $legajo= array ($legajo); //También probé enviar $legajo sin hacer esta asignación pero el error persiste 14 $opciones = array('action' => 'getCargosActivosUNPA'); //En action se detalla la operacion a invocarse 15 $mensaje = new toba_servicio_web_mensaje($legajo, $opciones); 16 17 //--2- Arma el servicio 18 $opciones = array(); 19 $servicio = toba::servicio_web('mapuche_agentes', $opciones); 20 21 //-- 3 - Muestra la respuesta 22 try { 23 $respuesta = $servicio->request($mensaje); 24 $cuadro->set_datos($respuesta->get_array()); 25 } catch (toba_error_servicio_web $e) { 26 toba::notificacion()->info($e->get_mensaje().' (codigo "'.$e->get_codigo().'")'); 27 } 28 } 29 30 31 function obtenerAgentes() 32 { 33 //--1- Arma el mensaje 34 $opciones = array('action' => 'getAgentes'); //En action se detalla la operacion a invocarse 35 $filtro = array(); 36 $filtro[] = array('campo'=>'legajo', 'operador' => 'es_igual_a', 'valor'=> '400229'); 37 $mensaje = new toba_servicio_web_mensaje(array('parametros' => array('filtro' => $filtro )), $opciones); 38 39 //--2- Arma el servicio 40 $opciones = array(); 41 $servicio = toba::servicio_web('mapuche_agentes', $opciones); 42 43 //--3- Muestra la respuesta 44 try { 45 $respuesta = $servicio->request($mensaje); 46 $legajo = $respuesta->get_array(); 47 $legajo = $legajo[0]; 48 $legajo = $legajo['legajo']; 49 return $legajo; //aquí solo retorno el legajo porque lo que queremos probar es listar los cargos activos de un legajo en particular 50 } catch (toba_error_servicio_web $e) { 51 toba::notificacion()->info($e->get_mensaje().' (codigo "'.$e->get_codigo().'")'); 52 } 53 } 54 } 55 ?>

Adjunto el error visualizado:

A efectos de verificar que el problema fuera que por alguna razón no está reconociendo la nueva operación, se empleo la original getCargosActivos, pero el error persiste.

¿Que puede ser?

Muchas gracias!!

Saludos
Paola
UNPA


UNPA_Error de ejecucion.rar (201 KB)

Hola Pao, vos invocas dos operaciones de un web service de mapuche, primero getAgentes y luego getCargosActivos.
¿getAgentes se ejecuta bien y el problema esta en getCargosActivos?
En el log, veo que en un momento recibiste una respuesta que deduzco es de getAgentes.

Hola Roberto efectivamente asi es. getAgentes responde y getCargosActivos no. Ambas operaciones están en el mismo WS.

Hola Paola,

Como poder pueden ser muchas cosas, el error que devuelve la libreria es demasiado generico, lo complicado en estos casos es justamente debuggearlo. Algo que me llama la atencion, es que estas pasando el parametro al WS derecho viejo… pero del otro lado, lo intentas recuperar de una manera particular, probaste colocando esta linea asi?:

$legajo= array ('legajo' => $legajo); 

Por otro lado, supongo que en el metodo get_opciones del servicio web de Mapuche, agregaron el action correspondiente para ‘getCargosActivosUNPA’.

Otra cosa que miraria, son los logs de WS del servidor de Mapuche… ahi es donde esta el jugo, para poder ver si el pedido efectivamente llego, que llego y que se le envio al metodo del WS, eso lo podes ver desde toba_usuarios. Una manera rapida y sencilla tambien de verificarlo, es viendo que fue lo que hizo este metodo cargos::get_cargos_agente_filtro en el servidor, ver si la SQL quedo bien armada, etc. Al menos para verificar que el parametro le llega bien o que se llego hasta ahi.

Saludos