/

 

The manual

Self-training

Experimentation

Contact

 

Language

Le module personnes

Lors des précédentes leçons, nous avons étudié les différents constituants d'un module, élément par élément. Pour cela, nous avons proposé des version simplifiées de constituants du module organisations. Dans cette leçon, nous allons présenter le module personnes complet. Nous choisissons de commencer par le module personnes, parce que la version complète du module organisations fait appel à certains éléments du module personne.

Voici le module personnes complet, prêt à l'emploi. Commencez par le copier coller sur votre site Storga d'expérimentation :

   

Les personnes

Entrez ensuite dans la sous page du module, puis pensez à faire afficher l'ensemble des blocs en cliquant sur 🔧 en haut à gauche.

Voyons maintenant ce que contient ce module.

Le formulaire de recherche

Il s'agit d'un formulaire applet, comme nous en avions vu un lors de la leçon 'Créer de multiples fiches : un formulaire de création'. Cependant, il est beaucoup plus simple, parce qu'il contient un seul champ et pas de programme.

Si l'on affiche les propriété de cet unique champ, on découvre :

La ligne 'Type de champ' nous indique qu'il s'agit d'un champ de type 'Référence'.
Un tel champ sert à stocker une valeur parmi celles listées dans une colonne d'un autre état. Ici, on cherche le nom complet dans la liste des personnes.

Le type 'Référence' dispose de trois propriétés très pratiques :

Si on entre un nom qui n'existe pas, alors les noms les plus approchants seront proposés sous forme d'un choix multiple.

Si le nom existe, une flèche sera affichée juste après, qui établie un lien vers la fiche correspondant à la ligne de l'état dans laquelle la valeur a été trouvée.
C'est ce qui fait que dans ce formulaire applet, on a besoin d'un seul champ et pas besoin de programme pour que dès que l'on entre un nom valide, le lien vers la fiche de la personne apparaisse.

Si le champ est positionné par exemple à 'Jean Dupond', et que par la suite, dans la fiche de Jean Dupond, on change son nom en Dupont, alors si on affiche à nouveau le formulaire contenant le champ référence, celui-ci sera mis à jour automatiquement.
Ceci n'a pas d'utilité dans le cas présent, mais est très utile quand une fiche classique contient la référence à une autre fiche. Par exemple, le champ 'Organisation' de la sous table de chaque personne est une référence à la liste organisations, donc si par la suite on change le nom d'une organisation, les fiches des personnes qui y sont rattachées seront mises à jour automatiquement.

Le formulaire de création

Ce formulaire a la même architecture générale que celui que celui que nous avions étudié lors de la leçon 'Créer de multiples fiches : un formulaire de création'.

Etudions maintenant ce qui change au niveau du programme :

if button_name="person_changed"
  person_message := shunt name="" "" (lookup_form_id @people_list full_name (shunt first_name<>"" first_name+" " "")+name+(shunt extra<>"" " "+extra "") any)<>"" "✘" "✔"

if button_name="create"
  if name=""
    error "Vous devez indiquer un nom !"
  if (lookup_form_id @people_list full_name (shunt first_name<>"" first_name+" " "")+name+(shunt extra<>"" " "+extra "") any)<>""
    error "Cette fiche personne existe déjà"
  new_form @people_model page @people_folders subpage (name 0 1) (name 0 1) subpage (shunt first_name<>"" first_name+" " "")+name (shunt first_name<>"" first_name+" " "")+name url_call copy_fields
    void
  first_name := ""
  name := ""
  extra := ""
  person_message := ""

Commençons par les deux premières lignes :

if button_name="person_changed"
  person_message := shunt name="" "" (lookup_form_id @people_list full_name (shunt first_name<>"" first_name+" " "")+name+(shunt extra<>"" " "+extra "") any)<>"" "✘" "✔"

Si vous affichez les propriétés d'un des trois champs 'Prénom', 'Nom' ou 'Supplément', vous constaterez que la ligne 'Bouton virtuel' est renseignée à 'button_changed'. Cela signifie que si la valeur du champ est modifiée, Storga génère automatiquement un appuie sur un bouton virtuel dont le code est 'button_changed', donc exécute ce programme, et la condition de la première ligne est satisfaite, ce qui conduit à exécuter la seconde ligne qui positionne le champ 'person_message'.

Au niveau de cette seconde ligne, l'instruction 'shunt' se lit si ... alors ... sinon si ... alors ... sinon si ... alors ... sinon. Ici, cela donne : si le champ 'name' est vide, alors on met la chaîne vide dans 'person_message', sinon si on trouve (shunt first_name<>"" first_name+" " "")+name+(shunt extra<>"" " "+extra "") dans la colonne 'fullname' de l'état listant les personnes alors on met ✘ dans 'person_message' pour indiquer que la fiche existe déjà, sinon on y met ✔ pour indiquer que la fiche n'existe pas.

Voyons maintenant plus en détail l'expression :

(shunt first_name<>"" first_name+" " "")+name+(shunt extra<>"" " "+extra "")

Elle vise à concaténer les trois champs 'first_name', 'name' et 'extra' qui forment un nom complet, en insérant les espaces nécessaires. En effet, si on avait simplement écrit :

first_name+name+extra

