Lotus Script. Acceso al iSeries desde Lotus Domino.

0 Flares Twitter 0 Facebook 0 LinkedIn 0 Google+ 0 0 Flares ×

Lotus script a DB2Otros 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

JoBenCa

http://jobenca.es

Administrador y desarrollador de sistemas IBM System i y curioso de todo tipo de tecnología.

View more posts from this author

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

0 Flares Twitter 0 Facebook 0 LinkedIn 0 Google+ 0 0 Flares ×