Sei sulla pagina 1di 38

40. Crear una ventana como la siguiente: En esta ventana se utilizar un nuevo control (TabControl), y el DropDown DataWindow.

El Drop Down DataWindow es til en caso de que se requiera hacer referencia a datos de otras tablas.

Ultima Fila Siguiente Fila

Anterior Fila

Primera Fila

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 27

La estructura de las pginas Departamentos y Niveles es la misma. 40.1. En la barra de herramientas: Botn Window New

Con el botn derecho sobre la nueva ventana, o con doble click, modificar las propiedades de la ventana: Window Type: Popup. Las opciones Resizable y Maximize Box no debern seleccionarse.

40.2 Insertar un control Tab en la ventana y darle el tamao adecuado. Seleccionar el control insertado y hacer click con el botn derecho del mouse en el rea superior que no est ocupada por el TabPage (Cada una de las pginas del control Tab recibe este nombre).

Name: tab_actualizaciones Seleccionar Bold Selected Text (El texto de la pgina seleccionada se muestra en negrilla) OK

40.2.1. Hacer click con el botn derecho dentro de la primera pgina (la que tiene el texto none) y elegir propiedades:

Name: tabpage_empleados Tab Text: Empleados OK

40.2.2. Insertar los dems controles en la ventana (como lo muestra la figura)

Un DataWindow control (se usa el botn que se encuentra en la barra de herramientas junto con los dems controles. No confundir con el boton de DataWindow Object que se encuentra en la barra de herramientas

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 28

superior o PowerBar).En las propiedades del nuevo DataWindow elegir name: dw_act_empleados y seleccionar VscrollBar. Los botones Nuevo (cb_nuevo), Borrar (cb_borrar), Actualizar

(cb_actualizar), Cargar Datos (cb_cargar). Los botones para desplazarse por las filas del DataWindow: Primero (cb_primero), Siguiente (cb_siguiente), Anterior (cb_anterior), Ultimo (cb_ultimo).

40.2.3. Guardar el trabajo: File4Save. El nombre de la nueva ventana ser w_actualizaciones. 40.2.4. Modificar la opcin actualizar del men, para que se abra la nueva ventana: En la barra de herramientas oprimir el botn Menu. Seleccionar el men ya realizado (p.ej. m_principal) 4OK Seleccionar la opcin Actualizar en la ventana de edicin del men. Oprimir el botn Script en la barra de herramientas Escribir open(w_actualizaciones) Cerrar la ventana del editor de texto y la ventana de edicin del men. Guardar las modificaciones hechas al men.

40.2.5. Correr la aplicacin y probar el funcionamiento del men y la nueva ventana. 40.2.6. Crear un DataWindow Object en el que se relacionen el cdigo y nombre de los departamentos. (se usa el botn DataWindow de la barra de herramientas PowerBar) En la ventana Select DataWindow: 4New En la ventana New DataWindow:

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 29

Data Source 4 SQL Select Presentation Style 4 Grid En la ventana Select Tables seleccionar la tabla departamento. 4 Open Seleccionar las columnas cdigo de departamento y nombre de departamento. Pasar a diseo de salida: En la barra de herramientas es el cono que dice "SQL" Colocar los encabezados apropiados. File4Save. En la ventana Save DataWindow: Name: ddd_depto (ser utilizado como DropDownDatraWindow) OK Cerrar la ventana de edicin del DataWindow

40.2.7. Crear un DataWindow Object para actualizar los datos relacionados con los empleados. En la ventana Select DataWindow: 4New En la ventana New DataWindow: Data Source 4 SQL Select Presentation Style 4 Tabular En la ventana Select Tables seleccionar la tabla Empleado. 4 Open Seleccionar todas las columnas de la tabla empleado. Pasar a diseo de salida: En la barra de herramientas es el cono que dice "SQL" Elegir Properties en el menu poup (con el botn derecho sobre el DataWindow): En la pgina General: Color 4 ButtonFace OK Para los encabezados de todas las columnas: Elegir Properties en el menu poup (con el botn derecho):
Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 30

En la pgina General: Border43D Raised. Text 4modificar el texto En la pgina Font: Background 4ButtonFace. OK Para la columna dept_id (cdigo de departamento): Elegir Properties en el menu poup (con el botn derecho): En la pgina General: Border43D Lowered. En la pgina Font: Background 4WndBkrnd. En la pgina Edit: Style 4DropDownDW DataWindow 4 ddd_depto (el que se cre en el paso 40.2.6.) Display Column 4 dept_nombre (nombre de departamento) Data Column4dept_id (cdigode departamento) Wdth of DropDown (ancho del DropDown) 4 300% Seleccionar VscrollBar

OK

File4Save. En la ventana Save DataWindow: Name: d_act_empleados OK Cerrar la ventana de edicin del DataWindow

40.2.8. Seleccionar el DataWindow dw_act_empleados en la pgina Empleados. Hacer click con el botn derecho y seleccionar la opcin properties del men poup.

DataWindow Object Name4browse...4d_act_empleados (el que se cre en 40.2.7) OK

40.3. Para agregar una nueva pgina al control Tab, se hace click con el botn
Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 31

derecho sobre el control. En el men popup 4 Insert Tab Page 40.3.1. Hacer click con el botn derecho dentro de la nueva pgina (la que tiene el texto none) y elegir properties en el men poup:

Name: tabpage_actividades Tab Text: Actividades OK

40.3.2. Insertar los dems controles en la ventana (como lo muestra la figura)

Un DataWindow control. En las propiedades del nuevo DataWindow elegir name: dw_act_actividades y seleccionar VscrollBar. Los botones Nuevo (cb_nuevo_a), Borrar (cb_borrar_a), Actualizar (cb_actualizar_a), Cargar Datos (cb_cargar_a). Los nombres de los botones deben ser diferentes a los utilizados en la pgina Empleados.

