Duvida Como definir uma constante no Progress?

Discussão em 'Progress 4GL' iniciado por jc01, Maio 20, 2015.

  1. jc01

    jc01 Membro Participativo

    Como definir uma constante no Progress?
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Exemplo:

    Código:
    &SCOPED-DEFINE Variavel "Valor"
    
    MESSAGE {&Variavel}
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    Também só pode ser usado &GLOBAL-DEFINE, ainda não sei a diferença exata dos 2.
  3. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    vc pode fazer
    &scoped-define PROGRAMA cscp030

    Assim ela vale só para esse programa e os que venha a serem chamados

    ou

    &global-define PROGRAMA cscp030

    Passa a existir pra todo o ambiente

    para usar

    if {&PROGRAMA} = 'cscp030' then ......
  4. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

  5. jc01

    jc01 Membro Participativo

    Legal. Muito obrigado a ambos pelas explicações e exemplos.
  6. Eilleen

    Eilleen Membro Ativo

    Então Richard, isso aí é a teoria... mas esse é um caso que na prática a teoria é outra... rsrs...
    Nunca consegui fazer isso aí funcionar... se vc define uma &GLOBAL ela só vale dentro do programa que vc definiu, se chamar outro ela zera.. o mesmo com a &SCOPED...
    Outra coisa: uma vez definida ela vale do nível em que está e nos níveis abaixo, ou seja, se no main vc chama a procedure A e dentro dela define um preprocesso, volta pro main, chama uma procedure B e usa o preprocesso nela, ele vai ter valor, mas se usar no main, vai estar "zerada", isso vale tanto na &GLOBAL como na &SCOPED também...

    A única diferença que achei até hoje é que uma &SCOPED "sobrepõe" o valor de uma &GLOBAL definida com o mesmo nome (mas somente no nível = ou abaixo), já o contrário não ocorre... isso até seria útil se não fosse o caso de dar mensagem de erro nesse segundo caso, como pode ser visto rodando o exemplo abaixo:

    Código:
    &SCOPED-DEFINE TESTE testeScoped.
    
    MESSAGE 'Definition 1: ' "{&TESTE}" VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    RUN teste.
    RUN teste2.
    
    MESSAGE 'Definition 2: ' "{&TESTE}" VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    PROCEDURE teste:
    
    &GLOBAL-DEFINE TESTE testeGlobal.
    MESSAGE 'procedure teste: ' "{&TESTE}" VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    END PROCEDURE.
    
    
    PROCEDURE teste2:
    
    MESSAGE 'procedure teste2: ' "{&TESTE}" VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    END PROCEDURE.
    As mensagens vão todas mostrar o valor = testeScoped.

Compartilhe esta Página