Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
jamirjunior
Creator
Creator

Como reaproveitar codigo

Pessoal, fiz uma rotina para monitorar os processamentos. Vou em "Arquivo/Exportar para arquivo de script" e salvo um .qvs. No arquivo .qvw que quero monitorar incluo o script (Inserir/Arquivo de script) e está lá meu script, mas tenho q alterar os parâmetros em cada arquivo(hj temos 54), qual a melhor forma de reaproveitar? Teria como eu chamá-lo e passar apenas os parâmetros?

// Parametros:

LET vDiretorio = 'Extração';

LET vSistema = 'Veiculo';

LET vData = now();

LET vEtapa = 'Gera Log';

LET vSubetapa = 'Subetapa';

LET vStatus = 'Sucesso';

Log_Processamento:

LOAD diretorio,

     sistema,

     data,

     etapa,

     subetapa,

     status

FROM

[..\..\Log_Processamento.qvd]

(qvd);


LOAD * INLINE [

     diretorio, sistema, data, etapa, subetapa, status

     $(vDiretorio), $(vSistema), $(vData), $(vEtapa), $(vSubetapa), $(vStatus)

];

STORE Log_Processamento INTO [..\..\Log_Processamento.qvd];

DROP TABLE Log_Processamento;

1 Solution

Accepted Solutions
marco_almeida
Creator II
Creator II

Acho que entendi.. Veja se é isso:

Você quer ter um "script" centralizado com todos valores possíveis de cada carga? Se sim, você pode usar a mesma técnica só que vamos modificar um pouco:

SUB SetaVariaveis(nome_carga)

Switch nome_carga

   

      Case 'amarelo'

          Trace 'Você escolheu a cor amarela';

      case 'azul'

      Trace 'Você escolheu a cor azul';

      case 'roxo'

      Trace 'Você escolheu a cor amarela';

      Default

      Trace 'Você não escolheu um cor válida';

   

    EndSwitch

ENDSUB

Call SetaVariaveis('azul');

Call SetaVariaveis('vermelho');

O valor de cada case será o nome de cada uma das cargas que você está querendo setar, e dentro de cada um deles, os comandos que você precisar executar. No seu caso, setar variáveis.

Joga isso um arquivo externo e importa em cada um dos seus arquivos. Ai pra cada um deles você chama o case respectivo.

Quando surgir um app novo, basta você adicionar mais um case nesse SetaVariaveis.

Você tem todos os valores centralizados agora.

Seria isso?

Grupo Telegram Qlik Brasil: https://t.me/joinchat/AeRmnUmcxQ02L00g3x-HtQ

View solution in original post

7 Replies
rafaelattux
Luminary Alumni
Luminary Alumni

Bom dia Jamir.

Você pode colocar todo esse script em um arquivo .txt e depois apenas utilizar o comando must_include para incluir o código na aplicação.

Dessa forma você altera só em 1 lugar ( arquivo de texto ) e todas as 54 aplicações serão atualizadas.

SET vArquivoTXT = 'SeuCaminho\NomeArquivo.txt';

$(must_include=$(vArquivoTXT));

jamirjunior
Creator
Creator
Author

rafaelattux‌, no arquivo texto tbem ficaria fixo, desculpe mas não entendi. Como passaria os parâmetros para o arquivo texto? Exemplo: LET vDiretorio = 'Extração'; além de Extração temos Transformação, Painel, Imagens, etc.


Obrigado

elvis_schwarz
Creator
Creator

Bom dia Jamir

Você pode criar uma variável lendo a data do script:
Let vDataScript = Date(Today(),''YYYYMMDD);

No store você adiciona esta variável no nome do arquivo:

STORE Log_Processamento INTO ['..\..\Log_Processamento_$(vDataScript).qvd'];


E na hora de Ler o arquivo você chama o arquivo substituindo a data com * para carregar todos os logs:

Log_Processamento:

LOAD diretorio,

     sistema,

     data,

     etapa,

     subetapa,

     status

FROM

[..\..\Log_Processamento_*.qvd]

(qvd);

marco_almeida
Creator II
Creator II

Fala jovem. tudo certo?

É mais fácil você criar uma SUB e deixar num arquivo para fazer um include posterior.

Subs podem receber parâmetros ao ser chamada. então você poderia fazer o seguinte:

Vamos criar um arquivo "GeraLog.qvs" (ou txt, o que preferir). Nesse arquivo você terá o seguinte:

SUB GeraLog(parametro) //você pode adicionar quantos parâmetros forem necessários

     TRACE $(parametro);


     //completa com o que você precisa

ENDSUB

Arquivo no teu script de aplicativo você vai fazer:

$(Must_Include=GeraLog.qvs);

CALL GeraLog('amarelo');

No console será mostrado o valor "amarelo".

Agora só adaptar para o que você precisa.

Abraços

Grupo Telegram Qlik Brasil: https://t.me/joinchat/AeRmnUmcxQ02L00g3x-HtQ
jamirjunior
Creator
Creator
Author

Acho q não fui bem claro, vou tentar explicar melhor. Estes parâmetros:

LET vDiretorio = 'Extração';

LET vSistema = 'Veiculo';

LET vData = now();

LET vEtapa = 'Gera Log';

LET vSubetapa = 'Subetapa';

LET vStatus = 'Sucesso';

serão diferentes para cada um dos 54 arquivos.

marco_almeida
Creator II
Creator II

Acho que entendi.. Veja se é isso:

Você quer ter um "script" centralizado com todos valores possíveis de cada carga? Se sim, você pode usar a mesma técnica só que vamos modificar um pouco:

SUB SetaVariaveis(nome_carga)

Switch nome_carga

   

      Case 'amarelo'

          Trace 'Você escolheu a cor amarela';

      case 'azul'

      Trace 'Você escolheu a cor azul';

      case 'roxo'

      Trace 'Você escolheu a cor amarela';

      Default

      Trace 'Você não escolheu um cor válida';

   

    EndSwitch

ENDSUB

Call SetaVariaveis('azul');

Call SetaVariaveis('vermelho');

O valor de cada case será o nome de cada uma das cargas que você está querendo setar, e dentro de cada um deles, os comandos que você precisar executar. No seu caso, setar variáveis.

Joga isso um arquivo externo e importa em cada um dos seus arquivos. Ai pra cada um deles você chama o case respectivo.

Quando surgir um app novo, basta você adicionar mais um case nesse SetaVariaveis.

Você tem todos os valores centralizados agora.

Seria isso?

Grupo Telegram Qlik Brasil: https://t.me/joinchat/AeRmnUmcxQ02L00g3x-HtQ
jamirjunior
Creator
Creator
Author

Grande Marco!

Funcionou !

Muito obrigado!