Los botones para desplazarse por las filas del DataWindow: Primero (cb_primero_a), Siguiente (cb_siguiente_a), Anterior (cb_anterior_a), Ultimo (cb_ultimo_a).

40.3.3. Crear un DataWindow Object en el que se relacionen el cdigo y nombre de los empleados. (se usa el botn DataWindow de la barra de herramientas PowerBar) En la ventana Select DataWindow: 4New En la ventana New DataWindow: Data Source 4 SQL Select Presentation Style 4 Grid En la ventana Select Tables seleccionar la tabla empleado. 4 Open

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 32

Seleccionar las columnas cdigo de empleado, nombre y apellido del empleado. Pasar a diseo de salida: En la barra de herramientas es el cono que dice "SQL" Colocar los encabezados apropiados. File4Save. En la ventana Save DataWindow: Name: ddd_empleado (ser utilizado como DropDownDatraWindow) OK Cerrar la ventana de edicin del DataWindow

40.3.4. Crear un DataWindow Object en el que se relacionen el cdigo y nombre de los niveles. En la ventana Select DataWindow: 4New En la ventana New DataWindow: Data Source 4 SQL Select Presentation Style 4 Grid En la ventana Select Tables seleccionar la tabla nivel. 4 Open Seleccionar las columnas cdigo de nivel y nombre de nivel. Pasar a diseo de salida: En la barra de herramientas es el cono que dice "SQL" Colocar los encabezados apropiados. File4Save. En la ventana Save DataWindow: Name: ddd_nivel (ser utilizado como DropDownDatraWindow) OK Cerrar la ventana de edicin del DataWindow

40.3.5. Crear un DataWindow Object para actualizar los datos relacionados con los actividades de los empleados.

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 33

En la ventana Select DataWindow: 4New En la ventana New DataWindow: Data Source 4 SQL Select Presentation Style 4 Tabular

En la ventana Select Tables seleccionar la tabla Actividad. 4 Open Seleccionar todas las columnas de la tabla Actividad. Pasar a diseo de salida: En la barra de herramientas es el cono que dice "SQL" Elegir Properties en el menu poup (con el botn derecho sobre el DataWindow): En la pgina General: Color 4 ButtonFace OK

Para los encabezados de todas las columnas: Elegir Properties en el menu poup (con el botn derecho): En la pgina General: Border43D Raised. Text 4modificar el texto En la pgina Font: Background 4ButtonFace. OK

Para la columna emp_id (cdigo del empleado): Elegir Properties en el menu poup (con el botn derecho): En la pgina General: Border43D Lowered. En la pgina Font: Background 4WndBkrnd. En la pgina Edit: Style 4DropDownDW DataWindow 4 ddd_empleado (el que se cre en el paso 40.3.3.) Display Column 4 emp_id (cdigo del empleado) Data Column4emp_id (cdigo del empleado) Wdth of DropDown (ancho del DropDown) 4 400% Seleccionar VscrollBar

OK

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 34

Para la columna niv_id (cdigo del nivel): Elegir Properties en el menu poup (con el botn derecho): En la pgina General: Border43D Lowered. En la pgina Font: Background 4WndBkrnd. En la pgina Edit: Style 4DropDownDW DataWindow 4 ddd_nivel (el que se cre en el paso 40.3.3.) Display Column 4 niv_id (cdigo del nivel) Data Column4niv_id (cdigo del nivel) Wdth of DropDown (ancho del DropDown) 4 250% Seleccionar VscrollBar

OK

File4Save. En la ventana Save DataWindow: Name: d_act_actividades OK Cerrar la ventana de edicin del DataWindow

40.3.6. Seleccionar el DataWindow dw_act_actividades en la pgina Empleados. Hacer click con el botn derecho y seleccionar la opcin properties del men poup.

DataWindow Object Name4browse...4d_act_actividades (el que se cre en 40.3.5) OK

40.4. El procedimiento utilizado para agregar las dos pginas restantes (Departamentos y Niveles) es bastante similar al descrito anteriormente.

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 35

40.5. Hasta ahora no se han escrito los programas (scripts) para ninguno de los eventos de los controles creados. 40.5.1. En la ventana w_actualizar, seleccionar la pgina Empleados (tabpage_empleados)

Hacer click con el botn derecho sobre la pgina y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento constructor del listbox de la parte superior izquierda de la ventana. El siguiente es el cdigo para dicho evento:

-------Evento: constructor--------------------Control: tabpage_empleados------//Se selecciona el Transaction Object, que proporciona la //informacin para la comunicacin con la base de datos y se //deshabilitan los botones de borrar y actualizar. dw_act_empleados.SetTransObject(SQLCA) cb_borrar.enabled = false cb_actualizar.enabled = false

Para compilar el script: en el men; design 4compile; o tambin Ctrl+L ; o al cerrar la ventana del editor, se compila automticamente.

Para el botn que de desplazamiento hasta la primera fila (cb_primero):

-------Evento: clicked--------------------Control: cb_primero---------dw_act_empleados.SetFocus() // El datawindow toma el foco dw_act_empleados.ScrollToRow(1) // Se desplaza hasta la fila No. 1 dw_act_empleados.SetColumn(1) // Se selecciona la primera columna

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 36

Para el botn de desplazamiento a la siguiente fila (cb_siguiente):

-------Evento: clicked--------------------Control: cb_siguiente---------long l_fila_actual dw_act_empleados.SetFocus() l_fila_actual = dw_act_empleados.getrow() //el nmero de la fila //seleccionada actualmente dw_act_empleados.ScrollToRow(l_fila_actual + 1) //se desplaza a la //fila siguiente dw_act_empleados.SetColumn(1) //se seleccona la primera columna

Para el botn de desplazamiento a la fila anterior(cb_anterior):


