Archivo de la categoría: Lotus Notes

Capitulo 08 – Programando en Lotus Notes desde 0 – Agentes

Este es el octavo y último capítulo de mi curso de programación en lotus notes desde 0. en este apartado hablaremos acerca de los agentes. Veremos como crearlos y ejecutarlos ya sea de manera programada o manual.

Adicionalmente veremos como recorrer los documento de una vista  mediante el lenguaje lotusscript.

Al final del curso tengo una gran noticia que compartir con ustedes, pueden ver mas detalles en el siguiente link

Capitulo 07 – Programando en Lotus Notes desde 0 – Estructura Grafica de Aplicaciones

Seguimos avanzando en nuestro curso de Programacion en Lotus Notes desde 0. En este Capitulo veremos como organizar la estructura gráfica de las aplicaciones en lotus notes.

Algunos elementos de diseño que conoceremos en este apartado son:

  • Outline
  • Paginas
  • Frameset
  • Botones
  • Tablas

En nuestra próxima entrega hablaremos sobre los “Agentes”. No olviden suscribirse gratis al blog dejando su correo electrónico, de esa forma se enterarán en cuanto publiquemos nuevos contenidos.

Capitulo 05 – Programando en Lotus Notes desde 0 – Lotusscript 1

Continuando con nuestro curso de programación en lotus notes desde 0 llegamos al capitulo 05. Hasta ahora hemos aprendido a programar en lenguaje de formula pero vamos a comenzar a programar en lotusscript desde este capitulo.

En esta ocasión les enseñaré a como hacer validaciones de campo, objetos básicos como documentos y workspace.

Cualquier duda o comentario sobre los contenidos o ejercicios que les voy dejando pueden ingresar un comentario y espero poder aclarar sus dudas.

Exportar el Contenido de la Acl de una base lotus notes a Excel.

acl

Hola a todos, hace mucho no escribía algo sobre lotus y como me siguen pidiendo que lo haga les comparto brevemente un código que puede serles útil.

Una de las virtudes de Notes es la seguridad, esta se puede delimitar en la ACL o Lista de Control de accesos, mediante diferentes niveles  predefinidos por la plataforma e incluso roles que nosotros podamos crear para nuestras aplicaciones.

Uno de los problemas que suele ocurrir en el tiempo es la poca mantención que se realiza sobre las aplicaciones, lo que deriva en enormes listas en la ACL y vulnerabilidades importantes, por lo que para cuando nos piden realizar una revisión de el estado actual de la lista se puede transformar en una pesadilla.

Mediante el script que comparto pueden crear un agente que entregará el listado detallado de la ACL y lo que cada usuario puede hacer sobre su aplicación.

El Agente.

Sub Initialize
On Error Goto ER

  Dim s As New NotesSession
  Dim db As NotesDatabase
  Dim acl As NotesACL
  Dim entry As NotesACLEntry
  Dim Excel As Variant
  Dim xlWorkbook As Variant
  Dim xHoja As Variant
  Dim nam As NotesName

  Set db = s.CurrentDatabase
  Set acl = db.ACL
  Set entry = acl.GetFirstEntry

  Set Excel = CreateObject( “Excel.Application” )
  Excel.Workbooks.Add ‘//Creamos un libro de Excel nuevo
  Set xlWorkbook = Excel.ActiveWorkbook ‘//Seleccionamos el libro activo
  row = 1’//Inicializamos las columnas a 0

  Excel.Cells(row,1).Value = ” USUARIO”
  Excel.Cells(row,2).Value = “NIVEL DE ACCESO”
  Excel.Cells(row,3).Value = “ROLES”
  Excel.Cells(row,4).Value = “PUEDE BORRAR DOCUMENTOS”
  Excel.Cells(row,5).Value = “PUEDE COPIAR DOCUMENTOS”

  While Not entry Is Nothing
  If entry.IsPerson Then
    row=row+1
   Set nam = s.CreateName(entry.Name)
   Excel.Cells(row,1).Value = nam.Common
   Excel.Cells(row,2).Value = getAcceso(entry.Level)
   strRoles=””
   Forall r In entry.Roles
   If strRoles=”” Then
      strRoles = Ucase(r)
   Else
     strRoles = StrRoles & “,” & Ucase(r)
  End If
  End Forall
  Excel.Cells(row,3).Value = strRoles
  Excel.Cells(row,4).Value =entry.CanDeleteDocuments
  Excel.Cells(row,5).Value =entry.CanReplicateOrCopyDocuments
