Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Prochain SlideShare
U7 1 xslt-curso2018-19
U7 1 xslt-curso2018-19
Chargement dans…3
×

Consultez-les par la suite

1 sur 32 Publicité

Plus De Contenu Connexe

Les utilisateurs ont également aimé (20)

Similaire à Lotus script (20)

Publicité

Plus récents (20)

Lotus script

  1. 1. Lotus Script<br />Por Carlos Abril<br />
  2. 2. Qué es Lotus Script?<br />Es un potente lenguaje que permite desarrollar aplicaciones orientado a Objetos.<br />LotusScript y su conjunto de herramientas de desarrollo proporcionan un entorno de programación común para todas las aplicaciones de Lotus en todas las plataformas soportadas por el software Lotus (como Windows, AIX, Linux).<br />
  3. 3. Ventajas de Lotus Script<br />Superset of BASIC .<br />Cross-platform.<br />Object-oriented.<br />Included in Lotus software applications.<br />OLE support.<br />Interoperabilitywithotherlanguages.<br />IntegratedDevelopmentEnvironment<br />LotusScriptlibraries<br />Extendable through Lotus Software Extensions (LSXs) <br />
  4. 4. Reglas de construcción<br />Cada declaración de script esta compuesta de líneas de texto. Cada elemento de texto es una palabra clave de Lotus Script, operadores, identificadores, literales, o caracteres especiales.<br />Puede incluir líneas en blanco sin que afecte el sentido.<br />El texto en una línea puede iniciar del lado izquierdo.<br />Dentro de una declaración, los elementos estarán separados por espacios en blanco o tabuladores. Espacios extras pueden ser usados para hacer una declaración más legible sin afectar su significado.<br />Una declaración, a excepción de un bloque de sentencias, debe aparecer en una sola línea a menos que incluya el carácter de continuación de línea subrayado(_) precedidos por espacios en blanco.<br />El carácter de continuación de línea (_) debe aparecer al final de una linea, precedido al menos de un espacio o tabulación.<br />Una nueva línea marca el final de una declaración.<br />Múltiples declaraciones en una línea deben ser separadas por (:).<br />
  5. 5. Reglas para construcción de cadenas<br />Una cadena en Lotus Script puede encerrarse en uno de los siguientes delimitadores:<br />Un par de doble comillas (“” “”)<br />“Esta es una cadena entre comillas”<br />Un par de barras verticales (||)<br />|esta es una cadena entre barras verticales|<br />Con llaves abiertas y cerradas ({})<br />{esta es una cadena entre llaves}<br />Cadenas encerradas entre barras verticales pueden separa múltiples líneas.<br />|Una cadena<br />en dos líneas|.<br />
  6. 6. Reglas para construir identificadores<br />Un identificador es el nombre que le da a una variable, constante, tipo, clase, función, procedimiento o propiedad.<br />El primer carácter debe ser una letra mayúscula o minúscula.<br />Los restantes caracteres deben ser letras, dígitos o el carácter subrayado.<br />Un sufijo para los tipos de datos(%,&,!,#,@, o $) pueden estar al final, pero no es parte del identificador.<br />El tamaño máximo es 40 caracteres, no incluye los sufijos.<br />Los nombres pueden ser mayúsculas o minúsculas.<br />
  7. 7. Tipos de datos<br />Boolean True(1) o False(0)<br />Byte 0 a 255<br />Integer<br />Long<br />Single<br />Double<br />Currency<br />String<br />
  8. 8. Tipos de datos<br />Soporta los siguientes tipos de datos y estructuras:<br />Array.- conjunto de elementos que tienen el mismo tipo de datos, puede tener hasta 8 dimensiones.<br />List.- de una sola dimensión que tienen el mismo tipo de datos.<br />Variant .- Un especial tipo de dato que puede contener valores escalares, arreglos, lista, u objetos de referencia. Variant.-puede ser también booleano o fechas.<br />User-defined data type.- Tipo de datos definidos por el usuario.<br />User-definedclass.- definición de clases .<br />Objectreference.- Punteros a objetos de automatización OLE.<br />
  9. 9. Conversión de tipos de dato<br />Lotus Script implícitamente convierte de un tipo de dato a otro en las siguientes situaciones:<br />Operaciones numéricas .- Operaciones con diferentes tipos de datos numéricos , Lotus Script convierte los valores a un mismo tipo de dato para evaluación.<br />Paso de argumentos .- Cuando un argumento numérico es pasado por valor (byvalue) a un procedimiento, Lotus Script trata de convertir el valor si no es el tipo de dato esperado. Si el valor es más grande, la operación genera un error.<br />Variables Variant.- Cuando un valor es contenido en una variable Variant, Lotus Script trata de convertir el valor a numérico o cadena dependiendo del contexto.<br />
  10. 10. Conversión explícita de tipos de datos<br />Lotus Script provee varias funciones para convertir explícitamente el valor de un tipo de dato:<br />Cbool<br />CByte<br />Ccur<br />Cdat<br />CDbl<br />Cint<br />CLng<br />CSng<br />Cstr<br />CVar<br />
  11. 11. Automática conversión de tipos de datos.<br />Se puede asignar un valor de un tipo de dato numérico a una variable de un tipo de dato numérico diferente.<br />Puede ejecutar operaciones aritméticas o comparaciones que involucran diferentes tipos de datos numéricos.<br />Puede incrementar el valor de una variable Variant de algún tipo numérico más allá de los límites permitidos del tipo de dato.<br />Puede añadir o concatenar los valores de dos variables variant, uno de los cuales es cadena y el otro es numérico.<br />
  12. 12. Constantes y variables<br />Se puede manipula varios tipos de datos a través del uso de constantes y variables.<br />Las constantes y variables tienen un alcance y tiempo de vida.<br />El alcance se refiere al área en el cual un identificador puede ser referenciado.<br />El límite se refiere al período durante el cual el identificador esta disponible en la aplicación.<br />Cuando define una constante o variable, Lotus script asigna un alcance y tiempo de vida.<br />
  13. 13. Alcance de las declaraciones.<br />LS reconoce tres tipos de alcance:<br />Módulo .- Una variable es declarada dentro de un módulo si esta fuera de algún procedimiento, clase o definición de tipo. <br />Procedimiento.- Una variable es declarada dentro de un procedimiento, si es declarada dentro de una función, procedimiento o propiedad. Solamente dentro del procedimiento el nombre de la variable tiene significado. El nombre de la variable es visible en cualquier parte del procedimiento.<br />Type o Class.- Una variable esta declarada dentro de un Tipo o Clase, el alcance esta dentro de la definición del tipo o clase.<br />
  14. 14. Clases para acceder a la base de datos Domino<br />Notes Session<br />Notes Database<br />Notes View<br />Notes DocumentCollection<br />Notes Document<br />Notes Item<br />
  15. 15. Clase NotesSession<br />Permite crear una sesión de trabajo.<br />Dimss as New NotesSession<br />
  16. 16. Clase NotesDatabase<br />Permite acceder a la base de datos.<br />Dimss as New NoteeSession<br />Dimdb as NotesDatabase<br />Set db = ss.CurrentDatabase<br />
  17. 17. Clase NotesView<br />Representa una vista o carpeta que contiene documentos.<br />Dimss as New NotesSession<br />Dimdb as Notesdatabase<br />Dimview as NotesView<br />Set db = ss.Currentdatabase<br />Set view = db.GetView(“Nombre o Alias de una vista”)<br />
  18. 18. Clase NotesDocumentCollection<br />Representa una collección de documentos de las base de datos.<br />Dimss as New NotesSession<br />Dimdb as Notesdatabase<br />Dimdc as NotesDocumentCollection<br />Set db = ss.currentdatabase<br />Set dc = db.UnprocessedDocument<br />
  19. 19. Clase NotesDocument<br />Representa un documento de la base de datos.<br />Dimss as New NotesSession<br />Dimdb as Notesdatabase<br />Dimview as NotesView<br />Dimdoc as NotesDocument<br />Set db = ss.Currentdatabase<br />Set view = db.GetView(“Nombre o Alias de una vista”)<br />Set doc = view.GetFirstDocument<br />
  20. 20. Clase NotesItem<br />Permite acceder a un campo del documento.<br />Dimss as New NotesSession<br />Dimdb as NotesDatabase<br />Dimview as NotesView<br />Dimdoc as NotesDocument<br />DimItem as NotesItem<br />Set db = ss.Currentdatabase<br />Set view = db.GetView(“Nombre Vista o carpeta”)<br />Set doc = view.GetFirstDocument<br />Set item = doc.GetFirstItem(“NombreCampos”)<br />
  21. 21. Ejemplo de recorrer una vista.<br />Dimss as New NotesSession<br />Dimdb as NotesDatabase<br />Dim View as NotesView<br />Dimdoc as NotesDocument<br />DimItem as NotesItem<br />Set db = ss.CurrentDatabase ‘asocia a la variable db la actual base de datos<br />Set view = db.GetView(“NombreVista”) ‘a la var. View asocia una de las vistas de la base de datos<br />Set doc = view.GetFirstDocument ‘apunta al primer documento de la vista<br />Whilenot(docisnothing) ‘determina si hay un documento asociado a la variable doc<br /> set item = doc.GetFirstItem(“Campo”) ‘obtiene en la variable Item el o los valores de un campo<br />Forall x In Item.Values ‘es como un For para sacar los valores contenidos en la variable Item<br />Msgbox x <br />EndForall<br /> Set doc = view.GetNextDocument(doc) ‘permite avanzar al siguiente documento en la vista<br />Wend<br />
  22. 22. Modificar un campo en todos los documentos contenidos en una vista<br />SUPONGAMOS QUE EXISTE EN LOS DOCUMENTOS CONTENIDOS EN UNA VISTA UN CAMPO LLAMADO ESTADO QUE NECESITAMOS CAMBIARLO A FINALIZADO.<br />Dimss as New NotesSession<br />Dimdb as NotesDatabase<br />Dim View as NotesView<br />Dimdoc as NotesDocument<br />DimItem as NotesItem<br />Set db = ss.CurrentDatabase ‘asocia a la variable db la actual base de datos<br />Set view = db.GetView(“NombreVista”) ‘a la var. View asocia una de las vistas de la base de datos<br />Set doc = view.GetFirstDocument ‘apunta al primer documento de la vista<br />Whilenot(docisnothing) ‘determina si hay un documento asociado a la variable doc<br /> set item = doc.ReplaceItemValue(“Estado”,”Finalizado”) ‘Estado es el nombre del campo y Finalizado es el nuevo valor<br />calldoc.save(false,false)<br /> Set doc = view.GetNextDocument(doc) ‘permite avanzar al siguiente documento en la vista<br />Wend<br />
  23. 23. Enviar por correo información de documentos que cambiaros de estado<br />Vamos a cambiar el estado de los documento de la vista y vamos a notificar por correo a los creadores de los documentos que se ha realizado el cambio de estado.<br />Dimss as New NotesSession<br />Dimdb as NotesDatabase<br />Dim View as NotesView<br />Dimdoc as NotesDocument<br />DimItem as NotesItem<br />Set db = ss.CurrentDatabase ‘asocia a la variable db la actual base de datos<br />Set view = db.GetView(“NombreVista”) ‘a la var. View asocia una de las vistas de la base de datos<br />Set doc = view.GetFirstDocument ‘apunta al primer documento de la vista<br />Whilenot(docisnothing) ‘determina si hay un documento asociado a la variable doc<br /> set item = doc.ReplaceItemValue(“Estado”,”Finalizado”) ‘Estado es el nombre del campo y Finalizado es el nuevo valor<br />calldoc.save(false,false)<br />dimdocMail as New NotesDocument(db) ‘decimos que vamos a crear un nuevo documento en la actual base de datos<br />docMail.Form = “Memo” ‘ al nuevo documento le asociamos un formulario en esta caso el Memo que esta asoc. Al correo<br />docMail.SendTo = doc.Authors(0) ‘Asocio al campo sendTo el autor del documento<br />docMail.Subject = “Documento que cambio de estado” ‘asocio al campo Asunto(Subject) un texto<br />docMail.Body = “Se ha modificado el documento ” & cstr(doc.Numero(0))<br />calldocMail.Send(false) ‘se envía el documento sin que se grabe en la base actual el mensaje TRUE hace que se grabe<br /> Set doc = view.GetNextDocument(doc) ‘permite avanzar al siguiente documento en la vista<br />Wend<br />
  24. 24. Borrar documentos que cumplen una condición<br />Revisamos que el documento tenga un estado de Borrador y procedemos a borrar los documentos.<br />Dimss as New NotesSession<br />Dimdb as NotesDatabase<br />Dim View as NotesView<br />Dimdoc as NotesDocument<br />Dimdocsig as NotesDocument<br />DimItem as NotesItem<br />Set db = ss.CurrentDatabase ‘asocia a la variable db la actual base de datos<br />Set view = db.GetView(“NombreVista”) ‘a la var. View asocia una de las vistas de la base de datos<br />Set doc = view.GetFirstDocument ‘apunta al primer documento de la vista<br />Whilenot(docisnothing) ‘determina si hay un documento asociado a la variable doc<br />ifdoc.Estado(0) = “Borrador” then<br /> set docsig = View.GetNextDocument(doc)<br />doc.Remove(true)<br /> set doc = docsig<br />else<br /> set doc = view.GetNextDocument(doc)<br />endif<br />Wend<br />
  25. 25. Borrar documentos seleccionados en una vista<br />Revisamos que el documento tenga un estado de Borrador y procedemos a borrar los documentos.<br />Dimss as New NotesSession<br />Dimdb as NotesDatabase<br />Dimdc as NotesDocumentCollection<br />Dimdoc as NotesDocument<br />DimItem as NotesItem<br />Set db = ss.CurrentDatabase ‘asocia a la variable db la actual base de datos<br />Set dc = db.UnprocessedDocument ‘determina los documentos que están seleccionados en la vista<br />ifdc.Count > 0 then ‘Count determina el número de documentos seleccionados en la vista<br />for i = 1 todc.Count<br />doc = dc.GetNthDocument(i) ‘ accesa al documento<br />doc.Remove(true) ‘si es TRUE borra físicamente, si es False queda marcado para eliminación<br />next<br />Endif<br />
  26. 26. Clases para acceder al front-end<br />.<br />Notes UIWorkspace<br />Notes UIDocument<br />
  27. 27. Clase NotesUIWorkspace<br />Representa la actual área de trabajo de Lotus.<br />Dim WS as New NotesUIWorkspace<br />
  28. 28. Clase NotesUIDocument<br />Representa el actual documento que se encuentra abierto en el área de trabajo.<br />Dimws as New NotesUIWorkspace<br />Dimuidoc as NotesDocument<br /> set uidoc = ws.CurrentDocument<br />
  29. 29. Validar si un documento contiene información antes de grabar<br />Supones que hay un documento abierto que contiene los campos Nombres, Apellidos, Cedula y EstadoCivil, se desea verificar que haya datos en los campos Nombres, Apellidos y Cedula.<br />Esta validación la podemos hacer desde el evento QuerySave que tiene ya definidas las variables asociadas a la clase NotesUIDocument, hemos de suponer que se envía la acción de grabar desde un objeto Action que contiene el comando @command([FileSave]).<br />Sub QuerySave(Source as NotesUIDocument, Continue as variant)<br />IfSource.IsNewDocthen ‘verifico si el documento es nuevo o sea no ha sido grabado nunca.<br />Dim Mensaje as string<br />ifTrim(Source.FieldGetText(“Nombres”)) = “” then ‘FuncionTrim permite eliminar espacios en blanco<br /> Mensaje = “No ha ingresado los Nombres”<br />Endif<br />ifTrim(Source.FieldGetText(“Apellidos”)) = “” then<br />if Mensaje = “” then<br /> Mensaje = “No ha ingresado los Apellidos”<br />else<br /> Mensaje = Mensaje + chr(13) + “No ha ingresado los Apellidos”<br />endif<br />Endif<br />ifTrim(Source.FieldGetText(“Cedula”)) = “” then<br /> ‘Identico la validación al campo Apellidos<br />Endif<br />if Mensaje <> “” then<br />MsgBox Mensaje<br />Continue = False ‘ Cuando Continue es FALSE detiene el proceso de grabado similar @failure<br />endif<br />Endif<br />End Sub<br />
  30. 30. Cómo evitar que un documento se Edite de acuerdo al valor de un campo?<br />Supongamos que los documento van cambiando de estado y el estado final es Cerrado, entonces se desea evitar que un documento sea editado si el estado ya esta Cerrado.<br />QueryModeChange( Source as NotesUIDocument , Continue as Variant )<br />ifnot(Source.IsNewDoc) then ‘verifico que el documento no sea nuevo<br />ifSource.FieldGetText(“Estado”) = “Cerrado” then ‘verifico el estado del documento<br />MsgBox “Documento no puede ser editado”<br />Continue = false<br />endif<br />endif<br />End Sub<br />
  31. 31. Notificar al propietario de un documento que ha sido abierto y si es Editado creamos un documento con información al estilo log<br />SE EJECUTA SOLO SI EL DOCUMENTO EXISTE SI NO EXISTE NO EJECUTA EL SCRIPT<br />Sub Postopen(Source As Notesuidocument)<br />ifnot(Source.IsNewDoc) then<br />dimss as New NotesSession<br />dimdb as NotesDatabase<br />dimdoc as NotesDocument<br />dimdocMail as NotesDocument<br /> set db = ss.Currentdatabase<br /> set doc = Source.Document ‘relaciono el documento del back-end con el doc editable<br /> set docMail = new NotesDocument(db)<br />docMail.Form = “Memo”<br />docMail.SendTo = doc.Authors(0)<br />docMail.Subject = “Su documento ha sido abierto”<br />docMail.Body = “El documento ha sido abierto el ” + cstr(now) + “ por el usuario” + ss.UserName<br />calldocMail.send(false) <br />endif<br />EndSub<br />
  32. 32. Creamos un documento LOG que indique que un documento ha sido editado<br />SE EJECUTA SOLO SI EL DOCUMENTO EXISTE SI NO EXISTE NO EJECUTA EL SCRIPT<br />Sub PostModeChange(Source As Notesuidocument)<br />ifnot(Source.IsNewDoc) then<br />ifSource.EditModethen<br />dimss as New NotesSession<br />dimdb as NotesDatabase<br />dimdoc as NotesDocument<br />dimdocLog as NotesDocument<br /> set db = ss.Currentdatabase<br /> set doc = Source.Document ‘relaciono el documento del back-end con el doc editable<br /> set docLog = new NotesDocument(db)<br />docLog.Form = “LOG”<br />docLog.QuienEdito = ss.UserName<br />docLog.FechaApertura = now<br /> calldocLog.save(false,false)<br />endif<br />endif<br />EndSub<br />

×