Comment gérer les rendus d’un Smart Element
Prérequis
Afin de pouvoir suivre ce guide, il faut préalablement avoir créé un formulaire (Une SmartStructure).
Comment procéder ?
Recommandations
Si vous n’êtes pas familier avec les concepts que sont le Rendu
, les Vues
ainsi que leur fonctionnement, il est
fortement recommandé de lire la documentation associée
disponible ici
Comment gérer la visibilité des SmartFields d’un SmartElement ?
Recommandations
Les masques permettent de changer la visibilité des SmartField d’un SmartElement.
> Ainsi, il est possible de définir pour chaque SmartField de la SmartStructure sa nouvelle visibilité, ainsi que de changer son caractère obligatoire.
> [...]
Si vous n’êtes pas familier avec les Masque
et leur fonctionnement, il est fortement recommandé de lire la
documentation associée disponible ici
Dans notre cas, nous allons créer deux masques avec la commande
createSetting
:
Informations
Si la SmartStructure renseignée pour --associatedSmartStructure
existe, alors le masque est placé automatiquement dans
le dossier <SmartStructureName>Settings
Les différentes valeurs possible pour l’attribut value
de la balise <ui:visibility>
sont
listés dans la documentation
Visibilité des SmartFields pour le directeur
Lancer la commande :
npx @anakeen/anakeen-cli createSetting --type Masks --name Plat_Mask_Directeur --associatedSmartStructure PLAT
Le fichier alors généré est
src/vendor/Cogip/Restauratec/SmartStructures/Plat/PlatSettings/210-MaskPlatMaskDirecteur.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:ui="https://platform.anakeen.com/4/schemas/ui/1.0">
<!-- Les visibilités des Smart Field sont définis dans ce fichier -->
<!-- Lien vers le guide How To : https://documentation.ap4.anakeen.com/anakeen-platform-howto/ManageViews/#howToProceed -->
<!-- Lien vers le manuel de référence : https://documentation.ap4.anakeen.com/anakeen-platform/ui/mask/#maskxml -->
<ui:mask xmlns:ui="https://platform.anakeen.com/4/schemas/ui/1.0" name="PLAT_MASK_DIRECTEUR" label="Plat_Mask_Directeur" structure="PLAT">
<ui:visibility-list>
<!--
<ui:visibility field="field_id_1" value="R"/>
<ui:visibility field="field_id_2" value="W"/>
-->
</ui:visibility-list>
<ui:need-list>
<!--
<ui:need field="other_field_id_1" value="true"></ui:need>
-->
</ui:need-list>
</ui:mask>
</smart:config>
Modifier le fichier :
<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:ui="https://platform.anakeen.com/4/schemas/ui/1.0">
<ui:mask xmlns:ui="https://platform.anakeen.com/4/schemas/ui/1.0" name="PLAT_MASK_DIRECTEUR" label="Plat_Mask_Directeur" structure="PLAT">
<ui:visibility-list>
<ui:visibility field="consommable_title" value="W"/> <!-- SmartField visible en consultation et en modification, et modifiable -->
<ui:visibility field="consommable_description" value="W"/> <!-- SmartField visible en consultation et en modification, et modifiable -->
<ui:visibility field="consommable_price_incl_vat" value="R"/> <!-- SmartField visible en consultation uniquement -->
<ui:visibility field="plat_type" value="S"/> <!-- SmartField visible en consultation et en modification, mais non modifiable -->
<ui:visibility field="plat_validity_date" value="S"/> <!-- SmartField visible en consultation et en modification, mais non modifiable -->
</ui:visibility-list>
<!-- Obligations de saisie des champs spécifiés -->
<ui:need-list>
<ui:need field="consommable_title" value="true"/>
<ui:need field="consommable_description" value="true"/>
</ui:need-list>
</ui:mask>
</smart:config>
Visibilité des SmartFields pour les cuisiniers
Faire de même avec le masque des cuisiniers :
npx @anakeen/anakeen-cli createSetting --type Masks --name Plat_Mask_Cuisinier --associatedSmartStructure PLAT
<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:ui="https://platform.anakeen.com/4/schemas/ui/1.0">
<ui:mask xmlns:ui="https://platform.anakeen.com/4/schemas/ui/1.0" name="PLAT_MASK_CUISINIER" label="Plat_Mask_Cuisinier" structure="PLAT">
<ui:visibility-list>
<ui:visibility field="consommable_title" value="W"/> <!-- SmartField visible en consultation et en modification, et modifiable -->
<ui:visibility field="consommable_description" value="W"/> <!-- SmartField visible en consultation et en modification, et modifiable -->
<ui:visibility field="consommable_price_incl_vat" value="W"/> <!-- SmartField visible en consultation et en modification, et modifiable -->
<ui:visibility field="plat_type" value="W"/> <!-- SmartField visible en consultation et en modification, et modifiable -->
<ui:visibility field="plat_validity_date" value="W"/> <!-- SmartField visible en consultation et en modification, et modifiable -->
</ui:visibility-list>
<!-- Obligations de saisie des champs spécifiés -->
<ui:need-list>
<ui:need field="consommable_title" value="true"/>
<ui:need field="consommable_price_incl_vat" value="true"/>
<ui:need field="plat_type" value="true"/>
<ui:need field="plat_validity_date" value="true"/>
</ui:need-list>
</ui:mask>
</smart:config>
Nous allons maintenant référencer ces masques dans des contrôles de vues.
Comment obtenir diverses représentations pour un même SmartElement ?
Recommandations
Les contrôles de vue permettent de spécifier des représentations alternatives pour un Smart Element.
> L'utilisateur peut choisir parmi ces représentations, en fonction de ses droits, ou alors le contrôle de vue peut déterminer dynamiquement la vue en fonction des droits de l’utilisateur.
> [...]
Si vous n’êtes pas familier avec les Contrôle de vue
et leur fonctionnement, il est fortement recommandé de lire la
documentation associée
disponible ici
Le contrôle de vue permet d’indiquer suivant les profils des utilisateurs quelle représentation sera présentée à quel utilisateur.
Créons le contrôle de vue de notre SmartStructure PLAT
avec la commande
createSetting
Informations
Si la SmartStructure renseignée pour --associatedSmartStructure
existe, alors le contrôle de vue est placé
automatiquement dans le dossier <SmartStructureName>Settings
npx @anakeen/anakeen-cli createSetting --type ViewControl --name Plat --associatedSmartStructure PLAT
Voici le fichier que la commande à généré et que l’on a complété 220-ViewControlPlat.xml
<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:ui="https://platform.anakeen.com/4/schemas/ui/1.0">
<!--endregion Cvdoc views : Accesses =======-->
<ui:view-control xmlns:ui="https://platform.anakeen.com/4/schemas/ui/1.0" name="CVDOC_PLAT" label="Plat" structure="PLAT">
<!--region View control configuration ======-->
<ui:view-list>
<ui:view name="EDIT_CUISINIER" label="Modifier" display-mode="edition" order="10" menu-displayed="false">
<ui:mask ref="PLAT_MASK_CUISINIER"/>
</ui:view>
<ui:view name="EDIT_DIRECTEUR" label="Modifier" display-mode="edition" order="20" menu-displayed="false">
<ui:mask ref="PLAT_MASK_DIRECTEUR"/>
</ui:view>
</ui:view-list>
<!--endregion View control configuration ===-->
</ui:view-control>
<!--region Cvdoc views : Accesses ==========-->
<smart:access-configuration name="CVDOC_PLAT" label="Profil CVDOC" profil-type="CVDOC"
access-structure="PLAT" policy="SET">
<smart:element-access access="EDIT_CUISINIER" account="role_cuisinier"/>
<smart:element-access access="EDIT_DIRECTEUR" account="role_direction"/>
</smart:access-configuration>
<!-- endregion Cvdoc views : Accesses ==========-->
</smart:config>
Dans la première partie - view Control -, nous créons deux vues une pour les cuisiniers qui utilise le masque cuisinier et une pour le directeur qui utilise le masque directeur.
Dans la seconde partie - CvDoc views : Accesses -, nous indiquons qu’il faut le profil cuisinier pour voir la première vue et qu’il faut le profil directeur pour voir la seconde.
Comment associer le contrôle de vue à la Smart Structure Plat
Il ne nous reste plus qu’une étape, il faut associer le contrôle de vue à la structure.
Il vous faut ouvrir le fichier src/vendor/Cogip/Restauratec/SmartStructures/Plat/500-PlatSettings.xml
et ajouter en
fin de fichier :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:ui="https://platform.anakeen.com/4/schemas/ui/1.0">
<!-- Ce fichier permet de lier votre Smart Structure avec vos "profil", "Field access layer" -->
<!-- Lien vers le guide How To : Voir les guides sur les "profile", "Field access layer", "mask" pour voir comment configurer ce fichier -->
<!-- Lien vers le manuel de référence : Pareil que les guides -->
<ui:render ref="PLAT">
<ui:render-access class="Cogip\Restauratec\SmartStructures\Plat\Render\PlatAccess"/>
</ui:render>
<smart:structure-configuration name="PLAT">
<smart:accesses>
<!-- Référence le profil de structure (type PFAM) -->
<smart:structure-access-configuration ref="STRUCTURE_PLAT_PROFILE" />
<!-- Référence le profil standard (PDOC) -->
<smart:element-access-configuration ref="ELEMENT_PLAT_PROFILE"/>
<smart:field-access-configuration ref="FALL_PLAT"/>
</smart:accesses>
</smart:structure-configuration>
<ui:render ref="PLAT">
<ui:view-control ref="CVDOC_PLAT"/>
</ui:render>
</smart:config>
Vous pouvez maintenant déployer vos modifications :
npx @anakeen/anakeen-cli deploy -c http://localhost:8080/control -s . -u admin -p anakeen --reinstall
et ensuite vérifier le résultat en créant un nouveau plat puis en accédant au rendu de consultation ou modification avec le rôle correspondant.
localhost:8080/api/v2/smart-elements/PLAT/views/!defaultCreation.html
- Masque de la direction (en édition)
- Masque des cuisiniers (en édition)
Et ensuite ?
Comment modifier l’aspect d’un Smart Field à l’aide d’une option de représentation