29 octubre, 2013
Lotus Script. Acceso al iSeries desde Lotus Domino.
Otros de los conectores que suelo utilizar para explotar la base de datos de mi iSeries es la conexión del Lotus Domino. Esto nos permite crear agentes domino que generen o modifiquen documentos Notes a partir de los datos de nuestro iSeries.
El agente que podemos desarrollar puede ser en Lotus Script o en Java, pero en este post me centraré solo en Lotus Script.
La principal diferencia es que un Agente en Lotus Script que acceda a los datos del iSeries no puede ejecutarse con el mandato SBMDOMCMD como comentaba en este otro post, cosa que sí podemos hacer desde Java, por lo que solo podemos ejecutarlos desde un cliente Lotus. En otro post os explicaré como hacerlo en Java.
Desarrollar un agente que lea datos de nuestro iseries es muy sencillo.
Desarrollo en Lotus Script
En Primer Lugar, para la conexión usaremos el LSX for Lotus Connectors, por lo que debemos debemos definir el uso de la librería LSXLC de lotus Conector en la sección Options que es la que nos permite el acceso.
Uselsx «*lsxlc»
Definimos la conexión y las variables donde vamos a recibir los datos. Usamos la conexión a db2 que es la de nuestro iSeries.
Dim con As New LCConnection(«db2»)‘ conexión
Dim fldLst As New LCFieldList
Dim fld As LCField
Y abrimos la conexión a nuestra Base de Datos con nuestro usuario correspondiente
con.Database = «server»
con.UserId = «user»
con.Password = «password»
con.Connect
Una vez abierta la conexión procedemos a leer los datos de las tablas necesarias controlando que haya datos que leer y una vez terminado desconectamos.
sql = «SELECT * FROM csqvr.prvart»
If (con.Execute(sql,fldLst)=0) Then
Print «No se han leido registros»
Else
While (con.Fetch (fldLst) > 0)
Clave = Trim$(fldLst.parcod(0))
Wend
End If
con.disconnect
Como podéis ver , el acceso a los datos se hace mediante las variables fldLst tipo LCFieldList y la variable fld tipo LCField. La primera contiene la lista de todos los campos que se devuelven al ejecutar la sentencia SQL, por lo que, como veis en el ejemplo, referenciar a uno de esos campos no es más que una propiedad de esa clase fldLst.NombreCampo(0).
Bueno, esta es la manera fácil de acceder desde Lotus Script a DB2. En el próximo post os contaré como accedo desde agentes creados en Java.
Os dejo un ejemplo completo de código
Option Public Option Explicit Uselsx "*lsxlc" Sub Initialize Dim ss As New notessession Dim bd As notesdatabase Dim doc As notesdocument, nuevodoc As Notesdocument Dim vista As notesview Dim Leidos As Integer, Modif As Integer, Altas As Integer Dim Clave As String, sql As String Dim con As New LCConnection("db2") Dim fldLst As New LCFieldList Dim fld As LCField On Error Goto msgerror con.Database = "database" con.UserId = "user" con.Password = "password" con.Connect Set bd = ss.currentdatabase Set vista = bd.getview("ImpLot") sql = "SELECT * FROM csqvr.prvLot" If (con.Execute(sql,fldLst)=0) Then Set doc = New NotesDocument( bd ) ' Mando Mensaje nada leido doc.Form = "Memo" doc.SendTo = "Departamento Informatica" doc.Subject = "Terminado Lotes. L- No Leido" Call doc.Send( False ) Print "No se han leido registros" Else Leidos = 0 Modif=0 Altas=0 Print "Importando Lotes. Espere por favor ......" While (con.Fetch (fldLst) > 0) Leidos=Leidos+1 Clave = Trim$(fldLst.plolot(0)) & Trim$(fldLst.plocod(0)) Set doc = vista.getdocumentbykey(clave,True) If Not doc Is Nothing Then ' si encuentra el documento, lo machaca Doc.fLote_DesLot = Trim$(fldLst.plolde(0)) Doc.fLote_Descripcion = Trim$(fldLst.plodes(0)) Doc.fLote_Cantidad = fldLst.plocan(0) Call doc.save(True,True) ' guardo el documento Modif=Modif+1 Else ' si no lo encuentra lo doy de alta Set nuevoDoc = bd.createdocument() nuevoDoc.form = "fLotes" nuevoDoc.fLote_CodigoL = Trim$(fldLst.plolot(0)) nuevoDoc.fLote_DesLot = Trim$(fldLst.plolde(0)) nuevoDoc.fLote_CodigoProd = Trim$(fldLst.plocod(0)) nuevoDoc.fLote_Descripcion = Trim$(fldLst.plodes(0)) nuevoDoc.fLote_Cantidad = fldLst.plocan(0) Call nuevoDoc.save(True,True) Altas=Altas+1 End If Wend End If con.disconnect Set doc = New NotesDocument( bd ) doc.Form = "Memo" doc.SendTo = "Departamento Informatica" doc.Subject = "Terminado Lotes. L- " & Leidos & " M- " & Modif & " A- " & Altas Call doc.Send( False ) Exit Sub msgerror: Set doc = New NotesDocument( bd ) 'si encuentra error manda mensaje doc.Form = "Memo" doc.SendTo = "Departamento Informatica" doc.Subject = "Terminado Lotes. ERRORES DETECTADOS" doc.Body = Error$ Call doc.Send( False ) End Sub