O conceito de contexto no EAI tem por finalidade aumentar o controle no envio de mensagens para diversos destinos. Este documento descreverá os passos necessários para habilitar o suporte a este conceito nos adapters. Para mais informações sobre contexto, acessar este link.
O programa de geração de adapters (EAI0032) já insere as funções e trechos de código necessários para suportar o conceito, sendo necessário alguns poucos ajustes no código.
No fonte do adapter (EAIAdapter<Transação><Versão>.4gl):
############################################### # FUNÇÃO DE RETORNO DOS CONTEXTOS DO ADAPTER # ############################################### #---------------------------------------------------# FUNCTION EAIAdapterUnitOfMeasure2_getContextNames() #---------------------------------------------------# # Informe a lista de contextos que o adapter suporta, separando os elementos com virgula. # Ex.: 'Padrão,Financeiro,Manufatura' RETURN _ADVPL_eai_get_default_context() # Retorna a literal 'padrao'. END FUNCTION |
#--------------------------------------------------------------------#
FUNCTION EAIAdapterUnitOfMeasure2_SendBusinessMessage(l_MessageType)
#--------------------------------------------------------------------#
DEFINE l_MessageType VARCHAR(6) #upsert / delete
DEFINE l_ContextNames VARCHAR(100)
CALL EAIHelperUnitOfMeasure2_inicializa_record()
### Atualizar o contexto na mensagem, se informado.
### Os contextos devem ser passados para o adapter usando o EAIMapper_set("ContextNames",<stringContexto>).
# LET l_ContextNames = EAIMapper_getString( "ContextNames" )
# CALL EAIHelperUnitOfMeasure2_set_ContextNames( l_ContextNames )
IF NOT EAIHelperUnitOfMeasure2_esta_configurado_para_envio() THEN
RETURN TRUE
END IF |
No fonte do helper não é necessária nenhuma alteração.
No fonte do adapter (EAIAdapter<Transação><Versão>.4gl):
#----------------------------------------------------------------# FUNCTION EAIAdapterUnitOfMeasure2_getContextNames() #----------------------------------------------------------------# RETURN _ADVPL_eai_get_default_context() clipped || “,manufatura,educacional” END FUNCTION |
No fonte do helper (EAIHelper<Transação><Versão>.4gl):
_ADVPL_eai_create_message(
EAIHelper<Transacao><Versao>_get_transaction_name(),
EAIHelper<Transacao><Versao>_get_adapter_versao(),
_ContextNames ) |
#----------------------------------------------------------------#
FUNCTION EAIHelperUnitOfMeasure2_set_ContextNames(l_contextNames)
#----------------------------------------------------------------#
DEFINE l_contextNames VARCHAR(100)
LET _ContextNames = l_contextNames
IF _ContextNames IS NOT NULL AND g_eai_msg_negocio IS NOT NULL THEN
CALL _ADVPL_eai_set_context_names(g_eai_msg_negocio, _ContextNames)
END IF
END FUNCTION |
_ADVPL_eai_is_send_configured(
EAIHelper<Transacao><Versao>_get_transaction_name(),
EAIHelper<Transacao><Versao>_get_adapter_version(),
_ContextNames ) |
No fonte do adapter alterar a função <Adapter>_envia_mensagem_eai_adapter() para:
#--- Recupera o contexto informado para a mensagem ---#
LET _ContextNames = EAIMapper_getString("ContextNames")
#== Integração com outros sistemas ativa?
IF NOT _ADVPL_eai_is_send_configured(adp10004_get_transaction_name(), adp10004_get_adapter_version(), _ContextNames) THEN
CALL adp10004_inicializa_record()
RETURN TRUE #Não pode retornar FALSE neste caso.
END IF
#== Cria a mensagem que será enviada
CASE l_operacao
WHEN 'IN' LET l_mensagem = _ADVPL_eai_create_message('CurrencyQuotation','upsert')
WHEN 'MO' LET l_mensagem = _ADVPL_eai_create_message('CurrencyQuotation','upsert')
WHEN 'EX' LET l_mensagem = _ADVPL_eai_create_message('CurrencyQuotation','delete')
OTHERWISE
CALL log0030_processa_mensagem('Operação inválida','info',l_modo_exibicao)
CALL adp10004_inicializa_record()
RETURN FALSE
END CASE
CALL adp10004_carrega_elementos_xml()
#--- Atribuição do contexto na mensagem ---#
IF l_contexts IS NOT NULL THEN
CALL _ADVPL_eai_set_context_names( l_mensagem, _ContextNames )
END IF |
#---------------------------------------------#
FUNCTION adp10004_esta_configurado_para_envio()
#---------------------------------------------#
IF NOT _ADVPL_eai_is_send_configured(adp10004_get_transaction_name(), adp10004_get_adapter_version, _ContextNames) THEN
RETURN FALSE
END IF
RETURN TRUE
END FUNCTION |