...
Produto:
...
Microsiga Protheus
...
Versões:
...
11 e 12
...
Passo a passo:
...
O Schedule Protheus permite que rotinas do sistema sejam agendadas para que possam ser executadas posteriormente, em um período determinado pelo usuário. É possível definir quando (dias, horários e quantidades de execuções) e em qual Grupo de Empresas e Filiais o processo será executado. O Schedule Protheus não realiza nenhum processamento. Sua função é chamar a rotina agendada no momento definido ou manter esta rotina sendo executada constantemente, quando o agendamento é configurado como sempre ativo. Consumo de memória, desempenho e processamento são atributos associados a rotina agenda, e não ao Schedule Protheus em si.
O Schedule Protheus é composto por três componentes principais:
Aviso | ||
---|---|---|
| ||
A configuração do schedule Protheus deve ser realizada sempre em um único appserver. A configuração do Schedule gera informações de controle no arquivo appserver.ini acessado pela estação. Desta maneira ele sempre deve ser acessado pelo mesmo appserver que configurou o serviço. Preferêncialmente o Schedule deve ser configurado em um appserver isolado, e nunca dentro de um balance. |
Existem dois serviços que estão configurados no Schedule Protheus.
...
Informações |
---|
A tela pode sofrer alteração no modo de visualização de acordo com dispositivo no qual esta acessando a rotina, esse comportamento faz com que as barras de rolagem sejam habilitadas para melhor experiencia de navegação. |
Existem dois serviços que estão configurados no Schedule Protheus.
Para visualizar estes serviços acesse o módulo Configurador (Sigacfg) e no menu acesse Ambiente/Schedule/Schedule (CFGA010):
...
Image Added
Figura 1 - Task Manager e Queue Manager do Schedule Protheus. Serviços responsáveis por gerar e gerenciar a fila de tarefas.
Através desta interface é possível gerenciar os serviços. O primeiro botão permite iniciar todos os serviços de uma só vez. O segundo inicia o serviço no qual se está posicionado.
Já o terceiro botão para todos os serviços de uma vez e o quarto interrompe o serviço no qual se está posicionado.
Devido a
...
complexidade de manipulação dos serviços existe um botão de atualização (quinto botão) que permite que esta interface seja atualizada. Para que o Schedule Protheus funcione estes dois serviços devem estar iniciados.
Nesta visão são exibidas informações sobre o status dos Agents e também sobre os eventos de cada um.
...
Image Added
Figura 2 - Monitor de Agents. Aqui são exibidos os seus status e a data e hora de última utilização de cada um.
O gerenciamento dos Agents cadastrados é realizado da seguinte maneira:
No primeiro botão superior é possível iniciar todos os Agents cadastrados. O segundo botão inicia somente o Agent no qual se está posicionado.
O terceiro botão interrompe o serviço de todos os Agents e o quarto botão interrompe somente o Agent no qual se está posicionado.
Para que as tarefas sejam executadas, é necessário que exista ao menos um Agent cadastrado com a empresa equivalente a tarefa, e este esteja inicializado.
Cadastrar os Agents é muito simples. Clicando em Agent/Cadastro a tela de cadastro é apresentada.
...
Image Added
Figura 3- Tela de cadastro dos Agents do Schedule Protheus
Na barra superior no botão
...
Image Added é possível incluir automaticamente um Agent para cada um dos grupos de empresas cadastrados no sistema. Cada Agent já vem configurado com duas Threads para execução das rotinas.
É possível incluir Agents de maneira manual. Para isso, na parte inferior, em Detalhes, clique em adicionar e inclua o Agent. É necessário definir um código para o Agent, seu nome, o
...
IP, porta de comunicação e empresa na qual este Agent irá se conectar e o número de Threads disponíveis para execução das rotinas agendadas. É possível também desabilitar o Agent, caso necessário, ou ainda excluí-lo.
MUITO IMPORTANTE: É recomendável que seja utilizado sempre o endereço IP da máquina, e não o seu Alias de rede.
Exemplo: Utilize 172.16.32.111 ao invés de Maquina_001.
Dentro de Agent/Monitor é possível monitorar o Agent posicionado.
...
Image Added
Figura 4 - Monitoramento dos Agents cadastrados
É possível aqui verificar se o Agent está em execução ou não
...
através da coluna Status.
Informações |
---|
A partir da LIB 20180615, as Threads dos Agents não são mais exibidas na tela do Monitor, devido a uma alteração no mecanismo de controle das mesmas. A atribuição de Threads aos Agents passa a ser automática. |
Cadastrar as rotinas no Schedule Protheus é muito simples. Acesse Ambiente/Schedule/Schedule (CFGA010). Clicando em Agendamentos é possível verificar quais rotinas estão agendadas para execução.
...
Image Added
Figura 5- Visualização de rotinas agendadas para execução.
Para realizar o agendamento de uma nova rotina, basta ir em Cadastro e incluir a rotina na qual se deseja realizar o agendamento.
...
Image Added
Figura 6 - Interface para manipulação das rotinas a serem agendadas.
Na parte inferior, em detalhes é possível incluir uma nova rotina, clicando em Incluir. É necessário incluir dados nos seguintes campos:
Código – O código do agendamento é incluído automaticamente;
Usuário – É necessário vincular o usuário associado à execução da rotina;
Rotina – Rotina que terá a sua execução agendada. Existe um facilitador para encontrar a rotina desejada (uma consulta padrão, ou F3). Para que a rotina seja localizada pela consulta é necessário que:
O botão Parâmetros trará os parâmetros da rotina, caso a mesma possua Scheddef definida. Para rotinas que possuem Scheddef definida não é possível realizar passagem de parâmetros diretamente na rotina.
Supondo que a rotina TesteSched possua Scheddef definida. Neste caso, ela deve ser cadastrada no campo Rotina como 'TESTESCHED'. Caso a rotina não possua Scheddef definida, é possível realizar a passagem de parâmetros pela própria rotina, e neste caso a rotina pode ser cadastrada como 'TESTESCHED (parametro1, parametro2, parametroN)'. Mais detalhes da diferença entre rotinas com Scheddef e rotinas sem Scheddef (rotinas de processo especial) são mostradas no tópico Preparando uma rotina para ser agendada no Schedule Protheus.
...
Obs.: As alterações de Parâmetros em um agendamento só são validas para as próximas tarefas que esse agendamento irá gerar, pois os parâmetros são criados com as tarefas pouco antes do momento em que a mesma deverá ser executada de acordo com o horário/recorrência definida no agendamento.
Importante!!!
Caso o agendamento tenha a sua Recorrência configurada como Sempre Ativo, devido ter uma única tarefa criada no momento da inclusão do agendamento, nenhuma alteração de parâmetros será lida por este agendamento. Neste caso é necessário recriar o agendamento para utilizar os novos parâmetros.
Data – Defina a data de início para o agendamento da rotina;
Hora – Defina a hora de início do agendamento da rotina;
Ambiente – Defina em qual ambiente esta rotina será executada;
Empresa/Filial – Defina para qual par empresa/Filial a rotina será executada.
Nota | ||
---|---|---|
| ||
A partir deste label, para as rotinas em que a filial do agendamento pode ser selecionada e mais de uma filial possa ser selecionada (os agendamentos do EAI Protheus e TOTVS PDV não se enquadram neste requisito) é possível realizar o agendamento para todas as filiais do grupo em um único processo. Veja o exemplo da rotina a seguir, cadastrando a ROTNAX, ao clicarmos em Empresa/Filial um wizard é apresentado: |
...
Ao clicarmos em avançar, a tela de grupo de empresas é apresentada: |
...
Podemos aqui selecionar um ou todos os grupos de empresas. Selecionando o grupo 18 e clicando em avançar, a tela de filiais é apresentada: |
...
Podemos selecionar as filiais que desejamos realizar o agendamento da rotina, ou podemos também não selecionar nenhuma filial, ou ainda todas. Ao selecionar alguma filial: Será gerado um agendamento para aquele grupo/filial Se não selecionarmos nenhuma filial: Será gerado um agendamento para o grupo de empresas Ao selecionarmos todas as filiais: Serão gerados agendamentos para todas as filiais do sistema separadamente. Como cada agendamento é formado pela rotina agendada mais o par grupo/filial, caso não seja escolhida nenhuma filial para o agendamento a rotina será executada em todas as filiais do sistema em um único processo (uma única thread de agent). Isto significa que o processo seguirá em fila, sendo que o processo será executado em uma filial por vez, independente da quantidade de threads disponíveis. Caso seja selecionado alguma filial, os processos poderão ocorrer em paralelo, visto que cada agendamento (rotina+ grupo +filial) será executado em uma thread de agent diferente. |
...
...
Módulo – Defina o módulo associado a rotina agendada.
Criada desta forma, a rotina será executada apenas na data e hora informada. Caso seja necessário que o processo se repita é possível cadastrar também uma Recorrência.
Clique em
...
Image Added e a tela de cadastro de recorrência é aberta.
...
Image Added
Figura 7 - Cadastro de recorrência para a rotina agendada.
É possível definir a regra de execução da rotina. É possível definir o padrão de recorrência (diário, semanal, mensal anual e sempre ativo, o número de execuções e a data de término deste agendamento).
Não é possível selecionar o número de execuções e a data de término quando o padrão de Recorrência é cadastrado como sempre ativo. Neste tipo de padrão, a rotina é executada em loop, ou seja, ao final de sua execução ela é iniciada novamente, isto enquanto houver Threads de Agents disponíveis.
Confirmando a inclusão e tendo os serviços de Manager e Agents ativos, a rotina já está pronta para ser executada pelo Schedule Protheus.ClicandoProtheus. Clicando em Monitor é possível verificar as execuções agendadas, bem como as tarefas geradas para a rotina cadastrada. Já os eventos associados a execução só estarão disponíveis para as rotinas preparadas para agendamento, ou seja, para aquelas que tiverem SchedDef definida.
É importante esclarecer a relação entre um agendamento e as tarefas geradas. Um agendamento gera uma tarefa para cada grupo de empresa/filial cadastrado para este agendamento.
...
Image Added
Figura 8 - Rotinas agendadas e seus eventos associados.
...
Na interface do Schedule Protheus é possível verificar as mensagens trafegadas no EAI Protheus. No Schedule, selecionando EAI a fila de transações é apresentada.
Image Removed
Figura 9 - Fila de transações do EAI Protheus
...
Informações |
---|
Observação: É possível desabilitar um agendamento criado, clicando no agendamento e desmarcando a opção Habilitada. Contudo, informamos que esta ação apenas desabilita o agendamento, as tarefas criadas por esse agendamento continuam na fila até o término de todas suas execuções pendentes. Se o agendamento tiver a opção de recorrência Sempre Ativo, mesmo desabilitando o agendamento, as tarefas vão continuar na fila de execução a menos que o Administrador execute a rotina de Limpeza de Tabelas do Schedule, e remova as tarefas pendentes. Caso queira excluir o agendamento e todas suas tarefas pendentes, clique no agendamento e então no botão Excluir. |
Na interface do Schedule Protheus é possível verificar as mensagens trafegadas no EAI Protheus. No Schedule, selecionando EAI a fila de transações é apresentada. Image Added
Figura 9 - Fila de transações do EAI Protheus
Aqui é possível verificar o status das mensagens recebidas e enviadas pelo EAI Protheus, bem como realizar o gerenciamento das mensagens. Na barra superior, existem quatro botões com as seguintes funções: Image Added
O Primeiro botão permite que as mensagens com Falha de Processamento ou Bloqueadas voltem para o status de Aguardando Processamento. Somente mensagens do tipo Assíncronas permitem o reprocessamento. Mensagens síncronas entram em estado de Falha e não são mais reprocessadas. As mensagens Assíncronas sofrem quatro tentativas de reprocessamento automaticamente e após isto, somente são reprocessadas com a intervenção da funcionalidade do primeiro botão.
O segundo botão bloqueia uma mensagem, e seu processamento não será realizado, a menos que a funcionalidade de Reprocessar seja invocada.
O terceiro botão (lupa) permite que sejam visualizadas as mensagens originais (mensagem original é a mensagem que originou o processo) ou as mensagens de resposta (o retorno das mensagens originais). O último botão atualiza a interface das mensagens.
Na parte inferior é possível verificar o Status de Processamento das mensagens. Lembrando que e o EAI Protheus, tal qual o Schedule Protheus não faz o processamento da mensagem. A mensagem é processada por uma rotina específica, normalmente conhecida como Adapter EAI. As informações mostradas na parte inferior refletem o processamento desta rotina. Na lupa da parte inferior é possível conferir mais detalhes do processamento. Image Added
Figura 10 - Detalhes das tarefas do EAI Protheus
É possível através da interface do Schedule Protheus apagar registros das tarefas, da fila de mensagens do EAI Protheus ou ainda dos eventos associados. Para isto, posicione em Limpeza de tabelas. Image Added
Figura 11 - Limpeza de tabelas do Schedule Protheus
É possível
É possível através da interface do Schedule Protheus apagar registros das tarefas, da fila de mensagens do EAI Protheus ou ainda dos eventos associados. Para isto, posicione em Limpeza de tabelas.
Image Removed
Figura 11 - Limpeza de tabelas do Schedule Protheus
...
selecionar qual o tipo de tabela que se deseja apagar os registros e ainda selecionar um filtro para este procedimento:
...
Image Added
Figura 12 - Escolhida a tabela EAI, é possível realizar o procedimento junto com um filtro.
No exemplo acima, selecionamos a tabela EAI e vamos agora apagar somente os registros que estão bloqueados. Note que é possível incluir novos filtros para o procedimento.
...
Image Added
Figura 13 - Selecionado o filtro 'bloqueado', para que sejam trazidos somente os registros da fila do EAI que estão bloqueados.
Somente os registros bloqueados serão trazidos. Clicando no botão excluir, no canto superior direito, os registros são excluídos.
Âncora | ||||
---|---|---|---|---|
|
...
Criar uma rotina para ser agendada no Schedule Protheus é algo simples, porém, alguns cuidados devem ser observados. Existem algumas regras e definições que devem ser observadas no processo. Consumo de memória, travamento do serviço e desempenho são preocupações a serem tomadas pela rotina que foi agendada, e nunca pelo Schedule Protheus.
Outro cuidado que deve ser tomado ao preparar uma rotina para ser executada via Schedule, ou em qualquer job, é com relação a componentes de interface. Uma rotina que será executada apenas no server não pode ter interação com componentes que precisam de cliente para serem criados. O uso indevido desses componentes irá gerar um erro de comunicação e consecutivamente irá interromper o processamento.
Vale ressaltar que, o Schedule Protheus apenas aciona a rotina agendada e os problemas mencionados acima não estão relacionados a ele.
O Schedule Protheus mantém um controle interno dos agendamentos que não foram realizados. Devido a esta característica, caso existam agendamentos que não foram executados no momento correto ele irá iniciar em sequência todos os agendamentos que já deveriam ter sido iniciados até que o processo seja normalizado. Vejamos o exemplo a seguir:
...
Image Added
Figura 14- Exemplo de agendamento de rotina no Schedule Protheus
No exemplo acima, agendamos a rotina TesteSch e vamos então definir uma recorrência para este agendamento:
...
Image Added
Figura 15 - Exemplo de agendamento com recorrência no Schedule Protheus
Como mostra na figura 15, o processo deverá ser realizado diariamente, todos os dias da semana, sem data de término, com 36 execuções diárias, com intervalo de 30 minutos entre as execuções, com início em 27/10/14 as 00:00h. Clicamos no botão execuções e verificamos as execuções que serão agendadas. Perceba que, se estivermos cadastrando este processo as 10:00h, ao salvarmos o agendamento estaremos com 21 agendamentos atrasados (um a cada meia hora, desde as 00:00). O Schedule Protheus então irá iniciar estes processos sequencialmente, até que todos os agendamentos atrasados sejam normalizados, voltando assim a respeitar os intervalos configurados. Esta característica também se aplica aos casos em que o servidor foi parado por qualquer motivo e o processo não pode ser inicializado no momento correto.
Uma rotina de Processo Especial é uma rotina que não possuí a rotina estática Scheddef definida. Nestes casos a rotina agendada passa os seus parâmetros diretamente. Uma thread separada é inicializada para o processamento e neste cenário a montagem do ambiente não é realizada, devendo ser tratada internamente na rotina que foi agendada.
o Schedule faz o controle da fila de tarefas agendadas, de maneira que uma mesma tarefa não possa ser executada de maneira simultânea. Considera-se como tarefa um agendamento de uma rotina para um par empresa e filial.
...
Nota | ||
---|---|---|
| ||
Rotinas que não possuem Scheddef, em labels anteriores a 04032016, não possuem controle de fila pelo Schedule. Isto quer dizer que, se houver dois agendamentos da mesma rotina para o mesmo horário ou ainda se, devido a uma parada no sistema ou uma configuração que permita que existam agendamentos atrasados ou ainda se a rotina estiver com a recorrência cadastrada como sempre ativo e houver threads de agent livres, a rotina pode ser executada mais de uma vez ao mesmo tempo. |
No exemplo abaixo, vamos cadastrar uma rotina que não possuí SchedDef definida:
...
Image Added
Figura 16 - Cadastramento de uma rotina de processo especial
No exemplo acima, cadastramos a rotina TesteSch, enviando para a rotina três parâmetros: TesteSch('001',2,'003') - Uma string 001, um numérico 2 e uma segunda string 003. Como se trata de um processo especial, o ambiente não será montado pelo Schedule Protheus, porém serão enviadas informações para a rotina para que isto seja realizado, caso necessário. Desta forma, é enviado um array para o processo especial, com as seguintes características:
aArray[1] – Primeiro parâmetro passado na rotina ('001');
aArray[2] – Segundo parâmetro passado na rotina (2);
aArray[3] – Terceiro parâmetro passado na rotina ('003');
aArray[4] – Empresa associada ao agendamento da rotina;
aArray[5] – Filial associada ao agendamento da rotina;
aArray[6] – Usuário associado ao agendamento;
aArray[7]
...
– Id do agendamento.
Desta maneira, são sempre enviados primeiramente os parâmetros passados na rotina para logo em seguida serem enviadas as informações de empresa, filial, usuário e Id da tarefa.
Vejamos um exemplo de código de processo especial:
Image Added
Figura 17 - Exemplo de rotina de processo especial
No exemplo acima, a rotina irá receber os parâmetros necessários e irá executar a abertura do ambiente.
Vamos observar, no console do Appserver Protheus o resultado deste processamento, lembrando que todos os serviços do Schedule Protheus devem estar ativos para que o agendamento seja executado: Image Added
Podemos criar uma rotina agendada no Schedule Protheus declarando na rotina a função Static Scheddef. Para mais informações sobre a Scheddef consulte a página no TDN.
Abaixo, o exemplo de cadastramento de uma rotina que possui Scheddef definida, mas não possui nenhum Pergunte (SX1) para a rotina:
Image Added
Figura 18 - Exemplo de rotina com Scheddef e sem Pergunte
No exemplo acima, nossa rotina será chamada pelo Schedule Protheus com o ambiente já aberto, porém, não receberá nenhum parâmetro. A rotina agendada é executada na mesma thread do Schedule, e desta maneira, a rotina agendada deve devolver o ambiente integro ao final do processamento (não é possível, por exemplo, realizar a troca/abertura ou fechamento do ambiente, por exemplo). Esta rotina também será processada como um Processo (P).
Vamos realizar o agendamento desta rotina e clicar no botão parâmetros: Image Added
Figura 19 - Exemplo de agendamento de rotina com Scheddef sem parâmetros
No caso acima a rotina não possui parâmetros para serem visualizados. Vamos então agendar esta rotina para ser executada na empresa 19, filial D RJ 01 e verificar o retorno no console.log. Image Added
Não foi necessária a abertura do ambiente e nestes casos, caso existam dois processos agendados da mesma rotina para o mesmo momento, o processo é serializado, para que o segundo processo só tenha início ao término do primeiro.
...
...
...
Vamos agora criar uma
...
nova rotina com Scheddef, passando um pergunte (SX1) para a rotina.
Image Added
Figura 20 - Função com Scheddef definida com um grupo de perguntas
Vamos agora agendar esta rotina, e clicar no botão parâmetros: Image Added
Figura 21 - Configuração de Schedule com grupo de perguntas
Perceba que a ordem informada (Data Inicial e Data final) não foram passíveis de serem selecionadas, pois está definido no nosso Scheddef que o tipo de função era
...
um Processo (P).
...
Vamos
...
Vamos agora criar uma nova rotina com Scheddef, passando um pergunte (SX1) para a rotina.
Image Removed
Figura 20 - Função com Scheddef definida com um grupo de perguntas
...
...
verificar o resultado no console.log Image Added
Vamos agora realizar o mesmo exemplo anterior, mas agora a rotina a ser agendada será do tipo Relatório (R). Neste caso, a ordem poderá ser configurada.
Image Added
Figura 22 - Exemplo de rotina de relatório com grupo de perguntas
Image Added
Figura 23 - Exemplo de um agendamento e rotina de relatório. Neste exemplo a aba 'Dispositivo' está visível e a ordem pode ser configurada
No console.log, podemos ver o resultado da rotina.
Âncora | ||||
---|---|---|---|---|
|
Âncora | ||||
---|---|---|---|---|
|
O Schedule Protheus abre uma quantidade de threads que são proporcionais ao número de serviços necessários para a sua execução, e estes números são apresentados a seguir:
Aviso | ||
---|---|---|
| ||
Cada thread aberta no sistema, que faça uso de qualquer arquivo local (seja um dicionário ou qualquer outro arquivo) consome sempre uma licença do cTree Server (caso configurado). |
...
Âncora | ||||
---|---|---|---|---|
|
Âncora | ||||
---|---|---|---|---|
|
Função que retorna se a execução está dentro do novo Schedule Protheus
FWGetRunSchedule(
...
)
Sem parâmetro de entrada.
Retorno - lRet
...
→ Indica se está ou não em execução pelo Schedule Protheus.
...
Observações:
Observação: É necessário que a rotina agendada não seja um processo especial, ou seja, possua a definição correta via scheddef.
Índice:
Índice | ||
---|---|---|
|
...