Existem várias formas de consultar atributos de objetos via SPEL. De acordo com a necessidade e cenário devemos optar por um ou outro método. Alguns métodos são mais confiáveis e até mesmo mais performáticos que outros. A melhor forma de comparar é testá-los intensamente com grandes consultas à base.
Abaixo um código de exemplo que demonstra o funcionamento de cada um desses métodos:
// Definindo o persistent_id do objeto que será consultado
// Tentaremos consultar atributos do contato no objeto cnt
// fornecendo apenas apenas a chave persistent_id do contato.
string zs_persid, zs_name;
zs_persid = 'cnt:ED4D469F18BC4943B940AB934D020C6D';
// 'expand'
// Consulta apenas UM atributo sem tratamento de erro e sem instanciar o objeto
zs_name = expand(format("&{%s = cnt.persistent_id->last_name}", zs_persid));
// 'send_wait (val_by_key)'
// Consulta UM ou VÁRIOS atributos sem instanciar o objeto
send_wait(0, top_object(), "call_attr", "cnt", "val_by_key", "persistent_id", zs_persid, 3, "first_name", "middle_name", "last_name");
if (msg_error()) {
logf(ERROR, "ERRO ao consultar atributo do objeto '%s': '%s'", zs_persid, msg[0]);
return;
}
zs_name = format("%s %s %s", msg[1], msg[2], msg[3]);
// 'send_wait (dob_by_persid)'
// INSTANCIANDO um objeto para futura consulta com outros metodos
send_wait(0, top_object(), "call_attr", "cnt", "dob_by_persid", 0, zs_persid);
if (msg_error()) {
logf(ERROR, "ERRO ao instanciar o objeto '%s': %s", zs_persid, msg[0]);
return;
}
object zo_cnt;
zo_cnt = msg[0];
// Consulta DIRETA ao atributo do objeto instanciado sem tratamento de erro
zs_name = zo_cnt.last_name;
// 'send_wait (get_val)'
// Consulta apenas UM atributo do objeto instanciado
send_wait(0, zo_cnt, "call_attr", "last_name", "get_val");
if (msg_error()) {
logf(ERROR, "ERRO ao consultar atributo no objeto '%s': %s", zs_persid, msg[0]);
return;
}
zs_name = msg[0];
// 'send_wait (get_attr_vals)'
// Consulta UM ou VÁRIOS atributos do objeto instanciado
send_wait(0, zo_cnt, "get_attr_vals", 3, "first_name", "middle_name", "last_name");
if (msg_error()) {
logf(ERROR, "ERRO ao consultar atributos no objeto '%s': %s", zs_persid, msg[0]);
return;
}
zs_name = format("%s %s %s", msg[3], msg[6], msg[9]);
// EXIBINDO o nome do usuario
logf(SIGNIFICANT, "Nome do usuario: '%s'", zs_name);
Até a próxima.
Publicado Originalmente: 09 de outubro de 2015 às 11:24
Em: CA SDM Brasil - facebook
Por: daniel-bighelini
CA SDM Brasil Sumário - Índice