Download pdf - Power Builder Tutor 2

Transcript
Page 1: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

Módulos

· Portada

· Información de PowerBuilder

· Actualizaciones/EBFs

· Archivo de Historias

· Buscar

· Carrito de Compras

· Contáctenos

· Encuestas

· Enlaces Web

· Estadisticas

· Poner Noticias

· Preguntas Frecuentes

· Recomiendenos

· Su cuenta

· Top 10

· Topicos

· Trivia de PB

Módulos Invisibles (Activos con nombre

invisible) · Ninguno

TUTORIAL DE POWER BUILDER 8.0 / 9.0 (PARTE II) PARTE II

TUTORIAL DE POWERBUILDER 8.0/9.0

PARTE II

PARTE II INDICE

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (1 de 27)03/01/2006 01:29:44 p.m.

Page 2: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

Módulos Inactivos

(Para Pruebas) · AvantGo

· catalog

· Empleos PB

· Enciclopedia

· Forums

· Journal

· Members List

· Mensajes Privados

· Revisiones

· Secciones

Administración

· Administration

· NEW Story

· Change Survey

· Content

· Logout Contenido Esperando

· Envíos: 21

· Reviews: 0

· Enlaces: 0

· Modif. Links: 0

· Links Rotos: 5

· Descargas: 0

· Modif. Downloads: 0

· Downloads Rotos: 7

Usuarios

1 ACERCA DEL AUTOR

2 Introducción

3 Power script básico

3.1 Sentencia IF

3.2 Definición de variables

3.3 Asignación de valores

3.4 Uso del cuadro de mensaje (Messagebox)

3.5 Condicionales

3.6 Comentarios

4 Configurar objeto de transacción y conectarse

5 Desconectarse de la base de datos

6 Crear objeto datawindow

7 Crear control datawindow

8 Asignar el Objeto datawindow en el Control Datawindow

9 Conectar el datawindow control a la base de datos

10 Traer y mostrar los datos de la tabla en el Datawindow

11 Personalizar la ventana y Los Botones

12 Insertar registros

13 Borrar registros

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (2 de 27)03/01/2006 01:29:44 p.m.

Page 3: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

Bienvenido, otobar.

Mensaje Privados Sin Leer: 0 Leídos: 0

Membresía: Ultimo: rlloza Nuevos Hoy: 13 Nuevos Ayer: 0 Total: 14546

Gente en línea: Visitantes: 41 Miembros: 8 Total: 49

En línea ahora: 01: xduque 02: rlloza 03: lcastillo23 04: cimol 05: henu 06: fvera2005 07: otobar 08: davidsoles

Login

Admin: [ Salir ]

Viejos Articulos

14 Actualizar la tabla

1 ACERCA DEL AUTOR

Oscar Uriel Tobar Rios es un Programador Colombiano certificado en Fasttrack to Power Builder, Advanced Power Builder, Mastering in Datawindows, que lleva mas de cinco años como programador de PowerBuilder. Actualmente se desempeña como Consultor de sistemas de información en Power Builder y ha desarrollado importantes desarrollos para empresas Latinoamericanas. Es el creador y webmaster del mas importante portal de programación de PowerBuilder de Latinoamérica (www.powerbuilder.org) y colaborador de otros portales de programación. Para contactarse con el puede hacerlo a través de MSN es [email protected] .

2 Introducción

Este manual pretende ser una guía para todas aquellas personas que programan en cualquier lenguaje y desean comenzar a utilizar el PowerBuilder 9.0. Para usar este tutorial deben tener instalado PowerBuilder 9.0 (pero funciona con la versión 8.0) y Adaptive Server Anywhere 8.0 (o anterior).

Este tutorial pretende mostrar paso a paso a los nuevos programadores que se inician en PowerBuilder la manera de crear una aplicación muy básica que permita conectarse a una base de datos y consultar, modificar, eliminar y guardar la información de una tabla.

3 Power script básico

Obviamente para poder realizar una aplicación usted debe conocer o tener nociones del lenguaje que va a programar (llamado Power Script). Power Builder tiene una sintaxis en sus scripts parecida a la de el lenguaje C. En esta parte usted debe saber lo siguiente:

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (3 de 27)03/01/2006 01:29:44 p.m.

