Duvida UPC ceapi001k

Discussão em 'EMS , HCM e Totvs 11' iniciado por Matheus Marra, Agosto 8, 2025.

  1. Matheus Marra

    Matheus Marra Sem Pontuação

    Boa tarde!

    Estou tentando interceptar a tt-movto que o ceapi001k está recebendo. Para isso, fiz uma UPC simples para fazer o message os pontos de entrada. Adicionei a UPC no ceapi001 (conforme o suporte instruiu), mas estou recebendo erro "Numero incompatível de parâmetros passado para a rotina". Ou seja, a UPC está sendo chamada, mas a quantidade de parâmetros está incorreta.

    Testei tanto com o modelo de UPC para tela quanto com o modelo de UPC para BO, mas ambas apresentam esse erro.

    Alguém teria um exemplo funcional de UPC para a ceapi001k para eu me basear?

    Arquivos Anexados:

  2. lcpaulino

    lcpaulino Membro Participativo

    Matheus Marra curtiu isso.
  3. af.dums

    af.dums Membro Ativo

    Não sei se está 100%, fiz alguns recortes para tirar minhas regras especificas, mas creio que o escopo te dê um norte

    Código:
    {utp/ut-glob.i}
    {include/i-epc200.i1}
    
    {cep/ceapi001.i}
    
    DEFINE TEMP-TABLE tt-movto-upc LIKE tt-movto.
    
    DEFINE VARIABLE htt-movto AS HANDLE NO-UNDO.
    DEFINE VARIABLE hqr-movto AS HANDLE NO-UNDO.
    DEFINE VARIABLE hbf-movto AS HANDLE NO-UNDO.
    
    DEFINE VARIABLE hbf-movto-upc AS HANDLE NO-UNDO.
    DEFINE VARIABLE htt-erro  AS HANDLE NO-UNDO.
    
    PROCEDURE piInicio-pi-valida-lote:
    
        DEF VAR l-alternativo AS LOGICAL NO-UNDO.
    
        DEFINE INPUT PARAMETER p-ind-event AS CHARACTER NO-UNDO.
        DEFINE INPUT-OUTPUT PARAMETER TABLE FOR tt-epc.
    
        FOR EACH tt-epc NO-LOCK
            WHERE tt-epc.cod-event     = p-ind-event
              AND tt-epc.cod-parameter = "tt-movto(handle)":
    
            ASSIGN htt-movto = HANDLE(tt-epc.val-parameter)
                   hbf-movto = htt-movto:DEFAULT-BUFFER-HANDLE. 
           
            hbf-movto:FIND-CURRENT(EXCLUSIVE-LOCK).
    
            IF NOT hbf-movto:AVAILABLE THEN
                NEXT.
               
            ASSIGN hbf-movto-upc = TEMP-TABLE tt-movto-upc:DEFAULT-BUFFER-HANDLE.
    
            IF hbf-movto:AVAILABLE THEN DO:
                hbf-movto-upc:BUFFER-CREATE().
                hbf-movto-upc:BUFFER-COPY(hbf-movto).
            END.
           
            FOR EACH tt-movto-upc:
                //regras para consulta de dados
                 htt-erro:BUFFER-CREATE.
                 ASSIGN htt-erro:BUFFER-FIELD(1):BUFFER-VALUE = 1
                        htt-erro:BUFFER-FIELD(2):BUFFER-VALUE = 2
                        htt-erro:BUFFER-FIELD(3):BUFFER-VALUE = "Exemplo de erro".
            END.
    
        END.
       
    END.   
    
    Matheus Marra curtiu isso.
  4. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Boa tarde, eu ia postar a minha upc, mas o Anderson chegou antes, nessa ceapi001 especificamente eles mudaram o jeito de agir.
    Vc tem que criar uma procedure com o nome do ponto de UPC.
    Matheus Marra curtiu isso.
  5. Matheus Marra

    Matheus Marra Sem Pontuação

    Muito obrigado Paulino, Anderson e Richard!

    Com o link do Paulino, conseguir achar alguns posts do Richard e Anderson conversando sobre o assunto e apresentando exemplos.

    Se alguém chegar depois procurando sobre o assunto, vou deixar aqui a UPC que o reissobr comentou nesse post: https://www.4each.com.br/threads/upc-em-api-segurança-de-depósitos.17873/page-3. Me ajudou muito a entender e conseguir resolver meu problema.

    Comunidade excelente! Obrigado a todos mais uma vez!

    Código:
    {include/i-epc200.i1}
    
    def var l-erro as log no-undo.
    
    procedure piInicio-pi-valida-lote:
        def input         param p-ind-event as char no-undo.
        def input-output  param table for tt-epc.
    
        def var h-bo               as widget-handle no-undo.
        def var h-buffer           as widget-handle no-undo.
        def var h-query            as widget-handle no-undo.
    
        if p-ind-event = "Inicio-pi-valida-lote"
        then do:
            assign l-erro = no.
    
            /* neste evento, na tt-epc.val-parameter contem o handle da tt-movto pois o movimento ainda nao foi criado */
            find first tt-epc
                 where tt-epc.cod-event     = "Inicio-pi-valida-lote"       
                   and tt-epc.cod-parameter = 'tt-movto(handle)' no-error.
    
            if avail tt-epc then do:
                /* bloco de valida‡äes */
                /* o codigo abaixo serve apenas como exemplo, para ler o deposito */
                assign h-bo     = widget-handle(tt-epc.val-parameter).
                assign h-buffer = h-bo:default-buffer-handle.
    
                create query h-query.
                h-query:set-buffers(h-buffer).
                h-query:query-prepare('for each tt-movto').
                h-query:query-open().
                h-query:get-first().
    
                message h-buffer:buffer-field('cod-depos'):buffer-value view-as alert-box.
              
                h-query:query-close().
              
                if l-erro then
                    return "NOK":U.
                else
                    return "OK":U.
            end.
        end.
    end.
    
    procedure piEND-CEAPI001:
        def input         param p-ind-event as char no-undo.
        def input-output  param table for tt-epc.
    
        if p-ind-event = "END-CEAPI001"
        then do:
            find first tt-epc
                 where tt-epc.cod-event     = "END-CEAPI001"       
                   and tt-epc.cod-parameter = "MOVTO-ESTOQ-ROWID" no-error.
    
            /* neste evento, na tt-epc.val-parameter contem o rowid do movimento, que ja foi criado, mas pode ser desfeito */
    
            if avail tt-epc then do:
                if avail tt-epc then do:
                    /* bloco de valida‡äes */
                    for first movto-estoq no-lock
                        where rowid(movto-estoq) = to-rowid(tt-epc.val-parameter):
                  
                        message movto-estoq.cod-depos view-as alert-box.
                    end.
                  
                    /* se precisar desfazer neste ponto */
                    if l-erro then do:
                        create tt-epc.
                        assign tt-epc.cod-event     = "END-CEAPI001"
                               tt-epc.cod-parameter = "Retorno Erro"
                               tt-epc.val-parameter = "YES".
                    end.
                end.
            end.
        end.
    end.

Compartilhe esta Página