Association N – N de smartobject dans les smartforms

L’association entre deux smartobjects permet d’accélérer la modélisation des smartforms. Si les relations 1 - 1, 1 - N et N - 1 sont simples à utiliser, ce n’est pas le cas de la relation N - N. La raison de cette complexité est la nécessité de gérer une table intermédiaire. Cette table intermédiaire va permettre de remplacer, pour le concepteur, la relation N - N par deux relations 1 - N (ou N - 1).

Le cas d’usage de cet article est la relation entre lieux et utilisateurs, dans le cas d’une gestion des badges d’accès par exemple.
Il y a X lieux et Y utilisateurs, évidemment chaque lieu est accessible à plusieurs utilisateurs et chaque utilisateur a accès à plusieurs lieux. La relation entre les objets peut être définie comme ci-dessous :

MO
Utilisateur et Lieu sont liés par une relation N - N. Cela se traduit par deux relations 1 - N avec une table intermédiaire, appelée ici sans originalité LienUtilisateurLieu

Une précision, ce mécanisme n’est pas lié au fonctionnement de K2. 3 smartobjects (Utilisateur, Lieu et LienUtilisateurLieu) sont nécessaires dans le scénario uniquement parce que 3 tables / listes sont nécessaires dans la source de données. Le smartobject est un connecteur qui reflète des entités métier.

1 Création de l’association N – N entre deux smartobjects

Les prérequis sont les deux smartobjects à associer, possédant chacun au moins une propriété clé (“Key”). Ensuite, l’association peut être définie sur l’un ou l’autre des smartobjects, depuis la page configure associations. L’association étant many to many, l’assistant demande alors le nom du smartobject composite, celui qui représente la relation intermédiaire.

Association
Le smartobject composite est créé avec le service instance smartbox. Il est ensuite possible de le brancher à n’importe quelle autre source de données, comme tous les autres smartobjects.

2 Création d’une vue permettant de lier des lieux à un utilisateur

Le même procédé peut être utilisé pour la création d’une vue liant des utilisateurs à un lieu.

Le prérequis est d’avoir une vue item basée sur le smartobject utilisateur. Ensuite, il faut ajouter le contrôle CheckBoxList afin de présenter la liste des lieux. La configuration est la suivante :

CheckBoxList
En cochant la case Display and save a composite SmartObject value, K2 se charge du plus gros du travail. Il suffit au concepteur de définir le smartobject à utiliser. Les autres champs sont remplis automatiquement par K2.

Il reste une dernière chose à faire pour que le mécanisme soit prêt à l’utilisation. Les règles de création et d’enregistrement doivent être modifiées afin de sauvegarder les lieux dans le smartobject composite. Pour cela, il faut modifier les règles Create et Save, en récupérant la propriété clé (l’ID) de l’élément courant et en ajoutant 2 fois l’action Execute a method on a control for values that are in a specific state. Une fois pour les éléments ajoutés (checked) et une autre pour ceux supprimés (unchecked). Le détail de la configuration est le suivant :

Rule
Les actions doivent être exécutées dans un batch pour que les ID soient correctement gérés par K2. C’est le même principe que dans les vues de type liste.
Rule1
Pour les actions Create et Save, les actions étant exécutées dans un batch, il faut récupérer l’ID de l’utilisateur au niveau du smartobject. En effet les 3 actions précédentes sont réalisées coté serveur. Le contrôle Text Box reçoit une valeur après.
Rule2
Pour les actions des méthodes de la Check Box List, il faut utiliser les données présentées sur l’image. C’est le seul moyen de gérer correctement le smartobject composite.

3 Aller plus loin

Il ne reste plus qu’à insérer notre vue dans un formulaire, avec d’autres vues sur les mêmes smartobjects, pour proposer un écran de gestion des utilisateurs et des lieux.
Gif

C’est tout pour cette fois, cheers !

benjamin

Technical Specialist @t K2 France —–
Twitter : @benjaminbertram —–
LinkedIn : Benjamin Bertram

2 thoughts to “Association N – N de smartobject dans les smartforms”

  1. Bonjour,
    Post très intéressant, j’ai essayé de reproduire de mon coté à partir de tables SQL mais la méthode Update de mes SmartObjects ne me retourne aucune propriété…
    Y’a t’il une manipulation particulière afin d’avoir l’ID en retour ?

    D’avance merci.

  2. Bonjour,
    Post très intéressant, j’ai essayé de reproduire de mon coté à partir de tables SQL mais la méthode Update de mes SmartObjects ne me retourne aucune propriété…
    Y’a t’il une manipulation particulière afin d’avoir l’ID en retour ?

    D’avance merci.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *