Vous êtes sur le site Web historique de la documentation de 4D. Les documentations sont progressivement déplacées vers developer.4d.com

Accueil

 
4D v20 R7
Storage

Storage 


 

Storage -> Résultat 
Paramètre Type   Description
Résultat  Objet in Catalogue des objets et collections partagé(e)s enregistré(e)s dans Storage

La commande Storage retourne le catalogue des objets partagés et des collections partagées qui ont été enregistré(e)s dans l'objet Storage sur la machine ou le composant courant(e).

Le catalogue retourné par Storage est créé automatiquement par 4D et est disponible pour tous les process de la base, y compris les process préemptifs. Il existe un seul catalogue Storage par machine et par composant : dans une application client/serveur, il y a un seul objet partagé Storage sur le serveur, et un objet partagé Storage sur chaque application 4D distante ; si la base utilise des composants, il y a également un objet Storage par composant.

Utilisez le catalogue Storage pour référencer les objets ou collections partagé(e)s que vous souhaitez utiliser depuis tout process préemptif ou standard. Pour enregistrer un objet partagé ou une collection partagée dans Storage, il suffit d'ajouter sa référence à l'objet partagé retourné par Storage.

Comme le catalogue retourné par Storage est un objet partagé, il suit les règles décrites dans la section Objets partagés et collections partagées, avec toutefois les spécificités suivantes :

  • Cet objet peut uniquement contenir des objets partagés ou des collections partagées. Si vous tentez d'ajouter d'autres types de valeurs (objets ou collections non partagé(e)s, null, valeurs scalaires), une erreur est générée.
  • L'ajout d'une propriété dans cet objet doit être encadré par une structure Utiliser...Fin utiliser, sinon une erreur est générée. La lecture d'une propriété en-dehors d'une structure Utiliser...Fin utiliser est cependant possible.
  • Lorsqu'ils sont encadrés par une structure Utiliser...Fin utiliser, les attributs de premier niveau de Storage sont verrouillés pour les autres process.
  • A la différence des objets partagés standard, l'objet retourné par Storage ne partage PAS son locking identifier avec les objets partagés ou les collections partagées qui lui sont ajoutés en tant qu'attributs (pour plus d'informations, reportez-vous à la section A propos du locking identifier (comment fonctionnent les groupes partagés)).

Il est pratique d'initialiser le contenu de l'objet Storage dans la : 

 Utiliser(Storage)
    Storage.counters:=Creer objet partage("customers";0;"invoices";0)
 Fin utiliser

Cet exemple montre la manière standard de définir les valeurs de Storage :

 Utiliser(Storage)
    Storage.mydata:=Creer objet partage
    Utiliser(Storage.mydata)
       Storage.mydata.prop1:="Smith"
       Storage.mydata.prop2:=100
    Fin utiliser
 Fin utiliser

Storage permet d'implémenter un singleton en lazy initialization, comme proposé dans l'exemple ci-dessous.

Note : Pour plus d'informations sur les singletons, vous pouvez consulter cette page Wikipedia.

 C_ENTIER LONG($0)
 C_ENTIER LONG($counterValue)
 C_OBJET(counter//créer une référence de counter pour le process
 
 Si(counter=Null//si la référence est null, on la récupère depuis Storage
    Utiliser(Storage//L'utilisation de Storage n'est nécessaire qu'une seule fois !
       Si(Storage.counter=Null)
          Storage.counter:=Creer objet partage("operation";0)
       Fin de si
       counter:=Storage.counter //Obtenir la référence de l'objet partagé counter
    Fin utiliser
 Fin de si
 Utiliser(counter) //on utilise directement l'objet partagé counter (pas besoin de Storage)
    counter.operation:=counter.operation+1
    $counterValue:=counter.operation
 Fin utiliser
 
 $0:=$counterValue



Voir aussi  

Objets partagés et collections partagées

 
PROPRIÉTÉS 

Produit : 4D
Thème : Objets (Langage)
Numéro : 1525
Nom intl. : Storage

Commande(s) éligible(s) à l'exécution dans un process préemptif

 
PAGE CONTENTS 
 
HISTORIQUE 

Créé : 4D v16 R6

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v20 R7)