alors le résultat pour le prénom 'Jean' et le nom 'Dupond' avec un champ 'extra' vide serait 'JeanDupont' alors que l'on souhaite 'Jean Dupont' avec un espace entre 'Jean' et 'Dupond'. De la même manière, si l'on avait écrit :

first_name+" "+name+" "+extra

alors le résultat serait 'Jean Dupond ' avec un espace en trop à la fin.

Le reste du programme présente à nouveau le même type de modification par rapport à la version étudiée dans la leçon 'Créer de multiples fiches : un formulaire de création'.

La liste des personnes

Cet état présente plusieurs différences (complications) par rapport à l'état de la liste des organisations que nous avions étudié lors de la leçon 'Un premier état'.

Tout d'abord, au niveau de l'onglet 'Spec. collecte' de la définition du formulaire, la ligne 'Nom du champ à utiliser pour trouver les différentes lignes' est positionnée à 'organisation'. En remplissant ce champ au niveau de la définition de l'état, on indique qu'une fiche Stroga peut générer plusieurs lignes dans l'état. Cela suppose que le nom de champ fourni corresponde à l'une des colonnes d'une sous table de la fiche. Dans ce cas, un ligne du formulaire sera générée pour chaque ligne de la sous table.

Au niveau de l'onglet 'Champs' maintenant, on constate la présence d'un champ 'full_name' calculé à la collecte. La formule d'un champ calculé à la collecte est évaluée au moment où la fiche est scannée, et son résultat est stocké dans l'état. Aussi, cette formule peut faire appel à tous les champs de la fiche scannée, pas seulement ceux collectés dans l'état. A l'inverse, la formule d'un champ calculé à l'affichage est évaluée à chaque affichage de l'état, et donc ne peut faire appel qu'aux champs collectés dans l'état. Dans le cas présent, la formule est :

(shunt first_name<>"" first_name+" " "")+name+(shunt extra<>"" " "+extra "")

c'est à dire la même chose que ce que nous venons de voir au niveau du programme de création d'un formulaire, à savoir la concaténation du prénon, du nom et du supplément de nom, en séparant si nécessaire ces différents éléments par des espaces.
Dans cet onglet toujours, la partie accessible via le bouton 'Choix des champs définissant un répertoire' a été renseignée, en vue de faciliter l'utilisation ce cet état comme carnet d'adresses pour les boites mail gérées par Storga.

Au niveau de l'onglet, on a utilisé une formule de tri pour pouvoir trier sur plusieurs champs, mais on a aussi et surtout utilisé une formule de groupage. La formule de groupage calcule une valeur pour chaque ligne de l'état, puis n'affiche qu'une seule ligne quand plusieurs lignes successives de l'état ont la même valeur de groupage.
Dans le cas présent, on a choisi de collecter plusieurs lignes par fiche personne, puis de n'en afficher qu'une, ce qui peut sembler contradictoire. En fait, si on a choisi de collecter plusieurs lignes c'est principalement pour collecter l'ensemble des numéros de téléphones, et pouvoir ainsi, via une instruction 'lookup' retrouver le nom de l'appelant.
Remarquez aussi qu'à partir du moment où l'on effectue un groupage des lignes au moment de l'affichage de l'état, alors dans l'onglet 'Champs', la colonne 'Mode de groupage' devient importante.

La fiche modèle des personnes

Par rapport à ce que nous avions vu dans la leçon 'Une seconde fiche contenant une sous table', la fiche modèle de personne contient deux éléments supplémentaires :

Le champ 'Catégories' sert à inscrire un ensemble de mots clés pour indiquer l'appartenance de la personne à différents sous groupes. Ce peut être 'famille', 'ami', ou n'importe quoi d'autre, et cela permet de filtrer au niveau de l'état affichage la liste des personnes. Cela fait légèrement double emploi avec l'appartenance d'une personne à une organisation.

Ensuite, la ligne 'Extension de la fiche personne ... Ajouter' est plus puissante et complexe. Elle permet d'ajouter des renseignements à la fiche personne, via l'ajout de sous formulaires. La liste des sous formulaires est visible dans la page 'La mécanique de gestion des extensions pour les fiches personnes' du module personnes.
Il existe la même mécanique d'ajout de sous formulaires pour les fiches organisations, et nous en verrons un exemple lors de la présentation de ce module.

Travaux pratiques

Commencez à remplir quelques fiches personnes prises dans votre carnet d'adresses.
Vérifiez que vous retrouvez facilement la fiche, et donc votre dossier concernant la personne, via le petit formulaire 'Chercher une personne', ou les paramètres de la liste des personnes.

Pour une de vos fiches personnes, indiquez deux numéros de téléphone, sous la forme de deux lignes dans la sous table. Observez comment cette personne est affichée au niveau de l'état de la liste des personnes. Puis, au niveau de l'onglet 'Affichage' de la définition de l'état, supprimez le groupage. Observez le changement au niveau de l'affichage de cette personne dans l'état, puis rétablissez le groupage.

Pour une de ces personnes, commencez à regrouper sous la fiche toute l'information la concernant. Vous commencez alors à sortir de l'approche en silo puisque vous allez pouvoir regrouper les éléments par sujet indépendamment de leur format (emails, documents bureautiques, notes, etc).

 

Nouveau message

From :

Message Title:

Message: