Componentes del diseño
Los componentes del diseño se enumeran en las imágenes que aparecen a continuación y se describen más abajo. La imagen de la izquierda muestra la simulación y la de la derecha muestra el diseño. Haga clic en un número para leer la descripción del componente de diseño correspondiente.
Cuando se hace clic en el botón Update UTC Time en tiempo de ejecución, el evento AlHacerClicEnBotón desencadena dos acciones (imagen siguiente). Primero, una acción Ejecutar solicitud SOAP envía una solicitud SOAP solicitando la hora UTC al servicio web. La respuesta SOAP del servicio web se almacena en la variable $MT_HTTPExecute_Result (marcada con un círculo azul en la imagen). Después, la acción Actualizar nodo(s) actualiza el nodo $XML1/CityTime/UTC con la hora UTC. El contenido de este nodo aparece inmediatamente en una etiqueta (ver el punto nº 2). El servicio web incluye una operación (getUTCTime) que obtiene la hora UTC actual. 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 anterior). Esto abre el cuadro de diálogo "Solicitud SOAP", cuyo panel de vista previa muestra el texto de la solicitud SOAP.
|
Esta etiqueta está asociada al nodo $XML1/CityTime/UTC de la fuente de página (vínculo con la fuente de página de la etiqueta). Los datos de este nodo aparecerán en la etiqueta. Como el nodo $XML1/CityTime/UTC se actualiza cuando se hace clic en el botón Update UTC Time (ver punto nº 1), la hora UTC actualizada aparece automáticamente en esta etiqueta.
|
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 combinadoEn 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 ciudadEn 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 variableLa 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 horariaLa 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 seleccionadaLa 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).
|
Este campo de edición está asociado con el nodo $XML1/CityTime/SelectCity/City/TimeZone de la fuente de página (este es el vínculo con la fuente de página del campo de edición). Por tanto, en cuanto el usuario selecciona una ciudad en el cuadro combinado, la zona horaria de dicha ciudad aparece en el campo de edición. Esta es la cadena de acciones: cuando el usuario selecciona una ciudad, se actualiza el nodo SelectCity//TimeZone (por la acción Actualizar del cuadro combinado). Después, como el nodo SelectCity//TimeZone es el vínculo con la fuente de página del campo de edición, éste muestra automáticamente el valor actualizado del nodo SelectCity//TimeZone.
|
Esta etiqueta está asociada con el nodo $XML1/CityTime/SelectCity/City/Time de la fuente de página (este es el vínculo con la fuente de página de la etiqueta). Cuando el usuario selecciona una ciudad en el cuadro combinado, (i) se envía una solicitud SOAP solicitando la hora actual en la zona horaria de dicha ciudad y (ii) se actualiza el nodo SelectCity//Time con la hora actual en esa zona horaria (por la acción Actualizar del cuadro combinado). Después, como el nodo SelectCity//Time es el vínculo con la fuente de página de la etiqueta, ésta muestra automáticamente la hora actualizada.
|
Cada una de las ciudades del elemento Cities de la fuente XML de la página se definen en un elemento City. Por tanto, el elemento City se creó como fila extensible de una tabla con tres columnas y filas dinámicas. Cada ciudad aparece en una fila. Las columnas muestran respectivamente el nombre de cada ciudad, su zona horaria y su hora. Los controles utilizados en las columnas son, respectivamente, un botón (con el elemento Name de la ciudad como vínculo con la fuente de página), un campo de edición (con el elemento Timezone de la ciudad como vínculo con la fuente de página) y una etiqueta (con el elemento Time de la ciudad como vínculo con la fuente de página). Consulte los puntos nº 7, 8 y 9.
|
Este botón muestra el nombre de la ciudad mediante un vínculo entre la fuente de página y el nodo $XML1/CityTime/Cities/City/Name. En tiempo de ejecución, cuando se hace clic en el botón de una ciudad, se envía una solicitud SOAP para obtener la hora de esa ciudad (imagen siguiente). El valor del parámetro m:timezone de la solicitud se obtiene del elemento TimeZone de la ciudad. Como el nodo de contexto es City, la expresión XPath que captura la zona horaria de la ciudad será TimeZone. La respuesta SOAP se almacena en la variable $MT_HTTPExecute_Result. A continuación, una acción Actualizar nodo actualiza el nodo $XML1/CityTime/Cities/City/Name con la hora de la zona horaria. El contenido de este nodo actualizado aparece automáticamente en una etiqueta (ver punto nº 9). |
Este campo de edición está asociado con el nodo XML $XML1/CityTime/Cities/City/TimeZone (este es el vínculo con la fuente de página del campo de edición). El contenido de este nodo no cambia.
|
Esta etiqueta está asociada con el nodo XML $XML1/CityTime/SelectCity/City/Time (este es el vínculo con la fuente de página de la etiqueta). Los datos de este nodo aparecen en la etiqueta en cuanto el usuario hace clic en el correspondiente botón City (ver punto nº 7). Esto se debe a que (i) el botón tiene una acción para actualizar este nodo y (ii) este nodo es el vínculo con la fuente de página de la etiqueta.
|
Acciones de la página
Para ver las acciones de la página, haga clic con el botón derecho dentro de la página y seleccione Acciones de la página... en el menú contextual. En el cuadro de diálogo que aparece podrá ver que se definieron tres acciones para el evento AlCargarPágina. Estas acciones se ejecutarán cuando se cargue la página y ofrecen los datos para la página inicial que aparece en pantalla.
Estas son las tres acciones que están definidas:
•Ejecutar solicitud SOAP: la acción solicita la hora UTC al servicio web y almacena la respuesta en la variable $MT_HTTPExecute_Result. La solicitud se define igual que para el botón UTC Time (ver punto nº 1).
•Actualizar nodo(s): actualiza el nodo $XML1/CityTime/UTC con la hora UTC. Como este nodo es el vínculo con la fuente de página de la etiqueta UTC Time (ver punto nº 2), la etiqueta se inicializará con la hora UTC actual.
•Actualizar nodo(s): actualiza el nodo $XML1/CityTime/SelectCity/City/Time con la hora UTC. Como el valor inicial de la ciudad seleccionada (SelectCity//Name) es UTC Time (ver archivo XML), inicializamos el nodo SelectCity//Time con la hora UTC actual.