-------Evento: clicked--------------------Control: cb_anterior---------long l_fila_actual dw_act_empleados.SetFocus() l_fila_actual = dw_act_empleados.getrow() //el nmero de la fila //seleccionada actualmente dw_act_empleados.ScrollToRow(l_fila_actual - 1) //se desplaza a la //fila anterior dw_act_empleados.SetColumn(1) //se seleccona la primera columna

Para el botn que de desplazamiento hasta la ultima fila (cb_ultimo):


-------Evento: clicked--------------------Control: cb_ultimo---------long l_numfilas dw_act_empleados.SetFocus() l_numfilas = dw_act_empleados.RowCount() //se obtiene el nmero de //filas en el datawindow dw_act_empleados.scrolltorow(l_numfilas) //se desplaza hasta la ltima dw_act_empleados.setcolumn(1) //se selecciona la primera columna

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 37

Para el botn Cargar Datos (cb_cargar):


-------Evento: clicked--------------------Control: cb_cargar---------long l_numfilas //se recibe la informacin de la base de datos en el datawindow // dw_act_empleados dw_act_empleados.retrieve() l_numfilas=dw_act_empleados.RowCount() dw_act_empleados.ScrollToRow(l_numfilas) //Si el nmero de filas en el datawindow es 0 entonces se deshabilita //el botn de borrar, de lo contrario, se habilita. if l_numfilas = 0 then cb_borrar.enabled = false else cb_borrar.enabled = true end if

Para el botn de insertar un nuevo empleado (cb_nuevo)

-------Evento: clicked--------------------Control: cb_nuevo-----------dw_act_empleados.SetTransObject(SQLCA) long fila_nueva //la nueva filase inserta al final del datawindow fila_nueva = dw_act_empleados.InsertRow(0) //el datawindow toma el foco dw_act_empleados.SetFocus() //se desplaza hasta la nueva fila dw_act_empleados.ScrollToRow(fila_nueva) dw_act_empleados.SetColumn(1) cb_actualizar.enabled = true

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 38

Para el botn de borrar un empleado (cb_borrar)


-------Evento: clicked--------------------Control: cb_borrar----------long l_fila_actual dw_act_empleados.SetRedraw (false) //se guarda el nmero de la fila seleccionada, que es la que se //eliminar l_fila_actual = dw_act_empleados.getrow() //se elimina la fila seleccionada dw_act_empleados.DeleteRow (l_fila_actual) //si despus de borrarla no quedan filas en el datawindow, //se deshabilita el botn de borrar if dw_act_empleados.RowCount()=0 then cb_borrar.enabled = false else dw_act_empleados.SetColumn(1) dw_act_empleados.SetFocus() end if cb_actualizar.enabled = true dw_act_empleados.SetRedraw (true)

Para el botn de actualizacin de datos, despus de haber realizado inserciones y/o borrados (cb_actualizar)
-------Evento: clicked--------------------Control: cb_actualizar----------dw_act_empleados.SetRedraw (false) //si la actualizacin de la base de datos no es exitosa, se dehacen //todos los cambios con la orden rollback. //De locontrario, se realizan todos los cambios con la orden commit. if dw_act_empleados.Update() = -1 then rollback; else commit; end if dw_act_empleados.SetRedraw (true) //Si despus de actualizar la base de datos no quedan filas en el //datawindow, se deshabilita el botn de actualizar. if dw_act_empleados.RowCount() = 0 then cb_actualizar.enabled = false else cb_actualizar.enabled = true end if

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 39

40.6. Los scripts para los eventos de los controles de las pginas restantes (actividades, niveles y departamentos) son similares a los descritos en 40.5, modificando los nombres de los controles y los datawindows. 40.7. Se agregar un nuevo botn, que permitir exportar los datos del datawindow a diferentes formatos. La apariencia de la ventana ser la siguiente:

Agregar un nuevo botn, hacer click derecho sobre l y elegir la opcin properties del men popup. Name 4 cb_exportar Text 4Exportar. OK

Hacer click derecho sobre el botn Exportar y elegir la opcin Script del men popup Elegir el evento clicked en la parte superior izquierda de la ventana del editor y escribir el siguiente programa:

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 40

integer i_tab i_tab = tab_actualizaciones.SelectedTab //la funcin SelectedTab retorna el nmero del tabpage seleccionado. CHOOSE CASE i_tab CASE 1 //el tabpage seleccionado es el 1 (empleados) w_actualizaciones.tab_actualizaciones.tabpage_empleados.dw_act_empleados. SaveAs("", EXCEL!, TRUE) //la funcin SaveAs permite //en diferentes formatos de //dilogo "guardar archivo" //desea exportar los datos. //la hoja de clculo EXCEL guardar los datos que estn en un datawindow archivo. Esta funcin utiliza el cuadro de y permite al usuario elegir el formato al que En este caso el formato por defecto es el de

CASE 2 //el tabpage seleccionado es el 2 (actividades) w_actualizaciones.tab_actualizaciones.tabpage_actividades.dw_act_actividades. SaveAs("", EXCEL!, TRUE) CASE 3 //el tabpage seleccionado es el 3 (departamentos) w_actualizaciones.tab_actualizaciones.tabpage_departamento.dw_act_deptos. SaveAs("", EXCEL!, TRUE) CASE 4 //el tabpage seleccionado es el 4 (niveles) w_actualizaciones.tab_actualizaciones.tabpage_niveles.dw_act_niveles. SaveAs("", EXCEL!, TRUE) END CHOOSE

40.8. De manera similar, agregar un botn adicional para cerrar la ventana de actualizaciones (w_actualizaciones) Properties 4Name 4 cb_cancelar Properties 4Text 4 Cancelar OK

El script para el evento clicked de este botn es:

Close (parent)

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 41

41. Crear una ventana como la siguiente:

