Histórico da Página
...
Este exemplo de código demonstra como utilizar adapters do modelo novo para envio de mensagens. Observe a utilização do EAIMapper para a passagem de parâmetros.
Bloco de código | ||||
---|---|---|---|---|
| ||||
#--------------------------------------# FUNCTION test_eai_send_unitofmeasure() #--------------------------------------# define l_retorno smallint define l_qtd_erros smallint define l_mensagem char(2000) define l_count smallint define l_context char(100) let l_context = "financeiro" # Limpar o conteúdo da estrutura no Mapper CALL EAIMapper_clear() # Limpar os erros do Mapper CALL EAIMapper_errorClear() # Informar os dados da mensagem CALL EAIMapper_set("Code","UN") CALL EAIMapper_set("InternalId","UN") CALL EAIMapper_set("Description","Unidade") CALL EAIMapper_set("ShortName","Unid.") # Informar os contextos IF l_context IS NOT NULL THEN CAll EAIMapper_set("ContextNames", l_context ) END IF # Enviar a mensagem e receber o retorno LET l_retorno = EAIAdapterUnitOfMeasure2_sendBusinessMessage( "upsert" ) # Tratar o retorno IF l_Retorno = FALSE THEN LET l_qtd_erros = EAIMapper_errorSize() FOR l_count = 1 TO nErrors LET l_mensagem = l_mensagem, EAIMapper_getError(l_count) CLIPPED, " " END FOR CALL log0030_mensagem("Unit of Measure - Não foi possivel enviar mensagem. Erro " || l_mensagem, "EXCL" ) ELSE CALL log0030_mensagem("Unit of Measure - Envio realizado com sucesso", "INFO" ) END IF END FUNCTION |
...
Recebimento de informações
Modelo Antigo
O recebimento de informações é codificado dentro do adapter, nas funções <Adapter>_recebe_negocio_eai_adapter(), nesta função o desenvolvedor deverá chamar funções padrões como, ADVPL_eia_get_business_content, ADVPL_eai_create_response e também poderá chamar funções de negócio e manipular tabelas através do SQL.
Bloco de código | ||||
---|---|---|---|---|
| ||||
#-----------------------# FUNCTION adp10023_teste() #---------------------------# DEFINE l_mensagem VARCHAR(10), l_resposta VARCHAR(10) #-------------------------------RETIRAR----------# FUNCTION adp10023_recebe_negocio_eai_adapter(l_mensagem) #-------------------------------# LET p_user = 'demo' LET p_cod_empresa = '21' #-----------------------------------------------------------------------------# LET l_mensagem = _ADVPL_eai_create_message_from_file("C:\\LOGIX\\testes\\adp10023\\adp10023.xml") LET l_resposta = adp10023_recebe_negocio_eai_adapter(l_mensagem) CALL _ADVPL_eai_write_message_to_file(l_resposta, "C:\\LOGIX\\testes\\adp10023\\resposta_adp10023.xml") END FUNCTION |
Modelo Novo
#
CALL adp10023_inicializa_record() # Limpa record da msg
# realiza a carga do RECORD com a mensagem de negócio que chegou
LET l_conteudo = _ADVPL_eai_get_business_content(l_mensagem, _BusinessContent, 'adp10023')
# cria uma mensagem de resposta baseada na mensagem de negócio
LET l_resposta = _ADVPL_eai_create_response(l_mensagem)
# se a carga ocorreu sem erros
IF _ADVPL_eai_get_success(l_conteudo) THEN
# Verifica existência do cadastro De/Para Empresas - EAI10000/Configuração/Aplicativos Externos
CALL log00021_busca_CompanyInternalId(l_mensagem,
adp10023_get_BusinessContent_CompanyId(),
adp10023_get_BusinessContent_BranchId())
LET l_sistema_gerador = adp10023_get_BusinessContent_OriginCode()
LET l_periodo_contab = adp10023_retorna_periodo_contabil(adp10023_get_BusinessContent_PeriodStartDate())
LET l_segmento_periodo = adp10023_retorna_segmento_periodo_contabil(adp10023_get_BusinessContent_PeriodStartDate())
LET l_num_lote = adp10023_get_BusinessContent_BatchNumber()
FOR l_ind = 1 TO 10000
IF adp10023_get_BusinessContent_Entries_Entry_EntryNumber(l_ind) IS NULL then
EXIT FOR
END IF
LET l_centro_de_custo = adp10023_get_BusinessContent_Entries_Entry_CostCenterCode(l_ind)
LET lar_lancamentos[l_ind].l_cta_deb = adp10023_get_BusinessContent_Entries_Entry_DebitAccountCode(l_ind)
LET lar_lancamentos[l_ind].l_cta_cre = adp10023_get_BusinessContent_Entries_Entry_CreditAccountCode(l_ind)
LET lar_lancamentos[l_ind].l_dat_movto = adp10023_formata_data(adp10023_get_BusinessContent_Entries_Entry_MovementDate(l_ind))
LET lar_lancamentos[l_ind].l_val_lancto = adp10023_get_BusinessContent_Entries_Entry_EntryValue(l_ind)
LET lar_lancamentos[l_ind].l_hist_padrao = adp10023_get_BusinessContent_Entries_Entry_HistoryCode(l_ind)
IF adp10023_possui_historico(adp10023_get_BusinessContent_Entries_Entry_ComplementaryHistory(l_ind)) = TRUE THEN
LET lar_lancamentos[l_ind].l_compl_hist = 'S'
ELSE
LET lar_lancamentos[l_ind].l_compl_hist = 'N'
END IF
LET lar_lancamentos[l_ind].l_linha_produto = l_centro_de_custo[1,2]
LET lar_lancamentos[l_ind].l_linha_receita = l_centro_de_custo[3,4]
LET lar_lancamentos[l_ind].l_segmto_mercado = l_centro_de_custo[5,6]
LET lar_lancamentos[l_ind].l_classe_uso = l_centro_de_custo[7,8]
LET lar_lancamentos[l_ind].l_hist_compl_txt = adp10023_get_BusinessContent_Entries_Entry_ComplementaryHistory(l_ind)
LET lar_lancamentos[l_ind].l_num_relac = adp10023_get_BusinessContent_Entries_Entry_RelationshipNumber(l_ind)
END FOR
CALL con6071_set_cod_empresa(l_cod_empresa)
CALL con6071_set_m_sistema_gerador(l_sistema_gerador)
CALL con6071_set_periodo_contab(l_periodo_contab)
CALL con6071_set_segmto_periodo(l_segmento_periodo)
IF l_status THEN
CALL adp10023_set_ReturnContent_BatchNumber(l_num_lote)
FOR l_ind = 1 TO 10000
IF lar_lancamentos[l_ind].l_dat_movto IS NULL THEN
EXIT FOR
END IF
CALL adp10023_set_ReturnContent_Entries_Entry_EntryNumber(l_ind, l_ind)
CALL adp10023_set_ReturnContent_Entries_Entry_RelationshipNumber(con6071_get_num_relacionto(l_ind), l_ind)
END FOR
CALL _ADVPL_eai_set_return_content(l_resposta, _ReturnContent, _XmlElements)
ELSE
CALL _ADVPL_eai_log_add_message(l_resposta, 'ERROR', '1', l_msg)
END IF
ELSE
# se ocorreu algum erro, adiciona na mensagem de resposta
CALL _ADVPL_eai_log_add_message(l_resposta, 'ERROR', '0', _ADVPL_eai_get_error_message(l_conteudo))
END IF
RETURN l_resposta
END FUNCTION |
Modelo Novo
O Egine do EAI chama a função EAIHelper<Transação><Versão>_recebe_negocio_eai_adapter(), que realizará a chamada para função EAIAdapter<Transação><Versão>_ReceiveBusinessMessage que EAIAdapter<Transação><Versão>_ReceiveBusinessMessage() (modelo novo). Destas funções é possível chamar funções de negócio existentes ou fazer a manipulação direta no banco através de comandos SQL (DMLs).
Bloco de código | ||||
---|---|---|---|---|
| ||||
#--------------------------------------------------------------------# FUNCTION EAIHelperInvoice3_recebe_negocio_eai_adapter(l_msg_negocio) #--------------------------------------------------------------------# DEFINE l_msg_negocio VARCHAR(10), l_conteudo VARCHAR(10) CALL EAIHelperInvoice3_inicializa_record() # Limpa record da msg LET g_eai_msg_negocio = l_msg_negocio CALL EAIHelperInvoice3_carrega_elementos_xml() ### Carrega o tipo da mensagem. LET _MessageType = _ADVPL_eai_get_event(g_eai_msg_negocio) ### Realiza a carga do RECORD com a mensagem de negócio que chegou LET l_conteudo = _ADVPL_eai_get_business_content(g_eai_msg_negocio, _BusinessContent, 'EAIHelperInvoice3') ### Verifica se o estado da mensagem recebida está ok. IF NOT _ADVPL_eai_get_success(l_conteudo) THEN CALL _ADVPL_eai_log_add_message(g_eai_msg_negocio, 'error', '0', _ADVPL_eai_get_error_message(l_conteudo)) RETURN NULL END IF ### Mensagem de resposta baseada na mensagem de negócio LET g_eai_msg_resposta = _ADVPL_eai_create_response(g_eai_msg_negocio) ### Tratamento da mensagem de retorno pelo 'Adapter'. IF NOT EAIAdapterInvoice3_ReceiveBusinessMessage() THEN ### Retorna com a descrição dos erros. RETURN g_eai_msg_resposta END IF IF NOT EAIAdapterInvoice3_CreateReturnMessage() THEN #Retorna com a descrição dos erros. RETURN g_eai_msg_resposta END IF ### Inclui o conteúdo de retorno na mensagem criada. LET l_conteudo = _ADVPL_eai_set_return_content(g_eai_msg_resposta, _ReturnContent, _XmlElements) IF NOT _ADVPL_eai_get_success(l_conteudo) THEN RETURN NULL END IF RETURN g_eai_msg_resposta END FUNCTION |
...