TMACUL

LINGUAGEM SPEL (Continuação) 30/09/2015

Blog Post created by TMACUL Champion on Jan 17, 2016

LINGUAGEM SPEL (Continuação)

 

Continuando o assunto da otimização da função "exec", vou explicar o funcionamento de uma forma bem simplista.

O código é relativamente simples mas precisa ser bem entendido antes de sua implementação. Está bem documentado, quase autoexplicativo e bem parametrizável. Se quiser aprimorá-lo e distribuí-lo, fique bem a vontade.

 

Não foi fácil construí-lo devido a algumas particularidades que descobri durante o desenvolvimento. A principal dificuldade foi constatar que qualquer chamada da função "exec" sempre será executada no servidor primário da SDM, mesmo quando disparada de um servidor secundário. Outra dificuldade se deu quando o SDM estava instalado de forma distribuída, mas felizmente tudo foi resolvido.

Caso tenham alguma dúvida, postem aqui mesmo.

 

FUNCIONAMENTO

1) É executada uma função customizada chamada "string z_executar(string zs_cmd, int zi_depurar, string zs_metodo)";

2) Em seguida, através de uma bridge batch (z_executar_bridge.cmd), o comando informado é executado e os retornos são gerados;

3) O resultado da execução retorna para a função SPEL que então processa os dados.

 

COMO UTILIZAR:

1) Copie os arquivos z_executar.spl e z_executar_bridge.cmd para a pasta $NX_ROOT/site/mods/majic;

2) Altere o valor das variáveis "batadmin" e "batpassword" no arquivo z_executar_bridge.cmd informando o nome do usuário de windows que tem permissões de leitura e gravação no compartilhamento administrativo (Ex.: D$) da unidade onde está instalada o SDM em todos os servidores (primário e secundários);

3) Para fazer a chamada da função, utilize o exemplo abaixo:

 

string zs_cmd, zs_result;

zs_cmd = 'java.exe blablablablabla xyz';

zs_result = z_executar(zs_cmd, zi_depurar, zs_metodo);

 

int zi_errorlevel, zi_pos_delim;

string zs_delim, zs_return;

zs_delim = "@;@"; // define o delimitador utilizado na string de return

 

if (!is_null(zs_result)) {

zi_pos_delim = sindex(zs_result, zs_delim);

zi_errorlevel = (int) substr(zs_result, 0, zi_pos_delim);

zs_return = substr(zs_result, zi_pos_delim + 3);

if (zi_errorlevel == 0) { // em caso de sucesso

// faz algo

} else { // em caso de falha

// faz outro algo

}

 

} else {

zi_errorlevel = -1;

zs_return = format("%s ERRO ao processar a saida da execucao do comando '%s': %d", zs_metodo, zs_cmd, zi_errorlevel);

logf(ERROR, zs_return);

}

 

Aproveitem.

Até a próxima!

 

 

z_executar.zip

 

Publicado Originalmente: september 30, 2015 às 11:54

Em: CA SDM Brasil - facebook

Por: daniel-bighelini

Outcomes