Modo administración

Forastero en Tierra Extraña

Artículo: ¿Vistas dinámicas en Notes? No, pero ...(II) »

JUAN RUIZ FERNANDEZ - SEP 21, 2006 (03:02:15 PM)

El código está compuesto por un módulo de LotusScript en el evento click de la acción y es el siguiente :
Sub Click(Source As Button) Dim nses As New notessession Dim nwrk As New notesuiworkspace Dim nuiv As notesuiview Dim nuidat As notesuidatabase Dim ndat As notesdatabase Dim nvis As notesview Dim nvisAux As notesview Dim nvec As notesviewentrycollection Dim ndoc As notesdocument Dim cClienteInicial As String Dim cClienteFinal As String Dim cQuery As String Dim lClini As Long Dim lClfin As Long Dim lCon As Long Set ndat = nses.currentdatabase Set nuidat = nwrk.currentdatabase Set nvis = ndat.getview("VNumeracion") Set nuiv = nwrk.currentview cClienteInicial = Inputbox$("Indique el numero de cliente inicial") cClienteFinal = Inputbox$("Indique el numero de cliente final") ' Validamos lo que ha introducido el usuario If Isnumeric( cClienteInicial ) Then iClini = Clng( cClienteInicial ) Else Msgbox( "Valor incorrecto para cliente inicial" ) Exit Sub End If If Isnumeric( cClienteFinal ) Then iClfin = Clng( cClienteFinal ) End If If iClfin > iClini Then cQuery = "[Numero] >=" & Cstr( iClini )" cQuery = cQuery & " & " AND [Numero] <=" & Cstr( iClfin ) nvis.Refresh ' Si el indice no está actualizado lo actualizamos If ( ndat.LastModified > ndat.LastFTIndexed ) Then Call ndat.UpdateFTIndex( False ) End If lCon = nVis.Ftsearch( cQuery,0 ) Print "Documentos encontrados : " & lCon If lCon > 0 Then Set nvisaux = ndat.getview( "CP1Resultados" ) ' Si existen referencias a documentos de busquedas anteriores las ' borramos If Not nvisaux Is Nothing Then Set nvec = ndat.getview( "CP1Resultados" ).Allentries Call nvec.Removeallfromfolder( "CP1Resultados" ) End If ' Ahora recogemos todos los documentos de la vista ( que solo ' contieneahora los documentos que cumplen la condicion de ' busqueda ) y los a�adimos a la carpeta de resultados. Set nvec = nvis.Allentries nvec.Putallinfolder "CP1Resultados",True ' Abrimos la carpeta con los resultados al usuario nuidat.openview "CP1Resultados" Else Msgbox( "No se ha encontrado ningun documento en ese rango" ) End If Else Msgbox ( "El numero para el cliente final debe ser _ mayor que el del cliente inicial" ) Exit Sub End If End Sub

Esta es la acción que realiza la búsqueda dinámica. Para que funcione adecuadamente deberemos indexar la base de datos ya que utiliza métodos que hacen uso del índice y además debe existir una carpeta de tipo compartido, privada al abrirla por primera vez y que se llamará "Resultados". El diseño de esta carpeta se explica más adelante, despues de la Descripción de las vistas. A grandes rasgos hace lo siguiente :

  • Definimos e inicializamos variables.
  • Preguntamos al usuario por el rango de clientes que quiere consultar, compuesto de un número inicial y otro final. Recordemos que todos los documentos de cliente contenían un campo llamado "Numero" que era la representación numérica del campo "Codigo".
  • Validamos los números del rango introducidos por el usuario comprobando que son números válidos y que el número inicial sea menor que el rango final.
  • Una vez pasadas las validaciones componemos la instrucción de consulta que como podemos ver busca un rango de clientes entre el númerode cliente inicial y el númerode cliente final ( incluidos ambos en la búsqueda ).
  • Actualizamos la vista y el índice de la base de datos.
  • Ejecutamos la búsqueda haciendo uso del método Ftsearch() del objeto que contiene la vista.
  • Si contiene documentos, es decir, ha encontrado clientes en el rango indicado accederemos a la carpeta "Resultados" y borraremos todas las referencias a documentos que podrían existir anteriormente para no mezclar resultados de distintas búsquedas. Tomamos todos los documentos de la vista donde hemos realizado el FTSearch (que sólo contendrá ahora los documentos que cumplen la búsqueda ) y creamos referencias a ellos en la carpeta "Resultados". Por último mostramos al usuario los documentos encontrados abriendo la carpeta en el área de trabajo del cliente. En el caso de que como resultado, la búsqueda no haya encontrado documentos se lo indicaremos al usuario y acaberemos la acción.

La vista "(Numeracion)" tiene las siguientes características :

  • Su nombre es "(Numeracion)".
  • Su alias, por el cual nos referiremos a esta vista en programación es "VNumeracion".
  • Su estilo es estándar.
  • Mostrará los documentos de respuesta jerárquicamente ( en nuestra aplicación esto nos da igual porque no existen documentos respuesta ).
  • El resto de las pestañas del cuadro de diálogo de propiedades de la vista tendrán sus valores por defecto.
  • Su fórmula de selección es :
    SELECT Form = "Cliente"
    

Contiene dos columnas que describimos a continuación :

  • Muestra el campo "Codigo", no tiene título, es redimensionable, su anchura es de 11 caracteres. Su ordenación es de tipo estándar y descendente, muestra los valores múltiples como entradas separadas. En la pestaña de "Fuentes" contiene lo siguiente : San Serif predeterminado, 8, Normal, Negro, Izquierda. Los valores de las pestañas "números","Formato de fecha y hora", "Titulo" y "Avanzadas" se dejan con los valores por defecto.
  • Muestra el campo "Numero", no tiene título, es redimensionable, su anchura es de 10 caracteres. Su ordenación es de tipo estándar y ascendente, considera los acentos. En la pestaña de "Fuentes" contiene lo siguiente : San Serif predeterminado, 8, Normal, Negro, Izquierda. Los valores de las pestañas "números", "Formato de fecha y hora","Titulo" y "Avanzadas" se dejan con los valores por defecto.

Esta aplicación tambien necesita hacer uso de una carpeta que es la que se encuentra seleccionada en la siguiente captura del Designer :

pulsa para ver la imagen a tamaño real

La carpeta tiene las siguientes características :

  • Su nombre es "Resultados".
  • Es del tipo "Compartida. Privada al usarla por primera vez". De esta forma cada usuario tendrá su propia carpeta en su escritorio y no se mezclarán las búsquedas.
  • Su estilo será copiado de la vista "Clientes".

Como podéis ver este es un ejemplo muy sencillo que sólo muestra una manera de hacer búsquedas dinámicas.

Las condiciones de búsqueda son un poco simples : un rango de selección de códigos numéricos de clientes pero queda en vuestras manos hacer condiciones de búsqueda más complejas creando incluso un formulario sólo para busquedas y luego "traducirlo" a una expresión de búsqueda que el
metodo FTSearch() pueda resolver.

La sintaxis de las expresiones de busqueda viene explicada de manera detallada en la ayuda del Designer.

Comentarios deshabilitados