En esta ventana se utilizar un nuevo control: TreeView. El TreeView es un control que permite desplegar informacin jerarquicamente. Cada item en un TreeView consiste de texto y una imagen, los cuales pueden ser manipulados durante una rutina de programa.

El aspecto de la ventana ser similar al siguiente:

Como puede verse, este TreeView tendr cuatro niveles. El primer nivel solo constar de un tem con el texto empresa. Los tems del segundo nivel corresponden a los departamentos de la empresa, el tercero a los empleados de cada departamento, y el cuarto a las actividades asignadas a los empleados. 41.1. En la barra de herramientas: Botn Window 4 New

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 42

Con el botn derecho sobre la nueva ventana, o con doble click, modificar las propiedades de la ventana: Window Type 4 Popup. Las opciones Resizable y Maximize Box no debern seleccionarse.

41.2. Insertar un control TreeView en la ventana y darle el tamao adecuado. Seleccionar el control insertado y hacer click con el botn derecho del mouse sobre l. Name 4 tv_depto_empleado Seleccionar la opcin Lines at Root Indentation 410 OK

41.2.1. Insertar los dems controles en la ventana (como lo muestra la figura) Tres botones: Expandir Todo (cb_expandir), Contraer todo

(cb_contraer), Cerrar (cb_cerrar)

41.2.2. Guardar el trabajo: File4Save. El nombre de la nueva ventana ser w_explorador. 41.2.3. Modificar la opcin actualizar del men, para que se abra la nueva ventana: En la barra de herramientas oprimir el botn Menu. Seleccionar el men ya realizado (p.ej. m_principal) 4OK Agregar la opcin Explorar en el men Personal Oprimir el botn Script en la barra de herramientas Escribir open(w_explorador) Cerrar la ventana del editor de texto y la ventana de edicin del men. Guardar las modificaciones hechas al men.
Pgina 43

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

41.2.4. Correr la aplicacin y probar el funcionamiento del men y la nueva ventana. 41.2.5. Crear un DataWindow Object en el que se relacionen el nombre de los departamentos. (se usa el botn DataWindow de la barra de herramientas PowerBar) En la ventana Select DataWindow: 4New En la ventana New DataWindow: Data Source 4 SQL Select Presentation Style 4 Tabular En la ventana Select Tables seleccionar la tabla departamento. 4 Open Seleccionar las columnas cdigo de departamento y nombre de departamento. Pasar a diseo de salida: En la barra de herramientas es el cono que dice "SQL" File4Save. En la ventana Save DataWindow: Name: d_depto OK Cerrar la ventana de edicin del DataWindow

41.2.6. Crear un DataWindow Object en el que se relacionen el nombre de los empleados de un departamento determinado. (se puede usar uno de los ya existentes si cumple con esta condicin) En la ventana Select DataWindow: 4New En la ventana New DataWindow: Data Source 4 SQL Select Presentation Style 4 Tabular
Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 44

En la ventana Select Tables seleccionar la tabla empleado. 4 Open Seleccionar las columnas cdigo de empleado, apellido y nombre de empleado. En el men Design elegir la opcin Retrieval Arguments... En la ventana Specify Retrieval Arguments: name4dept_id,

type4number OK Oprimir el Tab "Where" en la parte inferior de la pantalla: Column 4 "empleado"."dept_id" (Al hacer click en el espacio en blanco se puede elegir la columna deseada) Operator 4 = (Al hacer click en el espacio en blanco se puede elegir el operador deseado) Value : Hacer click con el boton derecho sobre el espacio en blanco, elegir arguments en el men popup, y luego elegir :dept_id, que es el mismo argumento que se definin en Retrieva Arguments Pasar a diseo de salida: En la barra de herramientas es el cono que dice "SQL" File4Save. En la ventana Save DataWindow: Name: d_empleados_por_depto OK Cerrar la ventana de edicin del DataWindow

41.2.7. Crear un DataWindow Object en el que se puedanalmacenar las actividades de un empleado dado. (se puede usar uno de los ya existentes si cumple con esta condicin) En la ventana Select DataWindow: 4New En la ventana New DataWindow: Data Source 4 SQL Select Presentation Style 4 Tabular
Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 45

En la ventana Select Tables seleccionar la tabla actividad y la tabla empleado. 4 Open Seleccionar las columnas cdigo de empleado (de la tabla empleado), y descripcin de la actividad (de la tabla actividad). En el men Design elegir la opcin Retrieval Arguments... En la ventana Specify Retrieval Arguments: name4emp_id (cdigo del empleado), type 4 number OK Oprimir el Tab "Where" en la parte inferior de la pantalla: Column 4 "empleado"."emp_id" (Al hacer click en el espacio en blanco se puede elegir la columna deseada) Operator 4 = (Al hacer click en el espacio en blanco se puede elegir el operador deseado) Value : Hacer click con el boton derecho sobre el espacio en blanco, elegir arguments en el men popup, y luego elegir :emp_id, que es el mismo argumento que se definin en Retrieva Arguments

Pasar a diseo de salida: En la barra de herramientas es el cono que dice "SQL" File4Save. En la ventana Save DataWindow: Name: d_activ_por_empleado OK Cerrar la ventana de edicin del DataWindow

Guardar el trabajo adelantado hasta el momento File 4 Save.

41.3. Declaracin de variable de instancia ids_datos En el men Declare 4 Instance Variables. En la ventana Declare Instance Variables hacer click en el cuadro de texto y escribir: datastore ids_datos[4]. OK

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 46

La variable ids_datos es un array de cuatro posiciones de tipo DataStore, en el que se almacenarn los datos de cada nivel del TreeView. Estos datos se obtendrn de los DataWindow creados en 41.2.6. y 41.2.7.

41.4. Crear las Funciones lf_agregar_items y lf_config_item

41.4.1. Funcin lf_agregar_items En el men Declare 4 Window Functions En la ventana Select Function in Window 4 New En la ventana New Function : Name4 lf_agregar_items Access 4Public Return 4Integer Arguments: Name4 al_parent, Ttype4 Long, Pass By4 Value Oprimir Add Name4 ai_nivel, Type4 Integer, Pass By4 Value Oprimir Add Name4 ai_filas, Type4 Integer, Pass By4 Value OK

Se abre la ventana del editor. El cdigo para esta funcin es el siguiente:

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 47

////////////////////////////////////////////////////////////////////// // Funcin para agregar los items al TreeView usando los datos en el // DataStore // Los argumentos de la funcin son: // - long al_parent // - integer ai_nivel (el nivel en el que se agregarn los items) // - integer ai_filas (el nmero de items que se agregarn) ////////////////////////////////////////////////////////////////////// Integer li_Cont

//se declara un objeto TreeViewItem para manipular los valores del item //que se agregar TreeViewItem ltvi_Nuevo // Se agrega cada item For li_Cont = 1 To ai_filas // Se llama a la funcin lf_config_item para asignar los valores //del nuevo item a partir de los datos almacenados en el //DataStore lf_config_item(ai_nivel, li_Cont, ltvi_Nuevo) // Se agrega el item despus del ltimo hijo If tv_depto_empleado.InsertItemLast(al_Parent, ltvi_Nuevo) < 1 Then // Si hay Error MessageBox("Error", "Error al insertar item", & Exclamation!) Return -1 End If Next Return ai_filas

Cerrar la ventana del editor y guardar el trabajo adelantado Nota: Si se quieren modificar los argumentos de una funcin ya declarada, se debe abrir la ventana de edicin del cdigo de la funcin (la que se us en el paso anterior) y elegir la opcin Function Declaration del men Design. Si la ventana del editor no est abierta no se puede acceder a esta opcin.

41.4.2. Funcin lf_config_item En el men Declare 4 Window Functions


Pgina 48
Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

En la ventana Select Function in Window 4 New En la ventana New Function : Name4 lf_config_item Access 4Public Return 4(None) Arguments: Name4 ai_nivel, Type4 Integer, Pass By4 Value Oprimir Add Name4 ai_fila, Type4 Integer, Pass By4 Value Oprimir Add Name4 atvi_nuevo, Type4 TreeViewItem, Pass By4 Reference OK

Se abre la ventana del editor. El cdigo para esta funcin es el siguiente:

///////////////////////////////////////////////////////////////////// // // Se configuran los atributos para el nuevo item a partir de los datos // en el DataStore. // Los atributos de TreeViewItem que se usan son: // Label (el texto que se despliega en el TreeView) // Data (es la informacin que contiene dicho item) // Los argumentos de esta funcin son: // integer ai_nivel = el nivel del TreeViewItem en el TreeView // integer ai_fila = # de la fila del DataStore de la que se obtendr // la informacin // atvi_nuevo = TreeViewItem que se agrega al TreeView. Los valores de // sus atributos. (Label y Data) son los que se determinan a // continuacin // /////////////////////////////////////////////////////////////////////// Choose Case ai_nivel Case 1 // El nico item de primer nivel tiene como Label la // palabra "empresa", en este caso no se usa niungn // DataStore atvi_nuevo.Label = "Empresa" atvi_nuevo.Data = "Empresa" //Contina en la siguiente pgina...

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 49

Case 2 // Label = nombre del departamento // Data = codigo de departamento atvi_nuevo.Label= ids_datos[2].Object.dept_nombre[ai_fila] atvi_nuevo.Data = ids_datos[2].Object.dept_id[ai_fila] Case 3 // Label = apellido + nombre del departamento // Data = codigo de empleado atvi_nuevo.Label = ids_datos[3].Object.emp_apellido[ai_fila]& + ", " + ids_datos[3].Object.emp_nombre[ai_fila] atvi_nuevo.Data = ids_datos[3].Object.emp_id[ai_fila] Case 4 // Label = descripcin de la actividad // Data = cdigo del empleado atvi_nuevo.Label = ids_datos[4].Object.actividad_act_descripcion[ai_fila] atvi_nuevo.Data = ids_datos[4].Object.empleado_emp_id[ai_fila] End Choose

If ai_nivel < 4 Then atvi_nuevo.Children = True Else // Si el nivel es 4 (actividades) los items no tienen hijos) atvi_nuevo.Children = False End If atvi_nuevo.PictureIndex = ai_nivel atvi_nuevo.SelectedPictureIndex = ai_nivel

Cerrar la ventana del editor y guardar el trabajo adelantado

41.5. Escribir los scripts para los controles creados.

41.5.1. En la ventana w_explorador: Hacer click con el botn derecho sobre la ventana y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento open del listbox de la parte superior izquierda de la ventana. El siguiente es el cdigo para dicho evento:
Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 50

///////////////////////////////////////////////////////////// // Se crean los DataStore que contendrn los // // datos almacenados en los datawindows espacificados // //////////////////////////////////////////////////////////// //d_depto se hace mediante un select a la tabla departamento. //En este datawindow se almacena la lista de los departamentos //de la empresa. Estos datos aparecern en el segundo nivel //del treeview. ids_datos[2] = Create DataStore ids_datos[2].DataObject = "d_depto" ids_datos[2].SetTransObject(sqlca) //d_empleados_por_depto contiene los empleados que trabajan en un //departamento. Para esto, se debe escoger la columna cdigo //de departamento (dept_id) como argumento de recuperacin (retrieval //arguments) //Los datos aqu recuperados sern los del tercer nivel del treeview ids_datos[3] = Create DataStore ids_datos[3].DataObject = "d_empleados_por_depto" ids_datos[3].SetTransObject(sqlca) //d_activ_por_empleado contiene las actividades asignadas a un //empleado. De forma similar, el retrieval argument para este //datawindow es la columna cdigo de empleado (emp_id) //Los datos aqu recuperados sern los del cuarto nivel del treeview ids_datos[4] = Create DataStore ids_datos[4].DataObject = "d_activ_por_empleado" ids_datos[4].SetTransObject(sqlca) //Se agrega el primer item (el nico) del primer nivel del treeview. //Los parmetros que se pasan son: parent = 0, nivel = 1, filas = 1 lf_agregar_items(0, 1, 1)

