Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com

Página Inicial

 
4D v20 R7
Storage

Storage 


 

Storage -> Resultado 
Parâmetro Tipo   Descrição
Resultado  Objeto in Catálogo de objetos compartidos e coleções compartidas registrados

O método Storage devolve um catálogo de objetos compartidos registrados ou coleções compartidas disponíveis para todos os processos na máquina ou componente atual.

O catálogo devolvido por Storage é criado automaticamente por 4D e está disponível para todos os processos do banco de dados, incluídos os processos preemptivos. Existe um catálogo Storage por máquina e componente: em uma aplicação cliente/servidor, há um objeto compartido Storage no servidor e um objeto compartido Storage em cada aplicação 4D remota; se o banco de dados usar componentes, há um objeto Storage por componente.

Utilize o catálogo Storage para fazer referência a qualquer objeto compartido ou coleção compartida que deseje utilizar desde qualquer processo preemptivo ou padrão. Para registrar um objeto compartido ou uma coleção compartida no catálogo, agregue su a referência ao objeto compartido devolvido por Storage.

Como o catálogo devolvido por Storage é um objeto compartido, segue as regras descritas na seção Objetos compartidos e Coleções compartidas, mas com algumas características específicas:

  • Este objeto só pode conter objetos compartidos e coleções compartidas. Tentar agregar outros tipos de valores (objetos não compartidos ou coleções, nulos, valores escalares) gerará um erro.
  • Para agregar uma propriedade a este objeto deve estar rodeado pela estrutura Use...End use, do contrário, se devolve um erro. Entretanto, é possível ler um atributo fora de uma estrutura Use...End use
  • Quando estiver rodeado pela estrutura Use...End use, os atributos de primeiro nível de Storage estão bloqueados para outros processos.
  • Diferente dos objetos compartidos padrão, o objeto devolvido por Storage NAO compartirá seu identificador de bloqueio com objetos compartidos ou coleções agregadas como atributos (para mais informação, consulte  Identificador de bloqueio (Locking identifier)).

Una prática comum poderia ser inicializar o objeto Storage em

 Use(Storage)
    Storage.counters:=New shared object("customers";0;"invoices";0)
 End use

Este exemplo mostra uma forma padrão de estabelecer valores de Armazenamento:

 Use(Storage)
    Storage.mydata:=New shared object
    Use(Storage.mydata)
       Storage.mydata.prop1:="Smith"
       Storage.mydata.prop2:=100
    End use
 End use

Storage permite implementar um singleton com uma inicialização lenta, como é mostrada no exemplo abaixo.

Nota: para mais informação sobre os padrões de singleton, pode consultar esta página de Wikipedia.

 C_LONGINT($0)
 C_LONGINT($counterValue)
 C_OBJECT(counter//cria uma referência ao contador para o processo
 
 If(counter=Null//Se esta referência for nula, obtenha if de Storage
    Use(Storage// O uso de armazenamento só é necessário uma vez!
       If(Storage.counter=Null)
          Storage.counter:=New shared object("operation";0)
       End if
       counter:=Storage.counter //Obter a referência de objeto compartido contador
    End use
 End if
 Use(counter) //use diretamente o contador de objetos compartidos (não necessita usar Storage!)
    counter.operation:=counter.operation+1
    $counterValue:=counter.operation
 End use
 
 $0:=$counterValue



Ver também 

Objetos compartidos e Coleções compartidas

 
PROPRIEDADES 

Produto: 4D
Tema: Objetos (Linguagem)
Número 1525

This command can be run in preemptive processes

 
CONTEÚDO DA PÁGINA 
 
HISTÓRIA 

Criado por: 4D v16 R6

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v20 R7)