terça-feira, 15 de março de 2011

XPages - Trabalhando com DbColumn e DbLookup

Assim como no Notes, podemos usar @DbColumn e @DbLookup em XPages através de JavaScript. Há apenas algumas diferenças.


A sintaxe básica desses dois comandos em XPages é:

@DbLookup(dbName:string, viewName:string, key:string, colNumber:int) : any
@DbLookup(dbName:string, viewName:string, key:string, fieldName:string) : any
@DbLookup(dbName:string, viewName:string, key:string, colNumber:int, keywords:string) : any
@DbLookup(dbName:string, viewName:string, key:string, fieldName:string, keywords:string) : any
DbColumn(dbName:string, viewName:string, colNumber:int) : any

Bastante parecida com a sintaxe usada no próprio Notes.
Mas devemos ter muita atenção ao trabalhar com esses dois comandos, pois eles podem retornar: Array, String ou null. Diferente de comandos convencionais que usamos em JavaScript, esse comando pode retornar instancias diferentes de acordo com seu resultado. Caso encontre mais de um resultado, ele retorna uma instancia de Array com os resultados; caso encontre apenas um resultado, ele não retornará um Array com um elemento, mas sim o elemento; caso não encontre nada, ele retornará null. Então sempre devemos tratar os resultados de acordo com o que pode aparecer. Mas de tudo isso que falei acima, o @DbColumn tem apenas uma diferença, onde retornaria null, retorna "".

Eu sugiro usar o seguinte código ao usar esses 2 comandos:

var x = @DbLookup(@DbName(), "ViewQualquer", key, 1);
if(x instanceof Array){
    //Código para quando retornar um Array
}
else{
   if(x == null){
        //Código para quando não retornar resultados
    }
    else{
        //Código para quando retornar apenas um elemento
    }
}



var x = @DbColumn(@DbName(), "ViewQualquer", 1);
if(x instanceof Array){
    //Código para quando retornar um Array
}
else{
   if(x == ""){
        //Código para quando não retornar resultados
    }
    else{
        //Código para quando retornar apenas um elemento
    }
}

Nenhum comentário:

Postar um comentário