1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Duvida FOR EACH falhando dentro de UPC na bodi159com

Discussão em 'Progress 4GL' iniciado por lucasiam, Julho 19, 2018.

  1. lucasiam

    lucasiam Membro Participativo

    opa! Blza pessoal?
    Tenho um programa que integra pedidos de venda de uma aplicação externa.
    Em certo ponto desse integrador, eu crio registros dentro de uma tabela específica contendo as "observações" do pedido.
    Dentro da bodi159com, faço um For Each nessa tabela. Os registros foram criados, mas o For Each não encontra nada.

    Vou tentar mostrar a lógica aqui:

    Integrador.p
    Código:
    importa_pedidos:
        /* cria pedido usando bo datasul */
    
        /* Trata possíveis erros */
        FIND FIRST RowErrors
             WHERE RowErrors.errorsubtype = "ERROR" NO-LOCK NO-ERROR.
        IF NOT AVAIL RowErrors THEN DO:
    
            /* cria tabela especifica das observaçõs */
            CREATE es-ped-obs.
            ASSIGN es-ped-obs.nr-pedido = ped-venda.nr-pedido
                   es-ped-obs.cod-obs   = 1.
    
            /* chama api pra completar pedido */
            RUN completeOrder IN bo-ped-venda-com(INPUT  p-rowid-pedido,
                                                  OUTPUT TABLE Rowerrors).
    
        END.
    Código da minha UPC na bodi159com:
    Código:
    IF p-ind-event = "afterCompleteOrder" THEN DO:
    
       FIND FIRST tt-epc
            WHERE tt-epc.cod-event = "aftercompleteorder"
              AND tt-epc.cod-parameter = "object-handle" NO-LOCK NO-ERROR.
        IF AVAIL tt-epc THEN DO:
           RUN getrowid IN WIDGET-HANDLE(tt-epc.val-parameter) (OUTPUT r-ped-venda).
    
           FOR FIRST b-ped-venda
               WHERE ROWID(b-ped-venda) = r-ped-venda NO-LOCK:
    
               /* esse é o FOR EACH que está falhando. Os registros existem mas não encontro nada */
               FOR EACH es-ped-obs
                  WHERE es-ped-obs.nr-pedido = b-ped-venda.nr-pedido NO-LOCK:
    
                   MESSAGE "encontrei observações"
                       VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
    
               END.
    
           END.
    
        END.
    
    END.
    Já conferi que os registros estão sendo criados corretamente na tabela es-ped-obs. Inclusive, se logo após a entrada do pedido eu rodar o FOR EACH no editor progress, ele funciona e lista os registros.
    Alguém já passou por algo parecido?
    Valew!
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Você já conferiu se o número do pedido gravao na sua tabela é o mesmo da busca em "b-ped-venda.nr-pedido" ??
    Você já verificou se chegou a entrar no FOR FIRST b-ped-venda?
    lucasiam curtiu isso.
  3. lucasiam

    lucasiam Membro Participativo

    Sim Rafael, fiz ambos os testes.
    Dei um "MESSAGE" na b-ped-venda.nr-pedido e conferi inclusive se o número batia com o número do pedido que o integrador inseriu.
    Está entrando no FOR FIRST normalmente.
  4. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    então, vc cria o registro e depois chama um metodo da BO, e a UPC está exatamente nessa chamada, eu acredito que vc está é com conflito de bloco de transação, como na primeira parte, vc ainda não fechou a transação corrente, o progress não descarregou na tabela es-ped-obs os registros, pra que esteja disponivel dentro da UPC, tenta por o create es-ped-obs dentro de um do transaction, e coloca a chamada da BO depois do END do DO TRANSACTION:

    Assim vc força um fechamento de transação e depois vai pra BO.
    lucasiam curtiu isso.
  5. lucasiam

    lucasiam Membro Participativo

    Fiz o teste usando o DO TRANSACTION e realmente resolveu. Muito obrigadoooo \o/
    Muito bizarro isso. Não imaginava que ele se perdia assim com os blocos transacionais.
    Outra coisa curiosa: Fiz um teste deixando o código do jeito que estava, não usando o DO TRANSACTION. Se logo após do Create es-ped-obs eu der um FIND FIRST na tabela, daí também funciona.

    Quando eu dou o FIND eu também forço o progress descarregar os dados na tabela? Achei estranho pq tinha em mente que só o FOR EACH abriria por baixo dos panos uma outra transação.
  6. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Essa parte transacional seria a minha 3ª pergunta...rsrsrs
    lucasiam curtiu isso.

Compartilhe esta Página