Base de conhecimento
Encontre respostas para suas dúvidas em quatro fontes de conhecimento diferentes ao mesmo tempo, simplificando o processo de pesquisa.

LG - FRW - Alteração nos programas para execução em modo background JOB em TOTVSTec

time.png Tempo aproximado para leitura: 00:05:17 min

Dúvida
Como realizar a alteração nos programas para execução em modo background JOB em TOTVSTec?

Ambiente
Logix - Administração Logix - Todas as versões

Solução
Alteração no código fonte das aplicações que realizam execução de outra aplicação em modo background JOB em TOTVSTec

Abaixo segue a relação dos comandos que não podem ser invocados por programas/rotinas quando estiverem sendo executados em modo background JOB por estarem relacionados a um conjunto de instruções de interface, inválidas para este modo de execução em TOTVS Tec:

Códigos:

ERROR
MESSAGE
DEFER
INTERRPUT
OPTIONS
OPEN WINDOW
OPEN FORM
CLOSE WINDOW
CLOSE FORM
CLEAR FORM
CLEARSCREEN
CURRENT WINDOW IS
MENU..COMMAND..END MENU
INPUT..END INPUT
INPUT ARRAY..END
INPUT
DISPLAY
DISPLAY ARRAY..END DISPLAY
PROMPT
fgl_winquestion()
fgl_winmessage()
fgl_winprompt()
fgl_keylabel()
fgl_keysetlabel()
fgl_fglgui()
fgl_dialog_setkeylabel()
fgl_getkey()
fgl_init4js()


Para aplicações que podem ser executadas tanto em modo online com interface quanto background execução em modo JOB acionada a partir de outra aplicação, estes devem ter sua codificação adaptada para prever a execução em modo JOB, para evitar acionamento de qualquer um dos comandos da lista acima e para isso poderá ser utilizada a função LOG_job_mode(), que retornará 1 TRUE se a execução estiver sendo executada em modo JOB background ou 0 FALSE se a execução é online com interface.

Neste caso, para as aplicações que tiverem adaptação para execução em modo background deve-se implementar da seguinte forma:

Exemplo:

IF NOT LOG_job_mode() THEN
MESSAGE ....
END IF


Somente no caso de retorno FALSE da função LOG_job_mode() é que os rotinas background poderão ser executados sem problemas no caso de existirem instruções relacionadas a interface.

No programa chamador deverá ter a seguinte alteração.

Programa Chamador:

CALL log120_procura_caminho("cre0201") RETURNING comando
IF g_ies_ambiente <> "U" THEN
     LET m_comando = comando CLIPPED," " , p_tela.dat_base ," ",
                                           p_tela.ies_empresa ," ",
                                           p_tela.ies_tip_docum ," ",
                                           p_tela.tipo_data ," ",
                                           p_ies_impressao ," ",
                                           g_cod_impressora ," ",
                                           p_nom_arquivo_back CLIPPED
     RUN m_comando
ELSE
     LET m_comando = "nohup ", comando CLIPPED," " , p_tela.dat_base ," ",
                                                     p_tela.ies_empresa ," ",
                                                    p_tela.ies_tip_docum ," ",
                                                     p_tela.tipo_data ," ",
                                                     p_ies_impressao ," ",
                                                     g_cod_impressora ," ",
                                                     p_nom_arquivo_back CLIPPED , " ",
                                                     ">> /dev/null", " &"
     RUN m_comando
END IF
#Alterar para executar da seguinte maneira:
#Passando parâmetros para o programa via tabela "tran_arg"
CALL log1200_parametro_programa_inclui("cre0201", 1, 0, p_tela.dat_base)
CALL log1200_parametro_programa_inclui("cre0201", 2, 0, p_tela.ies_empresa)
CALL log1200_parametro_programa_inclui("cre0201", 3, 0, p_tela.ies_tip_docum)
CALL log1200_parametro_programa_inclui("cre0201", 4, 0, p_tela.tipo_data)
CALL log1200_parametro_programa_inclui("cre0201", 5, 0, p_ies_impressao)
CALL log1200_parametro_programa_inclui("cre0201", 6, 0, g_cod_impressora)
CALL log1200_parametro_programa_inclui("cre0201", 7, 0, p_nom_arquivo_back)
#Executa o programa em Windows ou Linux, 4JS ou Totvstec
CALL log1200_executa_programa_background('cre0201')


