Cancelar Inclusão via UPC

Discussão em 'Progress 4GL' iniciado por andreluisbrandao, Outubro 25, 2011.

  1. andreluisbrandao

    andreluisbrandao Membro Participativo

    Amigos,

    Gostaria de uma dica para seguinte situação:

    Criei uma UPC que verificar o valor da ultima compra de um ITEM, caso o valor seja maior que o ultimo valor comprado, o usuário não deve conseguir incluir o item.

    Gostaria de saber como faço para enviar um comando via UPC, que ao clicar no botão salvar...."BEFORE-SAVE-FIELDS" , o programa não evolua e volte para o campo que eu definir. Fazer volta pro campo em já consegui fazer com o comando entry, preciso agora saber como faço para para a evolução do programa.

    Obrigado pelo sempre apoio dado por vocês do fórum.

    André.
  2. bhfs

    bhfs Sem Pontuação

    Se houver BO da tabela, utilize-a, conforme o exemplo de código a seguir, dentro da tag
    Código:
    , para fazer o cancelamento do processamento: 
    
    Esse exemplo abaixo se refere a processamento de Pedido de Venda:
    [code]
    {include/i-epc200.i bodi159} /*INFORMAR A BO QUE EXECUTARµ O EVENTO DE UPC*/
    
    /* Include com definicao da temp-table RowErrors */
    DEFINE TEMP-TABLE RowErrors NO-UNDO
        FIELD ErrorSequence    AS INTEGER
        FIELD ErrorNumber      AS INTEGER
        FIELD ErrorDescription AS CHARACTER
        FIELD ErrorParameters  AS CHARACTER
        FIELD ErrorType        AS CHARACTER
        FIELD ErrorHelp        AS CHARACTER
        FIELD ErrorSubType     AS CHARACTER.
    
    
    DEF INPUT PARAM  p-ind-event AS  CHAR NO-UNDO.
    DEF INPUT-OUTPUT PARAM TABLE FOR tt-epc.
    
    define temp-table tt-ped-venda no-undo like ped-venda 
           field r-rowid as rowid.
    
    def var h-bo    as handle no-undo.
    
    
    DEFINE VAR level AS INT INITIAL 1.
    DEF VAR PROGRAMA AS char NO-UNDO init "".
    
    REPEAT WHILE PROGRAM-NAME(level) <> ?.
    
        IF  PROGRAM-NAME(level) = "deleteRecord dibo/bodi159.p" then do:
            assign programa = "deleteRecord".
            LEAVE.
        end.
    
        ASSIGN level = level + 1.
    
    END.
    
    
    FIND tt-epc  WHERE 
         tt-epc.cod-event     = "afterValidateRecord"  and
         tt-epc.cod-parameter  = "Object-Handle"       and
         programa <> "deleteRecord" NO-ERROR .
    
    IF  AVAIL tt-epc Then Do:
    
        ASSIGN h-bo = WIDGET-HANDLE(tt-epc.val-parameter).
    
        RUN getRecord IN  h-bo (OUTPUT TABLE tt-ped-venda).
        FIND FIRST tt-ped-venda NO-LOCK NO-ERROR.
    
        if  tt-ped-venda.cod-canal-venda <= 216 THEN DO:
        
            RUN _insertErrorManual IN h-bo ( INPUT "0",
                                             INPUT "EMS":U,
                                             INPUT "INFORMATION":U, /*"INFORMATION OU WARNING" ou "ERROR":U*/
                                             INPUT "Teste de erro de canal de venda", /*Customizável*/
                                             INPUT "IGNORAR ESTA MENSAGEM", /*Customizável*/
                                             INPUT "":U).
        END.
    END. 
    
    return "ok".
    
    Caso você não queira usar UPC de BO, pode fazer via UPC de tela, mas aí você terá que criar um botão que fique em cima do botão de Salvar padrão, de modo que apenas o novo botão esteja disponível para acesso do usuário...
    Daí, no choose deste novo botão você faz a validação que deseja e logo em seguida dá um apply choose no botão padrão... mas a UPC de BO é sempre a mais adequada para validações com bloqueio do processamento.

    Certo?
  3. andreluisbrandao

    andreluisbrandao Membro Participativo

    Obrigado meu amigo, bela dica...

    Vou customizar meu programa ... muito obrigado.

Compartilhe esta Página