Lotus Notes - Eliminar registros de una vista

 
Vista:

Eliminar registros de una vista

Publicado por Alex (49 intervenciones) el 21/03/2012 10:31:53
Hola,

Tengo una vista categorizada por la primera columna que es la que voy a utilizar como clave, y he puesto el siguiente código pero no me funciona. ¿alguien me puede ayudar?

Sub Queryclose(Source As Notesuiview, Continue As Variant)

Dim Ns As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim Doc As NotesDocument
While Not (Doc Is Nothing)
v_campo=Doc.codi(0) ' toma el valor del primer registro (campo1=a buscar)
Set Doc = View.GetNextDocument(Doc) 'realiza un salto para comenzar a buscar
While Not (Doc Is Nothing) And v_campo=Doc.codi(0)
Call Doc.Remove(True)
Set Doc = View.GetNextDocument(Doc)
Wend
Wend
End Sub

Hugo este código lo cogí de uno que pusiste pero no me funciona. Si me puedes ayudar te lo agradezco.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Eliminar registros de una vista

Publicado por El Lobo (56 intervenciones) el 21/03/2012 15:54:50
No puedes ir al siguiente documento de uno borrado.

Set Doc = View.GetNextDocument(Doc) '<-- Lo acabas de borrar tron.

Prueba con un FOR o mejor

Call View.AllEntries.RemoveAll(true) y ya esta.

Recomiendo leer ayuda desarrolladores porfa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar registros de una vista

Publicado por Jesús (1 intervención) el 06/05/2012 23:58:57
Buenas.
Acabo de tener un problema parecido aunque yo en vez de recorrer
la vista con un NotesDocument lo recorro con un NotesViewEntry.
Pero supongo que la solución tambien vale.

El problema es el mismo al eliminar el correo no puedo referenciarlo para avanzar al siguiente:
- Set domViewEntry = domViewNav.GetNextDocument(domViewEntry)
Para salvarlo defino otra variable de tipo NotesViewEntry y la utilizo para guardar el documento anterior antes de avanzar dentro del While.
OJO debes comprobar si es el primero de la vista y en ese caso
posicionarte de nuevo al principio en vez de avanzar:
- Set domViewEntry = domViewNav.GetFirst
'.......................................................................
`...te pongo parte del código por aquí..............
'.......................................................................
Dim domDb As NotesDatabase
Dim domView As NotesView
Dim domViewEntry As NotesViewEntry
Dim domViewEntryPre As NotesViewEntry
Dim Asunto as string

'....aqui iria todo el código de conexión a la Base de Datos de Lotus
'....y la creación de la vista, etc....
'...hasta llegar al posicionamiento en dicha vista por ejemplo del primero:

Set domViewEntry = domViewNav.GetFirst 'Nos movemos al primero correo

'.....y recorremos el while
While Not (domViewEntry Is Nothing)

Asunto = domViewEntry.Document.GetItemValue("Subject")(0)

if Asunto = "Documento para borrar" then
'...en caso de borrar el documento
Call domViewEntry.Document.Remove(True)

'...definimos la entrada actual comola previa que teniamos guardada
'....aqui deberiamos filtrar si es el primero (no tendriamos previo)
Set domViewEntry = domViewEntryPre

end if

'....guardamos una instancia del documento actual en la variable previa
Set domViewEntryPre = domViewEntry
'.... y avanzamos
Set domViewEntry = domViewNav.GetNextDocument(domViewEntry)
Wend

Como decía al principio queda validar que no sea el primer correo de la vista porque en ese caso no hay previo...pero se puede comprobar y posicinar de nuevo al principio de la vista.

Puede parecer chapucero pero funciona...seguro que hay maneras mas elegantes de hacerlo como crear una vista solo con los documentos que queremos eliminar y luego aplicar algo como el RemoveAll que solo el nombre me da miedo. Y con el For no he conseguido avanzar la vista.

Saludos y espero que sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar registros de una vista

Publicado por MJC (20 intervenciones) el 28/09/2012 17:30:53
Primero donde seteas el documento Doc la primera vez para tomar el valor para la busqueda de documentos? Por lo que veo estas en el QueryClose de una vista por lo que no tienes apuntado el documento Doc.
En ese caso estas haciendo un do while de un doc que es Nothing, y por lo tanto de una no entra al Do While.
Tampoco defines la view

Set view=Source.view 'Aqui defines la view

Suponiendo que tu Doc es Set doc=View.GetFirstDocument
En ese caso analizando el scrip borrarias todos los documentos de la vista
Otro tema, suponiendo que existe un solo documento para el codigo que guardaste, al hacer Next document, ya lo dejaste atras y no lo conseguiste apuntar mas. Lo perdiste y no lo vas a poder borrar.

No se exactamente que tienes que borrar de la vista y hasta cuando se acaba el borrado pero yo haria asi.
Este script te borra los documentos de la primera categoria, si quieres hacer un bucle ya tienes que colocar un do while...y siempre con el primer documento de la vista ya que vas borrando los anteriores.

Dim view as notesview
Dim doc, doc1 as notesdocument
Dim coll as notesdocumentcollection
Set view=source.view
set doc =view.getfistdocument
if not doc is nothing then ' control por si la vista esta vacia
campo=doc.codi(0)
if campo<>"" then
set coll=view.getdocumentscollection(campo,true)
if not coll is nothing then
for i=1 to coll.count
set doc=coll.getntxdocument(i)
set doc1=doc
call doc1.remove()
end for
end if
end if
end if
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar registros de una vista

Publicado por MJC (20 intervenciones) el 28/09/2012 17:39:04
Al anterior no lo probe..si te da error por el puntero en el for..tomas siempre el primer documento de la coleccion ya que siempre vas borrando el primero..ahi no creo que te de error
ESTA OPCION ME GUSTA MAS!!!

Dim view as notesview
Dim doc as notesdocument
Dim coll as notesdocumentcollection
Set view=source.view
set doc =view.getfistdocument
if not doc is nothing then ' control por si la vista esta vacia
campo=doc.codi(0)
if campo<>"" then
set coll=view.getdocumentscollection(campo,true)
if not coll is nothing then
for i=1 to coll.count
set doc=coll.getfirstdocument
call doc.remove()
end for
end if
end if
end if
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar