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