Page 4: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

Jueves, 20 octubre

· VISUAL EXPERT - Nuevo patrocinador del II Encuentro de Programadores PowerBuilde

· programando en visual studio.net como en powerbuilder

Martes, 18 octubre

· Buscar un registro en un dw grid y marcarlo

Domingo, 16 octubre

· Numero de linea en datawindow con varios group

Sábado, 15 octubre

· Nuevo Distribuidor de Productos SYBASE en BOLIVIA

Viernes, 14 octubre

· Nuevo EBF de PowerBuilder 9.0.3

Jueves, 13 octubre

· ISUG Confirma su Participación como Patrocinador

Miércoles, 12 octubre

· Manual Didáctico de Power Builder 9.0

Lunes, 10 octubre

· MODELO ''ESOL''

Domingo, 09 octubre

· Nuevas Actualizaciones de PB

Sábado, 08 octubre

3.1 Sentencia IF

La sentencia if tiene la siguiente estructura

IF THEN

END IF

Las sentencias no distinguen entre mayúsculas y minúsculas. También puede usar el IF ELSE asi:

if then

….sentencias

…..

else

….sentencias

…..

end if

3.2 Definición de variables

Por ahora solamente vamos a manejar variables locales, pero en el siguiente capitulo se dará explicación de las variables de instancia (instante), compartidas (shared) y globales (Global).

Para definir una variable siga la siguiente sintaxishttp://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (4 de 27)03/01/2006 01:29:44 p.m.

Page 5: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

· Como ejecutar una busqueda conforme se va tecleando

Lunes, 05 septiembre

· II ENCUENTRO DE PROGRAMADORES POWERBUILDER

Viernes, 02 septiembre

· BRUCE ARMSTRONG CONFIRMA SU ASISTENCIA AL II ENCUENTRO DE PROGRAMADORES PB

Viernes, 26 agosto

· LO INVITAMOS AL FORO NUEVO FORO DE POWERBUILDER

Domingo, 21 agosto

· Titulos en datawindows crosstab

Jueves, 14 julio

· Uso objeto MDI

Lunes, 11 julio

· Modificar el Where de una datawindow

Martes, 21 junio

· De Números a Letras FINAL y bien hecho>>>

Viernes, 10 junio

· Software Contable desarrollado en Power Builder

Miércoles, 04 mayo

· Equivalencias en el PowerScript

Tipo_de_dato nombre_de_variable

Ejemplo

Integer li_a

Se antepone li por que es una variable local entera. (li_ = local integer). Los tipos mas comunes de variables numéricas , son integer, long y double, y string y char en caracteres. Si desea ver mas detalle acerca de los estándares de nombres de las variables puede consultarlo en la pagina de nombre de las variables según el tipo.

3.3 Asignación de valores

Para asignar un valor a una variable use el simbolo igual = así

Integer li_a

String Ls_error

Li_a = 1

Ls_erro = “HOLA”

3.4 Uso del cuadro de mensaje (Messagebox)

Muchas veces es útil para dar información al usuario acerca del estado del sistema, los errores o de algún proceso, los cuadros de mensaje (messagebox), estos mensajes se envían con la siguiente sintaxis basica,:

Messagebox(titul_ventana, texto_ventana) ej:

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (5 de 27)03/01/2006 01:29:44 p.m.

Page 6: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

· Software : Sistema Administrativo para Entidades Educativas

Martes, 26 abril

· ¡ Empieza la encuesta Mundial 2005 sobre PowerBuilder!

Martes, 12 abril

· Titulos largos de reportes, en datawindow typo Crosstab

Lunes, 28 marzo

· Ordenar en un dw grid,tabular con click en el titulo de la columna

Jueves, 24 marzo

· Bloquear la rueda del mouse para evitar el zoom en una DW

Domingo, 27 febrero

· El portal de PowerBuilder informa a sus visitantes que

Sábado, 26 febrero

· Tercer EBF de PowerBuilder 10.0.1

Martes, 22 febrero

· Capturar los Nombres del Menu con el objeto MENUID

Viernes, 11 febrero

· Vuelven Los Foros Web de Power Builder

Miércoles, 09 febrero

· Cambiar la fecha del Computador

String ls_texto

Ls_texto = “HOLA”

