Utilizando &SCOPED-DEFINE

Discussão em 'Progress 4GL' iniciado por fasouza, Agosto 23, 2010.

  1. fasouza

    fasouza Membro Participativo

    Estou com o código abaixo mas não consigo pegar o valor da variável c-programa no &SCOPED-DEFINE, alguem teria alguma sugestão ?

    Código:
    DEFINE VARIABLE i-aux       AS INTEGER     NO-UNDO.
    DEFINE VARIABLE c-programa  AS CHARACTER   NO-UNDO.
    
    ASSIGN i-aux = 1.
    
    CASE i-aux:
    
        WHEN 1 THEN
            ASSIGN c-programa = 'CLI'.
        WHEN 2 THEN
            ASSIGN c-programa = 'FOR'.
        OTHERWISE
            ASSIGN c-programa = 'AMB'.
    
    END CASE. /*CASE i-aux:*/
    
    &SCOPED-DEFINE CHAMA-PROGRAMA c-programa
    
    MESSAGE "{&CHAMA-PROGRAMA}" VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    &IF DEFINED (CHAMA-PROGRAMA) &THEN
    
        &IF "value ({&CHAMA-PROGRAMA})" = "CLI" &THEN
        
            MESSAGE {&CHAMA-PROGRAMA} " 1 - CLIENTE" VIEW-AS ALERT-BOX INFO BUTTONS OK.
            ASSIGN i-aux = 10.
        
        &ENDIF
        &IF "{&CHAMA-PROGRAMA}" = "FOR" &THEN
            
            MESSAGE "2 - FORNECEDOR" VIEW-AS ALERT-BOX INFO BUTTONS OK.
            ASSIGN i-aux = 20.
        
        &ENDIF
        &IF "{&CHAMA-PROGRAMA}" = "AMB" &THEN
        
            MESSAGE "3 - AMBOS" VIEW-AS ALERT-BOX INFO BUTTONS OK.
            ASSIGN i-aux = 30.
        
        &ENDIF
        
    &ENDIF
    
  2. jalegria

    jalegria Membro Participativo

    Saudações

    Eu não entendi muito bem o que vc tá tentando fazer no programa.
    Mas o Progress substitui o valor do scoped em tempo de compilação.

    Por ex:

    Na linha
    MESSAGE "{&CHAMA-PROGRAMA}" VIEW-AS ALERT-BOX INFO BUTTONS OK.

    vai ficar assim
    MESSAGE "c-programa" VIEW-AS ALERT-BOX INFO BUTTONS OK.
    então vai aparecer "c-programa" na message

    Na linha
    MESSAGE {&CHAMA-PROGRAMA} " 1 - CLIENTE" VIEW-AS ALERT-BOX INFO BUTTONS OK.

    fica assim
    MESSAGE c-programa " 1 - CLIENTE" VIEW-AS ALERT-BOX INFO BUTTONS OK.
    então deve aparecer o valor da variavel c-programa


    até aí tudo bem
    o problema é na linha
    &IF "{&CHAMA-PROGRAMA}" = "FOR" &THEN

    a variavel c-programa receberá um valor em tempo de execução
    não dá pra testar seu valor em tempo de compilação

    é como se fosse o seguinte comando:
    IF "c-programa" = "FOR" THEN...
    ...sempre vai dar falso


    explica pra gente o objetivo do programa, de repente tem alguma outra alternativa mais simples...
    valeo...
  3. kirchner

    kirchner Membro Participativo Moderador

    Fábio,

    &SCOPE-DEFINE é uma diretiva de pré-processador. O pré-processador é um cara que roda ANTES do compilador. E claro, antes do teu programa executar. Não há chance de um programa executar antes de ser compilado. E quando ele começar a execução o pré-processador já é pré-história.

    Logo, você não consegue usar o valor de uma variável no &SCOPE-DEFINE. Porque você precisa disso? Não dá pra trabalhar com a variável normalmente?
  4. fasouza

    fasouza Membro Participativo

    Pessoal,

    Na verdade estou tentando rodar no mesmo botão dois Zoom's diferentes, mas da erro ai tentei tratar desta maneira.

    Obrigado.
  5. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Para rodar 2 ou mais zooms no mesmo botão, você não poderá fazer a chamada dos zooms no mesmo lugar, sendo assim faça o seguinte:

    01) Crie 2 eventos para o botão: U1 e U2 e no evento F5 acione os eventos criados de acordo com o zoom a ser chamado.

    Código:
    
    ON F5 OF Btn-Zoom
    DO:
      
        IF situacao = 1 THEN
            APPLY "U1":U TO SELF.
        ELSE
            APPLY "U2":U TO SELF.
    
    END.
    
    
    ON U1 OF Btn-Zoom
    DO:
      
        MESSAGE "Zoom 1" VIEW-AS ALERT-BOX.
    
    END.
    
    
    ON U2 OF Btn-Zoom
    DO:
      
        MESSAGE "Zoom 2" VIEW-AS ALERT-BOX.
    
    END.
    
    

Compartilhe esta Página