Bueno, esto es una de las cosas que siempre nos hemos preguntado, ¿Por qué no puedo escoger la dirección de envío de un correo cuando tengo asignada más de una dirección de Internet? El tema es, principalmente, porque el campo remitente lo cogemos de la ubicación del usuario, y el proceso de envío pone el valor de la ubicación en el último momento.
Las posibles soluciones son:
Solución 1 SCRIPT Un
script que coloque el correo directamente en el
mail.box,y ahí le pongo el campo necesario. De esta manera no hago un envío nativo, sino que creo un correo en el mail.box del servidor.
Solución 2 Gestión de Ubicaciones Otra solución, es crearle al usuario distintas ubicaciones cada una de ellas con la dirección de Internet correspondiente. Y “educar” al usuario para que cambie de gorra (ubicación) cuando quiere mandar un correo con una u otra dirección de Internet.
Solución ESLUG (3) Crearemos un campo que nos diga el UNID del documento de Ubicación que está usando el usuario, este campo lo llamaremos LOCATIONID y tendrá como valor la siguiente fórmula
@Text(@LocationGetInfo([UNID])) Crearemos un campo desplegable en el formulario MEMO (más tarde lo podemos crear en el REPLY, etc) que haga lo siguiente.
1 . Busque en el names.nsf cuántas y cuáles son las direcciones de correo del usuario y se las muestre en el desplegable.
2 . Que tenga como valor por defecto la dirección que hay en la ubicación en ese momento
3 . Que al seleccionar la dirección que quiere utilizar se actualice el valor en la ubicación y por lo tanto en el envío
El valor por defecto de este campo sería
@LocationGetInfo([InternetMailAddress]) En la lista de valores posibles del
comboboxcolocaremos la siguiente fórmula:
lista:=@Unique(@DbLookup("":"NOCACHE";@Subset(@MailDbName;1):"names.nsf";"($Users)";@UserName;"fullname"):
@DbLookup("":"NOCACHE";@Subset(@MailDbName;1):"names.nsf";"($Users)";@UserName;"internetaddress"));
temp := "";
@For(n := 1; n <= @Elements(lista); n := n + 1;
@If(@Contains(lista[n];"@");temp := temp:lista[n];temp:=temp));
@Sort(@Trim(temp)) Que básicamente lo que hace es buscar al usuario en el names.nsf del servidor, extraer la lista de valores del fullname+internetaddress, limpiarla para coger sólo los valores con @ y ordenarla.
Ahora en el Evento Onchange de ese campo pondremos el
script que modifica la ubicación del usuario
Sub Onchange(Source As Field)
Dim dbnames As NotesDatabase
Dim doclocation As NotesDocument
Dim s As New notessession
Set dbnames=s.GetDatabase("","names.nsf")
Dim unid As String
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
unid=uidoc.FieldGetText( "locationID" )
Set doclocation=dbnames.GetDocumentByUNID(unid)
doclocation.imailaddress=uidoc.FieldGetText( "remitente" )
Call doclocation.Save(True,False)
Call workspace.EditDocument(True, doclocation)
Dim uidoc2 As NotesUIDocument
Set uidoc2 = workspace.CurrentDocument
Call uidoc2.Reload
Call uidoc2.Save
Call uidoc2.Close(True)
End Sub Con todo esto cuando vayamos a mandar un correo podremos ver con qué dirección se está enviando y podré cambiarla al gusto. Podríamos mejorarlo, ocultando este campo si la lista de direcciones no es mayor que 1, etc. Pero eso será en otra ocasión.
Ni que decir tiene que esto no está soportado oficialmente, que solo funciona para NOTES y que aquel que lo implemente lo hace bajo su propio riesgo. A continuación se detalla más información sobre las
fórmulas no documentadas que utilizamos para sacar valores de la ubicación.
http://www-01.ibm.com/support/docview.wss?rs=0&uid=swg21094302
http://planetlotus.org/profiles/assonos-blog_55702 Saludos
Lotus Notes