string z_anexa_evento(...)
{
////////////////////////////////////////////////////////////////////////////////
// Metodo: z_anexa_evento
// Criado em: 11/06/2013
// Autor: Daniel Becker Bighelini
// Modificado em: 21/11/2016
// Modificado por: Daniel Becker Bighelini
////////////////////////////////////////////////////////////////////////////////
// Descricao:
//
// Anexa um evento a um objeto.
//
// Parametros:
// argv[0]: Atributo persistent_id do objeto que o evento sera anexado.
// argv[1]: Nome simbolico do evento que sera anexado.
// argv[2]: Atributo persistent_id do evento que sera anexado. Se for informado, o argumento sym argv[1] eh ignorado.
// argv[3]: Tempo de espera em segundos antes de disparar o evento.
// argv[4]: Data que o evento deve ser disparado.
// argv[5]: [OPCIONAL] Define o nivel de depuracao da funcao (0=Desligado, 1=Log resumido, 2=Log detalhado). Se omitido, valor sera 0.
//
// Exemplo:
// z_anexa_evento('chg:99999', 'nome do evento', '', 600, 2013-06-11 15.00.00, 1)
////////////////////////////////////////////////////////////////////////////////
// Variaveis globais do metodo
int zi_depurar, zi_i;
string zs_metodo, zs_resultado, zs_clausula, zs_msg;
string zs_persistent_id, zs_event_name, zs_event_persid;
duration zdu_delay_time;
date zdt_date;
// Atribuindo variaveis
zs_metodo = 'z_anexa_evento - ';
//zi_depurar = 1; // Alterar valor zi_depurar parar 1 para debug mode
zs_persistent_id = (string) argv[0];
zs_event_name = (string) argv[1];
zs_event_persid = (string) argv[2];
zdu_delay_time = (duration) argv[3];
zdt_date = (date) argv[4];
if (argc>5) {zi_depurar = (int) argv[5];}
// Entrada para debug mode
if ( zi_depurar>=1 ) {
logf(SIGNIFICANT, "%s Quant. de argumentos : %d", zs_metodo, argc);
for (zi_i=0; zi_i<argc; zi_i+=1) {
logf(SIGNIFICANT, "%s ARG #%s : %s", zs_metodo, zi_i, argv[zi_i]);
}
} else {
logf(SIGNIFICANT, "%s '%s'", zs_metodo, zs_persistent_id);
}
///////////////////////////////////////////////////////////////////////////////////////
// Inicio do codigo
// Variaveis de objeto
object zo_atev_dob, zo_atev_list, zo_group_leader;
int zi_atev_count;
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Obtendo GL...", zs_metodo);
send_wait(0, top_object(), "get_co_group");
zo_group_leader = msg[0];
////////////////////////////////////////////////////////////////////////////////
// Removendo eventos existentes no objeto
////////////////////////////////////////////////////////////////////////////////
// Identifica o persid do evento que sera removido
if (is_empty(zs_event_persid)) {
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Identificando o persid do evento '%s'...", zs_metodo, zs_event_name);
zs_event_persid = expand(format("&{%s = evt.sym->persistent_id}", zs_event_name));
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Persid do evento '%s': %s", zs_metodo, zs_event_name, zs_event_persid);
}
// Definindo clausula para procurar eventos no objeto desejado
zs_clausula = format("event_tmpl = '%s' AND obj_id = '%s'", zs_event_persid, zs_persistent_id);
send_wait(0, top_object(), "call_attr", "atev", "sync_fetch", "STATIC", zs_clausula, -1, 0);
zo_atev_list = msg[0];
zi_atev_count = msg[1];
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Quantidade de eventos localizados em '%s': %s", zs_metodo, zs_persistent_id, zi_atev_count);
if (zi_atev_count > 0) {
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Cancelando %d eventos existentes no objeto '%s'...", zs_metodo, zi_atev_count, zs_persistent_id);
for (zi_i=0;zi_i<zi_atev_count;zi_i++) {
send_wait(0, zo_atev_list, "dob_by_index", "DEFAULT", zi_i, zi_i);
zo_atev_dob = msg[0];
send_wait(0, zo_group_leader, "checkout", zo_atev_dob);
send_wait(0, zo_atev_dob, "cancel_me");
send_wait(0, zo_group_leader, "checkin");
if (msg_error()) {
logf(ERROR, "%s ERRO cancelando evento para o objeto '%s': %s", zs_metodo, zs_persistent_id, msg[0]);
} else {
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Evento '%s' cancelado com sucesso no objeto '%s'.", zs_metodo, zs_event_name, zs_persistent_id);
}
}
}
////////////////////////////////////////////////////////////////////////////////
// Anexando o evento ao objeto
////////////////////////////////////////////////////////////////////////////////
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Anexando evento '%s' (%s) ao objeto '%s'...", zs_metodo, zs_event_name, zs_event_persid, zs_persistent_id);
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Data de inicio: '%s' / Atraso: '%d' segundos", zs_metodo, zdt_date, zdu_delay_time);
send_wait(0, top_object(), "call_attr", "evt", "new_attached_event", zo_group_leader, zs_persistent_id, zs_event_name, (duration) zdu_delay_time, zdt_date, "SLA", 0, 0, "");
if (msg_error()) {
zs_msg = format("%s ERRO ao anexar o evento '%s' no objeto '%s': %s", zs_metodo, zs_event_name, zs_persistent_id, msg[0]);
logf(ERROR, "%s", zs_msg);
return zs_msg;
} else {
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Evento '%s' anexado com sucesso no objeto '%s': %s", zs_metodo, zs_event_name, zs_persistent_id, msg[0]);
}
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Fazendo checkin...", zs_metodo);
send_wait(0, zo_group_leader, "checkin");
if (msg_error()) {
zs_msg = format("%s ERRO ao fazer checkin no objeto '%s': %s", zs_metodo, zs_persistent_id, msg[0]);
logf(ERROR, "%s", zs_msg);
send_wait(0, zo_group_leader, "uncheck");
return zs_msg;
} else {
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Checkin realizado com sucesso no objeto '%s': %s", zs_metodo, zs_persistent_id, msg[0]);
return "OK";
}
return;
// Fim do codigo
///////////////////////////////////
}