Fonctionnement général de l'interface d'accueil
Contrairement au reste de l'ERP, ce n'est pas le serveur qui reste maître et le client qui est attente.
Dans l'interface d'accueil, c'est le serveur qui répond aux demandes du client.
Il y a deux types de demandes :
Les actions utilisateur (demande de la liste des activités, lancement d'un choix, ...).
La mise à jour automatique des widgets.
La communication entre le client et le serveur étant synchrone, il n'y a qu'une seule demande en cours de traitement à la fois.
L'interface d'accueil gère donc une file d'attente des demandes avec une notion de priorité :
Lorsqu'une demande (action utilisateur ou mise à jour de widget) nécessite d'accéder au serveur et que celui-ci est disponible, elle lui est envoyée et l'interface d'accueil attend sa réponse .
Si une ou plusieurs autres demandes sont faites alors que le serveur n'a pas terminé le traitement et envoyé la réponse à la demande courante, les nouvelles demandes sont mises en file d'attente.
Les éléments de la file sont ensuite traités séquentiellement, au fur et à mesure de la disponibilité du serveur.
Les demandes de mise à jour de widget sont toujours mises en queue de file. Les actions de l'utilisateur, mises en tête de file, sont ainsi prioritaires.
Attention :
Le fait que les demandes soient traitées de manière synchrone implique que l'interface d'accueil reste en attente tout le temps qu'un widget passe à calculer sa valeur. En pratique, rien ne se passe à l'écran, toutes les autres demandes (y compris les actions de l'utilisateur) étant mises en file d'attente. Il est donc fortement recommandé de ne pas créer de widgets nécessitant un temps de calcul plus que raisonnable.
Widget Feu et Jauge
Ces deux types de widgets partagent les mêmes informations.
Les balises HMP sont :
Balise | Commentaire | Type |
MinValue | Valeur minimale | Numérique |
MaxValue | Valeur maximale | Numérique |
CurrentValue | Valeur courante | Numérique |
State | Etat (couleur) | Numérique |
Spread (Facultatif) | Ecart par rapport à l'objectif | Alpha |
Current (Facultatif) | Valeur courante formatée | Alpha |
Text (Facultatif) | Titre du widget | Alpha |
Error (Facultatif) | Texte d'erreur | Alpha |
La balise <Text> permet de changer le libellé affiché du widget. Par défaut, c'est le titre du widget qui est affiché.
La balise <Error> permet d'afficher une erreur par dessus le widget.
Si la balise <Current> est présente, c'est le contenu de cette balise qui est affichée. Cela permet d'afficher une valeur mise en forme.
Remarque : Ces balises sont les mêmes pour le widget Feu et Jauge. Un même module de calcul peut donc être utilisé pour les deux types.
Couleur de l'indicateur
4 constantes sont définis dans l'include zdiva.dhsp :
TRAFFIC_STATE_NEUTRAL (bleu)
TRAFFIC_STATE_GREEN (vert)
TRAFFIC_STATE_ORANGE (orange)
TRAFFIC_STATE_RED (rouge)
Exemple :
1 compteur X = 0
Function String InitFeu(&Widget)
record a5dd.dhsd MWidget Widget
beginf
FReturn "<MinValue>0<MaxValue>100"
endf
Function String UpdateFeu (&Widget)
record a5dd.dhsd MWidget Widget
1 valeur X
1 resultat S
beginf
valeur = Modulo(compteur++, 4)
resultat = "<CurrentValue>" & ToString(valeur) && "<State>" & ToString (valeur) && "<Spread>Ecart : " & toString(100 - compteur) & "<Current>"
Switch2 (valeur)
Case TRAFFIC_STATE_NEUTRAL
resultat &= "NaN"
Case TRAFFIC_STATE_GREEN
resultat &= "Excellent"
Case TRAFFIC_STATE_ORANGE
resultat &= "Moyen"
Case TRAFFIC_STATE_RED
resultat &= "Médiocre"
EndSwitch
FReturn resultat
endf
Si ce widget Feu est configuré pour être rafraîchi toutes les secondes, on obtient à l'affichage :
puis
puis
puis
Si on choisit le type Jauge, on obtient :
puis
puis
puis
Widget Liste et Tableau
Les balises HMP sont :
Balise | Commentaire | Type |
ListElement | Balise de départ | |
DivaId | Identifiant permettant de retrouver l'élément dans la fonction d'action | Alpha |
Title | Texte à afficher | Alpha |
Text | Titre du widget | Alpha |
Priority (Facultatif) | Priorité de l'élément | Numérique |
Error | Texte d'erreur | Alpha |
La balise <Text> permet de changer le libellé affiché du widget. Par défaut, c'est le titre du widget qui est affiché.
La balise <Priority> permet de donner une priorité à l'élément. Les valeurs possibles sont décrites dans l'include zdiva.dhsp (TASK_PRIORITY_XXXX).
La balise <Error> permet d'afficher une erreur par dessus le widget.
La balise <DivaId> permet de renseigner un identifiant unique permettant de retrouver l'élément cliqué par l'utilisateur. La valeur de cet attribut sera passé en paramètre à la fonction d'action.
Présentation sous forme de grille
Pour ce faire, les balises HMP sont :
Balise | Commentaire | Type |
HeaderColumn | Balise de départ | |
Title | Texte de l'entête de colonne | Alpha |
Alignment | Alignement de la colonne :
| Alpha |
La construction des informations de l'entête peut se faire soit dans la fonction d'initialisation, soit dans la fonction de mise à jour.
Pour les informations de chaque lignes, la balise "<TITLE>" n'existe plus. Elle est remplacée par la balise "<COLUMN>". Il faut une balise "<COLUMN>" par colonne déclarée dans l'entête.
Fonction d'action
Dans la fonction d'action, on peut connaître le type de clic que l'utilisateur a effectué ainsi que l'état des touches Ctrl, Maj et Alt. Toutes les informations sont stockées dans Harmony.SourisBout, Harmony.SourisClav et Harmony.SourisClic.
Il est également possible de relancer une demande de mise à jour du widget à partir de cette fonction. Pour faire cette demande, il faut écrire : PingLocal("IA_UpdateWidget", TRUE). Au retour de la fonction d'action, le widget sera automatiquement remis à jour.
Exemple :
Function String InitListe (&Widget)
record a5dd.dhsd MWidget Widget
beginf
freturn ""
endf
Function string UpdateListe(&Widget)
record a5dd.dhsd MWidget Widget
1 res S
beginf
res = "<ListElement><DivaId>1<Title>Widget Liste"
res &= "<ListElement><DivaId>2<Title>Il possède une fonction d'initialisation<Priority>" & ToString(TASK_PRIORITY_HIGH)
res &= "<ListElement><DivaId>3<Title>Une fonction de mise à jour"
res &= "<ListElement><DivaId>4<Title>Et une fonction d'action"
res &= "<ListElement><DivaId>5<Title>Lors du double-clic sur un élement"
res &= "<ListElement><DivaId>6<Title>L'attribut DivaId est envoyé en paramètre"
res &= "<ListElement><DivaId>7<Title>A la fonction d'action"
res &= "<Text>Widget de type Liste"
freturn res
endf
Procedure ActionListe(&Widget, DivaId)
record a5dd.dhsd MWidget Widget
1 DivaId A
beginp
Messagebox("Action utilisateur - DivaId : " & DivaId, "Widget Liste")
endp
A l'affichage, on obtient :
Exemple avec une mise en forme en grille :
Function String InitListe (&Widget)
record a5dd.dhsd MWidget Widget
1 res S
beginf
res = "<HEADERCOLUMN><TITLE>Référence<ALIGNMENT>0"
res &= "<HEADERCOLUMN><TITLE>Désignation<ALIGNMENT>0"
res &= "<HEADERCOLUMN><TITLE>Prix<ALIGNMENT>2"
freturn res
endf
Function string UpdateListe(&Widget)
record a5dd.dhsd MWidget Widget
1 res S
beginf
res = ""
res &= "<ListElement><DivaId>1<Column>ALB0001<Column>Album petit louvre<Column>18.84"
res &= "<ListElement><DivaId>1<Column>BLO0001<Column>Blouse de peintre<Column>41.25"
res &= "<ListElement><DivaId>1<Column>CAC0005<Column>Bouton tiroir<Column>0.0"
res &= "<Text>Widget de type Liste Grille"
freturn res
endf
A l'affichage, on obtient :
On remarquera que les prix sont bien alignés sur la droite.
Widget BI
Le widget BI est très simple : il ne demande que l'url du rapport à afficher.
La fonction d'initialisation doit renvoyer le lien du rapport avec la balise <URL>.
Par exemple, si l'adresse est renseignée dans les paramètres du widget, la fonction d'initialisation ressemble à :
Function String InitBi (&Widget)
record a5dd.dhsd MWidget Widget
beginf
freturn "<URL>" & left(Widget.MSG)
endf
Widget Flux RSS
Les balises HMP sont :
Balise | Commentaire | Type |
Url | URL du flux à afficher | |
Locked | Indique si l'utilisateur à le droit de modifier le flux (valeurs : 0/1) | Numérique |
Error | Texte d'erreur | Alpha |
La balise <Error> permet d'afficher une erreur par dessus le widget.
Il n'y a pas de programmation à effectuer, la fonction d'initialisation étant intégré à Ia.dhop.
Pour modifier le flux, si l'utilisateur en a le droit, il faut cliquer sur le logo RSS en haut à droite du widget et entrer la nouvelle adresse.
Un double clic sur un élément de la liste ouvre le navigateur internet et charge l'information complète.
A l'affichage, on obtient par exemple :
Widget Graphique (courbe, histogramme, circulaire)
Ces trois types de widgets partagent les mêmes informations.
Les balises HMP sont :
Balise | Commentaire | Type |
Type | Type de graphique
| Alpha |
HorizontalAxisTitle | Titre de l'axe horizontal | Alpha |
VerticalAxisTitle | Titre de l'axe vertical | Alpha |
Orientation | Orientation du graphique de type Bar (histogramme)
| Alpha |
Palette | Palette de couleur à utiliser | Alpha |
ShowLegend | Pour afficher ou non la légende (1/0) | Numérique |
HideLabels | Pour masquer (1) ou non (0) les libellés des points | Numérique |
Serie | Nom de la série | Alpha |
Value | Valeur | Numérique |
PointLabel | Libellé du point (facultatif, par défaut, la valeur est utilisée comme libellé) | Alpha |
Name | Nom/abscisse du point | Alpha |
La balise <Text> permet de changer le libellé affiché du widget. Par défaut, c'est le titre du widget qui est affiché.
La balise <Error> permet d'afficher une erreur par dessus le widget.
Remarque :
Ces balises sont les mêmes pour les différents type de graphique. Un même module de calcul peut donc être utilisé pour les trois affichages.
Pour les types Bar et Line, il est possible d'afficher plusieurs séries de valeurs
Couleurs des graphiques
15 palettes de couleurs sont disponibles. Par défaut, c'est la palette Windows8 qui est utilisée.
Exemple :
Function String InitChart (&Widget)
record a5dd.dhsd MWidget Widget
1 res S
BeginF
res = "<Type>Bar"
res &= "<HorizontalAxisTitle>Abscisse"
res &= "<VerticalAxisTitle>Ordonnée"
res &= "<Serie>Série 1"
res &= "<Value>10<Name>Jan" & \
"<Value>32<Name>Fév" & \
"<Value>42<Name>Mar" & \
"<Value>50<Name>Avr" & \
"<Value>62<Name>Mai" & \
"<Value>40<Name>Juin" & \
"<Value>80<Name>Juil" & \
"<Value>90<Name>Aou" & \
"<Value>40<Name>Sep" & \
"<Value>50<Name>Oct" & \
"<Value>70<Name>Nov" & \
"<Value>20<Name>Dec"
res &= "<Serie>Série 2"
res &= "<Value>14<Name>Jan" & \
"<Value>26<Name>Fév" & \
"<Value>64<Name>Mar" & \
"<Value>45<Name>Avr" & \
"<Value>32<Name>Mai" & \
"<Value>20<Name>Juin" & \
"<Value>70<Name>Juil" & \
"<Value>40<Name>Aou" & \
"<Value>80<Name>Sep" & \
"<Value>60<Name>Oct" & \
"<Value>70<Name>Nov" & \
"<Value>10<Name>Dec"
res &= "<Orientation>Horizontal"
res &= "<Palette>Windows8"
res &= "<ShowLegend>1"
freturn res
Endf
Visuels