Tout ce que vous avez toujours voulu savoir sur les sharedobject

Ce tutorial s'efforce de couvrir toute la classe SharedObject: définition, utilisation et limitation. Il s'adresse à tous ceux qui veulent découvrir cette classe ou à ceux qui veulent maîtriser son utilisation et ses applications.

SharedObject: c'est une classe, comme la classe Sound ou MovieClip. de tous types, en localle serveur. Elle est disponible depuis Flash 6, plus connu sous le nom redoutable de Flash MX.

L'avantage premier d'un SharedObject est sa versatilité, sa souplesse d'utilisation. On peut l'utiliser pour stocker tout type de variables, on ou off line et sans faire appel à une technologie résidante sur le poste client, tel que PHP ou ASP combiné avec une base SQL ou ACCESS. SharedObject génère un fichier en local, finalement comparable à un fichier texte, mais encodé. (Il semblerait, après quelques recherches, que ce soit proche du C. Si quelqu'un peut apporter son opinion fondée là-dessus, il est la bienvenue.)

A chaque création d'un SharedObject,Flash va donc générer et sauver un fichier sur le poste du client,fichier dont l'extension est .sol. Nous sommes donc confrontés à deuxparamètres ici: l'autorisation d'écrire sur le poste client, etl'espace alloué pour effectuer cette écriture. Et nous abordons là leslimitations du SharedObject: l'espace dont on peut disposer. Par défaut, Flash aloue 100 Ko sur le poste client pour le stockage de SharedObject. Nous verrons plus loin comment modifier ce paramètre.

Passons maintenant la classe SharedObject en détail

= = syntaxe==

so = SharedObject.getLocal("LeNomDuSO", "/")

  • getLocal est la méthode invoquée afin de stocker sur le disque du poste client ou sur un serveur le fichier LeNomDuSO.sol.
  • / représente le chemin de l'enregistrement du SharedObject . Ce paramètre est optionel.

nommage

(c'est pas très beau ce mot, si vous avez mieux)
on peut attribuer toute sorte de nom à son SharedObject : statique ou dynamique.

ex:
so = SharedObject.getLocal("UnNom", "/")
ou encore:
var NomDynamique:String = "StringLambda"
so = SharedObject.getLocal(NomDynamique, "/")
//en fait, le fichier ainsi créé sera: StringLambda.sol

usage

l'espace alloué par défaut est de 100Ko, mais il est possible de changer cette valeur. Si vous avez besoin de plus d'espace, utiliser la classe System et la méthode showSettings:
System.showSettings(1)
//l'argument 1 ici ouvrira la fenètre de paramétrage directement sur l'onglet d'allocation d'espace.

4) objet de la classe SharedObject
c'est l'objet data. Il peut être de n'importe quel type: Array, Number, String...

ex: so SharedObject.getLocal("MonSo" , "/") =data.Param1 = "100"==
// l'objet data.Param1 est une chaîne et sa valeur est: "100"

==data.Param2 = 25==
// l'objet data.Param2 est un nombre et sa valeurest: 25

==data.Param3 = * ==
// l'objet data.Param1 est un tableau non définit

==data.Param4 = UserName.text ==
// ici, l'objetdata.Param4 prendra la valeur qui sera saisie dans le champ de texteUserName.

handler

il n'y en a qu'un: onStatus. Qui comme on peut le supposer nous retourne le status du SharedObject .

Il n'y a que 3 status:

  • en attente ou pending en anglais,
  • sauvegarde réussie ou true, et enfin
  • sauvegarge impossible, onStatus retournera alors false.

important
onStatus ne peut être invoqué qu'avec une fonction qui elle, retournera l'état du SharedObject.

ex: html true ==
// ce champ de texte va nousafficher le status du SharedObject
// le format html offre plus de fonctions que le format text
msg.multiline = true
so = SharedObject.getLocal("MonSo" , "/")
so.onStatus = function(EtatDuSo:Object){
//création de la fonction qui va nous retourner l'état du SharedObject
for (var i in EtatDuSo){
==htmlText += i + "\t" + EtatDuSo[i * ==
//affichage de l'état du SharedObject
}

htmlText +

}

Puisque nous n'avons toujours pas cherché à sauvegarder un SharedObject , pour l'instant cette instruction n'a pas été initiée. Pour cefaire nous allons utiliser la méthode flush().

méthodes

La première et celle sans qui rien n'arrive est la méthode flush(), quiindique à l'application qu'il faut sauvegarder vos différents data.Par défaut, le SharedObject sera flushé lors de la fermeture de votreapplication. Ce n'est donc pas une instruction obligatoire mais leflush peut aussi être déclanché par un onPress.

ex:
so = SharedObject.getLocal("MonSo" , "/")
so.data.param1 = 25

this.FlushBouton.onPress = function(){
// bien evidemment, cela aurait aussi fonctionné avec un onRelease...

flush()

}

le fichier MonSO.sol a été créé, et la valeur 25 a été passée à l'objetdata.param1. Lorsque vous appelerez votre SharedObject, c'est cettevaleur que vous récupererez pour l'objet data.param1. Ainsi:

so = SharedObject.getLocal("MonSo" , "/")
LaTailleDuNainDeJardin = so.data.param1
// ici, donc 25

bien sûr, les combinaisons sont multiples:
so = SharedObject.getLocal("MonSo" , "/")
LaTailleDuNainDeJardin.text = so.data.param1 + " cm"
// affichera dans le champ LaTailleDuNainDeJardin: 25 cm

on peut aussi spécifier la taille en octet à "flusher", ou en fait, lataille que l'on désire attribuer au SO lors de sa création, et plustard de sa mise à jour: Soit:

so = SharedObject.getLocal("MonSo" , "/") so.data.param1 25flush(1000000)==
// alloue 1 Mo pour le stockage du SO. ici, sil'utilisateur n'a pas changé ses paramètres
// par défaut, la fenêtre deparamétrage du player apparait et demande si l'utilisateur
// veut alloué plus d'espace à lasauvegarde de données.

La deuxième méthode est clear() qui on s'en doute, va purger le SharedObject .
Attention,elle va juste le purger, à savoir rendre nulltous les data du SharedObject, mais le fichier existe toujours et doncle SharedObject aussi, ainsi que son référencement.

ex:
so = SharedObject.getLocal("MonSo" , "/")
so.clear()
// la référence vers MonSO est toujours active et lefichier MonSO.sol existe toujours

Enfin, voici la moins utilisée des méthodes: getSize(). Elle retournela taille en bytes la taille du fichier SO. Or, pour ce faire, elle vaparcourir chaque objet, donc chaque data. plus vous avez sauve de data,plus le processus sera long et consommera des ressources systèmes.Macromedia recommande son utilisation qu'en cas de besoin trèsspécifique, à vous de voir.

ex:
so = SharedObject.getLocal("MonSo" , "/")
var ByteSO:Number = so.getSized()
trace("la taille de votre objet est de: " + ByteSO)

Voilà pour la théorie, les utilisations peuvent être de toutes sortes:sauvegarde d'un score, paramétrage d'une application, ou encorestockage de données et archivage d'états d'un objet, couleur, taille ouposition. a nouveau, le principal intérèt de la classe SharedObject réside dans son utilisation offline, permettant de sauver et derécupérer des données hors plateforme technologique.

Entraînez-vous à utiliser SharedObject pour réaliser un compteur depassage sur un site ou encore un journal de bord à entrées multiples.si les avis sont favorables, ces deux exemples seront mis en ligne d'ici8 jours, ce qui vous laisse le temps de plancher dessus.

Et bon SharedObject!

Adresse d'origine

Ce document intitulé « Tout ce que vous avez toujours voulu savoir sur les sharedobject » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous