Entrenamiento Powerbuilder Parte2
Entrenamiento Powerbuilder Parte2
Entrenamiento Powerbuilder Parte2
El Drop Down DataWindow es til en caso de que se requiera hacer referencia a datos de otras tablas.
Anterior Fila
Primera Fila
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:
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
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:
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.
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:
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
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.
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
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.
40.4. El procedimiento utilizado para agregar las dos pginas restantes (Departamentos y Niveles) es bastante similar al descrito anteriormente.
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.
-------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
Pgina 36
-------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
Pgina 37
-------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
Pgina 38
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
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:
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
Close (parent)
Pgina 41
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.
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
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
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
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
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
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.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
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.
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 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...
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
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)
Pgina 51
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...
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)
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:
Compilar el script: en el men Design 4 Compile Script (Ctrl+L). Cerrar la ventana del editor.
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.
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.
Pgina 54
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.
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
-------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
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
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:
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
Pgina 59
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
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)
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:
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
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
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.
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.
Pgina 64