End If
Set entry = acl.GetNextEntry(entry)
Wend

Excel.Visible = True ‘// Mostramos la ventana de Excel
Exit Sub
ER:
  Msgbox Error & ” en ExportaACL en linea ” & Erl
  Set Excel = Nothing
  Exit Sub
End Sub

La Funcion GetAcceso

Function getAcceso(nivel)
On Error Goto ER

  If nivel=0 Then
     r=”NO ACCESS”
  Elseif nivel=1 Then
     r=”DEPOSITOR”
  Elseif nivel=2 Then
     r=”READER”
  Elseif nivel=3 Then
     r=”AUTHOR”
  Elseif nivel=4 Then
    r=”EDITOR”
  Elseif nivel=5 Then
    r=”DESIGNER”
  Elseif nivel=6 Then
    r=”MANAGER”
 End If

 getAcceso = r

Exit Function
ER:
  Msgbox Error & ” en getAcceso linea ” & Erl
  Exit Function
End Function

Espero que les sea de utilidad.

Obtener Dirección IP del Equipo con LotusScript

Entre algunos proyectos con Lotus Notes me surgió la necesidad de obtener la dirección IP del equipo. Buscando en algunos foros encontré esta función que opera de maravilla.

Function getIPAddress() As String
On Error Goto ER
Dim jSession As JavaSession
Dim jClass As JavaClass
Dim jObject As JavaObject
Dim jMethod As JavaMethod

Set jSession = New JavaSession()
Set jClass = jSession.GetClass(“java/net/InetAddress”)
Set jMethod = jClass.GetMethod(“getLocalHost”,”()Ljava/net/InetAddress;”)
Set jObject = jMethod.Invoke()

getIPAddress = jObject.getHostAddress()

Exit Function

ER:
Msgbox Error & ” en GetIPAddress linea ” & Erl
Exit Function
End Function

No deben olvidar usar la siguiente librería en el Declarations del elemento de diseño donde esten trabajando.

Uselsx “*javacon” 

Espero que les sea de utilidad.

Ejecutar un agente en el servidor desde LotusScript

Hoy quiero dejar brevemente con ustedes un código que puede ser útil en algún desarrollo de aplicaciones lotus notes. Se trata de ejecutar un agente, llamándolo desde otra sección de nuestra plataforma(Formulario, Vista, etc) y ejecutarlo directamente en el servidor. A mi me fue de mucha utilidad para algunos scripts que debían conectarse a As400 y no quería depender de un ODBC configurado en los equipos de los clientes.

En primer lugar, debemos llamar al agente desde nuestra rutina de la siguiente forma:

‘LLAMANDO AL AGENTE
Dim agente As NotesAgent ‘ declaramos el agente
Set agente = db.GetAgent(“ObtieneRepuestosAs400”) ‘ instanciamos el agente
agente.RunOnServer(doc.NoteID) ‘ ejecutamos el agente(El objeto doc debe ser el documento desde donde ejecutamos el agente, esto ‘en cas0 que deseemos refrenciar sus campos en el agente de destino)

‘ASI SE RECIBE EL ID EN EL AGENTE PARA REFERENCIAR AL DOCUMENTO
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim agente As NotesAgent

Set agente = s.CurrentAgent
Set doc = db.GetDocumentByID(agente.ParameterDocID)‘ ahora ya podemos referenciar campos del documento en nuestro agente de ‘destino