A passagem de parâmetros fica definida sempre sendo por tabela, utilizando a função log1200_parametro_programa_inclui() para incluir parâmetro.

A função log1200_executa_programa_background() passará a receber somente UM parâmetro e não mais DOIS, então todos os programas que fazem chamada desta função passando dois parâmetros deverão ser alterados para passar apenas UM. No programa a ser chamado, deverão ser feitas as seguintes alterações:

Todo o bloco que compreende MAIN ... END MAIN deverá ser colocado em uma função chamada <nome do programa>_main(), e a chamada dessa função deverá ser colocada no bloco MAIN, exemplo:

MAIN
CALL cre0201_main()
END MAIN
#----------------------------#
FUNCTION cre0201_main()
#----------------------------#
... #TODO O CÓDIGO QUE ESTAVA ENTRE MAIN
# *** Recebimento dos parâmetros (alterar conforme exemplo abaixo)
END MAIN ...
END FUNCTION
# *** Recebimento dos parâmetros
# Quando o recebimento dos argumentos estiver sendo feito via arg_val(?):
LET p_tela.dat_base = arg_val(1)
LET p_tela.ies_empresa = arg_val(2)
LET p_tela.ies_tip_docum = arg_val(3)
LET p_tela.tipo_data = arg_val(4)
LET p_ies_impressao = arg_val(5)
LET g_cod_impressora = arg_val(6)
LET p_nom_arquivo = arg_val(7)

# Após alteração do programa chamador para passar os parâmetros utilizando
# o log1200_parametro_programa_inclui() o programa chamado deverá efetuar o
# recebimento desses parâmetros utilizando o log1200_parametro_programa_le():

LET p_tela.dat_base = log1200_parametro_programa_le(1,0)
LET p_tela.ies_empresa = log1200_parametro_programa_le(2,0)
LET p_tela.ies_tip_docum = log1200_parametro_programa_le(3,0)
LET p_tela.tipo_data = log1200_parametro_programa_le(4,0)
LET p_ies_impressao = log1200_parametro_programa_le(5,0)
LET g_cod_impressora = log1200_parametro_programa_le(6,0)
LET p_nom_arquivo = log1200_parametro_programa_le(7,0)


Os LOGs log1200_parametro_programa_inclui() e log1200_parametro_programa_le() utilizam as variáveis p_cod_empresa e p_user, tornando-se necessário que a chamada destas funções sejam colocadas depois da chamada da função log001_acessa_usuario().

Esse artigo foi útil?
Usuários que acharam isso útil: 0 de 0

0 Comentários

Por favor, entre para comentar.
X Fechar

Olá ,

Há pendência referente a um de seus produtos contratados para a empresa ().

Entre em contato com o Centro de Serviços TOTVS para tratativa.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cobrança – Verificação de pendências financeiras . clique aqui.

TOTVS

X Fechar

Olá ,

Seu contato não está cadastrado no Portal do Cliente como um perfil autorizado a solicitar consultoria telefônica.

Por gentileza, acione o administrador do Portal de sua empresa para: (1)configurar o seu acesso ou (2)buscar um perfil autorizado para registro desse atendimento.

Em caso de dúvidas sobre a identificação do contato administrador do Portal, ligue (11) 4003-0015, opção 7 e, em seguida, opção 4 para buscar o suporte com o time de Assessoria ao Portal do Cliente. . clique aqui.

TOTVS

X Fechar

Olá ,

Para o atendimento de "Consultoria Telefônica" você deverá estar de acordo com o Faturamento.

TOTVS

X Fechar

Olá,

Algo inesperado ocorreu, e o usuario nao foi reconhecido ou você nao se encontra logado

Por favor realize um novo login

Em caso de dúvidas, entre em contato com o administrador do Portal de Clientes de sua empresa para verificação do seu usuário, ou Centro de Serviços TOTVS.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cadastros . clique aqui.

TOTVS

Chat _

Preencha os campos abaixo para iniciar o atendimento:

Chat _