OBJECT lrel_asset_chgnr {
TRIGGERS {
PRE_VALIDATE z_chg_adiciona_remove_ic( chg, nr ) 2000 FILTER EVENT ("INSERT DELETE");
};
};
OBJECT chg {
ATTRIBUTES Change_Request {
z_loc_add_nr_persids LOCAL STRING;
z_loc_remove_nr_persids LOCAL STRING;
};
TRIGGERS {
PRE_VALIDATE z_chg_valida_ticket( persistent_id, assignee, z_srl_Assignee_2, z_srl_Assignee_3, z_srl_Assignee_4, sched_start_date, sched_duration, z_loc_add_nr_persids, z_loc_remove_nr_persids ) 2010 FILTER EVENT ("INSERT UPDATE") && (assignee {} || z_srl_Assignee_2 {} || z_srl_Assignee_3 {} || z_srl_Assignee_4 {} || group {} || z_srl_Group_2 {} || z_srl_Group_3 {} || z_srl_Group_4 {} || sched_start_date {} || sched_duration {} || z_loc_add_nr_persids {} || z_loc_remove_nr_persids {});
};
};
lrel_asset_chgnr::z_chg_adiciona_remove_ic(...)
{
string zs_attribute;
if (event() == 'INSERT') {
zs_attribute = "chg.z_loc_add_nr_persids";
} else if (event() == 'DELETE') {
zs_attribute = "chg.z_loc_remove_nr_persids";
}
if (!is_empty(zs_attribute)) {
string zs_value;
zs_value = z_get_val(this, zs_attribute, zi_depurar, zs_metodo);
if (zi_depurar > 1) logf(SIGNIFICANT, "%s (ANTES) PERSID's armazenados no atributo '%s': '%s'", zs_metodo, zs_attribute, zs_value);
if (sindex(zs_value, nr.persistent_id) == -1) {
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Armazenando o persid '%s' do IC...", zs_metodo, nr.persistent_id);
if (is_empty(zs_value)) {
z_changeValue(this, zi_depurar, zs_metodo, zs_attribute, format("%s", nr.persistent_id));
} else {
z_changeValue(this, zi_depurar, zs_metodo, zs_attribute, format("%s %s", zs_value, nr.persistent_id));
}
}
if (zi_depurar > 1) {
zs_value = z_get_val(this, zs_attribute, zi_depurar, zs_metodo);
logf(SIGNIFICANT, "%s (DEPOIS) PERSID's armazenados no atributo '%s': '%s'", zs_metodo, zs_attribute, zs_value);
}
}
z_bloco_fim(zi_depurar, zs_metodo);
}
chg::z_chg_valida_ticket(...)
{
int zi_depurar;
zi_depurar = 1;
int zi_attached_nr_count;
zi_attached_nr_count = asset.length;
string zs_attached_nr_persids, zs_all_nr_persids;
zs_attached_nr_persids = '';
zs_all_nr_persids = '';
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Quant. de IC's associados na mudanca '%s': %d", zs_metodo, zs_persid, zi_attached_nr_count);
if (zi_attached_nr_count > 0) {
string zs_asset;
for (zi_i=0; zi_i<zi_attached_nr_count; zi_i++) {
zs_asset = format("asset.%d.persistent_id", zi_i);
send_wait(0, this, "call_attr", zs_asset, "get_val");
if (msg_error()) {
zs_msg = format("%s ERRO ao consultar o atributo '%s' do objeto '%s': '%s'", zs_metodo, zs_asset, zs_persid, msg[0]);
logf(ERROR, "%s", zs_msg);
z_bloco_fim(zi_depurar, zs_metodo);
return zs_msg;
}
zs_attached_nr_persids += format("%s ", msg[0]);
}
zs_all_nr_persids = zs_attached_nr_persids;
}
if (!is_empty(z_loc_add_nr_persids)) {
zs_all_nr_persids += z_loc_add_nr_persids;
}
if (!is_empty(z_loc_remove_nr_persids)) {
zs_all_nr_persids = z_remove_itens(zs_all_nr_persids, z_loc_remove_nr_persids, ' ', zi_depurar, zs_metodo);
}
zs_all_nr_persids = z_Trim(zs_all_nr_persids);
if (zi_depurar > 0) {
logf(SIGNIFICANT, "%s IC's associados : '%s'", zs_metodo, zs_attached_nr_persids);
logf(SIGNIFICANT, "%s IC's adicionados: '%s'", zs_metodo, z_loc_add_nr_persids);
logf(SIGNIFICANT, "%s IC's removidos : '%s'", zs_metodo, z_loc_remove_nr_persids);
logf(SIGNIFICANT, "%s IC's (TODOS) : '%s'", zs_metodo, zs_all_nr_persids);
}
string zs_nr_persid[100];
int zi_nr_count, zi_priority_nr_major;
zi_priority_nr_major = 0;
zi_nr_count = split(zs_nr_persid, zs_all_nr_persids, ' ');
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Quantidade de IC's identificados: %d", zs_metodo, zi_nr_count);
if (zi_nr_count == 0) {
if (zi_depurar > 0) logf(SIGNIFICANT, "%s AVISO: NAO existem IC's associados a esta mudanca.", zs_metodo);
zs_msg += format("Itens de configuracao: No minimo um IC precisa estar associado a mudanca.<br>");
}
if (!is_empty(zs_msg)) {
logf(ERROR, "%s %s", zs_metodo, zs_msg);
set_error(1);
set_return_data(zs_msg);
}
z_bloco_fim(zi_depurar, zs_metodo);
return;
}
string z_get_val(object zo_object, string zs_attr, int zi_depurar, string zs_metodo) {
zs_metodo += ' z_get_val';
string zs_msg;
send_wait(0, zo_object, "call_attr", zs_attr, "get_val");
if (msg_error()) {
zs_msg = format("%s ERRO ao consultar o atributo '%s' do objeto '%s': %s", zs_metodo, zs_attr, zo_object.persistent_id, msg[0]);
logf(ERROR, "%s", zs_msg);
z_bloco_fim(zi_depurar, zs_metodo);
return zs_msg;
}
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Valor do atributo '%s' no objeto '%s': '%s'", zs_metodo, zs_attr, zo_object.persistent_id, (string) msg[0]);
return msg[0];
}
string z_changeValue(object zo_obj, int zi_depurar, string zs_metodo, ...)
{
zs_metodo += " z_changeValue";
int zi_i;
for (zi_i=3; zi_i<argc; zi_i+=2) {
if (zi_depurar > 0) logf(SIGNIFICANT, "%s Persistindo valor '%s' no atributo '%s'...", zs_metodo, argv[zi_i+1], argv[zi_i]);
send_wait(0, zo_obj, "call_attr", argv[zi_i], "set_val", argv[zi_i+1], "SURE_SET");
if (msg_error()) {
logf(ERROR, "%s ERRO ao persistir o valor '%s' no atributo '%s': '%s'", zs_metodo, argv[zi_i+1], argv[zi_i], msg[0]);
return msg[0];
}
}
return;
}