Variáveis no progress

Variáveis no progress

Uma variável em PROGRESS é tratada como sendo uma entidade que possui atributos e eventos, ou seja, um objeto. Por exemplo, em uma variável do PROGRESS pode ser definido label, cor, formato, visualização e eventos.

DEFINE { [ [ NEW [ GLOBAL ] ] SHARED ] |
           [ PRIVATE | PROTECTED | PUBLIC ] [ STATIC ] }
    VARIABLE variable-name  
    { { AS [ HANDLE TO ] primitive-type-name        
        | AS [ CLASS ] { object-type-name }       
        | LIKE field       } [ EXTENT [ constant ] ] }   
        [ BGCOLOR expression ]  
        [ COLUMN-LABEL label ]  
        [ CONTEXT-HELP-ID expression ]  
        [ DCOLOR expression ]  
        [ DECIMALS n ]  
        [ DROP-TARGET ]  
        [ FONT expression ]  
        [ FGCOLOR expression ]  
        [ FORMAT string ]  
        [ INITIAL      
            { constant | { [ constant [ , constant ] ... ] } } ]  
        [ LABEL string [ , string ] ... ]  
        [ MOUSE-POINTER expression ]  
        [ NO-UNDO ]  
        [ [ NOT ] CASE-SENSITIVE ]  
        [ PFCOLOR expression ]  
        { [ view-as-phrase ] }  
        { [ trigger-phrase ] }

Pontos mais importantes da declaração:

NEW SHARED VARIABLE variable-name

Define e identifica uma variável a ser compartilhada com um procedimento direta ou indiretamente, pelo procedimento atual. O procedimento chamado deve nomear a mesma variável em uma declaração DEFINE SHARED VARIABLE variable-name.

NEW GLOBAL SHARED VARIABLE variable-name

Define e identifica uma variável que pode ser usada por qualquer procedimento que declare a mesma variavel seguindo a declaração DEFINE SHARED VARIABLE variable-name. O valor de uma variável global compartilhada permanece disponível durante toda uma sessão de ABL.

SHARED VARIABLE variable-name

Define e identifica uma variável que foi criado por outro procedimento que usou a declaração DEFINE NEW SHARED VARIABLE ou DEFINE NEW GLOBAL SHARED VARIABLE.

VARIABLE variable-name

Declara o nome da variável.

AS primitive-type-name

Especifica um tipo primitivo para a variável que está definindo. O tipo de dados (primitiva-type-name) pode ser um dos seguintes procedimentos:
CHARACTER | COM-HANDLE | DATE | DATETIME | DATETIME-TZ | DECIMAL| HANDLE | INT64 | INTEGER | LOGICAL | LONGCHAR | MEMPTR | RAW | RECID| ROWID

LIKE field

Indica o campo de uma tabela para referenciar as características da variável como tipo, label, initial, formato, extent e view-as.

EXTENT [ constant ]

Define a variável como um elemento array, onde podem ser armazenados uma cadeia de dados de acordo com o tipo primitivo definido, a cadeia sempre iniciará da posição 1.

DECIMALS  n

Define o numero de casas após a “,” em variáveis do tipo DECIMAL.

FORMAT string

Define o formato que os dados da variável serão apresentados.

INITIAL { constant | [ constant [ , constant ] . . . ] }

Define um valor inicial para variável.

NO-UNDO

Quando o valor de uma variável é alterado durante uma operação e a operação é desfeita, o AVM restaura o valor da variável ao seu valor anterior. Se você não quer, ou se você não precisa, que o valor de uma variável seja desfeita, mesmo quando ele foi alterado durante uma transação, use a opção NO-UNDO. NO-UNDO torna as variáveis mais eficientes, use esta opção sempre que possível.

Exemplos:

Definindo novas variáveis compartilhadas:

Ex: Programa1.p

DEFINE NEW SHARED VARIABLE del   AS LOGICAL NO-UNDO.
DEFINE NEW SHARED VARIABLE nrecs AS INTEGER NO-UNDO.

Acessando variáveis compartilhadas em outros procedimentos (programas):

Ex: Programa2.p

DEFINE SHARED VARIABLE del   AS LOGICAL NO-UNDO.
DEFINE SHARED VARIABLE nrecs AS INTEGER NO-UNDO.

Variável do tipo data com array de 2 posições e iniciando com a data atual:

DEFINE VARIABLE var1 AS DATE INITIAL TODAY EXTENT 2 NO-UNDO.

MESSAGE 
    var1[1]
    SKIP
    var1[2]
    VIEW-AS ALERT-BOX INFO BUTTONS OK.

 

Qualquer duvida ou sugestão por favor comentem.

2 thoughts on “Variáveis no progress

  1. OUTPUT TO VALUE (“c:\\temp\xxx.txt”).

    DEFINE VARIABLE termoPesqJson as CHAR INIT “Abadia de Goias” .

    DEFINE VARIABLE iCity as CHAR INIT “cidade.cidade” .

    //(1)assim não reconhece o conteudo da iCity como nome da tabela
    //FOR EACH mgemp.cidade WHERE &iCity = STRING(termoPesqJson):

    //(2)assim funciona, mas no lugar da “cidade.cidade” eu quero que seja uma variavél para poder trocar sempre que eu precisar
    FOR EACH mgemp.cidade WHERE cidade.cidade = STRING(termoPesqJson) :
    EXPORT DELIMITER “|”
    “cidade” cidade.cidade
    “sigla” cidade.sigla
    “estado” cidade.estado
    “pais” cidade.pais .

    END .

    /*
    se no lugar da variavel iCity(1) eu escrevo o nome da tabela cidade.cidade(2) dá certo

    e gera a saída correta:

    “cidade”|”Abadia de Goias”|”sigla”|”GO001″|”estado”|”GO”|”pais”|”BRASIL”

    */

    1. Olá Enio,
      desculpe a demora em responder, eu estava de férias rsrsrs.
      Se entendi bem você quer montar um WHERER dinamicamente.
      Se for isso num FOR EACH convencional não vai ser possível a não ser que monte vários EACHs um para cada situação.

      Outra solução é criar uma QUERY e montar seu FOR EACH dentro dela,
      veja nesse exemplo da OpenEdge: https://knowledgebase.progress.com/articles/Article/P102491
      no seu caso ficaria assim:


      DEFINE VARIABLE qh AS WIDGET-HANDLE.

      DEFINE VARIABLE cTabela as CHAR INIT "cidade" .
      DEFINE VARIABLE cWhere as CHAR INIT "cidade.cidade" .
      DEFINE VARIABLE cidade AS char initial "Londrina".

      CREATE QUERY qh.
      qh:SET-BUFFERS(BUFFER mgcad.cidade:HANDLE).
      qh:QUERY-PREPARE("FOR EACH " + cTabela + " WHERE " + cWhere + " = '" + cidade + "'").
      qh:QUERY-OPEN.

      REPEAT WITH FRAME y:
      qh:GET-NEXT().
      IF qh:QUERY-OFF-END THEN LEAVE.
      DISPLAY cidade
      cidade FORMAT "x(30)"
      estado FORMAT "X(20)".
      END.

      qh:QUERY-CLOSE().
      DELETE OBJECT qh.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.