TMACUL

LINGUAGEM SPEL (send x send_wait x tratamento de erros) 14/10/2015

Blog Post created by TMACUL Champion on Jan 1, 2016

Basicamente, a diferença das funções send e send_wait é que a primeira executa de forma ***íncrona e a segunda, síncrona. Além disso, a função send não tem tratamento de timeout nem de erro.

E por falar em exceção, a linguagem SPEL possui constantes que são muito utilizadas no send_wait para o tratamento de erro. No final deste post descrevo algumas que eu conheço.

 

É prudente tratar os erros SPEL sempre capturando toda a mensagem de erro, o contexto da execução, registrando em "log" e preferencialmente, notificando o administrador sobre o incidente por email ou ticket. Abaixo um exemplo:

 

string zs_error; // Variavel global para armazenar erros

string zs_metodo; // Variavel global para armazenar o nome do metodo que esta sendo executado

zs_metodo = "z_teste"; // Nome do metodo que esta sendo executado

zs_object = "cnt:312364654543545464"; // Nome do objeto onde o método está sendo executado

 

send_wait(0, top_object(), "call_attr", "cnt", "val_by_key", "blablabla");

if (msg_error()) {

zs_error = format("%s ERRO ao executar a funcao 'val_by_key' no objeto '%s': ", zs_metodo, zs_object);

if (msg_length()>1) {zs_error += format("%s (%s)", msg[0], msg[1]);} else {zs_error += msg[0];}

logf(ERROR, "%s", zs_error);

z_notifica_erro(zs_error); // Notifica o erro por email/incidente ao administrador

return;

}

 

É bom destacar que nem sempre uma mensagem de erro é armazenada em uma unição posição do array msg[0]. Por vezes, a posição msg[1] também é utilizada.

 

Segue abaixo os erros mais comuns:

 

General errors

E_FAILURE = 1 (Failure)

E_INVALID = 2 (Invalid)

E_TOO_MANY_ARGS = 3 (Too many args)

E_INSUFFICIENT_ARGS = 4 (Insufficient args)

E_BAD_ARG_TYPE = 5 (Bad arg type)

E_BAD_LIST_TYPE = 6 (Bad type-expected long list count)

E_TIMEOUT = 7 (Msg method call timed out)

E_ILLEGAL_CALL = 8 (Illegal call on an object)

E_INTERNAL = 9 (Internal problem)

E_UNKNOWN_MESSAGE = 10 (Unknown message).

E_UNKNOWN_NAME = 11 (Unknown name).

E_UPDATE_NOT_CHECKED_OUT = 12

E_UPDATE_NOT_POSSIBLE = 13 (Cannot update for various rsns)

E_CHECKIN_NOT_CHECKED_OUT = 14 E_ABANDON_NOT_CHECKED_OUT = 15 E_CHECKOUT_NOT_POSSIBLE = 16 (Checkout not possible)

E_NOT_CHECKED_OUT = 17 (Not checked out)

E_UNINITIALIZED_ATTRIBUTE = 18 (Attempt to send to un-init attr)

E_UNKNOWN_ATTRIBUTE_NAME = 19 (Unknown attribute name)

E_NO_WARM_LINK = 20 (Warm link category not found)

E_REQUEST_DENIED = 21

E_VALIDATE_NOT_CHECKED_OUT = 22 (Attempt to validate with nothing)

E_MODIFY_NOT_CHECKED_OUT = 23 (Attempt to modify with out)

E_ACCESS_NULL_VALUE = 24 (Attempt to acess NULL value)

E_ABORT = 25 (Abort the trigger methods)

 

Errors in the domain server

E_DOMSET_NAME = 100 (Bad domset name passed in)

E_NOT_SUPPORTED = 101 (Call of non-supported feature)

E_NOT_FOUND = 102 (Item not found)

E_BAD_ARG = 103 (Bad argument value passed in)

E_CHECK_DEL = 104 (Attempt to checkout deleted)

E_CHECK_NULL = 105 (Attempt to CO a null object)

E_SREL_CO_CONFLICT = 106 (Attempt to set an CO srel)

E_REMAP_CO = 107 (Dob remap on checked out dob1)

E_REMAP_BAD_CLASS = 108 (Attempt to remap to a bad class)

E_IN_FETCH = 109 (We are in a fetch and can't do it)

E_NO_MORE_FETCH = 110 (No more fetch possible)

E_BAD_DOMSET_TYPE = 111 (A bad domset type)

E_BAD_MERGE_TYPE = 112 (Can't merge that)

E_DUPLICATE = 113 (Duplicate)

 

Errors for Animation

E_INVALID_TARGET = 200/201 (Bad target +/or method specified)

E_INVALID_PERSID_ID = 202 (Bad target instance specification)

E_INVALID_TYPE = 203 (Bad target type)

E_INVALID_POST_ACTIVITY = 204 (Bad post action)

E_UNKNOWN_ERROR_CODE = 205 (Always the last error code)

 

Até a próxima.

 

 

 

Publicado Originalmente: 14 de outubro de 2015 às 11:25

Em: CA SDM Brasil - facebook

Por: daniel-bighelini

Outcomes