Duvida Executar uma api de um Webservice

Discussão em 'Progress 4GL' iniciado por woliveira, Janeiro 27, 2014.

  1. woliveira

    woliveira Sem Pontuação

    Boa Tarde,
    Tenho um webservice configurado e funcionando e preciso receber de algum client dados enviados onde meu WS irá receber esse dados e executar uma API que e retornara para o client as mensagens de erro ou sucesso.
    Só para entender o programa que criei ele está recebendo os dados enviados pelo client e consigo até exportar essas informações, mas se eu adicionar a api dentro do programa o mesmo retorna um error (Error in SOAP request execution: 4GL STOP condition: The Server application has returned an error. (7243) (7241) (10926)).

    Código:
    /*Definições e Tabelas Temporarias do WS*/
    DEF TEMP-TABLE ttPedidoPeca
        FIELD numpedido     AS CHAR FORMAT "X(10)"
        FIELD datapedido    AS CHAR FORMAT "X(10)"
        FIELD codcliente    AS CHAR FORMAT "X(10)"
        FIELD cpf_cnpj      AS CHAR FORMAT "X(15)"
        INDEX chPedidoPeca   IS PRIMARY numpedido.
    
    DEF TEMP-TABLE ttItemPedPeca
        FIELD codmaterial   AS CHAR FORMAT "X(20)"
        FIELD qtd           AS INT
        INDEX chItemPedPeca IS PRIMARY codmaterial.
    
    DEF TEMP-TABLE ttPedido
        FIELD numpedido     AS CHAR FORMAT "X(10)"
        FIELD datapedido    AS CHAR FORMAT "X(10)"
        FIELD codcliente    AS CHAR FORMAT "X(10)"
        FIELD cpf_cnpj      AS CHAR FORMAT "X(15)"
        INDEX chPedido      IS PRIMARY numpedido.
    
    DEF TEMP-TABLE ttItemPedido
        FIELD numpedido     AS CHAR FORMAT "X(20)"
        FIELD cpf_cnpj      AS CHAR FORMAT "X(15)"
        FIELD codmaterial   AS CHAR FORMAT "X(20)"
        FIELD qtd           AS INT
        INDEX chItemPedido IS PRIMARY numpedido codmaterial.
    
    DEF TEMP-TABLE tterros
        FIELD Identif-msg           AS CHAR FORMAT "X(60)"
        FIELD Num-sequencia-erro    AS INT  FORMAT "999"
        FIELD Cod-erro              AS INT  FORMAT "99999"
        FIELD Des-erro              AS CHAR FORMAT "X(60)"
        FIELD Cod-maq-origem        AS INT  FORMAT "999"
        FIELD Num-processo          AS INT  FORMAT "999999999". 
    
    
    DEF DATASET dsPedidoPeca  FOR ttPedidoPeca.
    DEF DATASET dsItemPedPeca FOR ttItemPedPeca.
    
    DEF INPUT  PARAM DATASET FOR dsPedidoPeca.
    DEF INPUT  PARAM DATASET FOR dsItemPedPeca.
    DEF OUTPUT PARAM c-retorno AS CHAR. /*OK ou NOK*/
    DEF OUTPUT PARAM c-msg     AS CHAR.
    
    /*definições da API a mesma aqui está incompleta pois é muito grande*/
    define temp-table tt-ped-venda no-undo
        field cod-estabel                 as char       format "x(3)"
        field nome-abrev                  as char       format "x(12)"
        field nr-pedcli                   as char       format "x(12)"
        field nr-pedido                   as inte       format ">>>,>>>,>>9"
    .
    .
    .
    
    
    /*Definições e programa simples o mesmo se executado fora do ambiente WS retorna erro da API*/
    
    DEF VAR l-calcula AS LOG.
    DEF VAR i-cod-maq-origem AS INT.
    DEF VAR i-num-processo AS INT.
    
    
    FOR EACH ttPedidoPeca:
    
        c-retorno = "OK".
        IF ttPedidoPeca.numpedido = "" THEN DO:
            ASSIGN c-retorno = "NOK"
                   c-msg     = "Pedido não foi informado!!!".
        END.
        IF ttPedidoPeca.datapedido = "" THEN DO:
            ASSIGN c-retorno = "NOK"
                   c-msg     = "Data não foi informada!!!".
        END.
        IF ttPedidoPeca.codcliente = "" THEN DO:
            ASSIGN c-retorno = "NOK"
                   c-msg     = "Cod. Cliente não foi informado!!!".
        END.
        IF ttPedidoPeca.codcliente = "" THEN DO:
            ASSIGN c-retorno = "NOK"
                   c-msg     = "CPF ou CNPJ não foram informados!!!".
        END.
    
        IF c-retorno = "OK" THEN DO:
    
            FIND emitente WHERE emitente.cgc = ttPedidoPeca.cpf_cnpj NO-ERROR.
           
            IF AVAIL emitente THEN DO:
               
                CREATE ttPedido.
                ASSIGN ttPedido.numpedido  = ttPedidoPeca.numpedido
                       ttPedido.datapedido = ttPedidoPeca.datapedido
                       ttPedido.codcliente = ttPedidoPeca.codcliente
                       ttPedido.cpf_cnpj   = ttPedidoPeca.cpf_cnpj.
    
    
                FOR EACH ttItemPedPeca:
    
                    CREATE ttItemPedido.
                    ASSIGN ttItemPedido.numpedido   = ttPedidoPeca.numpedido
                           ttItemPedido.cpf_cnpj    = ttPedidoPeca.cpf_cnpj
                           ttItemPedido.codmaterial = ttItemPedPeca.codmaterial
                           ttItemPedido.qtd         = ttItemPedPeca.qtd.
                END.
    
    
                CREATE tt-ped-venda.
                ASSIGN 
                    tt-ped-venda.Ind-tipo-movto = 1                 /*É o tipo de movimentação da API : 1-Inclusão, 2-Modifica, 3-Elimina, 5-Suspende, 6- Reativa, 7-Cancela.*/
                    tt-ped-venda.cod-estabel    = "2"               /*codigo do estabelecimento*/
                    tt-ped-venda.nome-abrev     = "ALESSANDRA"      /*nome abreviado do cliente*/
                    tt-ped-venda.nr-pedcli      = "TESTE1234"        /*número do pedido do cliente*/
                    tt-ped-venda.dt-emissao     = TODAY /*DATE(SUBSTR(v-data,7,2) + SUBSTR(v-data,5,2) + SUBSTR(v-data,1,4))*/ /*data em que o pedido foi emitido pelo representante / cliente */
                    tt-ped-venda.dt-implant     = TODAY             /*data em que o pedido foi implantando no sistema */
                    tt-ped-venda.dt-entrega     = TODAY             /*data prevista para entrega do pedido*/
                    tt-ped-venda.dt-entorig     = TODAY             /*data de entrega solicitada pelo cliente */
                    tt-ped-venda.nat-operacao   = "6949H"           /*natureza de operação*/
                    tt-ped-venda.cod-cond-pag   = 0            /*código da condição de pagamento*/
                    tt-ped-venda.nr-tabpre      = "005/2004"        /*tabela de preços*/
                    tt-ped-venda.nr-tab-finan   = 1                 /*número da tabela de financiamento*/
                    tt-ped-venda.tp-pedido      = "GR"              /*disponível para classificação / indicação própria do usuário*/
                    tt-ped-venda.cod-entrega    = "Padrao"          /*codigo da entrega já cadastrada para o cliente*/
                    tt-ped-venda.cod-portador   = 99999             /*código do portador*/
                    tt-ped-venda.Modalidade     = 6                 /*modalidade de cobrança*/
                    tt-ped-venda.user-impl      = "woliveira"             /*contém o userid de quem implantou o pedido */
                    tt-ped-venda.dt-userimp     = TODAY                     /*contem a data corrente em que o pedido foi implantado*/
                    tt-ped-venda.nome-transp    = "CORREIO/QMD"     /*nome do transportador*/
                    tt-ped-venda.mo-codigo      = 0                 /*código da moeda de referência dos valores*/
                    tt-ped-venda.nr-ind-finan   = 0                 /*número do índice de financiamento*/
                    tt-ped-venda.no-ab-reppri   = "ASSIST.TECN."    /*nome abreviado do representante principal */
                    tt-ped-venda.cod-emitente   = 209613            /*código do cliente*/
                    tt-ped-venda.esp-ped        = 1                 /*espécie de pedido*/
                    tt-ped-venda.cod-gr-cli     = 0                 /*código do grupo do cliente*/
                    tt-ped-venda.cod-canal-venda = 2                /*código do canal de venda*/
                    .
    
                l-calcula = NO.
    
    
               run pdp/pdapi152.p (input-output table tt-ped-venda,
                                    input-output table tt-ped-item, 
                                    input-output table tt-ped-ent,
                                    input-output table tt-ped-repre,
                                    input-output table tt-con-pges,
                                    input-output table tt-ped-antecip,
                                    input-output table tt-versao-integr,
                                    output       table tt-erros-geral, 
                                    input        i-cod-maq-origem,
                                    input        i-num-processo,
                                    input        l-calcula, 
                                    input        table tt-pd-vendor).
    
    
                OUTPUT TO c:\temp\errors.txt.
                FOR EACH tt-erros-geral:
    
                    PUT tt-erros-geral.Identif-msg        
                        tt-erros-geral.Num-sequencia-erro 
                        tt-erros-geral.Cod-erro          
                        tt-erros-geral.Des-erro          
                        tt-erros-geral.Cod-maq-origem    
                        tt-erros-geral.Num-processo       SKIP.
    
                END.
                OUTPUT CLOSE. 
    
    
                OUTPUT TO c:\temp\ttt1.txt.
                FOR EACH ttpedido:
                    EXPORT ttpedido.
                END.
    
                OUTPUT CLOSE.
    
    
                /*verificar momento correto para a utilização desta mensagem*/
                ASSIGN c-retorno = "OK"
                       c-msg     = "Pedido implantado no sistema!!!".
    
    
                /*OUTPUT TO c:\temp\errors.txt.
                FOR EACH tt-erros-geral:
    
                    DISP tt-erros-geral.
    
                END.
                OUTPUT CLOSE. */
    
            END.
            ELSE DO:
                ASSIGN c-retorno = "NOK"
                       c-msg     = "Cliente não cadastrado!!!".
            END.
    
        END.
    
    END.
    
    
  2. lwazevedo

    lwazevedo Membro Ativo

  3. Cobra.cne

    Cobra.cne Equipe de Suporte Moderador

    bom dia,

    Você já executou esta API manualmente com estes dados para ver o retorno, pode ser alguma informação não tratada dentro da API que esta dando erro. E depois tenta fazer a chamada da API com NO-ERROR e trata o retorno para ver se encontra o problema.

    Código:
    RUN API (...) NO-ERROR.
    IF ERROR-STATUS:ERROR THEN DO:
      OUTPUT TO c:\temp\errors.txt.
      PUT ERROR-STATUS:GET-MESSAGE(1) SKIP
               RETURN-VALUE SKIP(1).
      OUTPUT CLOSE.
    END.
    
    
    abs

Compartilhe esta Página