Alguém pode me dizer a diferença entre uma variável definida com new shared e outra definida como newm global shared. Ambas não mantêm o valor em menória? Obrigado
Variáveis definidas com new shared são visíveis para as procedures chamadas direta ou indiretamente pelo programa onde foi definida. Já a opção new global shared faz com que a variável seja visível para toda a sessão progress do usuário
Ola, vou explicar do jeito que eu entendo. Corrijam-me se estiver errado. Você pode definir uma NEW SHARED VARIABLE, mas ela só fica em memória durante a execução dessa sessão depois ela é apagada, e para usar essa VARIABLE deve ser definida com DEFINE SHARED VARIABLE (sem o new). No caso da NEW GLOBAL SHARED VARIABLE ela fica salva em memória mesmo depois de terminado a sessão ficando visível pelas demais e eu posso usar ela definindo tanto com DEFINE SHARED VARIABLE como com o NEW GLOBAL SHARED VARIABLE. Ex: Vejam que ao executar main1 e depois mess1 “teste” fica na memória. Código: /* programa: main1.p programador: MarcosP */ DEF NEW GLOBAL SHARED VAR c-global AS CHARACTER FORMAT "x(3)":U NO-UNDO. ASSIGN c-global = "Teste". Código: /* programa: mess1.p programador: MarcosP */ DEF NEW GLOBAL SHARED VAR c-global /* or DEF SHARED VAR c-global */ AS CHARACTER FORMAT "x(3)":U NO-UNDO. MESSAGE c-global VIEW-AS ALERT-BOX INFO BUTTONS OK. Mas para usar NEW SHARED VARIABLE deve estar tudo na mesma sessão. Se eu não desse um run e simplesmente executa-se a mess2, como no caso anterior(mess1), ela daria um erro que c-shared não foi criada. Código: /* programa: main2.p programador: MarcosP */ DEF NEW SHARED VAR c-shared AS CHARACTER FORMAT "x(3)":U NO-UNDO. ASSIGN c-shared = "Teste". RUN c:\mess2.p. Código: /* programa: mess2.p programador: MarcosP */ DEF SHARED VAR c-shared AS CHARACTER FORMAT "x(3)":U NO-UNDO. MESSAGE c-shared VIEW-AS ALERT-BOX INFO BUTTONS OK.
Raviel, é mais ou menos isso. A new shared será compartilhada dentro da mesma sessão Progress, porém somente em programas que compartilham chamadas, exatamente no caso do teu exemplo, onde o programa c:\mess2.p utiliza o valor da variável definida no programa c:\mess1.p que a chamou. Se houver um programa c:\mess3.p que não for chamado pelo programa c:\mess1.p ele não conseguirá utilizar a variável new shared. Já as new global shared são compartilhadas dentro da mesma sessão, porém independente do programa ter sido chamado pelo programa que criou ou não. Por exemplo, se você criar uma variável new shared no programa c:\mess1.p e o programa c:\mess2.p é chamado pelo c:\mess1.p você consegue visualizar seu valor; mais longe ainda, se houver um programa c:\mess3.p ele também terá o valor da variável definida no c:\mess1.p, mesmo que o c:\mess3.p não tenha sido chamado pelo c:\mess1.p ou ainda que o programa c:\mess1.p já tenha sido encerrado.
Hum, entendi... SHARED, eu tenho um programa pai.p onde eu defino a new shared, e nos filhos.p que chamo de dentro deste programa se declarar a variável como shared posso acessar seu conteúdo. GLOBAL SHARED, consigo acessar de qualquer programa na sessão progress... nao apenas obedecendo a estrutura pai->filho. Obrigado a todos... Aquele abraço...