Compilar el script: en el men Design 4 Compile Script (Ctrl+L). Seleccionar el evento close. El script para este evento es:
-------Evento: close--------------------Control: w_explorador-----Integer li_Cont

// Se destruyen los DataStores usados en el ejemplo For li_Cont = 1 To 4 Destroy ids_datos[li_Cont] Next Show(w_principal)

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 51

Compilar el script (Ctrl + L) y cerrar la ventana del editor.

41.5.2. En el TreeView tv_depto_empleado: Hacer click con el botn derecho sobre el TreeView y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento itempopulate. El siguiente es el cdigo para dicho evento:
-------Evento: itempopulate--------------------Control: tv_depto_empleado-------/////////////////////////////////////////////////////////////////////// // Se expande el rbol con los hijos de cada item. // p.ej. los hijos de un item de departamento son los nombres de los // empleados /////////////////////////////////////////////////////////////////////// Integer li_nivel, li_parametro, li_DeptID, li_EmpID, li_filas

// Se declara un TreeViewItem para el item actual TreeViewItem ltvi_actual SetPointer(HourGlass!) // Se determina el nivel del item que se encuentra seleccionado // actualmente en el TreeView GetItem(handle, ltvi_actual) li_nivel = ltvi_actual.Level + 1 // Departamentos if li_nivel = 2 then ids_datos[li_nivel].SetTransObject(sqlca) ids_datos[li_nivel].Reset() ids_datos[li_nivel].SetTransObject(sqlca) // Se cargan los datos en el DataStore li_filas = ids_datos[li_nivel].Retrieve() End if // Empleados X Departamento if li_nivel = 3 Then li_DeptID = Integer(ltvi_actual.Data) ids_datos[li_nivel].Reset() ids_datos[li_nivel].SetTransObject(sqlca) // Se cargan los datos en el DataStore usando el argumento cdigo de //departamento li_filas = ids_datos[li_nivel].Retrieve(li_DeptID) End if //Contina en la siguiente pgina...

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 52

// Actividades X Empleado If li_nivel = 4 Then li_EmpID = Integer(ltvi_actual.Data) ids_datos[li_nivel].Reset() ids_datos[li_nivel].SetTransObject(sqlca) // Se cargan los datos en el DataStore usando el argumento cdigo // de empleado li_filas = ids_datos[li_nivel].Retrieve(li_EmpID) End If lf_agregar_items(handle, li_nivel, li_filas)

Compilar el script (Ctrl + L) y cerrar la ventana del editor.

41.5.3. En el botn Expandir Todo (cb_expandir): Hacer click con el botn derecho sobre el botn y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento clicked. El siguiente es el cdigo para dicho evento:

-------Evento: clicked--------------------Control: cb_expandir--------Long ll_handle ll_handle = tv_depto_empleado.FindItem ( RootTreeItem!, 0 ) tv_depto_empleado.ExpandAll ( ll_handle )

Compilar el script: en el men Design 4 Compile Script (Ctrl+L). Cerrar la ventana del editor.

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 53

41.5.4. En el botn Contraer Todo (cb_contraer): Hacer click con el botn derecho sobre el botn y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento clicked. El siguiente es el cdigo para

dicho evento:
-------Evento: clicked--------------------Control: cb_contraer--------Long ll_handle ll_handle = tv_depto_empleado.FindItem ( RootTreeItem!, 0 ) tv_depto_empleado.CollapseItem ( ll_handle )

Compilar el script: en el men Design 4 Compile Script (Ctrl+L). Cerrar la ventana del editor.

41.5.5. Para el botn Cerrar (cb_cerrar)

-------Evento: clicked--------------------Control: cb_cerrar--------close(w_explorador)

Compilar el script: en el men Design 4 Compile Script (Ctrl+L). Cerrar la ventana del editor.

41.6. Guardar el trabajo adelantado y correr la aplicacin para comprobar el funcionamiento del TreeView.

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 54

42. Modificar la ventana creada en el paso 41 de la siguiente forma:

El control que se aadir se denomina ListView. Un ListView muestra informacin en forma de lista al usuario. Cada tem del ListView consiste de texto y un dibujo.

En este caso, el ListView mostrar los tems del nivel inferior al que se encuentre seleccionado en el rbol. Los botones Lista, Detalles e Iconos Grandes, cambian la forma de presentacin de los tems en el ListView. Cuando el usuario haga doble click sobre uno de los tems del ListView, se desplegarn los tems del nivel inferior, y se expandir la porcin correspondiente en el rbol.

Los tems se ordenarn de acuerdo cuando el usuario oprima las cabeceras de las columnas, de forma similar a como ocurre, por ejemplo, en el explorador de windows.

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 55

42.1. Insertar un control ListView en la ventana y darle el tamao adecuado. Seleccionar el nuevo control y hacer click con el botn derecho del mouse sobre l. Name 4 lv_dept_empleados Seleccionar la opcin Show header View 4Report (Detalles) Sort 4 Unsorted OK

42.1.1. Insertar los dems controles en la ventana (como lo muestra la figura) Tres botones: Lista (cb_lista), Detalles (cb_detalles), Iconos Grandes (cb_grandes) 42.1.2. Guardar el trabajo adelantado: File4Save.

