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 |
...
O exemplo de código abaixo descreve como utilizar um adapter do modelo antigo para enviar mensagens. Observe que para passar o contexto deve-se utilizar a função EAIMapper_set() para evitar a criação de novas funções no adapter.
...
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_recebe_negocio_eai_adapter(l_mensagem) #-----------------------------------------------------------------------------# 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 ) (modelo antigo) e 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 |