Diferencia de dias entre dos fechas con LotusScript

calendar_icon

Bueno amigos, continuando con mis aportes acerca del poco conocido mundo de la programación lotus notes, les dejo a continuación una función bastante sencilla pero no por eso menos útil que dadas dos fechas nos entrega la diferencia entre ambas expresada en en días.

Para ello, nos colgaremos de la función TimeDifference, nativa de lotusscript,  que nos entrega la diferencia en segundos entre dos fechas. Por eso dividimos su resultado  por 86400 que son los segundos que tiene un día. Espero les sea de utilidad

Function DiferenciaEnDias(fdesde, fhasta)
On Error Goto ER

Dim dif As Currency
Dim desde As New NotesDateTime(fdesde)
Dim hasta As New NotesDateTime(fhasta)

dif = desde.TimeDifference(hasta)
dif = dif /86400 ‘ 86400 segundos tiene  un día.

DiferenciaEnDias = dif

Exit Function
ER:
Print Error & ” en diferencia en dias en linea ” & Erl
Exit Function
End Function

Exportacion a Excel con LotusScript

Hoy quiero compartir con ustedes un script sencillo, pero siempre util en nuestros desarrollos con lotus, se trata de una exportación a excel, una vez que seleccionamos documentos desde una vista. El siguiente codigo debería ir en un boton de la barra de acciiones de nuestra vista, espero que les sea de utilidad:

Sub Click(Source As Button)
On Error Goto ER

Dim s As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim Excel As Variant
Dim xlWorkbook As Variant
Dim xHoja As Variant

Set db = s.CurrentDatabase
Set dc = db.UnprocessedDocuments ‘ La coleccion de documentos corresponde a los seleccionados en la vista por el usuario.
Set doc = dc.GetFirstDocument

Set Excel = CreateObject( “Excel.Application” )
Excel.Workbooks.Add ‘//Creamos un libro de Excel nuevo
Set xlWorkbook = Excel.ActiveWorkbook ‘//Seleccionamos el libro activo

row = 1’//Inicializamos las columnas a 0
documento = 0

Print “Iniciando la creación del Informe…”

Excel.Cells(row,1).Value = “CLIENTE”
Excel.Cells(row,2).Value = “DIRECCION”
Excel.Cells(row,3).Value = “E-MAIL”
Excel.Cells(row,4).Value = “TELEFONO”
Excel.Cells(row,5).Value = “CELULAR”

‘Recorremos los documentos de la colección y vamos construyendo la planilla.
While Not doc Is Nothing
row = row + 1
documento = documento + 1
Print “exportando documento ” & documento & ” de ” & dc.Count
Excel.Cells(row,1).Value = doc.Cliente(0)
Excel.Cells(row,2).Value = doc.odireccion(0)
Excel.Cells(row,3).Value = doc.emailo(0)
Excel.Cells(row,4).Value = doc.telefonoo(0)
Excel.Cells(row,5).Value = doc.ocelu(0)
Set doc = dc.GetNextDocument(doc)
Wend
Excel.Visible = True ‘ Mostramos la ventana de Excel
Exit Sub
ER:
Msgbox Error & ” en intialize linea ” & Erl
Set Excel = Nothing
Exit Sub
End Sub

Crear una entrada en Agenda mediante LotusScript por @Calitrunks


Como hay poca documentación en español acerca de programación para lotus notes, quise compartir este post el día de hoy para todos a quienes pueda servirles. Consiste en crear una entrada en la agenda de correo del usuario con una alerta emergente.

En primer lugar debemos abrir la agenda del usuario sobre el que deseemos crear la entrada(demás esta decir que el usuario que ejecuta el proceso, deberá tener delegado el acceso de escritura en la agenda del usuario que recibirá la entrada). Para abrir la agenda podemos ejecutar el siguiente script,

Sub AbreAgenda(usuario)
On Error Goto ER

