Histórico da Página
Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico. |
---|
Informações Gerais
Especificação | |||
Produto |
Logix | Módulo | WMS | |
Segmento Executor | Supply Chain | ||
Projeto1 | LOGWMS01 | IRM1 |
LOGWMS01-545 |
Requisito1 |
LOGWMS01-884 | Subtarefa1 |
Chamado2 | Não se aplica. | ||
País | ( X ) Brasil ( ) Argentina ( ) |
México ( ) Chile ( ) Paraguai ( ) |
Equador ( ) USA ( ) |
Colômbia ( ) Outro _____________. | |||
Outros | Não se aplica. |
Legenda: 1 – Inovação 2 – Manutenção (Os demais campos devem ser preenchidos para ambos os processos).
Objetivo
Realizar a integração dos endereços de entrega dos clientes. Será , sendo que está previsto o envio e o recebimento destas informações.
Definição da Regra de Negócio
Aviso | ||
---|---|---|
| ||
|
Rotina | Tipo de Operação | Opção de Menu | Regras de Negócio |
EAIAdapterCustomerShippingAddress1 | Criação |
Adapter da mensagem CustomerShippingAddress | ||
EAIHelperCustomerShippingAddress1 | Criação |
Helper da mensagem CustomerShippingAddress | |
VDPR248 | Criação |
Preparação de informações para integração de |
Aviso | ||||||
---|---|---|---|---|---|---|
| ||||||
Os fontes EAIAdapterCustomerShippingAddress1 e EAIHelperCustomerShippingAddress1 devem ser gerados utilizando o programa EAI0032, conforme orientações para construção de adapters disponível no TDN (ver link 2. Geração Automática de Adapters). Ao gerar deixar desmarcada a opção "Gerar arquivo Master?". Para que os fontes possam ser gerados será necessário utilizar o XSD da mensagem CustomerShippingAddress:
|
Dica | ||
---|---|---|
| ||
Verificar as informações de cada página deste link: 3. Construção do Adapter |
Para desenvolver o fonte VDPR248 considerar as regras abaixo:
- ************ VER ****************
Segue abaixo o detalhamento de cada tag existente na mensagem CustomerShippingAddress e como o sistema deverá tratar.
ENVIO:
Deverá ser o número do CNPJ/CPF ou Inscrição Estadual (somente números).
Utilizar como base as lógicas existentes na função vdpr239_atualiza_business_content_Customer().
Para CNPJ/CPF considerar o texto "Federal".
Para Inscrição Estadual considerar o texto "State".
Para CNPJ considerar o texto "CNPJ".
Para CPF considerar o texto "CPF".
Para Inscrição Estadual considerar o texto "Inscricao Estadual".
Concatenar o código do cliente e a sequência do local de entrega recebidos por parâmetro, separados por "|".
Exemplo: Cliente 1234, sequência local de entrega 3 => "1234|3"
cli_end_ent_cobranca_entrega.logradouro / cli_end_ent.end_entrega
cli_end_ent_cobranca_entrega.num_iden_lograd / NULO
cli_end_ent_cobranca_entrega.complemento_endereco / NULO
clientes.cod_cidade / cli_ent_ent.cod_cidade
Nota | ||
---|---|---|
| ||
Verificar lógica existente na função vdpr239_retorna_endereco_cliente(). |
clientes.cod_cidade / cli_ent_ent.cod_cidade
cli_end_ent_cobranca_entrega.bairro_cobr_entga / cli_end_ent.den_bairro
cidades.cod_uni_feder
Nota | ||
---|---|---|
| ||
Verificar lógica existente na função vdpr239_retorna_endereco_cliente(). |
cidades.cod_uni_feder
uni_feder.cod_pais
Nota | ||
---|---|---|
| ||
Verificar lógica existente na função vdpr239_retorna_endereco_cliente(). |
uni_feder.cod_pais
(¹)Deverá gerar dois registros no record GovernmentalInformation: O primeiro para o CNPJ/CPF e o segundo para a Inscrição Estadual.
(²)Deverá ser analisado o parâmetro "vdp_utiliza_tela_endereco" (LOG00087):
- Se estiver "S" deverá ser lida a tabela cli_end_ent_cobranca_entrega. Filtrar onde o tip_endereco seja igual a "E". Ordenar os registros pelo campo sequencia.
- Se estiver "N" deverá ser lida a tabela cli_end_ent. Ordenar os registros pelo campo num_sequencia.
(³)Para estas tags não há correspondência na tabela cli_end_ent_cobranca_entrega. Neste caso deverá ser utilizada a informação padrão da tabela clientes.
RECEBIMENTO:
Tag | Descrição | Regra a ser aplicada |
---|---|---|
CompanyId | Código da empresa | |
BranchId | Código da filial | |
CompanyInternalId | Chave interna da empresa | |
BranchInternalId | Chave interna da filial | |
CustomerCode | Código do cliente | |
(¹)GovernmentalInformation.Id.Id | Identificação da informação | |
(¹)GovernmentalInformation.Id.Attributes.scope | Escopo | |
(¹)GovernmentalInformation.Id.Attributes.name | Nome da identificação | |
(¹)GovernmentalInformation.Id.Attributes.issueOn | Data em que a identificação foi emitida | |
(¹)GovernmentalInformation.Id.Attributes.expiresOn | Data de expiração da identificação | |
InternalId | Chave interna do local de entrega | |
Code | Código do local de entrega | |
ExternalId | Chave externa do local de entrega | |
(²)ShippingAddress.Address | Endereço | |
(²)ShippingAddress.Number | Número do endereço | |
(²)ShippingAddress.Complement | Complemento do endereço | |
(³)ShippingAddress.City.CityCode | Código da cidade | |
(³)ShippingAddress.City.CityInternalId | Chave interna da cidade | |
(³)ShippingAddress.City.CityDescription | Descrição da cidade | |
(²)ShippingAddress.District | Bairro | |
(³)ShippingAddress.State.StateCode | Código do estado (UF) | |
(³)ShippingAddress.State.StateInternalId | Chave interna do estado (UF) | |
(³)ShippingAddress.State.StateDescription | Descrição do estado (UF) | |
(³)ShippingAddress.Country.CountryCode | Código do país | |
(³)ShippingAddress.Country.CountryInternalId | Chave interna do país | |
(³)ShippingAddress.Country.CountryDescription | Descrição do país | |
(³)ShippingAddress.ZIPCode | CEP | |
ShippingAddress.Region | Região | |
ShippingAddress.POBox | Caixa postal |
Fluxo do Processo
Cenários de Teste
locais de entrega | |||
VDP0815 | Alteração | Manutenção do cadastro de cliente/fornecedor | |
VDP0834 | Alteração | Manutenção dos endereços de entrega do cliente | |
VDP10000 | Alteração | Manutenção do cadastro de cliente/fornecedor | |
VDP90079 | Alteração | Manutenção dos endereços de entrega do cliente | |
VDP0831 | Alteração | Manutenção da distribuição geográfica do cliente | |
VDP0833 | Alteração | Manutenção dos endereços de cobrança do cliente | |
VDP90065 | Alteração | Carga inicial de clientes | |
VDP90078 | Alteração | Manutenção dos endereços de cobrança do cliente | |
WMSR62 | Alteração | Cadastramento automático de cliente |
Aviso | ||||||
---|---|---|---|---|---|---|
| ||||||
|
Dica | ||
---|---|---|
| ||
Verificar as informações de cada página deste link: 3. Construção do Adapter |
VDPR248 - Preparação das Informações Para Integração de Locais de Entrega
- Criar a função vdpr248_EAI_CustomerShippingAddress_envia().
Parâmetros:
Operação: "IN" para inclusão; "MO" para modificação; "EX" para exclusão.
Cliente: Código do cliente.
Sequência: Sequência do endereço de entrega.
Modo de exibição: "0" (zero) para ONLINE ou "1" (um) para BATCH.
- Retorno:
- Status do processamento: TRUE caso tenha ocorrido com sucesso ou FALSE em caso de erro.
- Regras:
- Validar se o tipo de operação enviado por parâmetro é válido. Caso negativo, gerar a mensagem "Tipo de operação inválida" e retornar FALSE.
- Validar se foram enviados os parâmetros de cliente e sequência. Se um destes parâmetros estiver nulo gerar a mensagem "Informe o cliente e a sequência do endereço de entrega." e retornar FALSE.
- Verificar se existe a função EAIHelperCustomerShippingAddress1_esta_configurado_para_envio() no repositório. Se não existir deverá retornar TRUE neste ponto, não efetuando os procedimentos seguintes.
- Se existir esta função a mesma deverá ser invocada, caso retorne FALSE significa que a integração da mensagem CustomerShippingAddress não está habilitada e neste caso deverá retornar TRUE neste ponto, não efetuando os procedimentos seguintes.
- A partir deste ponto serão executadas as lógicas para acionar a função de integração da mensagem.
- Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "S" deverá ser lida a tabela cli_end_det_cobranca_entregautilizando o código do cliente e sequência recebidos por parâmetro e onde o campo tip_endereco seja igual a "E".
- Ler também a tabela cli_end_entutilizando o código do cliente e sequência recebidos por parâmetro.
- Chamar a função EAIMapper_clear().
- Chamar a função EAIHelperCustomerVendor2_set_MessageType()passando como parâmetro "upsert" caso o parâmetro de tipo de operação seja igual a "IN" ou "MO", ou passando "delete" caso o tipo de operação seja "EX".
Chamar a função EAIMapper_set() para cada uma das informações abaixo:
Campo | Conteúdo a utilizar |
---|---|
cli_end_det_cobranca_entrega.empresa | p_cod_empresa |
cli_end_det_cobranca_entrega.cliente | Código do cliente recebido por parâmetro |
cli_end_det_cobranca_entrega.num_cgc_cpf | Campo clientes.num_cgc_cpf |
cli_end_det_cobranca_entrega.ins_estadual | Campo clientes.estadual |
cli_end_det_cobranca_entrega.sequencia | Sequência do local de entrega recebido por parâmetro |
cli_end_det_cobranca_entrega.tip_logradouro | Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "S" considerar o campo cli_end_det_cobranca_entrega.tip_logradouro. Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "N" considerar NULO. |
cli_end_det_cobranca_entrega.logradouro | Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "S" considerar o campo cli_end_det_cobranca_entrega.logradouro. Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "N" considerar o campo cli_end_ent.end_entrega. |
cli_end_det_cobranca_entrega.num_iden_lograd | Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "S" considerar o campo cli_end_det_cobranca_entrega.num_iden_lograd. Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "N" considerar NULO. |
cli_end_det_cobranca_entrega.complemento_endereco | Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "S" considerar o campo cli_end_det_cobranca_entrega.complemento_endereco. Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "N" considerar NULO. |
cli_end_det_cobranca_entrega.endereco_completo | Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "S" considerar o campo cli_end_det_cobranca_entrega.endereco_completo. Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "N" considerar o campo cli_end_ent.end_entrega. |
cli_end_det_cobranca_entrega.bairro_cobr_entga | Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "S" considerar o campo cli_end_det_cobranca_entrega.bairro_cobr_entga. Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "N" considerar o campo cli_end_ent.den_bairro. |
cli_end_det_cobranca_entrega.cidade | Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "S" considerar o campo clientes.cod_cidade. Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "N" considerar o campo cli_end_ent.cod_cidade.
|
cli_end_det_cobranca_entrega.den_cidade | Campo cidades.den_cidade |
cli_end_det_cobranca_entrega.cod_uni_feder | Deverá utilizar o campo cidades.cod_uni_feder como base, aplicando lógica semelhante a existente na função vdpr239_retorna_endereco_cliente() para clientes do exterior. |
cli_end_det_cobranca_entrega.den_uni_feder | Campo uni_feder.den_uni_feder |
cli_end_det_cobranca_entrega.cod_pais | Deverá utilizar o campo uni_feder.cod_pais como base, aplicando lógica semelhante a existente na função vdpr239_retorna_endereco_cliente() para clientes do exterior. Além disso também deverá aplicar lógica semelhante à existente na função vdpr239_trata_cod_pais_bacen() para buscar o código do país BACEN, caso o mesmo exista no cadastro de países. |
cli_end_det_cobranca_entrega.den_pais | Campo uni_feder.den_pais |
cli_end_det_cobranca_entrega.cep | Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "S" considerar o campo clientes.cod_cep. Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "N" considerar o campo cli_end_ent.cod_cep. |
- Chamar a função EAIAdapterCustomerVendor2_SendBusinessMessage() enviando como parâmetro "upsert" ou "delete", conforme o tipo de operação recebido por parâmetro.
- O status de retorno da função vdpr248_EAI_CustomerShippingAddress_envia() deverá ser conforme o processamento da integração, retornado a partir da chamada da função EAIAdapterCustomerVendor2_SendBusinessMessage().
- Criar a função vdpr248_EAI_CustomerShippingAddress_processa_cliente().
- Parâmetros:
- Operação: "IN" para inclusão; "MO" para modificação; "EX" para exclusão.
- Cliente: Código do cliente.
- Modo de exibição: "0" (zero) para ONLINE ou "1" (um) para BATCH.
- Retorno:
- Status do processamento: TRUE caso tenha ocorrido com sucesso ou FALSE em caso de erro.
- Regras:
Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "S" efetuar a leitura da tabela cli_end_det_cobranca_entrega filtrando pelo código do cliente e onde o campo tip_endereco seja igual a "E". Ordenar os registros pelo campo sequencia.
Se o parâmetro "vdp_utiliza_tela_endereco" for igual a "N" efetuar a leitura da tabela cli_end_ent filtrando pelo código do cliente. Ordenar os registros pelo campo num_sequencia.
- Para cada registro encontrado em cada uma destas tabelas deverá ser chamada a função vdpr248_EAI_CustomerShippingAddress_envia(), passando como parâmetros:
- Operação: Tipo de operação recebido por parâmetro
- Cliente: Código do cliente recebido por parâmetro
- Sequência: cli_end_det_cobranca_entrega.sequencia ou cli_end_ent.num_sequencia
- Modo de exibição: Modo de exibição recebido por parâmetro
- O retorno desta função vdpr248_EAI_CustomerShippingAddress_envia() será o status a ser retornado para a rotina que acionou a função vdpr248_EAI_CustomerShippingAddress_processa_cliente().
- Parâmetros:
- Criar a função vdpr248_alimenta_business_content().
- Parâmetros:
- Não há.
- Retorno:
- Não há.
- Regras:
Deverá existir no fonte a definição da variável modular _BusinessContent de forma idêntica à existente no fonte EAIHelperCustomerShippingAddress1.
Alimentar os campos desta variável conforme o retorno das funções EAIHelperCustomerShippingAddress1_get_BusinessContent_<campo>().
- Parâmetros:
- Criar a função vdpr248_EAI_CustomerShippingAddress_recebe().
- Parâmetros:
- Não há.
- Retorno:
- Status do processamento: TRUE caso tenha ocorrido com sucesso ou FALSE em caso de erro.
- Regras:
- Inicialmente deverá ser identificado o tipo de mensagem, que será obtido através da função EAIHelperCustomerShippingAddress1_get_MessageType(). Esta função retornará os valores upsert ou delete, indicando que trata-se de uma atualização (inclusão/alteração) ou exclusão.
Em seguida deverá ser utilizada a função EAI_depara_get_value() para verificar se existe o local de entrega já cadastrado no Logix para a chave interna enviada na mensagem (OBS: no fonte VDPR248 deverá estar definida a variável global g_eai_msg_negocio, VARCHAR(10). Esta variável é alimentada pelo fonte EAIHelperCustomerShippingAddress1).
Bloco de código title Buscando o InternalId collapse true LET l_internalValue = EAI_depara_get_value("CustomerShippingAddress", _advpl_eai_get_message_info(g_eai_msg_negocio, 'MessageInformation.SourceApplication'), _BusinessContent._InternalId)
- Parâmetros:
Se o conteúdo da variável l_internalValue for diferente de nulo deverá ser chamada a função EAI_depara_InternalId_get_value() para obter o código do cliente e a sequência do local de entrega.
Bloco de código title Identificando o cliente e o sequência do local de entrega collapse true IF l_internalValue CLIPPED IS NOT NULL THEN LET l_cliente = EAI_depara_internalid_get_value('CustomerShippingAddress' , #depara_id l_internalValue , #valor interno 'cli_end_det_cobranca_entrega', #tabela interna 'cliente' ) #Campo interno LET l_sequencia = EAI_depara_internalid_get_value('CustomerShippingAddress' , #depara_id l_internalValue , #valor interno 'cli_end_det_cobranca_entrega', #tabela interna 'sequencia') #Campo interno END IF
- Se o conteúdo da variável l_internalValue for igual a nulo deverá considerar o conteúdo da variável _BusinessContent._Code para a variável l_sequencia.
- Se o conteúdo da variável l_internalValue for igual a nulo deverá tentar localizar o cliente pelo conteúdo da variável _Business._GovernmentalInformation, buscando pelo CNPJ e Inscrição Estadual (campos num_cgc_cpf e ins_estadual, respectivamente). Caso encontre deverá armazenar o código do cliente na variável l_cliente.
- Se depois da lógica acima o cliente ainda não puder ser identificado, considerar o conteúdo da tag _Business._CustomerCode para a variável l_cliente.
- Verificar se o cliente existe na tabela clientes. Se não existir deverá gerar mensagem de erro.
- Se as variáveis referentes ao cliente (l_cliente) e sequência do local entrega (l_sequencia) não estiverem nulos, verificar se existe o registro correspondente na tabela de locais de entrega (considerar o parâmetro "vdp_utiliza_tela_endereco" para pesquisar na tabela cli_end_det_cobranca_entrega caso seja "S" ou na cli_end_ent caso seja "N").
- Se o tipo da mensagem for upsert e encontrar o registro correspondente deverá ser considerado como alteração deste local de entrega, caso contrário deverá ser considerada inclusão de um novo local de entrega.
Para incluir/alterar o local de entrega deverá ser analisado o parâmetro "vdp_utiliza_tela_endereco" (LOG00087). Se estiver "S" deverá ser gravada a tabela cli_end_det_cobranca_entrega:
Campo Conteúdo a ser gravado cliente Variável l_cliente tip_endereco 'E' sequencia Variável l_sequencia tip_logradouro Verificar se no início da variável _BusinessContent._ShippingAddress._Address existe a palavra "RUA ", "R " ou "R: ".
Se existir, pesquisar na tabela vdp_tip_logradouro por esta descrição de logradouro (campo des_logradouro).
Se encontrar o registro, considerar o conteúdo do campo tip_logradouro.
Se o início da tag não estiver conforme indicado inicialmente ou não encontrar o registro na vdp_tip_logradouro este campo deverá ficar nulo.logradouro Variável _BusinessContent._ShippingAddress._Address.
Se foi possível identificar o tipo do logradouro (campo anterior), desconsiderar esta informação da variável _BusinessContent._ShippingAddress._Address.
Exemplo: Se o conteúdo de _BusinessContent._ShippingAddress._Address for "RUA ANTONIO CARLOS", gravar apenas "ANTONIO CARLOS"num_iden_lograd Variável _BusinessContent._ShippingAddress._Number complemento_endereco Variável _BusinessContent._ShippingAddress._Complement endereco_completo Concatenar os conteúdos abaixo, separando cada um com um espaço em branco:
* Variável _BusinessContent._ShippingAddress._Address
* Variável _BusinessContent._ShippingAddress._Number
* Variável _BusinessContent._ShippingAddress._Complement
* Variável _BusinessContent._ShippingAddress._Districtbairro_cobr_entga Variável _BusinessContent._ShippingAddress._District Independente do valor do parâmetro "vdp_utiliza_tela_endereco", sempre deverá ser gravada a tabela cli_end_ent:
Campo Conteúdo a ser gravado cod_cliente Variável l_cliente end_entrega Se a variável _BusinessContent._ShippingAddress._Number não estiver nula considerar _BusinessContent._ShippingAddress._Address + _BusinessContent._ShippingAddress._Number (separando as duas variáveis com um espaço em branco), caso contrário considerar somente _BusinessContent._ShippingAddress._Address den_bairro Variável _BusinessContent._ShippingAddress._District cod_cidade Primeiramente deverá ser verificado se existe relacionamento de/para para o código interno da cidade, caso a variável _BusinessContent._ShippingAddress._City._CityInternalId esteja preenchida. Se existir deverá utilizar a função para EAI_depara_InternalId_get_value() para identificar o código da cidade do Logix. Se não encontrar a cidade seguindo as regras acima deverá tentar localizar a cidade utilizando a variável _BusinessContent._ShippingAddress._City._CityCode, buscando pelo código IBGE. Se não existir deverá gerar mensagem de erro de que não foi possível identificar a cidade.
Bloco de código title Buscar o código da cidade Logix collapse true LET l_cidade_logix = NULL IF _BusinessContent._ShippingAddress._City._CityInternalId IS NOT NULL AND _BusinessContent._ShippingAddress._City._CityInternalId <> ' ' THEN LET l_InternalId = EAI_depara_get_value('City', _advpl_eai_get_message_info(g_eai_msg_negocio, 'MessageInformation.SourceApplication'), _BusinessContent._ShippingAddress._City._CityInternalId) IF l_InternalId IS NOT NULL AND l_InternalId <> ' ' THEN LET l_cidade_logix = EAI_depara_InternalId_get_value('City', l_InternalId, NULL, 'cod_cidade') END IF END IF IF l_cidade_logix IS NULL OR l_cidade_logix = ' ' THEN WHENEVER ERROR CONTINUE SELECT cidade_logix INTO l_cidade_logix FROM cidades, obf_cidade_ibge WHERE cidade_ibge = _BusinessContent._ShippingAddress._City._CityCode AND cod_cidade = cidade_logix WHENEVER ERROR STOP IF sqlca.sqlcode <> 0 THEN CALL log0030_processa_mensagem('Código da cidade informado na integração inexistente.','excl',1) RETURN FALSE END IF END IF IF l_cidade_logix IS NULL OR l_cidade_logix = ' ' THEN CALL log0030_processa_mensagem('Não foi possível identificar a cidade na integração.','excl',1) RETURN FALSE ELSE WHENEVER ERROR CONTINUE SELECT cod_cidade FROM cidades WHERE cod_cidade = l_cidade_logix WHENEVER ERROR STOP IF sqlca.sqlcode <> 0 THEN CALL log0030_processa_mensagem('Código da cidade informado na integração inexistente.','excl',1) RETURN FALSE END IF END IF
cod_cep Variável _BusinessContent._ShippingAddress._ZIPCode num_cgc Campo num_cgc_cpf da tabela clientes ins_estadual Campo ins_estadual da tabela clientes num_sequencia Variável l_sequencia cod_rota Campo cod_rota da tabela clientes cod_local Campo cod_local da tabela clientes cod_praca Campo cod_praca da tabela clientes - Em caso de exclusão (tipo de mensagem delete), se as variáveis referentes ao cliente (l_cliente) e sequência do local entrega (l_sequencia) não estiverem nulos, verificar se existe o registro correspondente na tabela de locais de entrega (considerar o parâmetro "vdp_utiliza_tela_endereco" para pesquisar na tabela cli_end_det_cobranca_entrega caso seja "S" ou na cli_end_ent caso seja "N").
- Se não encontrar o registro correspondente deverá apenas retornar TRUE como se a exclusão tivesse ocorrido normalmente, apenas para evitar erro no aplicativo de origem.
- Se encontrar o registro deverá realizar a exclusão dos registros nas tabelas cli_end_det_cobranca_entrega e cli_end_ent, pesquisando pelo código do cliente e sequência do local de entrega.
EAIAdapterCustomerShippingAddress1 - Adapter da Mensagem CustomerShippingAddress
Na função EAIAdapterCustomerShippingAddress1_Install() deverá ser realizado o registro do InternalId referente ao local de entrega, utilizando como base a tabela cli_end_det_cobranca_entrega:
Bloco de código title Instalação do adapter collapse true IF NOT EAI_depara_existe("CustomerShippingAddress", "cli_end_det_cobranca_entrega") THEN CALL EAI_depara_register("CustomerShippingAddress", "cli_end_det_cobranca_entrega", "cliente|sequencia") END IF
Na função EAIAdapterCustomerShippingAddress1_LoadUsualContent() setar as informações da variável utilizada para a integração, conforme abaixo:
Tag | Descrição | Regra a ser aplicada |
---|---|---|
CompanyId | Código da empresa | EAIMapper_getString("cli_end_det_cobranca_entrega.empresa") |
BranchId | Código da filial | NULO |
CompanyInternalId | Chave interna da empresa | EAIMapper_getString("cli_end_det_cobranca_entrega.empresa") |
BranchInternalId | Chave interna da filial | NULO |
CustomerCode | Código do cliente | EAIMapper_getString("cli_end_det_cobranca_entrega.cliente") |
(¹)GovernmentalInformation.Id.Id | Identificação da informação | EAIMapper_getString("cli_end_det_cobranca_entrega.num_cgc_cpf") Deverá ser aplicado um tratamento para extrair apenas os números do CNPJ/CPF ou Inscrição Estadual retornados pela função acima. Utilizar como base as lógicas existentes na função vdpr239_atualiza_business_content_Customer(). |
(¹)GovernmentalInformation.Id.Attributes.scope | Escopo | Para CNPJ/CPF considerar o texto "Federal". Para Inscrição Estadual considerar o texto "State". |
(¹)GovernmentalInformation.Id.Attributes.name | Nome da identificação | Para CNPJ considerar o texto "CNPJ". Para CPF considerar o texto "CPF". Para Inscrição Estadual considerar o texto "Inscricao Estadual". |
(¹)GovernmentalInformation.Id.Attributes.issueOn | Data em que a identificação foi emitida | NULO para CNPJ, CPF e Inscrição Estadual. |
(¹)GovernmentalInformation.Id.Attributes.expiresOn | Data de expiração da identificação | NULO para CNPJ, CPF e Inscrição Estadual. |
InternalId | Chave interna do local de entrega | Concatenar o retorno das funções EAIMapper_getString("cli_end_det_cobranca_entrega.cliente") e EAIMapper_getInt("cli_end_det_cobranca_entrega.sequencia"), separando-os com "|" (pipe) e considerando a sequência com cinco dígitos, com zeros à esquerda. Exemplo: Cliente 1234, sequência local de entrega 3 => "1234|00003" |
Code | Código do local de entrega | EAIMapper_getInt("cli_end_det_cobranca_entrega.sequencia") |
ExternalId | Chave externa do local de entrega | NULO |
ShippingAddress.Address | Endereço | Se o retorno de EAIMapper_getString("cli_end_det_cobranca_entrega.tip_logradouro") for diferente de nulo e diferente de branco considerar: EAIMapper_getString("cli_end_det_cobranca_entrega.tip_logradouro") + " " + EAIMapper_getString("cli_end_det_cobranca_entrega.logradouro") caso contrário, apenas: EAIMapper_getString("cli_end_det_cobranca_entrega.logradouro") |
ShippingAddress.Number | Número do endereço | EAIMapper_getString("cli_end_det_cobranca_entrega.num_iden_lograd") |
ShippingAddress.Complement | Complemento do endereço | EAIMapper_getString("cli_end_det_cobranca_entrega.complemento_endereco") |
ShippingAddress.City.CityCode | Código da cidade | EAIMapper_getString("cli_end_det_cobranca_entrega.cidade") |
ShippingAddress.City.CityInternalId | Chave interna da cidade | EAIMapper_getString("cli_end_det_cobranca_entrega.cidade") |
ShippingAddress.City.CityDescription | Descrição da cidade | EAIMapper_getString("cli_end_det_cobranca_entrega.den_cidade") |
ShippingAddress.District | Bairro | EAIMapper_getString("cli_end_det_cobranca_entrega.bairro_cobr_entga") |
ShippingAddress.State.StateCode | Código do estado (UF) | EAIMapper_getString("cli_end_det_cobranca_entrega.cod_uni_feder") |
ShippingAddress.State.StateInternalId | Chave interna do estado (UF) | EAIMapper_getString("cli_end_det_cobranca_entrega.cod_uni_feder") |
ShippingAddress.State.StateDescription | Descrição do estado (UF) | EAIMapper_getString("cli_end_det_cobranca_entrega.den_uni_feder") |
ShippingAddress.Country.CountryCode | Código do país | EAIMapper_getString("cli_end_det_cobranca_entrega.cod_pais") |
ShippingAddress.Country.CountryInternalId | Chave interna do país | EAIMapper_getString("cli_end_det_cobranca_entrega.cod_pais") |
ShippingAddress.Country.CountryDescription | Descrição do país | EAIMapper_getString("cli_end_det_cobranca_entrega.den_pais") |
ShippingAddress.ZIPCode | CEP | Utilizar o EAIMapper_getString("cli_end_det_cobranca_entrega.cep"), efetuando tratamento para utilizar apenas os números (ver como exemplo a função vdpr239_retorna_valor_valido()). |
ShippingAddress.Region | Região | NULO |
ShippingAddress.POBox | Caixa postal | NULO |
(¹)Deverá gerar dois registros no record GovernmentalInformation: O primeiro para o CNPJ/CPF e o segundo para a Inscrição Estadual.
- Na função EAIAdapterCustomerShippingAddress1_ReceiveBusinessMessage() preparar as informações para recebimento da mensagem:
- Inicialmente deverá chamar a função vdpr248_alimenta_business_content(), sem passagem de parâmetros e sem recebimento de retorno.
- Em seguida deverá chamar a função vdpr248_EAI_CustomerShippingAddress_recebe(), sem passagem de parâmetros e recebendo o status do processamento (TRUE ou FALSE).
- Se o retorno for FALSE deverá chamar a função EAIMapper_loadFromMessage() passando como primeiro parâmetro a variável global g_eai_msg_resposta e como segundo parâmetro o valor "Retorno".
- Em seguida deverá chamar a função EAIHelperCustomerShippingAddress1_add_error_message() passando como primeiro parâmetro o texto "Erro de regra de negócio: " concatenado com o retorno da função log0030_mensagem_get_texto(), e como segundo parâmetro passar o valor "0001".
Depois disso deverá retornar status FALSE para a rotina chamadora.
Bloco de código title Exemplo de código collapse true CALL vdpr248_alimenta_business_content() IF NOT vdpr248_EAI_CustomerShippingAddress_recebe() THEN CALL EAIMapper_loadFromMessage(g_eai_msg_resposta,"Retorno") CALL EAIHelperCustomerShippingAddress1_add_error_message("Erro de regra de negócio: " || log0030_mensagem_get_texto(),"0001") RETURN FALSE END IF
VDP0815 - Manutenção do Cadastro de Cliente / Fornecedor
- Na função vdp0815_incluir(), antes de fazer o COMMIT deverá chamar a função vdpr248_EAI_CustomerShippingAddress_processa_cliente() caso o tipo do cadastro seja "C" (Cliente) ou "A" (Ambos). Se o retorno desta função for FALSE deverá fazer ROLLBACK do processamento. Passar como parâmetros:
- Operação: "IN"
- Cliente: Código do cliente
- Modo de exibição: "0" (zero)
- Na função vdp0815_modificar(), antes de fazer o COMMIT deverá chamar a função vdpr248_EAI_CustomerShippingAddress_processa_cliente() caso o tipo do cadastro seja "C" (Cliente) ou "A" (Ambos). Se o retorno desta função for FALSE deverá fazer ROLLBACK do processamento. Passar como parâmetros:
- Operação: "MO"
- Cliente: Código do cliente indicado na tela
- Modo de exibição: "0" (zero)
VDP0834 - Manutenção dos Endereços de Entrega do Cliente
Na função vdp0834_incluir(), antes de fazer o COMMIT deverá chamar a função vdpr248_EAI_CustomerShippingAddress_envia(). Se o retorno desta função for FALSE deverá fazer ROLLBACK do processamento. Passar como parâmetros:
Operação: "IN"
Cliente: Código do cliente indicado na tela
Sequência: Sequência do endereço de entrega indicado na tela
Modo de exibição: "0" (zero)
Na função vdp0834_modificar(), antes de fazer o COMMIT deverá chamar a função vdpr248_EAI_CustomerShippingAddress_envia(). Se o retorno desta função for FALSE deverá fazer ROLLBACK do processamento. Passar como parâmetros:
Operação: "MO"
Cliente: Código do cliente indicado na tela
Sequência: Sequência do endereço de entrega indicado na tela
Modo de exibição: "0" (zero)
Na função vdp0834_excluir(), antes de realizar a exclusão do registro da tabela deverá chamar a função vdpr248_EAI_CustomerShippingAddress_envia(). Se o retorno desta função for FALSE deverá fazer ROLLBACK do processamento. Passar como parâmetros:
Operação: "EX"
Cliente: Código do cliente indicado na tela
Sequência: Sequência do endereço de entrega a ser excluído
Modo de exibição: "0" (zero)
VDP1000 - Manutenção do Cadastro de Cliente/Fornecedor
Na função vdp10000_processa_atualizacao_eai(), depois das lógicas existentes deverá chamar a função vdpr248_EAI_CustomerShippingAddress_processa_cliente(), caso o tipo do cadastro seja "C" (Cliente) ou "A" (Ambos). Se o retorno desta função for FALSE deverá retornar FALSE para a rotina que acionou esta função. Passar como parâmetros:
Operação: Variável l_operacao_eai
Cliente: Variável mr_tela.virtual_codigo
Modo de exibição: "0" (zero)
VDP90079 - Manutenção dos Endereços de Entrega do Cliente
- Na função vdp90079_confirm_create() alterar para que ao chamar a função vdp90079_prepara_envio_eai() seja passado como parâmetro o valor "IN".
- Na função vdp90079_confirm_update() alterar para que ao chamar a função vdp90079_prepara_envio_eai() seja passado como parâmetro o valor "MO".
- Na função vdp90079_confirm_delete() alterar para que ao chamar a função vdp90079_prepara_envio_eai() seja passado como parâmetro o valor "EX".
- Na função vdp90079_prepara_envio_eai() prever o recebimento de um parâmetro, que será o tipo da operação ("IN", "MO" ou "EX").
- Ainda na função vdp90079_prepara_envio_eai(), depois das lógicas existentes deverá chamar a função vdpr248_EAI_CustomerShippingAddress_envia(), conforme regras abaixo:
- Se o tipo da operação for "IN" (Inclusão):
- Chamar a função para cada linha existente na grid. Se o retorno desta função for FALSE deverá retornar FALSE para a rotina que acionou esta função. Passar como parâmetros:
- Operação: "IN"
- Cliente: Variável mr_tela.cod_cliente
- Sequência: Variável ma_tela[].num_sequencia referente a cada linha da grid
- Modo de exibição: "0" (zero)
- Chamar a função para cada linha existente na grid. Se o retorno desta função for FALSE deverá retornar FALSE para a rotina que acionou esta função. Passar como parâmetros:
- Se o tipo da operação for "MO" (Modificação):
- Chamar a função para cada linha existente na grid. Se o retorno desta função for FALSE deverá retornar FALSE para a rotina que acionou esta função. Passar como parâmetros:
- Operação: "MO"
- Cliente: Variável mr_tela.cod_cliente
- Sequência: Variável ma_tela[].num_sequencia referente a cada linha da grid
- Modo de exibição: "0" (zero)
- Efetuar uma leitura da tabela cli_end_det_cobranca_entregafiltrando pelo código do cliente e tip_endereco igual a "E". Para cada sequência encontrada deverá verificar se a mesma permanece na grid, se não existir significa que o endereço de entrega foi excluído e neste caso deverá chamar a função. Se o retorno desta função for FALSE deverá retornar FALSE para a rotina que acionou esta função. Passar como parâmetros:
- Operação: "EX"
- Cliente: Variável mr_tela.cod_cliente
- Sequência: Sequência do endereço de entrega lido na tabela e que não existe na grid
- Modo de exibição: "0" (zero)
- Chamar a função para cada linha existente na grid. Se o retorno desta função for FALSE deverá retornar FALSE para a rotina que acionou esta função. Passar como parâmetros:
- Se o tipo da operação for "EX" (Exclusão):
- Efetuar uma leitura da tabela cli_end_det_cobranca_entregafiltrando pelo código do cliente e tip_endereco igual a "E". Para cada sequência encontrada deverá chamar a função. Se o retorno desta função for FALSE deverá retornar FALSE para a rotina que acionou esta função. Passar como parâmetros:
- Operação: "EX"
- Cliente: Variável mr_tela.cod_cliente
- Sequência: Sequência do endereço de entrega lido na tabela
- Modo de exibição: "0" (zero)
- Efetuar uma leitura da tabela cli_end_det_cobranca_entregafiltrando pelo código do cliente e tip_endereco igual a "E". Para cada sequência encontrada deverá chamar a função. Se o retorno desta função for FALSE deverá retornar FALSE para a rotina que acionou esta função. Passar como parâmetros:
- Se o tipo da operação for "IN" (Inclusão):
VDP0831 - Manutenção da Distribuição Geográfica do Cliente
Informações | ||
---|---|---|
| ||
Apesar desta rotina não ser de atualização de endereços de entrega foi prevista a integração, pois como será realizada a integração do cadastro do cliente é recomendável que os endereços de entrega deste cliente também estejam atualizados. |
- Na função vdp0831_incluir(), antes de fazer o COMMIT deverá chamar a função vdpr248_EAI_CustomerShippingAddress_processa_cliente(). Se o retorno desta função for FALSE deverá fazer ROLLBACK do processamento. Passar como parâmetros:
- Operação: "MO"
- Cliente: Código do cliente
- Modo de exibição: "0" (zero)
VDP0833 - Manutenção dos Endereços de Cobrança do Cliente
Informações | ||
---|---|---|
| ||
Apesar desta rotina não ser de atualização de endereços de entrega foi prevista a integração, pois como será realizada a integração do cadastro do cliente é recomendável que os endereços de entrega deste cliente também estejam atualizados. |
- Na função vdp0833_incluir(), antes de fazer o COMMIT deverá chamar a função vdpr248_EAI_CustomerShippingAddress_processa_cliente(). Se o retorno desta função for FALSE deverá fazer ROLLBACK do processamento. Passar como parâmetros:
- Operação: "MO"
- Cliente: Código do cliente
- Modo de exibição: "0" (zero)
- Na função vdp0833_modificar(), antes de fazer o COMMIT deverá chamar a função vdpr248_EAI_CustomerShippingAddress_processa_cliente(). Se o retorno desta função for FALSE deverá fazer ROLLBACK do processamento. Passar como parâmetros:
- Operação: "MO"
- Cliente: Código do cliente
- Modo de exibição: "0" (zero)
- Na função vdp0833_excluir(), antes de fazer o COMMIT deverá chamar a função vdpr248_EAI_CustomerShippingAddress_processa_cliente(). Se o retorno desta função for FALSE deverá fazer ROLLBACK do processamento. Passar como parâmetros:
- Operação: "MO"
- Cliente: Código do cliente
- Modo de exibição: "0" (zero)
VDP90065 - Carga Inicial de Clientes
- Na função vdp90065_processamento(), antes de fazer o COMMIT deverá chamar a função vdpr248_EAI_CustomerShippingAddress_processa_cliente(). Se o retorno desta função for FALSE deverá fazer ROLLBACK do processamento. Passar como parâmetros:
- Operação: "IN"
- Cliente: Código do cliente
- Modo de exibição: "0" (zero)
VDP90078 - Manutenção dos Endereços de Cobrança do Cliente
Informações | ||
---|---|---|
| ||
Apesar desta rotina não ser de atualização de endereços de entrega foi prevista a integração, pois como será realizada a integração do cadastro do cliente é recomendável que os endereços de entrega deste cliente também estejam atualizados. |
- Na função vdp90079_prepara_envio_eai(), depois das lógicas existentes deverá chamar a função vdpr248_EAI_CustomerShippingAddress_processa_cliente(). Se o retorno desta função for FALSE deverá retornar FALSE para a rotina que acionou esta função. Passar como parâmetros:
- Operação: "MO"
- Cliente: Variável mr_tela.cod_cliente
- Modo de exibição: "0" (zero)
WMSR62 - Cadastramento Automático de Cliente
- No final da função wmsr62_cadastra_cliente_automatico(), depois das lógicas existentes deverá chamar a função vdpr248_EAI_CustomerShippingAddress_processa_cliente(). Se o retorno desta função for FALSE deverá retornar FALSE para a rotina que acionou esta função. Passar como parâmetros:
- Operação: "IN"
- Cliente: Variável mr_clientes.cod_cliente
- Modo de exibição: Variável l_modo_exibicao_msg
- Deverá ser ajustado o final da função wmsr62_cadastra_cliente_automatico() onde é chamada a função vdpr239_prepara_envio_mensagem_eai(), pois atualmente retorna TRUE ou FALSE a partir do processamento desta função. Como agora existirá mais um processamento, o retorno não poderá ser feito neste momento.
Cenários de Teste
Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico. |
---|