Páginas filhas
  • ER LOGWMS01-883 IN-11.4 Integração Cadastro Produtos

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Migration of unmigrated content due to installation of a new plugin

 Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico.                                                             

  

Informações Gerais

Não se aplica

Especificação

Produto

LOGIXLogix

Módulo

WMS

Segmento Executor

Supply Chain

Projeto1

LOGWMS01

IRM1

Jira
serverJIRA Produção
serverId0c783de1-186e-383b-975c-a1acd7d76cb5
keyLOGWMS01-545

Requisito1

 

Jira
serverJIRA Produção
serverId0c783de1-186e-383b-975c-a1acd7d76cb5
keyLOGWMS01-883

Subtarefa1

 

Chamado2

Não se aplica.

País

( X ) Brasil  (  ) Argentina  (  ) Mexico  México  (  ) Chile  (  ) Paraguai  (  ) EquadorEquador  (  ) USA  (  ) Colombia   Colômbia   (  ) Outro _____________.

Outros

.

   Legenda: 1 – Inovação 2 – Manutenção (Os demais campos devem ser preenchidos para ambos os processos). 

 

Objetivo

Realizar ajustes na integração do cadastro de clientes produtos para que seja possível enviar ou receber um cadastro a partir de para outro sistema.

Definição da Regra de Negócio

Image Removed
 

Nota
titleAtenção!

Não será previsto o recebimento da mensagem!


 

Definição da Regra de Negócio


 Image Added


 

 