42.2. Declaracin de variable de instancia ii_columnas En el men Declare 4 Instance Variables. En la ventana Declare Instance Variables hacer click en el cuadro de texto y escribir: integer ii_columnsas. OK La variable ii_columnas es un entero que se utilizar para contar el nmero de columnas que se agregan al ListView dependiendo del nivel actual del rbol. 42.3. Crear las Funciones lf_agregar_items y lf_config_item

De ahora en adelante se utilizarn los DataWindow y DataStore creados durante el paso 41 en los nuevos scripts. (ids_datos[], d_depto, d_empleados_por_depto y d_activ_por_empleado)
Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 56

42.3.1. Funcin wf_agregar_lv_items En el men Declare 4 Window Functions En la ventana Select Function in Window 4 New En la ventana New Function : Name4 wf_lv_agregar_items Access 4Public Return 4Integer Arguments: Name4 ai_nivel, Type4 Integer, Pass By4 Value Oprimir Add Name4 ai_filas, Type4 Integer, Pass By4 Value OK

Se abre la ventana del editor. El cdigo para esta funcin es el siguiente:

-------funcin wf_agregar_lv_items-------------/////////////////////////////////////////////////// // //Funcin para agregar items al ListView //usando los datos del DataStore // // Argumentos: // integer ai_nivel (el nivel en que se insertar) // integer ai_filas (nmero de items a insertar) // /////////////////////////////////////////////////// Integer ListViewItem li_Cont llvi_nuevo

// Se borran todas las columnas existentes en el // ListView For li_Cont = 1 To ii_columnas lv_dept_empleados.DeleteColumn(1) Next

Contina en la siguiente pgina...

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 57

...continuacin -------funcin wf_lv_agregar_items-------------// Se agregan las columnas al ListView Choose Case ai_nivel Case 2 lv_dept_empleados.AddColumn("Nombre", Left!, 500) lv_dept_empleados.AddColumn("ID", Right!, 150) ii_columnas = 2 Case 3 lv_dept_empleados.AddColumn("Apellido", Left!, 700) lv_dept_empleados.AddColumn("Nombre", Left!, 700) lv_dept_empleados.AddColumn("ID", Right!, 150) ii_columnas = 3 Case 4 lv_dept_empleados.AddColumn("Descripcin", Left!, 900) lv_dept_empleados.AddColumn("ID Nivel", Right!, 250) ii_columnas = 2 End Choose // Se agrega cada item al ListView For li_Cont = 1 To ai_filas // Se llama a la fucin para configurar los valores de los // items del ListView a partir de los datos del DataStore wf_config_lv_item(ai_nivel, li_Cont, llvi_nuevo) // Se agrega cada item after the last child If lv_dept_empleados.AddItem(llvi_nuevo) < 1 Then MessageBox("Error", "Error al agregar item", Exclamation!) Return -1 End If Next Return ai_filas

Compilar el script (Ctrl + L) y cerrar la ventana del editor.

42.3.2. Funcin wf_config_lv_item En el men Declare 4 Window Functions En la ventana Select Function in Window 4 New En la ventana New Function : Name4 wf_config_lv_item Access 4Public Return 4(None) Arguments:

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 58

Name4 ai_nivel, Type4 Integer, Pass By4 Value Oprimir Add Name4 ai_fila, Type4 Integer, Pass By4 Value Oprimir Add Name4 alvi_nuevo, Type4 ListViewItem, Pass By4 Reference OK

Se abre la ventana del editor. El cdigo para esta funcin es el siguiente:


-------funcin wf_config_lv_item-------------//////////////////////////////////////////////////////////// // Se configuran los atributos Label y Data para el nuevo // item del ListView a partir de los datos en el DataStore. // // Argumentos: // integer ai_nivel (el nivel del tem a configurar) // integer ai_fila (el nmero del item a configurar) // listviewitem alvi_nuevo (el item a configurar) //////////////////////////////////////////////////////////// Choose Case ai_nivel Case 2 // Label = nombre del departamento | cdigo dedepartamento // Data = codigo de departamento alvi_nuevo.Label = ids_datos[2].Object.dept_nombre[ai_fila]+"~t"+ & string(ids_datos[2].Object.dept_id[ai_fila]) alvi_nuevo.Data = ids_datos[2].Object.dept_id[ai_fila] Case 3 // Label = apellido empleado | nombre empleado | cdigo empleado // Data = codigo de empleado alvi_nuevo.Label = ids_datos[3].Object.emp_apellido[ai_fila]+"~t"+ & ids_datos[3].Object.emp_nombre[ai_fila] + "~t" + & string (ids_datos[3].Object.emp_id[ai_fila]) alvi_nuevo.Data = ids_datos[3].Object.emp_id[ai_fila] Case 4 // Label = descripcin de actividad | cdigo del nivel // Data = codigo de empleado (no se utiliza) alvi_nuevo.Label = ids_datos[4].Object.actividad_act_descripcion[ai_fila] + "~t" + & string(ids_datos[4].Object.actividad_niv_id[ai_fila]) alvi_nuevo.Data = ids_datos[4].Object.empleado_emp_id[ai_fila] End Choose alvi_nuevo.PictureIndex = ai_nivel

Compilar el script (Ctrl + L) y cerrar la ventana del editor.

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 59

42.4. Escribir los scripts para los nuevos controles.

42.4.1. En el TreeView tv_depto_empleado: Hacer click con el botn derecho sobre el TreeView y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento selectionchanged. El siguiente es el cdigo para dicho evento:

-------control: tv_depto_empleado----------------evento: selectionchanged-------------/////////////////////////////////////////////////// // Este evento se ejecuta cuando cambia el tem // selecionado en el rbol. // Se cargan los datos desde el DataStore y // se agregan los items del nivel inferior al // ListView ///////////////////////////////////////////////// Integer li_nivel, li_DeptID, li_EmpID, li_filas

