Comment créer une Smart Structure
Recommandation
Une Smart Structure est un objet interne de la plateforme permettant de définir des structures de données.
Si vous n’êtes pas familier avec les Smart Structures
et leur fonctionnement, il est fortement recommandé de lire la
documentation associée
disponible ici
Générer les fichiers de configurations
Nous allons ici créer quatre Smart Structures différentes en rapport avec notre projet Restauratec :
Smart Structure | Smart Fields |
---|---|
Consommable | - Nom - Descriptif (HTML) - Prix HT (€) - Prix TTC (€) - Créateur |
Plat | - Type de plat (enum : entrée / plat principal / dessert) - Date de validité |
Boisson | Une boisson est un consommable contenant un Smart Field supplémentaire : - Contenance (cl) |
Menu | - Libellé - Description (HTML) - Ensemble de consommables ordonnés - Remise (en %) - Prix TTC (Somme des consommables avec remise; arrondi à l’euro inférieur) |
Afin de créer ces Smart Structures, nous utiliserons ici la commande createSmartStructure
. Cette dernière accepte
plusieurs arguments
comme indiqués sur la documentation
ou en exécutant la commande suivante :
npx @anakeen/anakeen-cli createSmartStructure --h
Create a smart structure
Options:
--version Show version number [boolean]
--sourcePath, -s path to the info.xml directory [Mandatory]
[string] [default: "."]
--name, -n name of the smart structure [Mandatory] [string]
--vendorName, -v vendor name of the module [Mandatory]
[string] [default: (default)]
--moduleName, -m name of the module [Mandatory]
[string] [default: (default)]
--parentName, -p parent name of the smartStructure [string] [default: ""]
--smartStructurePath path where the smart structure will be added
[string] [default: (default)]
--inSelfDirectory add a directory for the new smart structure (not
compatible with smartStructurePath)
[boolean] [default: true]
--withRender add renders class [boolean] [default: true]
--withParameters add parameters [boolean] [default: true]
--withBehavior add a class behavior [boolean] [default: true]
--withSettings add settings [boolean] [default: true]
--withAutocompletion add an autocompletion [boolean] [default: true]
--insertIntoInfo Insert into info.xml [boolean] [default: true]
-h, --help Show help [boolean]
Il existe ici aussi, deux modes d’utilisation de cette commande. Nous utilisons la ligne de commande, mais vous pouvez également utiliser le mode interactif.
Créons les Smart Structures Consommable
et Menu
:
npx @anakeen/anakeen-cli createSmartStructure --sourcePath . --name CONSOMMABLE
npx @anakeen/anakeen-cli createSmartStructure --sourcePath . --name MENU
Astuce
A la fin de chaque commande createSmartStructure
, vous devez voir le message
✔ success createSmartStructure done
Les fichiers de configuration de la Smart Structure Consommable
et Menu
sont maintenant créés. Il ne reste plus qu’à
faire cette manipulation pour les deux autres Smart Structures restantes (Cf. Tableau ci-dessus)
Attention
Les Smart Structures Boisson
et Plat
sont des consommables. Il faut donc bien renseigner lors de la création de ces
dernières, le paramètre --parentName
avec pour valeur CONSOMMABLE
afin d’apporter cette notion d’héritage.
npx @anakeen/anakeen-cli createSmartStructure --sourcePath . --name BOISSON --parentName CONSOMMABLE
npx @anakeen/anakeen-cli createSmartStructure --sourcePath . --name PLAT --parentName CONSOMMABLE
Astuce
- Si vous avez créé votre Smart Structure sans héritage et que vous voulez ajouter l’héritage vous-même, vous pouvez
utiliser la balise
<smart:extends ref="CONSOMMABLE"/>
dans le fichier100-BoisssonScture.xml
Voilà les fichiers générés pour nos quatre Smart Structures src/vendor/<vendorName>/<moduleName>/SmartStructures
Informations
Pour chaque Smart Structure créée, nous constatons que le fichier info.xml
est mis à jour. Ce dernier a été généré
lors de l’exécution de la commande create
qui nous a permis de créer le module Restauratec
. Ce fichier contient
diverses informations dont un
ensemble d’actions post-install
et post-upgrade
. Concrètement, ces modifications demandent à l’application
d’importer ces fichiers de configuration de Smart Structure fraichement générés lors de son installation.
Paramétrer les fichiers de configuration - Définir les Smart Fields
Recommandation
Un Smart Field est un élément d’information typé au sein d’une Smart Structure. Il permet d’indiquer comment stocker, représenter et manipuler un élément d’information.
Si vous n’êtes pas familier avec les Smart Fields
et leur fonctionnement, il est fortement recommandé de lire la
documentation associée
disponible ici
Maintenant que nous avons créé les fichiers de configuration de nos différentes Smart Structures, il nous faut
intégrer les Smart Fields dont nous avons besoin pour chacune d’entre elle. Pour cela, il faut se rendre, pour
chaque structure, dans le fichier .xml
généré ayant pour nom 100-{STRUCTURENAME}Structure.xml
. Il suffit de
compléter la balise <smart:fields></smart:fields>
. Référons-nous au tableau de la partie précédente pour y trouver les
Smart Fields nécessaires.
De manière générale, le fichier .xsd
associé ainsi que la
documentation
sur les types de SmartFields
sont de bons guides dans cette démarche.
CONSOMMABLE
src/vendor/Cogip/Restauratec/SmartStructures/Consommable/100-ConsommableStructure.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
<smart:structure-configuration name="CONSOMMABLE" label="Consommable">
<smart:icon file="consommable.png"/>
<smart:class>Cogip\Restauratec\SmartStructures\Consommable\ConsommableBehavior</smart:class>
<smart:fields>
<smart:field-set name="consommable_frame" type="frame" access="ReadWrite" label="Informations relatives au consommable">
<smart:field-text name="consommable_title" needed="true" is-title="true" access="ReadWrite" label="Titre"/>
<smart:field-htmltext name="consommable_description" access="ReadWrite" label="Description"/>
<smart:field-money name="consommable_price_excl_vat" access="Read" label="Prix HT (€)"/>
<smart:field-money name="consommable_price_incl_vat" access="ReadWrite" label="Prix TTC (€)"/>
<smart:field-account access="Read" name="consommable_creator" label="Créateur"/>
</smart:field-set>
</smart:fields>
<smart:hooks/>
<smart:defaults/>
</smart:structure-configuration>
</smart:config>
Informations
Si vous n’êtes pas familiers avec les Énumérés
et leur fonctionnement, il est fortement recommandé de lire la
documentation associée
disponible ici
PLAT
src/vendor/Cogip/Restauratec/SmartStructures/Plat/100-PlatStructure.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
<smart:enumerates>
<smart:enum-configuration name="Plat_Type">
<smart:enum name="ENTREE" label="Entrée" />
<smart:enum name="PRINCIPAL" label="Plat principal" />
<smart:enum name="DESSERT" label="Dessert" />
</smart:enum-configuration>
</smart:enumerates>
<smart:structure-configuration name="PLAT" label="Plat">
<smart:extends ref="CONSOMMABLE"/> <!-- La smart structure PLAT hérite de la smart structure CONSOMMABLE -->
<smart:icon file="plat.png"/>
<smart:class>Cogip\Restauratec\SmartStructures\Plat\PlatBehavior</smart:class>
<smart:fields>
<!-- extended="true" indique que l’on récupère ici la frame du parent (Consommable) à laquelle on ajoute d’autres Smart Fields -->
<smart:field-set name="consommable_frame" extended="true">
<smart:field-enum name="plat_type" label="Type de plat" relation="Plat_Type" access="ReadWrite" />
<smart:field-date name="plat_validity_date" label="Disponible jusqu’au" access="ReadWrite" />
</smart:field-set>
</smart:fields>
<smart:hooks />
<smart:defaults />
</smart:structure-configuration>
</smart:config>
BOISSON
src/vendor/Cogip/Restauratec/SmartStructures/Boisson/100-BoissonStructure.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
<smart:structure-configuration name="BOISSON" label="Boisson">
<smart:extends ref="CONSOMMABLE"/>
<smart:icon file="boisson.png"/>
<smart:class>Cogip\Restauratec\SmartStructures\Boisson\BoissonBehavior</smart:class>
<smart:fields>
<!-- extended="true" indique que l’on récupère ici la frame du parent (Consommable) à laquelle on ajoute d’autres Smart Fields -->
<smart:field-set name="consommable_frame" extended="true">
<smart:field-int name="boisson_capacity" access="ReadWrite" label="Contenance (cl)"/>
</smart:field-set>
</smart:fields>
<smart:hooks/>
<smart:defaults/>
</smart:structure-configuration>
</smart:config>
MENU
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
<smart:structure-configuration name="MENU" label="Menu">
<smart:icon file="menu.png"/>
<smart:class>Cogip\Restauratec\SmartStructures\Menu\MenuBehavior</smart:class>
<smart:fields>
<smart:field-set name="menu_frame" type="frame" access="ReadWrite" label="Informations relatives au menu">
<smart:field-text name="menu_title" needed="true" is-title="true" access="ReadWrite" label="Libellé"/>
<smart:field-htmltext name="menu_description" access="ReadWrite" label="Description"/>
<smart:field-set name="menu_composition" type="array" access="ReadWrite" label="Composition du menu">
<smart:field-docid access="ReadWrite" name="menu_plat" label="Plat" relation="PLAT"/>
<smart:field-docid access="ReadWrite" name="menu_boisson" label="Boisson" relation="BOISSON"/>
</smart:field-set>
<smart:field-double name="menu_discount" access="ReadWrite" label="Remise applicable (%)"/>
<smart:field-money name="menu_price" access="Read" label="Prix (€)"/>
</smart:field-set>
</smart:fields>
<smart:hooks/>
<smart:defaults/>
</smart:structure-configuration>
</smart:config>
Attention
Pensez à effectuer une réinstallation afin que l’application prenne en compte les modifications effectuées :
npx @anakeen/anakeen-cli deploy -c http://localhost:8080/control -s . -u admin -p anakeen --reinstall
La partie principale de nos Smart Structures est créée : Les Smart Fields.
Informations
Dans chacune des Smart Structures précédemment créées, on remarque qu’il y a une balise indiquant une icône liée à cette dernière.
<smart:icon file="<smartStructureName>.png"/>
Il suffit de placer le fichier <smartStructureName>.png
l’emplacement suivant src/public/Images
et de réinstaller
l’application à l’aide de la commande suivante :
npx @anakeen/anakeen-cli deploy -c http://localhost:8080/control -s . -u admin -p anakeen --reinstall
Retrouver la Smart Structure créée
Afin de voir graphiquement ce qui vient d’être réalisé, rendons-nous sur un formulaire de création de Smart Element via
l’url http://localhost:8080/api/v2/smart-elements/<STRUCTURE>/views/!defaultCreation.html
.
Par exemple http://localhost:8080/api/v2/smart-elements/PLAT/views/!defaultCreation.html :
Il ne reste plus qu’à cliquer sur 💾 Créer
en haut à droite du formulaire et le Smart Element Salade César
est créé.