JScript pour EDV

Rappel important

Le test d'égalité se fait avec l'opérateur ==
et non = qui est l'opérateur d'affectation.

Syntaxe élémentaire

Si le script contient plusieurs commandes, chacun doit se terminer par ; (point-virgule)
sauf si l'instruction implique un bloc de code consécutif (if, while, do...)

if (Condition)
{
  Action;
}
else if (Condition2)
{
  Action2;
}
else
{
  Action3;
}
 

for (var i:int=0; i < 10; i++)
{
  Action;
}

 

for (var lRow in Collection)
{
  Action;
}

 

while (Condition)
{
  Action;
}

 

do
{
  Action;
} while (Condition)

Les blocs de code comprenant plusieurs lignes sont entourés de { }.

Sur une seule ligne :
if (Condition)
  Action;
else
  Action2;

Action peut aussi être compris comme Valeur dans le cas plus général où le script renvoie une valeur pour une variable.

 

Intégration des variables EDV

 

Les scripts contiennent le nom des variables EDV par leur chemin absolu ou relatif.
Ici, dans le script de .TutoVars.Resultat, .TutoVars.A est appelée de façon relative (en tant que soeur de .TutoVars.Resultat), tandis que .TutoVars.B est appelée par son nom absolu.

Consultez la rubrique concernant les noms de variables dans les scripts.

Il est important d'être vigilant quand à l'utilisation de variables EDV dont le nom est un mot-clef de JScript.

Variables JScript locales

Dans un JScript, vous pouvez définir des variables locales par le mot-clef var :
var lVarJS:int = 0;
Il faut alors respecter les majuscules et minuscules, tandis que EDV interprète ses propres variables sans cette contrainte.

Vous pouvez affecter une valeur de variable EDV à une variable JScript :
var lVarJS = .MonDomain.MaVarEDV;
lVarJS contient alors la valeur de la variable .MonDomain.MaVarEDV.
Ceci peut permettre d'optimiser les accès mémoire et les temps de traitement si la valeur est utilisée plusieurs fois.

Vous pouvez aussi affecter l'instance d'une variable EDV à une variable JScript :
var lVarJS = .MonDomain.MaVarEDV:Object;
lVarJS contient alors la référence à la variable .MonDomain.MaVarEDV elle-même.
Ceci peut permettre d'optimiser les temps de traitement si la variable est référencée plusieurs fois.
Vous pouvez ensuite accéder aux propriétés de la classe avec un . :
lVarJS.Name;
ou
lVarJS.Value;


Une convention à suivre est de préfixer le nom des variables JScript locales par 'l' (comme locale). Ceci a aussi l'avantage d'éviter la confusion entre des variables JScript et EDV.

Caractères spéciaux et échappements

Les caractères spéciaux comme le retour chariot, le saut de ligne, le guillement et la tabulation peuvent être insérés dans une chaîne de caractères en les préfixant avec \.

Saut de ligne \r\n
Tabulation \t
Guillemet \"

var lString = "Première ligne\r\nSeconde\t\"ligne\"";
rend
Première ligne
Seconde      "ligne"

Dans EDV, vous pouvez utiliser la constante newline

Exemple

    où
.Valeur et .Limite sont de type Integer, .Depassement de type Boolean
et le script de .Depassement est
.Valeur >= .Limite
signifiant que .Depassement est true si .Valeur est supérieure ou égale à .Limite

Le script est équivalent à
if(.Valeur >= .Limite)
  true;
else
  false;

ou
if(.Valeur >= .Limite)
{
  true;
}
else
{
  false;
}

Du fait de l'existence d'un script pour .Depassement, la variable est en Lecture seule; elle apparait grisée et sa représentation ne traite pas le clic de souris.


Booléens en reset automatique

Les variables booléennes en reset automatique fonctionnent comme des méthodes :
DataTable.Open; est équivalent à DataTable.Open = true;
Le ; doit suivre immédiatement la variable (pas d'espace).

when(..:Changing) d'un sous-script (script d'une sous-variable) est suffisant car, pour ces variables en reset automatique, l'événément Changing ou Changed n'est jamais provoqué pour la valeur False

Structure conditionnelle cond ? trueValue : falseValue

Pour que EDV interprète correctement la syntaxe cond ? trueValue : falseValue, des espaces doivent entourer les caractères ? et :

Moment d'exécution du script

Un script est exécuté dès que le script est modifié ou qu'une variable qui y apparaît change de valeur.
Toutefois, vous pouvez décider du moment d'exécution grâce au mot-clef when.
Il correspond à un if mais seules les variables présentes dans la condition provoquent l'exécution du script.

Dés que Condition1, Val1, Val2 ou Val3 change de valeur, Resultat est mis à jour.

En remplaçant if par when, Resultat n'est mis à jour que lorsque Condition1 est modifié.

Plus classiquement, vous disposez d'une variable qui déclenche le calcul (un bouton "Mise à jour", par exemple) :

Dés que Rafraichir passe à Vrai, Resultat est mis à jour.
L'état Faux de la variable Rafraichir nous intéresse peu dans ce cas de figure. C'est typiquement le cas où la variable doit être en reset automatique (propriété de la variable). Alors, dès que l'événement Rafraichir = Vrai a provoqué la mise à jour de Resultat l'état revient à Faux.

Changing

Dans le cas où vous désirez ne rafraichir Resultat que quand Val1 et seulement Val1 est modifiée, vous devez utiliser la propriété Val1:Changing dans le when.

Dés que Val1 change, Resultat est mis à jour.
La condition du when ne peut être qu'un booléen,
when(Val1)voudrait dire "Quand la valeur de Val1 est différente de 0".

when(..:Changing && ..) signifie "Quand mon parent passe à true" sous condition que le parent soit de type Boolean. Dans le cas de booléens en reset automatique, l'événement n'étant provoqué que pour la valeur True, le second test n'est pas nécéssaire.

Utilisez des variables de type Null pour celles dont la seule fonction est de traiter un événement. Vous éviterez des valeurs de retour de script incompatibles avec la variable qui héberge le script.

Changed

Plusieurs variables peuvent recevoir le changement de valeur d'une variable. Si vous voulez traiter en dernier cet événement, utilisez Changed plutôt que Changing. Cette condition est traitée en second lieu.

Checking

Checking est provoqué avant les événements Changing. Il permet de modifier une valeur avant qu'elle soit transmisse aux autres variables.

Scripting

Scripting signifie "Quand le script est modifié" ce qui permet d'initialiser des variables au moment du chargement de celles-ci ou à la création d'une session Client (voir les pages Web).

ChildChanged

ChildChanged signifie "Quand une variable de la sous-arborescence change".
La syntaxe peut être when(..:ChildChanged) mais aussi when(".MonDom":ChildChanged).
when(".MonDom.?.Error":ChildChanged) signifie que toutes sous-variables de .MonDom dont le ShortName est Error déclenchera l'événement. La chaîne précédent : est une expression régulière où le ? est remplacé par . (qui ne peut être utilisé que comme séparateur de domaine).

Attention : une variable ne peut référencer qu'une seule écoute sur une arborescence : when(..MonDom:ChildChanged || ..MonDom2:ChildChanged) n'est pas valide, seul le deuxième terme sera conservé. Une solution est d'utiliser deux sous-variables écoutant chacune sur une arborescence.

L'utilisation d'écoute sur une arborescence est un facteur de ralentissement du système, elle est donc à utiliser de façon judicieuse.

La syntaxe when(..:Name:ChildChanged) ou when(lVarDomainPath:ChildChanged) n'est pas traitée à ce jour car la mise en place d'une écoute nécessite une constante au moment de la validation initiale du script. Une solution peut être d'affecter un script à une variable depuis le script d'une autre variable.

La variable JScript edvSender permet de connaître la variable ayant déclenché l'événement.

Typage

La déclaration de variables peut se faire en spécifiant le type :
var lRect : Rectangle = new Rectangle(10, 10, 100, 100)
Les espaces autours (surtout après) du : sont nécessaires.

Pour typer les variables et valeurs, la syntaxe JScript suivante peut être utilisée : var lRect = new Rectangle(int(x), int(y), 100, 100)
Ceci fonctionne pour tous les types.

Ordre des événements

Lors de la modification d'une valeur, les événements sont gérés dans l'ordre suivant :

Création d'une variable depuis JScript

Vous pouvez créer une variable à partir de JScript par l'appel à la méthode Static de EDVServer.Variable :

Variable Variable.FromClassName(string varName, string className, object value, EDVType valueType)

soit :

var lNewVarStr = Variable.FromClassName(".Test.MaVar", "", "Hello, World", EDVType.String);
var lNewVarDT = Variable.FromClassName(".Test.MaDataTable", "", null, EDVType.DataTable);
var lNewVarPulse = Variable.FromClassName(".Test.MaPulse", "EDVFunctions.EDVPulse", false, EDVType.Boolean);

Clonage d'une variable pour en créer une nouvelle (toute l'arborescence est dupliquée) :
en fournissant un nom d'origine : var lNewVar = edvClient.Clone(".{Models}.Button", ".MyButton");
ou en passant une variable : var lNewVar = edvClient.Clone(.{Models}.Button:Object, ".MyButton");

Voir aussi

JScript pour EDV
Objet global edv
EDVJScript.dll
Les variables dans les scripts