Dim dbnames As NotesDatabase
Dim vista As NotesView
Dim doc As NotesDocument
Print “abriendo agenda de ” & usuario
Set dbnames = New NotesDatabase(“servidor/dominio”,”names.nsf”)
Set vista = dbnames.GetView(“($NamesFieldLookup)”)
Set doc = vista.GetDocumentByKey(usuario,True)

If Not doc Is Nothing Then
Set Agenda = New NotesDatabase(doc.MailServer(0), doc.MailFile(0))
Else
Set Agenda = Nothing
End If

Exit Sub
ER:
If Err = 4060 Then
Print “ERROR CON LA AGENDA DEL USUARIO ” & Ucase(usuario)
Exit Sub
Else
Msgbox Error & ” en AbreAgenda linea ” & Erl & ” ” & Err
Exit Sub
End If
End Sub

Luego, podemos ejecutar el siguiente script para crear el recordatorio en la agenda del usuario.

Sub CreaEntradaAgenda()
On Error Goto ER

Dim ws As New NotesUIWorkspace
Set docAgenda = Agenda.CreateDocument

docAgenda.Form=”Appointment”
docAgenda.Subject= estedoc.Mensaje(0)
docAgenda.AppointmentType = “4”
docAgenda.StartDateTime = Now
docAgenda.EndDateTime = Now
docAgenda.StartDate = Now
docAgenda.EndDate = Now
docAgenda.StartTime = Time
docAgenda.EndTime = Time
Call docAgenda.ReplaceItemValue(“_ViewIcon”, 10)
Call docAgenda.ReplaceItemValue(“$PublicAccess”,”1″)
Call docAgenda.ReplaceItemValue(“CalendarDateTime”, Now)
Call docAgenda.ReplaceItemValue(“$Alarm”, “1”)’ activa que tenga alarma
Call docAgenda.ReplaceItemValue(“$AlarmOffset”,0)’ Si es negativo es minutos antes, si es postivo minutos despues, si es 0 enseguida.
Call docAgenda.ReplaceItemValue(“$AlarmUnit”, “M”)
Call docAgenda.ReplaceItemValue(“Alarms”, 1)
Call docAgenda.ComputeWithForm(1,1)
Call docAgenda.Save(1,1)
estedoc.Mensaje = “”
Call ws.EditDocument(True,docAgenda)
Exit Sub
ER:
Msgbox Error & ” en CreaEntradaAgenda linea ” & Erl
Exit Sub
End Sub

Espero que le sea de utilidad.

Exportación a word en LotusScript

Llevo tres años trabajando en el desarrollo de aplicaciones para la plataforma lotus notes, sufiente para saber que existe poca documentación en nuestro idioma, intentaré ir haciendo mi humilde aporte mediante algunos codigos útiles que he podido desarrollar o han compartido conmigo otros programadores a lo largo de este tiempo.

Exportar a excel es un proceso común en muchos lenguajes, pero en algunos casos puede requerirse algo diferente, exportar un documento a Microsoft Word. A continuación les dejo un codigo muy acotado pero se que para muchos será un buen comienzo para realizarlo.

Sub Initialize
On Error Goto ER

Dim word As Variant
Dim worddoc As NotesDocument
Set word = CreateObject(“Word.Application”)
Call word.documents.add
Set wdSelection = word.Selection
wdSelection.Font.Name = “Arial”
wdSelection.Font.Size = “14”
wdSelection.Font.Bold = False
wdSelection.TypeText “Aqui escribo un texto sin negrita”
wdSelection.Font.Bold = True
wdSelection.TypeText “Aqui escribo un texto con negrita”
word.Visible = True
‘wdDoc.SaveAs(“C:\Datos\testdoc.doc”) estas dos lineas permitiran en vez de abrirlo guardarlo en disco.
‘word.Quit
Exit Sub
Er:
Msgbox Error & ” en click linea ” & Erl
word.Quit
Set word = Nothing
Exit Sub
End Sub

A %d blogueros les gusta esto: