Coluna do estagiário celepariano

Soluções de problemas de bases Lotus Notes na Internet

 

Autor: Rodrigo Calvet (Estagiário da GPS)


   

Imagine que você tenha a necessidade de montar um formulário em Lotus Notes para veicular pela Internet, mas, - sempre tem um "mas" para complicar-, conforme a opção escolhida pelo usuário em determinado campo, o Notes deverá disponibilizar, na seqüência, opções de "combo box" dinâmicas.

Pronto, está armado o cenário para o problema que, até bem pouco tempo atrás, vinha com a resposta clássica: – "É complicado para fazer porque o Notes não mantém um bom relacionamento de amizade com a Internet, para este tipo de caso".

Porém, - e ainda bem que sempre tem um "porém"-,. o pessoal cá da casa é teimoso e não desiste fácil.

Pesquisa daqui, fuça dali, busca um artigo acolá, eis que surge uma luz no fim do túnel através de um artigo publicado em uma revista que apresentava uma solução.

Agora só faltava escolher a vítima, isto é, um técnico com uma boa dose de paciência para testar a rotina, aparar as arestas e tornar o novo método acessível para uso.

A escolha recaiu sobre o estagiário aí da foto, o Rodrigo Calvet, lotado na DITEC-F desde junho do ano passado, para debruçar-se sobre o assunto, e o resultado do trabalho está descrito abaixo pelo próprio estagiário.

Um dos maiores problemas encontrados no Lotus Notes é na hora de disponibilizar bases de dados Lotus Notes para Internet. Muitas vezes, ao disponibilizar a base, nota-se que alguns campos não funcionam corretamente. Mesmo revendo todas as fórmulas e Scripts utilizados na base, nem sempre era possível identificar o erro.

Em face destes problemas, o pessoal do Estágio da DITEC-F, juntamente com os técnicos da DISER, empregaram a seqüência de passos abaixo, extraída da revista "Lotus & Domino Adviser", que solucionou as falhas na migração do Notes para a Internet.

O código atua transformando as fórmulas estáticas do Lotus Notes em dinâmicas. A lógica do código assegura que seja executado um refresh automático do formulário padrão criado pelo Notes, permitindo que estas aplicações trafeguem livremente para a Internet.

1º Criar um subformulário no formulário que deverá utilizar o "Refresh", com o seguinte código de Java Script:

[<!- ->]<SCRIPT>

function autoRefresh (elem, skipvalue) {

if (autoRefresh.arguments.lengh < 2 | | skipvalue != elem.name) {

//grava o campo que foi mudado

document.cookie = "returnToField=" + escape (elem.name+ (elem.type == "radio" | | elem.type == "checkbox" ? ","+elem.value : ""))

//Agora faz o refresh

autoRefreshButton ()

} }

var auto RefreshButton

function autoRefreshButtonLoad () {

var allLinks = document.links

var lastLink = allLinks[allLinks.lengh – 1]

var linkHref = lastLink.href

var javascriptCode = linkHref.substring (11, 999)

autoRefreshButton = new Function (javascriptCode)

}

var returnFieldName = "", returnFieldValue = ""

function autoRefreshLoadReturnValue () {

var scookie = "; "+ document.cookie + "; "

var ckpos >= 0) {

var eapos = (scookie).indexOf (´; ´, ckpos+16)

var fldid = unescape (scookie.substring (ckpos+16, eapos))

if (fldid != "") {

document.cookie = "returnToField="

var comma = fldid.indexOf (",")

if (comma < 0) comma = 9999

returnFieldName = fldid.substring (0, comma)

returnFieldValue = fldid.substring (comma+1, 9999)

} } }

function returnToField () {

var fform = document.forms[ 0 ], i

if (returnFieldName != "") {

var t = fform [returnFieldName]

if ("" + t != "undefined") {

returnFieldName = ""

if ("" + t.type == "undefined") {

for (i = o; i < t.length – 1; i++) {

if ("radio,checkbox".indexOf (t[ i ] .type) >= 0 && t[ i ].value == returnFieldValue)

return t[ i ].focus ()

}

t[ i ].focus ()

} else

t.focus ()

} }

return 0

}

function enableRefreshElement (elem, routine) {

if (elem.checked)

elem.onclick = null

else

elem.onclick = routine

}

else if (elem.type == "checkbox")

elem.onclick = routine

else

elem.onchange = routine

}

function enableAutoRefresh () {

var i, k, t, frm, fldnames

frm = document.forms [ 0 ]

var routine = New Function ("autoRefresh (this)")

for (i = 0; i < enableAutoRefresh.arguments.length; i++) {

t = frm [enableAutoRefresh.arguments [ i ] ]

if ("" + t != "undefined") {

if (("" + t.type) == "undefined") {

for ( k = 0; k < t.legth; k++) {

enableRefreshElements (t [ k ], routine)

}

} else

enableRefreshElement (t, routine)

if (enableAutoRefresh.arguments [ i ] == returnFieldName)

returnToField ()

} } }

var autoRefreshPreviousOnload

function autoRefreshOnload () {

if (autoRefreshPreviousOnload != null) autoRefreshPreviousPnload ()

returnToField ()

}

autoRefreshButtonLoad ()

autoRefreshLoadReturnValue ()

autoRefreshPreviousOnload != null) autoRefreshPreviousOnload ()

returnToField ()

}

autoRefreshButtonLoad ()

autoRefreshLoadReturnValue ()

autoRefreshPreviousOnload = window.onload

window.onload = autoRefreshOnload

</SCRIPT>

2º Criar um Formulário com campos que insiram novas palavras para os campo em que a função Refresh será útil.

3º Criar uma visão que armazene os dados cadastrados pelo formulário anterior.

4º Inserir o Subformulário criado com o código de Java Script no formulário que deverá utilizar a função automática de Refresh, deixando-o oculto.

5º Nas propriedades do Banco de Dados, habilitar a função "Acesso à Web: Usar Java Script ao gerar páginas".

6º Criar os campos que utilizarão a função Refresh como: "palavra-chave, editável, Usar fórmula para opções". A seguir, criar uma fórmula utilizando a função DbLookup para puxar os dados da visão criada anteriormente.

7º Fazer o mesmo para os outros campos que utilizarão esta função.

8º Na linha de cima do campo que deverá utilizar a função Auto Refresh, colocar o seguinte código: <SCRIPT>enableAutoRefresh (" nome do campo")</SCRIPT>

Deixar este texto oculto.