O cadastro de clientes no ERP Datasul possui algumas restrições quanto ao "nome reduzido":
  • O campo não pode ter mais de 15 (quinze) caracteres.
  • Ao cadastrar um cliente, não pode existir outro cliente cadastrado com o mesmo nome reduzido.
  • Como a integração deste cadastro ocorrerá entre vários sistemas (WMS Logix, ERP Datasul, TMS Protheus, GFE) foi determinado que a chave única para identificar um registro em todos os locais será o CNPJ/CPF e Inscrição Estadual do cliente.
  •  

    Por estes motivos será necessário realizar algumas mudanças nas validações durante a entrada de dados no cadastro de clientes no Logix e também na recepção da mensagem de outros sistemas.

    Para evitar problemas em outras integrações onde este cadastro já é utilizado, estas validações e tratamentos adicionais somente serão aplicados caso o WMS Logix esteja integrado ao ERP Datasul, conforme parâmetro "Tipo de integração do WMS com backoffice":

    Image Removed

    Nota
    titleAtenção!

    A integração do cadastro de clientes produtos será realizada considerando a versão 1versão 3.000 da mensagem CustomerVendor, que é a versão já utilizada atualmente pelo WMS Logix para integração com o ERP Protheus.

    Aviso
    titleImportante!

    Rotina

    Tipo de Operação

    Opção de Menu

    Regras de Negócio

    WMSR96Alteração RNL Integração Backoffice
    VDP0815Alteração Cadastro de Clientes/Fornecedores
    VDP10000Alteração Cadastro de Clientes/Fornecedores

    VDPR239

    Alteração RNL Integração Cadastro de Clientes/Fornecedores

    1 - WMSR96 - RNL Integração Backoffice

    • Criar a função wmsr96_get_m_sistema_backoffice(), que não receberá parâmetros e apenas deverá retornar o conteúdo da variável  modular m_sistema_backoffice.

    2 - VDP0815 - Cadastro de Clientes/Fornecedores

    005 da mensagem Item.

    Rotina

    Tipo de Operação

    Opção de Menu

    Regras de Negócio

    WMSR96Alteração RNL Regras Integração WMS
    MAN9907Alteração Processamento mensagem ITEM (versão 3.005)
    EAIADAPTERITEM3Alteração Adapter mensagem ITEM (versão 3.005)
    EAIHELPERITEM3Alteração Helper mensagem ITEM (versão 3.005)

    1 - WMSR96 - RNL Regras Integração WMS

    • Criar novos parâmetros por empresa (LOG00086) para indicar os produtos/módulos com os quais o WMS Logix está integrado.
    • O parâmetro sistema_backoffice_integracao continuará sendo utilizado para determinar o ERP ao qual o WMS está integrado.

      • Parâmetro: wms_integrado_tms_protheus

      • Descrição: "Integrado ao TMS (Transportation Management System) do Protheus?"

      • Help: "Indica se o WMS está integrado ao TMS Protheus."
      • Rotina: 444 - INTEGRAÇÃO COM OUTROS SISTEMAS

      • Tipo Conteúdo: F - Flag

      • Permitir nulo: N - Não

      • Case sensitive: 1 - Somente caracteres maiúsculos

      • Efetuar replicação: N - Não

      • Replicação opcional: N - Não

      • Cliente: 105 - TOTVS

      • Valor padrão: N - Não

      • Comentário rodapé: "S - Sim ; N - Não"

      • Valores possíveis: (S)im, (N)ão

     

      • Parâmetro: wms_integrado_cockpit
      • Descrição: "Integrado ao Cockpit Logístico?"

      • Help: "Indica se o WMS está integrado ao Cockpit Logístico."
      • Rotina: 444 - INTEGRAÇÃO COM OUTROS SISTEMAS

      • Tipo Conteúdo: F - Flag

      • Permitir nulo: N - Não

      • Case sensitive: 1 - Somente caracteres maiúsculos

      • Efetuar replicação: N - Não

      • Replicação opcional: N - Não

      • Cliente: 105 - TOTVS

      • Valor padrão: N - Não

      • Comentário rodapé: "S - Sim ; N - Não"

      • Valores possíveis: (S)im, (N)ão

    • Criar a função wmsr96_get_integracoes(), que deverá receber como parâmetros o código da empresa e o modo de exibição. Regras:
      Na função vdp0815_controle() antes de efetuar o OPEN WINDOW incluir uma chamada da função
      • Deverá inicialmente chamar a função
      • wmsr96_get_sistema_backoffice()
    • passando como parâmetros o código da empresa corrente e o modo de exibição "0" (zero).
       Na função vdp0815_entrada() alterar paraque sejam realizadas as consistências abaixo ao passar pela razão social reduzida (campo reduzido):
    Caso o retorno da função wmsr96_get_m_sistema_backoffice() seja igual a "DATASUL" não poderá permitir prosseguir se a razão social reduzida tiver mais de 15 (quinze) caracteres. Apresentar a mensagem "Quando a integração com ERP Datasul está ativa é permitido no máximo 15 caracteres.".
    Se o tipo de cadastro escolhido for Cliente e se o retorno da função wmsr96_get_m_sistema_backoffice() for igual a "DATASUL" verificar se existe algum outro cliente que possua esta mesma razão social reduzida (validar contra a  tabela VDP_CLI_FORNEC_CPL filtrando onde o tipo_cadastro seja igual a "C"). Caso exista não permitir prosseguir e apresentar a mensagem "Já existe outro cliente cadastrado com esta razão social reduzida.".
    Se o tipo de cadastro escolhido for Ambos e se o retorno da função wmsr96_get_m_sistema_backoffice() for igual a "DATASUL" verificar se existe algum outro cliente ou fornecedor que possua esta mesma razão social reduzida (validar contra a  tabela VDP_CLI_FORNEC_CPL independente do tipo_cadastro). Caso exista não permitir prosseguir e apresentar a mensagem "Já existe outro cliente/fornecedor cadastrado com esta razão social reduzida.". 
    Aviso
    titleObservação

    Nesta especificação serão realizados apenas os tratamentos que tenham alguma relação com o cadastro de Clientes. Os tratamentos exclusivos relacionados ao cadastro de Fornecedores serão tratados em outra especificação deste mesmo projeto: ER_LOGWMS01-881_IN-11.2_Integração_Cadastro_Fornecedores

    2 - VDP10000 - Cadastro de Clientes/Fornecedores

     Na função vdp10000_carrega_parametros() incluir uma chamada da função wmsr96_get_sistema_backoffice()passando como parâmetros o código da empresa corrente e o modo de exibição "0" (zero).
  • Criar a função vdp10000_valid_virtual_nome_reduzido() onde deverão ser realizadas as consistências abaixo:

  • Caso o retorno da função wmsr96_get_m_sistema_backoffice() seja igual a "DATASUL" não poderá permitir prosseguir se a razão social reduzida tiver mais de 15 (quinze) caracteres. Apresentar a mensagem "Quando a integração com ERP Datasul está ativa é permitido no máximo 15 caracteres.".
    Se o tipo de cadastro escolhido for Cliente e se o retorno da função wmsr96_get_m_sistema_backoffice() for igual a "DATASUL" verificar se existe algum outro cliente que possua esta mesma razão social reduzida (validar contra a  tabela VDP_CLI_FORNEC_CPL filtrando onde o tipo_cadastro seja igual a "C"). Caso exista não permitir prosseguir e apresentar a mensagem "Já existe outro cliente cadastrado com esta razão social reduzida.".
    Se o tipo de cadastro escolhido for Ambos e se o retorno da função wmsr96_get_m_sistema_backoffice() for igual a "DATASUL" verificar se existe algum outro cliente ou fornecedor que possua esta mesma razão social reduzida (validar contra a  tabela VDP_CLI_FORNEC_CPL independente do tipo_cadastro). Caso exista não permitir prosseguir e apresentar a mensagem "Já existe outro cliente/fornecedor cadastrado com esta razão social reduzida.". 
    Aviso
    titleObservação

    Nesta especificação serão realizados apenas os tratamentos que tenham alguma relação com o cadastro de Clientes. Os tratamentos exclusivos relacionados ao cadastro de Fornecedores serão tratados em outra especificação deste mesmo projeto: ER_LOGWMS01-881_IN-11.2_Integração_Cadastro_Fornecedores

    3 - VDPR239 - RNL Integração Cadastro de Clientes/Fornecedores

  • Alterar a função vdpr239_carrega_parametros() para que no final seja chamada a função wmsr96_get_sistema_backoffice() para a empresa corrente.
     
  • Criar a função vdpr239_trata_cod_pais_bacen(), que deverá receber como parâmetros o código do país (char(03)) e o modo de exibição. Dentro da função, se o retorno da função wmsr96_get_m_sistema_backoffice() for igual a "DATASUL" deverá buscar o campo pais_bacen na tabela OBF_PAIS_BACEN. Se o retorno da função não for "DATASUL", não exista o registro na tabela OBF_PAIS_BACEN ou o campo pais_bacen esteja nulo/branco esta função deverá retornar o próprio código de país recebido por parâmetro. Se todas estas condições forem satisfeitas deverá retornar o conteúdo deste campo.
    No início da função vdpr239_prepara_envio_mensagem_eai() incluir uma chamada da função wmsr96_get_sistema_backoffice()passando como parâmetros o código da empresa corrente e o modo de exibição conforme a variável l_modo_exibicao_msg.
     
    Na função vdpr239_atualiza_business_content_Customer(), na linha onde está chamando a função adp10000_set_BusinessContent_Address_Country_Code()deverá alterar para passar o retorno da função vdpr239_trata_cod_pais_bacen(), enviando para esta função a variável já utlizada.
    Bloco de código
    collapsetrue
    #Alterar de:
    CALL adp10000_set_BusinessContent_Address_Country_Code(l_cod_pais)
    
    #Para:
    CALL adp10000_set_BusinessContent_Address_Country_Code(vdpr239_trata_cod_pais_bacen(l_cod_pais))
    Ainda na função vdpr239_atualiza_business_content_Customer(), há duaslinhas onde está chamando a função adp10000_set_BusinessContent_ShippingAddress_Country_Code(), alterar para passar o retorno da função vdpr239_trata_cod_pais_bacen(), enviando para esta função a variável já utlizada. 
    Bloco de código
    collapsetrue
    #Alterar de:
    CALL adp10000_set_BusinessContent_ShippingAddress_Country_Code(l_cod_pais)
    
    #Para:
    CALL adp10000_set_BusinessContent_ShippingAddress_Country_Code(vdpr239_trata_cod_pais_bacen(l_cod_pais))

     

  • Ainda na função vdpr239_atualiza_business_content_Customer(), há duas linhas onde está chamando a função adp10000_set_BusinessContent_BillingInformation_Address_Country_Code(), alterar para passar o retorno da função vdpr239_trata_cod_pais_bacen(), enviando para esta função a variável já utlizada.  

    Bloco de código
    collapsetrue
    #Alterar de:
    CALL adp10000_set_BusinessContent_BillingInformation_Address_Country_Code(l_cod_pais)
    
    #Para:
    CALL adp10000_set_BusinessContent_BillingInformation_Address_Country_Code(vdpr239_trata_cod_pais_bacen(l_cod_pais))

     

  •  Na função vdpr239_valida_BusinessContent() há uma validação da tag BusinessContent._Address._Country._Code, verificando se o código recebido na mensagem existe na tabela PAISES. Alterar para que antes desta validação seja verificado se o retorno da função wmsr96_get_m_sistema_backoffice() é igual a "DATASUL", caso afirmativo deverá validar se existe o registro para este código na tabela OBF_PAIS_BACEN, filtrando pelo campo pais_bacen. Se não encontrar o registro deverá apresentar a mensagem "País informado na integração inexistente.". Caso encontre mais de um registro com este código deverá apresentar a mensagem "Existe mais de um país LOGIX cadastrado com este código.". A variável BusinessContent._Address._Country._Code deverá ser alimentada com o conteúdo do campo pais_logix da tabela OBF_PAIS_BACEN.
    Ainda na função vdpr239_valida_BusinessContent(), alterar o ponto onde a função vdpr239_verifica_cnpj_duplicado() é chamada para que seja enviado mais um parâmetro após o CNPJ/CPF, que será a Inscrição Estadual, utilizando a variável m_ins_estadual.
    Alterar a função vdpr239_verifica_cnpj_duplicado() para receber mais um parâmetro após o CNPJ/CPF, que será a Inscrição Estadual. Definir a variável conforme o campo ins_estadual da tabela CLIENTES. 
  • Na função vdpr239_verifica_cnpj_duplicado(), antes de buscar o código do cliente pelo código externo deverá verificar se o retorno da função wmsr96_get_m_sistema_backoffice() é igual a "DATASUL", caso afirmativo deverá buscar o código do cliente na tabela CLIENTES filtrando pelo CNPJ/CPF e Inscrição Estadual recebidos por parâmetro, ao invés de executar a lógica com base na tabela VDP_CLI_PARAMETRO.

    Nota
    titleAtenção!

    A Inscrição Estadual é um campo opcional no cadastro, desta forma o mesmo pode estar com conteúdo NULO.

    Assim sendo, considerar esta condição no momento de efetuar a validação referente a este campo.

    Bloco de código
    collapsetrue
      LET l_cod_cliente = NULL
      IF wmsr96_get_m_sistema_backoffice() = 'DATASUL' THEN
        IF l_ins_estadual IS NOT NULL THEN
           WHENEVER ERROR CONTINUE
           SELECT MAX(cod_cliente)
             INTO l_cod_cliente
             FROM clientes
            WHERE num_cgc_cpf = l_cnpj_cpf
              AND ins_estadual = l_ins_estadual
           WHENEVER ERROR STOP
        ELSE
           WHENEVER ERROR CONTINUE
           SELECT MAX(cod_cliente)
             INTO l_cod_cliente
             FROM clientes
            WHERE num_cgc_cpf = l_cnpj_cpf
              AND ins_estadual IS NULL
           WHENEVER ERROR STOP
        END IF
        IF sqlca.sqlcode < 0 THEN
           CALL log0030_processa_err_sql("SELECT","CLIENTES",1)
           RETURN FALSE
        ELSE
           IF sqlca.sqlcode = NOTFOUND OR
              l_cod_cliente IS NULL THEN
              LET l_cod_cliente = "?"
           END IF
        END IF
     ELSE
        WHENEVER ERROR CONTINUE
        SELECT MAX(vdp_cli_parametro.cliente)
          INTO l_cod_cliente
          FROM vdp_cli_parametro
         WHERE vdp_cli_parametro.parametro = 'cod_externo_intg_eai'
           AND vdp_cli_parametro.texto_parametro = l_cod_externo
        WHENEVER ERROR STOP
        IF sqlca.sqlcode < 0 THEN
           CALL log0030_processa_err_sql("SELECT","VDP_CLI_PARAMETRO",1)
           RETURN FALSE
        ELSE
           IF sqlca.sqlcode = NOTFOUND OR
              l_cod_cliente IS NULL THEN
              LET l_cod_cliente = "?"
           END IF
        END IF
     END IF
  • Na função vdpr239_atualiza_clientes(), quando for para efetuar o de/para de códigos, antes de buscar o código do cliente pelo código externo deverá verificar se o retorno da função wmsr96_get_m_sistema_backoffice() é igual a "DATASUL", caso afirmativo deverá buscar o código do cliente na tabela CLIENTES filtrando pelo CNPJ/CPF e Inscrição Estadual recebidos por parâmetro, ao invés de executar a lógica com base na tabela VDP_CLI_PARAMETRO.
     

    Nota
    titleAtenção!

    A Inscrição Estadual é um campo opcional no cadastro, desta forma o mesmo pode estar com conteúdo NULO.

    Assim sendo, considerar esta condição no momento de efetuar a validação referente a este campo.

    Bloco de código
    collapsetrue
       IF l_busca_de_para THEN
          INITIALIZE m_cod_cliente TO NULL
          
          IF wmsr96_get_m_sistema_backoffice() = 'DATASUL' THEN
          
             IF m_ins_estadual IS NOT NULL THEN
                WHENEVER ERROR CONTINUE
                SELECT MAX(cod_cliente)
                  INTO m_cod_cliente
                  FROM clientes
                 WHERE num_cgc_cpf = m_cnpj_cpf
                   AND ins_estadual = m_ins_estadual
                WHENEVER ERROR STOP
             ELSE
                WHENEVER ERROR CONTINUE
                SELECT MAX(cod_cliente)
                  INTO m_cod_cliente
                  FROM clientes
                 WHERE num_cgc_cpf = m_cnpj_cpf
                   AND ins_estadual IS NULL
                WHENEVER ERROR STOP
             END IF
             IF sqlca.sqlcode < 0 THEN
                CALL log0030_processa_err_sql("SELECT","CLIENTES",1)
                RETURN FALSE
             END IF
             
          ELSE
             
             WHENEVER ERROR CONTINUE
             SELECT MAX(cliente)
               INTO m_cod_cliente
               FROM vdp_cli_parametro
              WHERE parametro = 'cod_externo_intg_eai'
                AND texto_parametro = _BusinessContent._Code
             WHENEVER ERROR STOP
             IF sqlca.sqlcode < 0 THEN
                CALL log0030_processa_err_sql("SELECT","VDP_CLI_PARAMETRO",1)
                RETURN FALSE
             END IF
             
          END IF
          IF sqlca.sqlcode = NOTFOUND OR
             m_cod_cliente IS NULL THEN
             ...
             ...
             

     

    Criar uma função  chamada vdpr239_valida_BusinessContent_exclusao(), que deverá ter as validações abaixo (utilizar como base a função vdpr239_valida_BusinessContent(), que já possui estas lógicas):

  • A variável _BusinessContent._Type deve estar preenchida (diferente de nulo e diferente de branco) e com valor igual a "CUSTOMER", "VENDOR" ou "BOTH".
  • A variável _BusinessContent._Codedeve estar preenchida (diferente de nulo e diferente de branco).Se o retorno da função wmsr96_get_m_sistema_backoffice() for igual a "DATASUL" deverão estar informados o CNPJ/CPF e Inscrição Estadual (tag _GovernmentalInformation). Nesta verificação deverão ser alimentadas as variáveis modulares m_cnpj_cpf e m_ins_estadual.
    Na função vdpr239_recebe_mensagem_eai() há uma verificação do tipo da mensagem, caso seja UPSERTé chamada a função vdpr239_valida_BusinessContent()e em seguida são realizadas as lógicas para atualização do cadastro de cliente/fornecedor. No ELSE desta verificação são aplicadas as lógicas para exclusão do cliente/fornecedor, alterar para que antes de entrar nestas lógicas seja chamada a função vdpr239_valida_BusinessContent_exclusao().

     

  • Na função vdpr239_exclui_cliente(), antes de buscar o código do cliente pelo código externo deverá verificar se o retorno da função wmsr96_get_m_sistema_backoffice() é igual a "DATASUL", caso afirmativo deverá buscar o código do cliente na tabela CLIENTES filtrando pelo CNPJ/CPF e Inscrição Estadual recebidos por parâmetro, ao invés de executar a lógica com base na tabela VDP_CLI_PARAMETRO. 

    Nota
    titleAtenção!

    Inscrição Estadual é um campo opcional no cadastro, desta forma o mesmo pode estar com conteúdo NULO.

    Assim sendo, considerar esta condição no momento de efetuar a validação referente a este campo.

     

    Bloco de código
    collapsetrue
    IF wmsr96_get_m_sistema_backoffice() = 'DATASUL' THEN
       IF m_ins_estadual IS NOT NULL THEN
          WHENEVER ERROR CONTINUE
          SELECT MAX(cod_cliente)
            INTO m_cod_cliente
            FROM clientes
           WHERE num_cgc_cpf = m_cnpj_cpf
             AND ins_estadual = m_ins_estadual
          WHENEVER ERROR STOP
       ELSE
          WHENEVER ERROR CONTINUE
          SELECT MAX(cod_cliente)
            INTO m_cod_cliente
            FROM clientes
           WHERE num_cgc_cpf = m_cnpj_cpf
             AND ins_estadual IS NULL
          WHENEVER ERROR STOP
       END IF
       IF sqlca.sqlcode <> 0 AND sqlca.sqlcode <> NOTFOUND THEN
          CALL log0030_processa_err_sql("SELECT","clientes",1)
          RETURN FALSE
       END IF
    ELSE
       LET m_cod_cliente = NULL
       WHENEVER ERROR CONTINUE
       SELECT cliente
         INTO m_cod_cliente
         FROM vdp_cli_parametro
        WHERE parametro = 'cod_externo_intg_eai'
          AND texto_parametro = _BusinessContent._Code
       WHENEVER ERROR STOP
       IF sqlca.sqlcode <> 0 AND sqlca.sqlcode <> NOTFOUND THEN
          CALL log0030_processa_err_sql("SELECT","vdp_cli_parametro",1)
          RETURN FALSE
       END IF
    END IF

     

  • Alterar a função vdpr239_atualiza_vdp_cli_parametro() para que logo no início verifique, caso o código do parâmetro enviado seja igual a "cod_externo_intg_eai", se o retorno da função wmsr96_get_m_sistema_backoffice() é igual a "DATASUL". Caso afirmativo a função já deverá retornar TRUE sem efetuar os procedimentos seguintes, pois quando esta integração está ativa não deve ser atualizado o De/Para de códigos.

    Bloco de código
    collapsetrue
    IF l_parametro = 'cod_externo_intg_eai' AND
       wmsr96_get_m_sistema_backoffice() = 'DATASUL' THEN
       RETURN TRUE
    END IF
  • Fluxo do Processo

    Image Removed

     

      • para buscar o sistema ERP ao qual o WMS está integrado, atualizando a variável modular m_sistema_backoffice. 

      • Em seguida deverá efetuar a leitura do novo parâmetro wms_integrado_tms_protheus, alimentando também uma variável modular para que o seu conteúdo possa ser utilizado em processamentos seguintes. Contudo, somente deverá reler o parâmetro se a variável modular estiver nula ou se o código da empresa para o qual foi solicitada a leitura deste parâmetro seja diferente da leitura anterior.

      • Da mesma forma, também deverá efetuar a leitura do novo parâmetro wms_integrado_cockpit, alimentando outra variável modular. Deverá também somente reler o parâmetro se a variável modular estiver nula ou se o código da empresa para o qual foi solicitada a leitura deste parâmetro seja diferente da leitura anterior. 

      • Esta função deverá apenas alimentar as variáveis modulares, não haverá valor de retorno.

    • Criar a função wmsr96_get_integracao_erp(), que deverá receber como parâmetros o código da empresa e o modo de exibição. Regras:
      • Deverá inicialmente chamar a função wmsr96_get_integracoes().
      • Em seguida, deverá retornar o valor da variável modular m_sistema_backoffice.
    • Criar a função wmsr96_get_integracao_tms_protheus(), que deverá receber como parâmetros o código da empresa e o modo de exibição. Regras:
      • Deverá inicialmente chamar a função wmsr96_get_integracoes().
      • Em seguida, deverá retornar o valor da variável modular indicada acima, ao ler o parâmetro wms_integrado_tms_protheus.
       
    • Criar a função wmsr96_get_integracao_cockpit(), que deverá receber como parâmetros o código da empresa e o modo de exibição. Regras:
      • Deverá inicialmente chamar a função wmsr96_get_integracoes().
      • Em seguida, deverá retornar o valor da variável modular indicada acima, ao ler o parâmetro wms_integrado_cockpit.
       

    2 - MAN9907 - Processamento mensagem ITEM (versão 3.005) 

    • Alterar a função man9907_executa_operacao(), incluindo após a chamada da função man9907_get_cod_cla_fisc()a chamada dafunção man9907_get_origem().

    • Alterar também para que antes da chamada da função EAIAdapterItem3_SendBusinessMessage() seja chamada a EAIMapper_set() para o campo item.origem:

      Bloco de código
      titleInclusão da chamada para setar a origem do item
      collapsetrue
      CALL EAIMapper_set("item.origem"               ,mr_dados.origem)
    • Criar a função man9907_get_origem(), utilizando como base a função manr100_leitura_origem(). Porém, ao invés de retornar a origem do item esta nova função deverá setar a origem lida na variável modular mr_dados.origem (criar este campo no Record já existente).

    • Alterar a função man9907_executa_operacao(), incluindo após a chamada da função man9907_get_origem()a chamada dafunção man9907_get_centro_custo(). Também alterar para que antes da chamada da função EAIAdapterItem3_SendBusinessMessage() seja chamada a EAIMapper_set() para o campo item.centro_custo:

      Bloco de código
      titleInclusão da chamada para setar o centro de custo
      collapsetrue
      CALL EAIMapper_set("item.centro_custo"               ,mr_dados.centro_custo) 
    • Criar a função man9907_get_centro_custo(), utilizando como base a lógica existente no final da função manr100_atualiza_Item(), onde é preparada a variável l_CostCenterCode com a concatenação de quatro campos do cadastro do item. Deverá setar o campo mr_dados.centro_custo (criar este campo no Record já existente).

    • Alterar para que antes da chamada da função EAIAdapterItem3_SendBusinessMessage() seja realizada analisada a necessidade de uso de contexto:

      1. Chamar as funções wmsr96_get_integracao_erp()wmsr96_get_integracao_tms_protheus() e wmsr96_get_integracao_cockpit(), armazenando o retorno de cada função em uma variável diferente.
      2. Se retorno da função wmsr96_get_integracao_erp() for "DATASUL" e o retorno de alguma das outras duas funções for igual a "S" significa que há mais de um produto integrado e portanto deverá ser realizado o envio de mensagens considerando contextos, conforme indicado a seguir:
        1. Chamar a função EAIMapper_set() passando como parâmetros "ContextNames" e em seguida "erp":

          Bloco de código
          titleSetar o contexto "erp"
          collapsetrue
          CALL EAIMapper_set("ContextNames", "erp" )
        2. Em seguida chamar a função EAIAdapterItem3_SendBusinessMessage(), que realizará a integração de forma síncrona;
        3. Se o retorno desta função for TRUE, chamar novamente a função EAIMapper_set() passando como parâmetros "ContextNames" e em seguida "vertical":

          Bloco de código
          titleSetar o contexto "vertical"
          collapsetrue
          CALL EAIMapper_set("ContextNames", "vertical" )
        4. Em seguida chamar novamente a função EAIAdapterItem3_SendBusinessMessage(), que realizará a integração desta vez de forma assíncrona.

      3. Se retorno da função wmsr96_get_integracao_erp() for diferente de "DATASUL" ou o retorno das outras duas funções for igual a "N" das deverá continuar como é hoje, ou seja, sem setar o contexto e chamando a função para integração apenas uma vez, realizando o processamento de forma síncrona.

    3 - EAIADAPTERITEM3 - Adapter mensagem ITEM (versão 3.005)

    • Preparar este adapter para trabalhar com o conceito de contextos:
      1. Retirar os comentários da função EAIAdapterItem3_getContextNames e prepará-la para efetuar um RETURN com o contexto default e mais os contextos "erp" e "vertical":

        Bloco de código
        collapsetrue
        RETURN _ADVPL_eai_get_default_context() CLIPPED || “,erp,vertical”
      2.  Retirar os comentários das três linhas que estão no início da função EAIAdapterItem3_SendBusinessMessage, referente ao tratamento de contextos:

        Bloco de código
        collapsetrue
        CALL EAIHelperItem3_inicializa_record()
        LET l_ContextNames = EAIMapper_getString( "ContextNames" )
        CALL EAIHelperItem3_set_ContextNames( l_ContextNames )
      3. Ainda na função EAIAdapterItem3_SendBusinessMessage, antes de chamar a função EAIHelperItem3_set_DeliveryType_sync deverá testar o contexto que deverá ser considerado. Se o contexto não tiver sido indicado deverá continuar processando como síncrono:
        1. Se a variável l_ContextNamesfor igual a "verticais" chamar como assíncrona (EAIHelperItem3_set_DeliveryType_async);
        2. Se a variável l_ContextNamesfor igual a "erp" ou estiver nula, chamar como síncrona (EAIHelperItem3_set_DeliveryType_sync).

    • Alterar na função EAIAdapterItem3_LoadUpsertContent() para que no ponto onde está setando o valor para a tag StockGroupCode seja chamada a função wmsr96_get_grupo_estoque_para() para realizar o de/para do grupo de controle de estoque, caso exista.

      Bloco de código
      titleExemplo de inclução da chamada da função indicada
      collapsetrue
      CALL EAIHelperItem3_set_BusinessContent_StockGroupCode(wmsr96_get_grupo_estoque_para(EAIMapper_getString("item.cod_empresa"),EAIMapper_getString("item.gru_ctr_estoq"),1))
    • Alterar na função EAIAdapterItem3_LoadUpsertContent() para que seja chamada a função EAIHelperItem3_set_BusinessContent_Origin() utilizando como parâmetro o retorno da função EAIMapper_getString("item.origem"), caso o retorno desta função seja diferente de nulo.

      Bloco de código
      titleChamada da função para setar a origem do item
      collapsetrue
      IF EAIMapper_getString("item.origem") IS NOT NULL THEN
         CALL EAIHelperItem3_set_BusinessContent_Origin(EAIMapper_getString("item.origem"))
      END IF
    • Alterar na função EAIAdapterItem3_LoadUpsertContent() para que sejam chamadas as funções EAIHelperItem3_set_BusinessContent_CostCenterCode() eEAIHelperItem3_set_BusinessContent_CostCenterInternalId() utilizando como parâmetro o retorno da função EAIMapper_getString("item.centro_custo"), caso o retorno desta função seja diferente de nulo.

      Bloco de código
      titleChamada da função para setar o centro de custo
      collapsetrue
      IF EAIMapper_getString("item.centro_custo") IS NOT NULL THEN
         CALL EAIHelperItem3_set_BusinessContent_CostCenterCode(EAIMapper_getString("item.centro_custo"))
         CALL EAIHelperItem3_set_BusinessContent_CostCenterInternalId(EAIMapper_getString("item.centro_custo"))
      END IF

    4 - EAIHELPERITEM3 - Helper mensagem ITEM (versão 3.005)

    • Preparar este helper para trabalhar com o conceito de contextos:
      1. Na chamada da função _ADVPL_eai_create_message (realizada dentro da função EAIHelperItem3_cria_mensagem_negocio) incluir na passagem de parâmetros a variável _ContextNames:

        Bloco de código
        collapsetrue
        LET g_eai_msg_negocio = _ADVPL_eai_create_message(EAIHelperItem3_get_transaction_name(), _MessageType, EAIHelperItem3_get_adapter_version(), _ContextNames)
      2. Ainda dentro da função EAIHelperItem3_cria_mensagem_negocio, retirar o comentário da chamada da função EAIHelperItem3_set_contextNames.

      3. Retirar os comentários da função EAIHelperItem3_set_ContextNames, deixando ativo o código já existente.

     

    Fluxo do Processo


    Image AddedImage Added

     

    Cenários de Teste


    Image Added

    Cenários de Teste

    Image Removed

     

     

     Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico.