Dynamizations
Les dynamisations permettent de changer les prorpiétés d'un item en fonction d'un évènement exterieur.
Généralement un événement extérieur est un changement de variable dans l'Hmi.
Vous pouvez ajouter autant de dynamisations que possible dans un Item.
Interface Dynamization
interface ScriptDynamization<T extends Pure<BaseItem>> extends BaseScript {
Async: boolean; // -> BaseScript
ScriptCode: string[] // -> BaseScript
PropertyName: keyof T;
Trigger: Trigger; // voir Trigger
}ScriptDynamization hérite des propriétés de BaseScript. Ainsi l'écriture du script d'une dynamisation se fais de la même façon que pour un évenement.
PropertyName
Type: keyof Item
Propriété de l'Item qui doit être changé via la dynamization.
TypeScript vous propose directement les propriétés correspondantes.
Interface Trigger
interface Trigger {
Tags: string[];
Type: TriggerType;
CustomDuration?: string;
}Tags
Type: Array
Liste des tags qui vont enclencher cette dynamisation.
Type
Type: TriggerType
enum TriggerType {
Disabled = 0,
T1s = 1,
T2s = 2,
CustomCycle = 3,
Tags = 4,
T5s = 5,
T10s = 10,
T100ms = 100,
T250ms = 250,
T500ms = 500
}TriggerType représente les intervalles ou l'appel à la dynamization va être éffectué.
Tags signifie que seul un changement des valeurs des variables dans le champ Tags peut entraîner un appel.CustomCycle
Type: string
CustomCycle est choisi dans TriggerType.Définis une unité de temps arbitraire pour l'intervalle d'actualisation des appels.
Utilisation
Dans la fonction Data de votre Item, la déclaration des évènements se fait via l'utilisation de this.Dynamizations.
Dynamizations est un tableau dans lequel vous pouvez rajouter autant de dynamisations que nécèssaires.
Exemple
Cet exemple ajoute une dynamisation à la propriété Visible du bouton
Le script s'éxécute de façon non asynchrone, le code se contente de retourner la valeur du tag MyHmiTag.
Cette dynamisation s'éxécute dés lorsque le tag MyHmiTag change de valeur, en supposant que ce tag est de type bool.
import {EntryComponent } from "@adclz/unifiedbuilder/builder"import {Button } from "@adclz/unifiedbuilder/widgets"import {Circle } from "@adclz/unifiedbuilder/shapes"import {TriggerType } from "@adclz/unifiedbuilder/dynamizations" const Template = "<div>" + "<my-button></my-button>" + "<div class="absolute flex flex-row w-full place-items-center mt-1.5 top-0">" + "<my-circle></my-circle>" + "</div>" + "</div>" export default EntryComponent ( () => { return { Template : Template , Data : { 'my-button': new Button () .Data (function () { this.Dynamizations .push ( { Async : false, PropertyName : 'Visible', ScriptCode : "return HMIRuntime.Tags('MyHmiTag').Read()", Trigger : { Tags : "MyHmiTag", Type : TriggerType .Tags , } } ) }), 'my-circle': new Circle () } } })