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)

Edit Director

  • Masque des cuisiniers (en édition)

Edit Cook

Et ensuite ?

Comment modifier l’aspect d’un Smart Field à l’aide d’une option de représentation