El cuadro combinado desempeña estas funciones:
1.Mostrar el nombre de las ciudades que incluye el elemento Cities de la fuente XML de la página.
2.Enviar una solicitud SOAP solicitando la hora actual de una ciudad cuando el usuario selecciona una ciudad.
3.Actualizar todos los nodos //Time y //Timezone a los que afecte la selección realizada por el usuario (acciones "Actualizar..." de la imagen siguiente).
Seleccionar elementos de la lista desplegable del cuadro combinado
En el diseño haga doble clic en el control cuadro combinado para abrir el cuadro de diálogo "Editar el cuadro combinado". Los elementos de la lista desplegable del cuadro combinado son los nombres de las ciudades del elemento Cities de la fuente XML de la página. Estos nombres de ciudad se seleccionan con la expresión XPath $XML1/CityTime/Cities/City/Name. El valor XML de estos nombres de ciudad se configuró para que coincida con el texto del nombre de la ciudad (la entrada visible de la lista desplegable del cuadro combinado).
Cuando el usuario selecciona una ciudad en el cuadro combinado, el valor XML de la selección (el mismo que el de la entrada del cuadro combinado) se pasa al nodo $XML1/CityTime/SelectCity/City/Name. Esto se consigue creando un vínculo con la fuente de página entre el cuadro combinado y este nodo de la estructura XML (esto se hace arrastrando el nodo desde el panel Fuentes de página y colocándolo en el control).
Definir la solicitud SOAP para que obtenga la hora actual de una ciudad
En el diseño haga doble clic en el símbolo Acciones de control situado en la esquina superior izquierda del cuadro combinado para abrir el cuadro de diálogo "Acciones" del cuadro combinado (imagen siguiente). Hay definida una acción Ejecutar solicitud SOAP para el evento AlTerminarDeEditar. El servicio web ofrece una operación (getTimeZoneTimeResult) que obtiene la hora actual del una zona horaria determinada. La zona horaria cuya hora se necesita se envía en forma de parámetro en la solicitud SOAP. Para ver cómo se definió la solicitud SOAP, haga clic en el botón Edición de la acción Ejecutar solicitud SOAP (marcado con un círculo rojo en la imagen siguiente). Esto abre el cuadro de diálogo "Solicitud SOAP".
En el cuadro de diálogo "Solicitud SOAP" el texto de la solicitud SOAP aparece en el panel de vista previa y el parámetro de la zona horaria aparece en el panel de parámetros. Haga clic en el botón XPath del parámetro para ver la expresión XPath que selecciona el valor del parámetro m:timezone:
for $i in $XML1/CityTime/SelectCity/City/Name return $XML1//Cities/City/TimeZone[../Name=$i]
La expresión XPath primero selecciona el nombre de la ciudad que el usuario tiene seleccionado en el cuadro combinado y después almacena este valor en la variable $i. A continuación, la expresión selecciona (en el elemento Cities de la fuente XML de la página) el elemento Timezone de la ciudad que tenga un elemento Name que coincida con el valor de $i. De esta manera, la zona horaria de la ciudad seleccionada por el usuario se establece como parámetro m:timezone de la solicitud SOAP. Al recibir esta solicitud, el servicio web devolverá la hora actual de la zona horaria solicitada.
Almacenar la respuesta SOAP en una variable
La respuesta SOAP del servicio web se almacena en la variable $MT_HTTPExecute_Result (marcada con un círculo azul en la imagen anterior). Recuerde que toda la respuesta SOAP, que es un documento XML, se almacena en la variable. Deberá conocer la estructura de la respuesta SOAP para poder seleccionar el nodo que contiene la hora de la zona horaria. En el caso que nos ocupa, es esta expresión XPath la que encuentra la hora de la zona horaria en la respuesta SOAP almacenada:
$MT_HTTPExecute_Result//getTimeZoneTimeResult
Nota: el nodo getTimeZoneTimeResult no tiene prefijo en la respuesta SOAP y está en el espacio de nombres http://www.Nanonull.com/TimeService/. Por tanto, el espacio de nombres XPath predeterminado del diseño se cambió por este espacio de nombres. Si no se hace esto, también se puede tener acceso a la hora de la zona horaria de la respuesta SOAP con esta expresión XPath: $MT_HTTPExecute_Result//*:getTimeZoneTimeResult, que busca el nodo getTimeZoneTimeResult en cualquier espacio de nombres (véase también Espacios de nombres de los nodos de la respuesta SOAP y de la estructura XML).
Actualizar nodos con la hora de la zona horaria
La acción Actualizar nodo sirve para actualizar dos nodos de la estructura XML con la hora de la zona horaria recibida: (i) $XML1/CityTime/SelectCity/City/Time y (ii) $XML1/CityTime/Cities/City[Name=$XML1/CityTime/SelectCity/City/Name]/Time. La parte que aparece resaltada en la segunda expresión especifica que solamente se debe actualizar la ciudad de la base de datos Cities cuyo nombre coincida con el nombre de la ciudad seleccionada por el usuario. El contenido de estos nodos actualizados aparece inmediatamente en las etiquetas gracias a los vínculos de fuente de página (ver puntos nº 5 y 9). El valor de la hora de la zona horaria se obtiene de la respuesta SOAP a través de la variable $MT_HTTPExecute_Result.
Ver la zona horaria de la ciudad seleccionada
La acción Actualizar nodo sirve para actualizar el nodo $XML1/CityTime/SelectCity/City/TimeZone. El valor con el que se actualiza el nodo es el contenido del nodo seleccionado con la expresión: $XML1/CityTime/Cities/City[Name=$XML1/CityTime/SelectCity/City/Name]/Timezone. Esta expresión selecciona el elemento TimeZone de la ciudad de la base de datos Cities cuyo nombre coincida con el nombre de la ciudad seleccionada por el usuario. El contenido del nodo actualizado aparece inmediatamente en un campo de edición gracias a un vínculo con la fuente de página (ver punto nº 4).
|