// Se declara un TreeViewItem para el item actual TreeViewItem ltvi_actual SetPointer(HourGlass!) // Se determina el nivel del item que se // encuentra seleccionado actualmente en el TreeView GetItem(newhandle, ltvi_actual) li_nivel = ltvi_actual.Level + 1 // Departamentos if li_nivel = 2 then ids_datos[li_nivel].SetTransObject(sqlca) ids_datos[li_nivel].Reset() ids_datos[li_nivel].SetTransObject(sqlca) // Se cargan los datos del DataStore li_filas = ids_datos[li_nivel].Retrieve() End if

Conina en la siguiente pgina ...

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 60

-------control: tv_depto_empleado----------------evento: selectionchanged-------------... continuacin // Empleados X Departamento if li_nivel = 3 Then li_DeptID = Integer(ltvi_actual.Data) ids_datos[li_nivel].Reset() ids_datos[li_nivel].SetTransObject(sqlca) // Se cargan los datos del DataStore usando //el argumento cdigo de departamento li_filas = ids_datos[li_nivel].Retrieve(li_DeptID) End if // Actividades X Empleado If li_nivel = 4 Then li_EmpID = Integer(ltvi_actual.Data) ids_datos[li_nivel].Reset() ids_datos[li_nivel].SetTransObject(sqlca) // Se cargan los datos del DataStore usando // el argumento cdigo de empleado li_filas = ids_datos[li_nivel].Retrieve(li_EmpID) End If // Se borran todos los items del ListView lv_dept_empleados.DeleteItems() // La funcin wf_agregar_lv_items agrega un nmero // de items igual a "li_filas" en el ListView, que // pertenecen al nivel "li_nivel" wf_agregar_lv_items(li_nivel, li_filas)

Cerrar la ventana del editor y guardar el trabajo adelantado

42.4.2. En el ListView lv_dept_empleados: Hacer click con el botn derecho sobre el ListView y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento doubleclicked. El siguiente es el cdigo para dicho evento:

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 61

-------control: lv_dept_empleados----------------evento: doubleclicked--------------Long Boolean TreeViewItem ListViewItem ll_Padre, ll_Item lb_Encontrado ltvi_Item llvi_Actual

If index <= 0 Then Return // Error // Se toma el tem sobre el que se hizo doble click If GetItem(index, llvi_Actual) = -1 Then Return // Se toma el item actualmente seleccionado en el TreeView. // Este debe ser el padre del item seleccionado en el ListView ll_Padre = tv_depto_empleado.FindItem(CurrentTreeItem!, 0) tv_depto_empleado.GetItem(ll_Padre, ltvi_Item) tv_depto_empleado.ExpandItem(ll_Padre) // Se busca el item del ListView en el rbol lb_Encontrado = False ll_Item = tv_depto_empleado.FindItem(ChildTreeItem!, ll_Padre) Do Until (lb_Encontrado Or ll_Item < 1) tv_depto_empleado.GetItem(ll_Item, ltvi_Item) If Pos(ltvi_Item.Label, llvi_Actual.Label) > 0 Then // Se ha encontrado el item lb_Encontrado = True Else // Se revisa el siguiente item ll_Item = tv_depto_empleado.FindItem(NextTreeItem!, ll_Item) End If Loop If lb_Encontrado Then // Al cambiar el elemento seleccionado en el TreeView, // se ejecuta el cdigo del evento SelectionChanged // para el TreeVier tv_depto_empleado tv_depto_empleado.SelectItem(ll_Item) End If

Compilar el script (Ctrl + L) y cerrar la ventana del editor.

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 62

42.4.3. En el ListView lv_dept_empleados: Hacer click con el botn derecho sobre el ListView y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento columnclick. El siguiente es el cdigo para dicho evento:
-------control: lv_dept_empleados----------------evento: columnclick----------------// // // // Los items en el ListView se ordenan ascendentemente por la columna presionada por el usuario "column" es el argumento del evento columnclick es el nmero de la columna sobre la que se ha hecho click

lv_dept_empleados.SetRedraw(false) lv_dept_empleados.Sort(Ascending! , column) lv_dept_empleados.SetRedraw(true)

Compilar el script (Ctrl + L) y cerrar la ventana del editor.

42.4.4. En el botn Lista (cb_lista): Hacer click con el botn derecho sobre el botn y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento clicked. El siguiente es el cdigo para dicho evento:

-------Evento: clicked--------------------Control: cb_lista-----------// Muestra los tems del ListView en forma de una lista sencilla lv_dept_empleados.view = ListViewList!

Compilar el script: en el men Design 4 Compile Script (Ctrl+L). Cerrar la ventana del editor.

Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 63

42.4.5. En el botn Detalles (cb_detalles): Hacer click con el botn derecho sobre el botn y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento clicked. El siguiente es el cdigo para dicho evento:

-------Evento: clicked--------------------Control: cb_detalles--------// // // // Muestra los tems del ListView en forma de una lista detallada. Esta es la forma de presentacin por defecto que se escogi al crear el control ( en propiedades de lv_dept_empleados: view = report )

lv_dept_empleados.view = ListViewReport!

Compilar el script: en el men Design 4 Compile Script (Ctrl+L). Cerrar la ventana del editor.

42.4.5. En el botn Iconos grandes (cb_grandes): Hacer click con el botn derecho sobre el botn y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento clicked. El siguiente es el cdigo para dicho evento:
-------Evento: clicked--------------------Control: cb_grandes--------// Muestra los items del ListView en forma de conos grandes lv_dept_empleados.view = ListViewLargeIcon!

Compilar el script: en el men Design 4 Compile Script (Ctrl+L). Cerrar la ventana del editor.

42.5. Correr la aplicacin y probar su funcionamiento.


Entrenamiento en PowerBuilder 6.5 Ing. Ismael Castaeda Fuentes

Pgina 64

Potrebbero piacerti anche