Pregunta
Kurro Lopez · Feb 7

Valor $c(0) en nodo vacio de XML

Buenas a todos.

Tengo un servicio creado por el wizard de WebServices para la invocación a un proveedor de citas.

Para valicar la petición, tengo que revisar si en el nodo de mensajes viene algún texto porque eso significa que ha habido algún problema con las citas solicitadas.

Mi clase de respuesta del proveedor es algo como esta (por motivos de confidencialidad, no puedo mostrar la clase real, pero si el valor exacto del nodo que estoy preguntando):

Class DKV.CITAS.Prov01.tns.listaDeHuecosType Extends (%SerialObject, %XML.Adaptor) [ ProcedureBlock ]
{

Parameter ELEMENTQUALIFIED = 1;

Parameter NAMESPACE = "http://ws.citaonline.citacion.misalud.org/";

Parameter XMLNAME = "listaDeHuecosType";

Parameter XMLSEQUENCE = 1;

Property idListaHuecos As %String(MAXLEN = "", XMLNAME = "idListaHuecos");

Property listaHuecos As list Of DKV.CITAS.Prov01.tns.huecoType(XMLITEMNAME = "hueco", XMLNAME = "listaHuecos", XMLPROJECTION = "COLLECTION");

Property motivo As %String(MAXLEN = "", XMLNAME = "motivo");

Storage Default
{
    .....
}
}

Si la respuesta del WS es

<infoCita>
    <fecha>2022-02-07</fecha>
    <idListaHuecos>Feb22-ahsKOhchu3</idListaHuecos>
    <listaHuecos>
            <fecha>2022-02-07T10:00:00+1/fecha>
            <fecha>2022-02-07T10:15:00+1/fecha>
            <fecha>2022-02-07T10:30:00+1/fecha>
            <fecha>2022-02-07T10:45:00+1/fecha>
            <fecha>2022-02-07T11:00:00+1/fecha>
            <fecha>2022-02-07T11:15:00+1/fecha>
    </listaHuecos>
    <motivo><motivo>
</infoCita>

Funciona correctamente. Como veis, devuelve las fechas de las citas disponibles y el nodo de motivo está vacío.

Si existe algún problema, el proveedor devuelve algo como esto:

<infoCita>
    <fecha>2022-02-07</fecha>
    <idListaHuecos>Feb22-ahsKOhchu3</idListaHuecos>
    <listaHuecos></listaHuecos>
    <motivo>No hay disponibilidad para la fecha indicada<motivo>
</infoCita>

Por lo que, si quiero saber si se ha producido algún error, hago la siguiente comprobación

 if ($length(context.respuesta.motivo) > 0)
 {
    set hayError = 1
    set mensaje = context.respuesta.motivo
 }

 

¿Que ocurre? Que si el proveedor envía un nodo autocerrado, el valor de "motivo" no es vacío, sino el valor $c(0)

<infoCita>
    <fecha>2022-02-07</fecha>
    <idListaHuecos>Feb22-ahsKOhchu3</idListaHuecos>
    <listaHuecos>
            <fecha>2022-02-07T10:00:00+1/fecha>
            <fecha>2022-02-07T10:15:00+1/fecha>
            <fecha>2022-02-07T10:30:00+1/fecha>
            <fecha>2022-02-07T10:45:00+1/fecha>
            <fecha>2022-02-07T11:00:00+1/fecha>
            <fecha>2022-02-07T11:15:00+1/fecha>
    </listaHuecos>
    <motivo/>
</infoCita>

 

¿Existe algún XML Attribute que me pueda dar como vacio los valores nulos o character 0? He probado a poner default values pero no funciona. Así que he tenido que modificar la condición de validación.

 if context.respuesta.motivo '= $c(0)
 {
     if ($length(context.respuesta.motivo) > 0)
     {
        set hayError = 1
        set mensaje = context.respuesta.motivo
     }
 }

¿Es normal que devuelva un valor diferente si el nodo está ausente, vacío o autocerrado? ausente y vacío devuelve una cadena vacía

 

Un saludo y muchas gracias,

Kurro López

Product version: HealthShare 2017.2
$ZV: Cache for Windows (x86-64) 2017.2.1 (Build 801_3U) Thu Apr 12 2018 10:02:23 EDT
0
0 67
Debate (1)1
Inicie sesión o regístrese para continuar