21 noviembre, 2013
Lotus Domino. Editar Grupos de Personas con Lotus Script
Uno de los controles antispam que os comentaba en otros post anteriores era el bloqueo de dominios desde el control de mensajes entrantes desde el Servidor Lotus Domino (podéis verlo aquí).
En ese post os comentaba como crear un grupo de personas donde añadir los dominios de correos que no queríamos que llegaran a nuestros buzones. Obviamente, tener que meter esos dominios uno a uno en el grupo del directorio implicaba un trabajo excesivo que la mayoría de las veces no se realizaba.
Pues bien, para evitar ese trabajo y agilizar los procesos, creé una acción para que al usarla, se añadieran automáticamente al grupo de bloqueo el dominio del los mensaje no deseado que teníamos seleccionado, con lo cual, con un simple click dejábamos de recibir correos de ese dominio.
No hace falta recalcar la peligrosidad de botón y de dejarle a cualquier usuario usarla, ya que podríamos bloquear todos los mensajes entrantes de cualquier emisor….
Mi solución fue crear una Base de Datos donde el resto de usuarios envía los correos que desea bloquear y donde yo añado el botón de bloqueo. Periódicamente me meto en esa Base de Datos y bloqueo todo lo que veo que debo bloquear y elimino lo que creo que es un error.
El botón en cuestión está asociado a una Accion escrita en Lotus Script que os detallo a continuación y, como siempre, al final tenéis completa.
Lo primero es abrir la Base de Datos del directorio de Lotus Domino, ubicada en el servidor y que se llama names.nfs (ojo, no confundir con la local que es la vuestra particular).
Set db2 = ss.GetDatabase(db.Server,»names.nsf»)
If db2.IsOpen Then
Luego buscamos el grupo que queramos en la vista Groups y recuperamos el documento
Grupo = «Spam»
Set vista = db2.getview(«Groups»)
Set doc = vista.getdocumentbykey(Grupo,True)
If Not doc Is Nothing Then ‘ si encuentra el documento, añade el dominio
Controlamos que no exista ya ese miembro en el grupo
Contador = Arraygetindex( doc.members, Dominio )
If Contador > 0 Then
Msgbox «Dominio ya Existe en Grupo»,0+64+0+0,»Error»
Else
Por último, añadimos el valor al array de miembros de ese grupo, reordenamos el array con la función QuickSort y salvamos el documento.
doc.members = Arrayappend( doc.members, Dominio)
FieldList=Evaluate(|@Name([Abbreviate];Members)|,doc)
Call QuickSort(FieldList)
Call doc.ReplaceItemValue(«Members»,SortedArray)
Call doc.Save(1,0)
Eso es todo. Con esta sencilla acción, con un simple click bloqueo el dominio de cualquier remitente que no desee recibir más. Obviamente, si me equivoco basta ir al grupo Spam y eliminar el dominio.
Os dejo la función completa, por eso del copy/paste…..
Sub Click(Source As Button)
Dim ss As New notessession
Dim ws As New notesUIworkspace
Dim uiview As NotesUIView
Dim dc As NotesDocumentCollection
Dim db As notesdatabase, db2 As notesdatabase
Dim uidoc As NotesUiDocument
Dim docAct As NOtesDocument
Dim doc As NOtesDocument
Dim vista As Notesview
Dim Dominio As String, Grupo As String
Dim Contador
Dim Hecho As Boolean
Set db = ss.CurrentDatabase
Set uiview = ws.CurrentView
Set dc = db.UnprocessedDocuments
Set docAct = dc.GetFirstDocument
If Not (docAct Is Nothing) Then
'Buscamos el Grupo Spam donde añadirlo
Set db2 = ss.GetDatabase(db.Server,"names.nsf")
If db2.IsOpen Then
Dominio = "@"+Strright( docAct.SMTPOriginator(0),"@")
Grupo = "Spam"
Set vista = db2.getview("Groups")
Set doc = vista.getdocumentbykey(Grupo,True)
If Not doc Is Nothing Then
'Si ya existe mostramos mensaje
Contador = Arraygetindex( doc.members, Dominio )
If Contador > 0 Then
Msgbox "Dominio ya Existe en Grupo",0+64+0+0,"Error"
Else
doc.members = Arrayappend( doc.members, Dominio)
FieldList=Evaluate(|@Name([Abbreviate];Members)|,doc)
' Ordenamos la lista
Call QuickSort(FieldList)
Call doc.ReplaceItemValue("Members",SortedArray)
Call doc.Save(1,0)
End If
Else
' Mostramos error
Msgbox "Error, Grupo "+Grupo+" No Encontrado",0+64+0+0,"Error"
End If
Else
Msgbox "Error, BD no Encontrada",0+64+0+0,"Error"
End If
End If
End Sub