# LotusScript

LotusScript é uma linguagem de programação baseado na sintaxe da linguagem do Visual Basic da Microsoft.
Tem orientação a objeto, mas também não por completo. Por exemplo, não é possível utilizar-se o recurso da polimorfia, onde vários construtores habitam uma classe, mas, para efeitos práticos, permite a criação de classes particulares ao usuário satisfatoriamente.
O fabricante-desenvolvedor disponibiliza ao usuário-programador várias interfaces prontas, que facilitam bastante a coleta de dados existentes no banco de dados.
A maior deficiência do banco de dados do Lotus Notes é não ser relacional, dificultando bastante o compartilhamento de dados entre as várias bases.
O LotusScript usa dois conceitos básicos de dados gravados: os que são vistos graficamente na tela, chamados de UI (User Interface) e os que residem em disco - os documentos e seus itens -, recuperados ou não através de uma interface gráfica (os UI Forms).
Documentos são os dados gravados em disco, associados ou não a um Form (virtual ou visível). Itens são os recipientes que equivalem a campos de um formulário.
Campos e itens frequentemente confundem os novatos em programação em LotusScript, mas são elementos diferentes: campos (fields) são a representação visual dos itens (dados gravados) num formulário (Form).
Assim, igualmente aos campos, os itens têm nomes e são ligados a eles sob a mesma denominação: só é possível ver o conteúdo de um item se houver um formulário (UI) que tenha um campo (Field) de mesmo nome do item (a não ser que se tenha a intenção de exibir-se fugazmente o dado, usando-se - no lugar do formulário e seus campos - uma 'message box', cujo texto exibe o conteúdo do item, por exemplo).
Assim, caso haja um campo num formulário com o nome de Txt, após a gravação dos dados do formulário, é salvo com a denominação de Item, e recebe automaticamente a referência de nome do campo, isto é, Txt no exemplo em questão.
A captura, por exemplo, de um determinado dado em um campo de um formulário - exemplificando como tendo o nome Txt - é feita da seguinte maneira, pressupondo-se estar o código abaixo sob o comando de um botão no formulário aberto e preenchido:
Dim workspace as new NotesUIWorkspace
dim uidoc as NotesUIDocument
set uidoc=workspace.CurrentDocument
msgbox "O valor do campo Txt é "& uidoc.FieldGetText("Txt")
Call uidoc.save
A primeira linha cria e instancia uma variável (workspace) de uma classe NotesUIWorkspace.
A segunda linha cria uma variável de objeto (uidoc) da classe NotesUIDocument, que representará o formulário aberto.
A terceira linha instancia a variável de objeto criada (uidoc) como a materialização do formulário do Workspace (o formulário aberto e visível ao usuário)
A quarta linha exibe o conteúdo do campo Txt do formulário (uidoc)através do método do objeto instanciado. O método FieldGetText, por si só, já indica a sua utilidade.
A última linha grava em disco os dados do campo do formulário, transformando sua referência nominal em documento e item.
De outro modo, caso o dado esteja em disco e não visível através de um formulário aberto na tela, é possível recuperá-lo através do código:
Dim session as New NotesSession
dim db as NotesDatabase
dim view as NotesView
dim doc as NotesDocument
set db=session.CurrentDatabase
set view=db.getView("UmaVisãoApropriada")
set doc=view.GetFirstDocument
if not (doc is nothing) then
msgbox "O valor do campo Txt é "& doc.Txt(0)
end if
O script acima pode ficar, por exemplo, num botão de ação de uma visão qualquer.
A primeira linha cria uma sessão, sintaxe obrigatória quando desejamos acessar dados não visíveis na tela através de uma base em que o próprio script esteja sendo escrito.
A segunda linha cria uma variável de objeto, através da qual uma base de dados é referenciada, base esta que terá os dados que nos interessem.
A terceira linha cria uma outra variável de objeto representativa de uma visão, que, em outras palavras, são consultas existentes na própria base, criada pelo próprio programador. Uma visão tem um nome geralmente sugestivo do conjunto de dados que recupera.
A quarta linha cria mais uma outra variável de objeto, agora representativa de um documento gravado (um formulário anterior salvou valores dentro de campos), cujos dados a visão acima coleta.
As instruções SET instanciam os respectivos objetos, de acordo com sua origem e seus nomes e sua posição na lista de dados listados na visão. No caso, os primeiros dados são recuperados do primeiro documento que a visão listar.
O teste IF evita que um erro de run-time ocorra, caso a visão não tenha nenhum documento listado.
Passando do teste IF, exibe-se o conteúdo do item Txt (gravado por um formulário, cujo campo tinha também o nome de Txt), considerando-o como de única ocorrência.
Isto é, o zero entre parênteses na sintaxe da exibição do dado em doc.Txt(0), diz que deseja-se o primeiro elemento armazenado no item.
Isto porque todos os itens são considerados, na sintaxe do LotusScript, como array de dados, sendo (0) o índice do primeiro elemento.
Caso o item fosse uma lista de valores (todos dentro daquele campo/item), poder-se-ia recuperar tais valores um a um. O segundo seria o item (1) - o segundo da lista; o terceiro (2), e assim sucessivamente.
Para os itens que armazenem apenas um elemento, é obrigatória a referência (0).