Messagebox(“Ventana de mensaje”,ls_texto)

3.5 Condicionales

Los condicionales mas usados son los siguientes

Igual =

Diferente <>

Mayor que >

Menor que <

Y pueden usarse con el conector y (and) o el conector o (or) ejemplo

Integer li_valor, li_costo

If li_valor > 1 or li_costo = 1 then

Messagebox(“Hola titulo ”,”hola mensaje”)

End if

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (6 de 27)03/01/2006 01:29:44 p.m.

Page 7: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

Artículos Viejos

3.6 Comentarios

Los comentarios se pueden realizar de una sola linea colocando dos slash (//):

//comentario de una linea

O tambien se puede hacer un bloque, encerrandolo entre /* y */ asi:

/* linea comentario 1

linea comentario 2

linea comentario 3

linea comentario 4

*/

Contenido de la parte 2

En la primera parte del tutorial se creo el workspace, la aplicación, y el db profile a la base de datos, ya estamos listos para crear nuestra primera aplicación que permita insertar, borrar, y actualizar datos en una tabla de la base de datos. Este manual explica como realizar una ventana que permita realizar esta tarea.

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (7 de 27)03/01/2006 01:29:44 p.m.

Page 8: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

Hasta este momento nuestra aplicación la podemos correr haciendo click en el botón de correr en la barra de

herramientas o al dar CTRL.+R.

Al correr la aplicación veremos lo siguiente:

Y al hacer clic en el botón none, se debe Cerrar y finaliza la aplicación.

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (8 de 27)03/01/2006 01:29:44 p.m.

Page 9: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

4 Configurar objeto de transacción y conectarse

El objeto transacción es el objeto que permite conectar una aplicación Power Builder con una base de datos. Este objeto controla la conexión y los posibles errores que puedan suceder entre la aplicación y la base de datos.

El objeto transacción como vimos en la primera parte, se configura según el tipo de base de datos a la cual nos vamos a conectar. Para este ejemplo nos vamos a conectar a la base de datos local que powerbuilder instala por defecto (SQL Anywhere).

Normalmente el objeto transacción (transaction) se configura y se conecta cuando se inicia la aplicación, es decir en el open de la aplicación. Para hacer esto abra el objeto aplicación (file/open/aplication) en el evento open donde esta el código de abrir la ventana inicial, borrelo y remplace por este código:

// Profile EAS Demo DB V4

SQLCA.DBMS = "ODBC"

SQLCA.AutoCommit = False

SQLCA.DBParm = "ConnectString='DSN=EAS Demo DB V4;UID=dba;PWD=sql'"

Connect;

If sqlca.sqlcode = 0 then

Messagebox(“Conexión a la base de datos”,”La conexión a la base de datos fue exitosa”)

Open(w_inicial)

else

messagebox(“Error”,”No se pudo conectar debido al siguiente problema ”+sqlca.sqlerrtext)http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (9 de 27)03/01/2006 01:29:44 p.m.

Page 10: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

end if

Con esto ya nos conectamos a la base de datos local de sql anywhere y abrimos nuestra primera ventana.

Ahora al correr la aplicación (CTRL.+R) aparece un mensaje cuando se conecta (este mensaje es únicamente para fines didácticos, pero normalmente no se requiere)

Luego aparece la venta que creamos antes

5 Desconectarse de la base de datos

Normalmente el objeto transacción (transaction) se desconecta cuando se termina la aplicación, es decir en el evento close de la aplicación. Para hacer esto abra el objeto aplicación (si ya esta abierto solamente seleccione el evento close) coloque este código:

Disconnect;

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (10 de 27)03/01/2006 01:29:44 p.m.

Page 11: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

6 Crear objeto datawindow

El objeto datawindow (dwo) es uno de los mas importantes objetos de power builder y sirve para mostrar, y editar información de una o varias tablas de la base de datos. Para los programadores de otros lenguajes es una especie de grilla (en VB), pero con la diferencia que el datawindow es un objeto muchísimo mas rápido, sofisticado y poderoso.

Ahora vamos a crear una ventana. Para esto siga los siguientes pasos:

● Click en el botón New ● Seleccione el quinto tab (Datawindow) de la ventana New ● Seleccione Grid ● Haga clic en OK

Luego se selecciona la fuente de datos de donde se va a crear el datawindow

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (11 de 27)03/01/2006 01:29:44 p.m.

Page 12: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

El datawindow puede crearse a partir de diferentes fuentes de datos, entre las que están:

1. Una sola tabla de la base de datos (Quick Select) 2. Varias tablas de la base de datos(SQL select) 3. Una consulta SQL ya guardada con anterioridad (Query) 4. No usar ninguna tabla de la base de datos(external) 5. A partir de un procedimiento almacenado de la base de datos (stored procedure)

● Seleccionamos quick select, por que vamos a crear el datawindow de una sola tabla y clic en siguiente

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (12 de 27)03/01/2006 01:29:44 p.m.

Page 13: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

● Luego aparece un listado de todas las tablas de la base de datos y seleccionamos la tabla contact

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (13 de 27)03/01/2006 01:29:44 p.m.

Page 14: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

● Luego de seleccionar la tabla seleccionamos los campos que vamos a mostrar en el datawindow. Para este ejemplo los vamos a seleccionar todos, para esto haga clic en add all.

● Seleccione Luego OK

● Seleccione el color de fondo, del texto y de las columnas del datawindow y haga clic en siguiente

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (14 de 27)03/01/2006 01:29:44 p.m.

Page 15: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

● Haga clic en finish

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (15 de 27)03/01/2006 01:29:44 p.m.

Page 16: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

Luego de dar clic en finish PB abre el pintor (painter) de datawindows, que nos permite editarlo. Ahora guardamos nuestro objeto datawindow con el nombre d_contact así:

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (16 de 27)03/01/2006 01:29:44 p.m.

Page 17: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

Luego cerramos el datawindows painter con CTRL.+W

7 Crear control datawindow

Ahora vamos a mostrar el datawindow en la ventana que habíamos creado. Para esto debemos abrir la ventana y adicionar un CONTROL datawindow. EL control datawindow es diferente al objeto datawindow. El control datawindow es una especie de contenedor gráfico o lugar en donde se pondrá un objeto datawindow.

Para hacer esto siga los siguientes pasos:

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (17 de 27)03/01/2006 01:29:44 p.m.

Page 18: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

Abra la ventana

● Clic en abrir o CTRL.+O ● Seleccione objetos de tipo ventana (objects of type windows) ● Seleccione la ventana w_inicial ● Haga clic en OK

Ahora adicione de la lista de controles un control datawindow:

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (18 de 27)03/01/2006 01:29:44 p.m.

Page 19: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

Luego de seleccionar el control haga clic encima de la ventana y aparecerá un nuevo control. Este nuevo control PB automáticamente lo llama dw_1. Selecciónelo y agrándelo al tamaño de su ventana.

En la barra de propiedades a la izquierda seleccione las opciones de:

• Barra de desplazamiento horizontal (Hscrollbar) y

• Barra de desplazamiento vertical (Vscrollbar)

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (19 de 27)03/01/2006 01:29:44 p.m.

Page 20: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

8 Asignar el Objeto datawindow en el Control

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (20 de 27)03/01/2006 01:29:44 p.m.

Page 21: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

Datawindow

En la barra de propiedades haga clic en dataobject y seleccione el objeto datawindow (datawindow object) que creamos previamente (d_contact)

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (21 de 27)03/01/2006 01:29:44 p.m.

Page 22: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

Guarde los cambios hasta ahora con CTRL.+S

9 Conectar el datawindow control a la base de datos

Base

Datos

Objeto Transacción

SQLCA

Datawindow Control

Luego de haber configurado el datawindow control es necesario que se conecte a la base de datos por medio del objeto de transacción por defecto de PB que se llama SQLCA. Este objeto ya previamente lo configuramos y lo conectamos a la base de datos.

Para hacer esto haga lo siguiente.

● Haga click derecho en la ventana y seleccione script ● En el open de la ventana escriba el siguiente código:

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (22 de 27)03/01/2006 01:29:44 p.m.

Page 23: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

dw_1.settransobject(sqlca)

dw_1.retrieve()

La función settransobject se usa para que el datawindows object sepa que objeto de transacción usa para conectarse a la base de datos.

10 Traer y mostrar los datos de la tabla en el Datawindow

La función Retrieve se usa para traer los datos desde la base de datos al datawindow.

Ahora al correr la aplicación (CTRL.+R) aparece nuestra ventana, ya con datos así:

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (23 de 27)03/01/2006 01:29:44 p.m.

Page 24: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

11 Personalizar la ventana y Los Botones

Para darle una mejor apariencia a la ventana, vamos a personalizarla y cambiar el texto de la barra de título de la ventana (untitled) por Ventana de Contactos. Y el Botón de Salir le colocamos salir en lugar de none.

● Para cambiar el título de la ventana haga click en cualquier parte de la ventana y en la parte derecha, en las propiedades de la ventana en la propiedad Title remplace untitled por Ventana de Contactos.

● Para cambiar el texto del botón haga clic en el botón y en la parte derecha, en las propiedades del botón en la propiedad Text remplace none por &Cerrar (El ampersand se usa para dar un acceso rápido por la tecla C, es decir el texto del botón quedaría Cerrar y la tecla rápida en lugar de darle clic sería ALT+C)

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (24 de 27)03/01/2006 01:29:44 p.m.

Page 25: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

12 Insertar registros

Para insertar registros, lo vamos a hacer desde un botón. Inserte un botón ( Desde la barra de herramientas seleccione un botón o en el menu insert/control/commandButton), luego

Ø Haga clic derecho sobre el botón y seleccione script

Ø En el script del botón en el evento clicked (evento por defecto) escriba lo siguiente:

o Dw_1.insertrow(1)

Esta instrucción inserta un registro en la primera fila. Si desea insertar al final en lugar de 1 coloque 0.

13 Borrar registros

Para borrar registros, lo vamos a hacer también desde un botón. Inserte un botón ( Desde la barra de herramientas seleccione un botón o en el menú insert/control/commandButton), luego

Ø Haga clic derecho sobre el botón y seleccione script

Ø En el script del botón en el evento clicked (evento por defecto) escriba lo siguiente:

o Dw_1.deleterow(dw_1.getrow())

Esta instrucción borra el registro donde se ubique el usuario. Si desea borrar una fila especifica en lugar de dw_1.getrow() coloque el numero de la fila a borrar.

14 Actualizar la tabla

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (25 de 27)03/01/2006 01:29:44 p.m.

Page 26: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

Ahora viene la mejor parte de PowerBuilder con los datawindows, que hace que el manejo de datos sea muy sencillo. Resulta que Powerbuilder traduce todos los cambios realizados con los datos a partir del retrieve de los datos hasta la actualización en inserts, delete o update en cada caso. Es decir si usted inserto una fila, borro otra, y cambio algunos datos existentes, el datawindow se encarga automáticamente de hacer todo lo necesario para que la información quede en la base de datos.

Para actualizar los datos, lo vamos a hacer también desde un botón. Inserte un botón ( Desde la barra de herramientas seleccione un botón o en el menú insert/control/commandButton), luego

Ø Haga clic derecho sobre el botón y seleccione script

Ø En el script del botón en el evento clicked (evento por defecto) escriba lo siguiente:

If Dw_1.update(true) = 1 then

Commit;

Else

Rollback;

End if

Esta instrucción hace commit si actualizar estuvo bien o rollback si existio un error.

Ya Con esto usted puede empezar a hacer pequeñas aplicaciones que modifiquen la información de su base de datos.

Agradezco sus comentarios al correo [email protected]

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (26 de 27)03/01/2006 01:29:44 p.m.

Page 27: Power Builder Tutor 2

Powerbuilder . org - El portal de Powerbuilder - Content

Copyright © por Powerbuilder . org - El portal de Powerbuilder Derechos Reservados.

Publicado en: 2003-12-06 (14929 Lecturas)

[ Volver Atrás ]

Content ©

PowerBuilder Developers' Web Ring

[ Join Now | Ring Hub | Ring Home | << Prev | Next >> ]

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2002 by me

Web site engine's code is Copyright © 2002 by PHP-Nuke. All Rights Reserved. PHP-Nuke is Free Software released under the GNU/GPL license. Página Generada en: 0.596 Segundos

http://www.powerbuilder.org/modules.php?name=Content&pa=showpage&pid=5 (27 de 27)03/01/2006 01:29:44 p.m.